Вход Регистрация
Файл: engine/classes/Trike.php
Строк: 173
<?php

/**
 * User: patsifist
 * Date: 28.07.14
 * Time: 15:16
 */
class Trike
{

    public static 
$obj;
    public 
$vars = array();
    public 
$configs = array();
    public 
$php_vars = array();

    public function 
__construct($configs = array())
    {
        
Trike::$obj = $this;
        
Trike::get_instance()->save_settings($configs);
    }

    public static function 
get_instance($configs = array())
    {
        if (
is_null(Trike::$obj))
        {
            
Trike::$obj = new Trike;//($configs);
        
}

        if (
$configs)
        {
            
Trike::$obj->save_settings($configs);
        }

        return 
Trike::$obj;
    }

    public function 
save_settings($configs)
    {
        
Trike::get_instance()->configs = $configs;//var_dump(Trike::get_instance()->configs);
        
Trike::get_instance()->set_path();
    }


    public function 
set($search, $replace)
    {
        
Trike::get_instance()->php_vars[$search] = $replace;

        if (
is_array($replace))
        {
            foreach (
$replace as $key => $value)
            {
//echo $search . ' => '.$key, ' - ', $value . '<br />';
                
Trike::get_instance()->vars[':' . $search . '=' . $key . ':'] = $value;
            }
        }
        else
        {
            
Trike::get_instance()->vars[':' . $search . ':'] = $replace;
        }
    }

    public function 
if_parser($match)
    {
//echo $match[1];
        //$tokens = explode('=', $match[1]);
        //if (isset($tokens[1])) {
            
return "<?php if (".$match[1]."):?>";
        
/*}
        else {
            return "<?php if (Trike::get_instance()->php_vars['".$tokens[0] . "']):?>";
        }*/
    
}

    public function 
extract_parser($match)
    {
        return 
'<?php foreach (Trike::get_instance()->php_vars["' . $match[1] . '"] as $' . $match[2] . ' => $' . $match[3] . ')';
    }

    public function 
get_keys(&$value, $key)
    {
        
$value = str_replace(':', null, $value);
        
$value = '/:' . $value . ':/';
    }

    public function 
vars_parser($match)
    {
        
$tokens = explode('=', $match[0]);//echo $match[0];

        
return Trike::get_instance()->vars[$tokens[0] . (isset($tokens[1]) ? '=' . $tokens[1] : '')];
    }

    public function 
set_path()
    {
        if (
is_file(H . '/style/themes/' . Core::$set['theme'] . '/tpl/' . Trike::get_instance()->configs['tpl_file']))
        {
            
Trike::get_instance()->configs['tpl_dir'] = H . 'style/themes/' . Core::$set['theme'] . '/tpl/';
            
Trike::get_instance()->configs['compile_dir'] = H . 'style/themes/' . Core::$set['theme'] . '/tpl/compile/';
        }
        else
        {
            
Trike::get_instance()->configs['tpl_dir'] = H . 'style/tpl/';
            
Trike::get_instance()->configs['compile_dir'] = tmpDir;
        }
    }

    public function 
is_compiled()
    {
        
//if (!Trike::get_instance()->configs)
        //var_dump(Trike::get_instance()->configs);
        
if (Trike::get_instance()->configs['compile'] == false)
            return 
false;

        
$file = Trike::get_instance()->configs['compile_dir'] . Trike::get_instance()->configs['tpl_file'] . '~'.Trike::get_instance()->configs['id'];

        if (
is_file($file))
        {
            include 
$file;
            return 
true;
        }

        return 
false;
    }

    public function 
compilation($code)
    {
        if (
Trike::get_instance()->configs['compile'] == true)
        {
            
$file = Trike::get_instance()->configs['compile_dir'] . Trike::get_instance()->configs['tpl_file'] . '~'.Trike::get_instance()->configs['id'];
            
file_put_contents($file, $code);
        }
    }

    public function 
display($reset = false)
    {
        if (!
Trike::get_instance()->is_compiled())
        {
            
$result = Trike::get_instance()->parser();
            
Trike::get_instance()->compilation($result);
            eval(
'?>'.$result);
        }
        if (
$reset)
        {
            
Trike::get_instance()->reset();
        }
    }

    public function 
parser()
    {
        
$code = file_get_contents(Trike::get_instance()->configs['tpl_dir'] . Trike::get_instance()->configs['tpl_file']);
        
$keys = array_keys(Trike::get_instance()->vars);
        
array_walk_recursive($keys, array(Trike::get_instance(), 'get_keys'));
        
$code = str_replace(array('[', ']', 'else', 'endif'), array('{?>', "<?n}?>", ' <? else: ?>', '<?endif?>'), $code);

        
$code = preg_replace_callback("/if {(.*)}/", array(Trike::get_instance(), 'if_parser'), $code);
        
$code = preg_replace_callback(
            
"/extract {:(.*): as :(.*): and :(.*):}/",
            array(
Trike::get_instance(), 'extract_parser'),
            
$code
        
);
        
$code = preg_replace_callback($keys, array(Trike::get_instance(), 'vars_parser'), $code);

        
//echo '<pre>' . htmlspecialchars($code) . '</pre>';
        
return $code;
    }

    public function 
reset()
    {
        
Trike::get_instance()->vars = Trike::get_instance()->php_vars = null;
        
Trike::get_instance()->configs = array();
    }
}
Онлайн: 0
Реклама