'', 'vote' => '', 'speedbar' => '', 'content' => '' ); var $allow_php_include = true; function set($name, $var) { if( is_array( $var ) && count( $var ) ) { foreach ( $var as $key => $key_var ) { $this->set( $key, $key_var ); } } else $this->data[$name] = $var; } function set_block($name, $var) { if( is_array( $var ) && count( $var ) ) { foreach ( $var as $key => $key_var ) { $this->set_block( $key, $key_var ); } } else $this->block_data[$name] = $var; } function load_template($tpl_name) { if( $this->CacheTemplate[ $tpl_name ] ){ $this->copy_template = $this->CacheTemplate[ $tpl_name ]; return true; } if( $tpl_name == '' || ! file_exists( $this->dir . DIRECTORY_SEPARATOR . $tpl_name ) ) { die( "Невозможно загрузить шаблон: " . $tpl_name ); return false; } $this->template = file_get_contents( $this->dir . DIRECTORY_SEPARATOR . $tpl_name ); if (strpos ( $this->template, "[aviable=" ) !== false) {$this->template = preg_replace ( "#\\[aviable=(.+?)\\](.*?)\\[/aviable\\]#ies", "\$this->check_module('\\1', '\\2')", $this->template );} if (strpos ( $this->template, "[not-aviable=" ) !== false) {$this->template = preg_replace ( "#\\[not-aviable=(.+?)\\](.*?)\\[/not-aviable\\]#ies", "\$this->check_module('\\1', '\\2', false)", $this->template );} if (strpos ( $this->template, "[not-group=" ) !== false) {$this->template = preg_replace ( "#\\[not-group=(.+?)\\](.*?)\\[/not-group\\]#ies", "\$this->check_group('\\1', '\\2', false)", $this->template );} if (strpos ( $this->template, "[group=" ) !== false) {$this->template = preg_replace ( "#\\[group=(.+?)\\](.*?)\\[/group\\]#ies", "\$this->check_group('\\1', '\\2')", $this->template );} if (strpos ( $this->template, "{include file=" ) !== false ) {$this->template = preg_replace( "#\\{include file=['\"](.+?)['\"]\\}#ies", "\$this->load_file('\\1', 'tpl')", $this->template );} $this->copy_template = $this->template; $this->CacheTemplate[ $tpl_name ] = $this->template; return true; } function load_file( $name, $include_file = "tpl" ) { global $db, $is_logged, $member_id, $cat_info, $config, $user_group, $category_id, $_TIME, $lang, $smartphone_detected, $dle_module; $name = str_replace( '..', '', $name ); $url = @parse_url ($name); $type = explode( ".", $url['path'] ); $type = strtolower( end( $type ) ); if ($type == "tpl") {return $this->sub_load_template( $name );} if ($include_file == "php") { if ( !$this->allow_php_include ) return; if ($type != "php") return "Для подключения допускаются только файлы с расширением .tpl или .php"; if ($url['path']{0} == "/" )$file_path = dirname (ROOT_DIR.$url['path']); else $file_path = dirname (ROOT_DIR."/".$url['path']); $file_name = pathinfo($url['path']); $file_name = $file_name['basename']; if ( stristr ( php_uname( "s" ) , "windows" ) === false ) $chmod_value = @decoct(@fileperms($file_path)) % 1000; if ($chmod_value == 777 ) return "Файл {$url['path']} находится в папке, которая доступна для записи (CHMOD 777). В целях безопасности подключение файлов из таких папок невозможно. Измените права на папку, чтобы на нее небыло прав на запись."; if ( !file_exists($file_path."/".$file_name) ) return "Файл {$url['path']} не найден, его загрузка невозможна."; if ( $url['query'] ) {parse_str( $url['query'] );} ob_start(); $tpl = new dle_template( ); $tpl->dir = TEMPLATE_DIR; include $file_path."/".$file_name; return ob_get_clean(); } return '{include file="'.$name.'"}'; } function sub_load_template( $tpl_name ) { $tpl_name = totranslit( $tpl_name ); if( $tpl_name == '' || ! file_exists( $this->dir . DIRECTORY_SEPARATOR . $tpl_name ) ) { return "Отсутствует файл шаблона: " . $tpl_name ; return false; } $template = file_get_contents( $this->dir . DIRECTORY_SEPARATOR . $tpl_name ); if (strpos ( $template, "[aviable=" ) !== false) {$template = preg_replace ( "#\\[aviable=(.+?)\\](.*?)\\[/aviable\\]#ies", "\$this->check_module('\\1', '\\2')", $template );} if (strpos ( $template, "[not-aviable=" ) !== false) {$template = preg_replace ( "#\\[not-aviable=(.+?)\\](.*?)\\[/not-aviable\\]#ies", "\$this->check_module('\\1', '\\2', false)", $template );} if (strpos ( $template, "[not-group=" ) !== false) {$template = preg_replace ( "#\\[not-group=(.+?)\\](.*?)\\[/not-group\\]#ies", "\$this->check_group('\\1', '\\2', false)", $template );} if (strpos ( $this->template, "{if " ) !== false) {$this->template = preg_replace ( "#{if (.+?)}(.*?){/if}#ies", "$this->check_else('1', '2', false)", $this->template );} if (strpos ( $template, "[group=" ) !== false) {$template = preg_replace ( "#\\[group=(.+?)\\](.*?)\\[/group\\]#ies", "\$this->check_group('\\1', '\\2')", $template );} return $template; } function check_module($aviable, $block, $action = true) { global $dle_module; $aviable = explode( '|', $aviable ); $block = str_replace( '\"', '"', $block ); if( $action ) { if( ! (in_array( $dle_module, $aviable )) and ($aviable[0] != "global") ) return ""; else return $block; } else { if( (in_array( $dle_module, $aviable )) ) return ""; else return $block; } } function check_group($groups, $block, $action = true) { global $member_id; $groups = explode( ',', $groups ); if( $action ) { if( ! in_array( $member_id['user_group'], $groups ) ) return ""; } else { if( in_array( $member_id['user_group'], $groups ) ) return ""; } $block = str_replace( '\"', '"', $block ); return $block; } function _clear() { $this->data = array (); $this->block_data = array (); $this->copy_template = $this->template; } function clear() { $this->data = array (); $this->block_data = array (); $this->copy_template = null; $this->template = null; } function global_clear() { $this->data = array (); $this->block_data = array (); $this->result = array (); $this->copy_template = null; $this->template = null; } function compile($tpl) { if( count( $this->block_data ) ) { foreach ( $this->block_data as $key_find => $key_replace ) { $find_preg[] = $key_find; $replace_preg[] = $key_replace; } $this->copy_template = preg_replace( $find_preg, $replace_preg, $this->copy_template ); } foreach ( $this->data as $key_find => $key_replace ) { $find[] = $key_find; $replace[] = $key_replace; } $this->copy_template = str_replace( $find, $replace, $this->copy_template ); if( strpos( $this->copy_template, "{include file=" ) !== false ) { $this->copy_template = preg_replace( "#\\{include file=['\"](.+?)['\"]\\}#ies", "\$this->load_file('\\1', 'php')", $this->copy_template ); } if( isset( $this->result[$tpl] ) ) $this->result[$tpl] .= $this->copy_template; else $this->result[$tpl] = $this->copy_template; $this->_clear(); } function check_else($condition, $block){ global $GLOBALS; extract($GLOBALS, EXTR_SKIP, ""); if(is_array($matches=explode("{else}",$block))) { $block=$matches[0]; $else=$matches[1]; } if(eval(("return $condition;"))) return str_replace( '"', '"', $block ); return str_replace( '"', '"', $else ); } } ?>