Вход Регистрация
Файл: system/classes/templates.php
Строк: 173
<?php
/* 
    Appointment: Парсинг шаблонов
    File: templates.php 
 
*/

class mozg_template{
    
    var 
$dir '.';
    var 
$template null;
    var 
$copy_template null;
    var 
$data = array ();
    var 
$block_data = array ();
    var 
$result = array ('info' => '''vote' => '''speedbar' => '''content' => '' );
    var 
$allow_php_include true;
    
    var 
$template_parse_time 0;
    
    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) {

        
$time_before $this->get_real_time();
        
        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->template_parse_time += $this->get_real_time() - $time_before;
        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, $mozg_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 "To connect permitted only files with the extension: .tpl or .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 ( stristr ( dirname ($url['
path']) , "uploads" ) !== false )
                return "Include files from directory /uploads/ is denied";

            if ( stristr ( dirname ($url['
path']) , "templates" ) !== false )
                return "Include files from directory /templates/ is denied";

            if ($chmod_value == 777 ) return "File {$url['
path']} is in the folder, which is available to write (CHMOD 777). For security purposes the connection files from these folders is impossible. Change the permissions on the folder that it had no rights to the write.";

            if ( !file_exists($file_path."/".$file_name) ) return "File {$url['
path']} not found.";

            if ( $url['
query'] ) {

                parse_str( $url['
query'] );

            }

            ob_start();
            $tpl = new mozg_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 ( $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 $mozg_module;

        $aviable = explode( '
|', $aviable );
        
        $block = str_replace( '"', '"', $block );
        
        if( $action ) {
            
            if( ! (in_array( $mozg_module, $aviable )) and ($aviable[0] != "global") ) return "";
            else return $block;
        
        } else {
            
            if( (in_array( $mozg_module, $aviable )) ) return "";
            else return $block;
        
        }
    
    }

    function check_group($groups, $block, $action = true) {
        global $user_info;
        
        $groups = explode( '
,', $groups );
        
        if( $action ) {
            
            if( ! in_array( $user_info['
user_group'], $groups ) ) return "";
        
        } else {
            
            if( in_array( $user_info['
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) {
        
        $time_before = $this->get_real_time();
        
        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();
        
        
$this->template_parse_time += $this->get_real_time() - $time_before;
    }
    
    function 
get_real_time() {
        list ( 
$seconds$microSeconds ) = explode' 'microtime() );
        return (( float ) 
$seconds + ( float ) $microSeconds);
    }
}
?>
Онлайн: 0
Реклама