<?php
/**
 * core.class.php
 *
 * fsCore class
 *
 * @version:    0.1a
 * @package:    flame.core
 * @author:    alex <qfox@ya.ru> yaroshevich
 * @created:    28.11.2007 00:51:00
 * @link:    http://src.qfox.ru/
 * @dependence:    PHP5.0+
 * @dependence:    Smarty2.6.18+
 *
 * @copyright:    (c) 2007 flamebox. All rights reserved.
 */

/** standart verifying */
if( !defined'FLAMECMS' ) ) return;

if( 
defined'__CORE_TEMPLATE_CLASS_PHP' ) ) return;
define'__CORE_TEMPLATE_CLASS_PHP''0.1' );

require_once( 
DIR_ACL.'smarty.class.php' );


class 
fbTemplate extends Smarty
{
    
    static 
$templates = array( );
    
    var 
$__fb_root "";
    var 
$__fb_template "";
    
/**
 * constructor
 *
 */
function fbTemplate$root null )
{
    
$this ->__fb_root __$rootDIR_TPL );
    
$this ->initializeTemplateList( );
    
$this ->initializeParameters( );
    
    
parent::Smarty( );
    
    
$this ->caching false;
    
$this ->compile_check true;
    
    
$this ->template_dir __$rootDIR_TPL );
    
$this ->compile_dir DIR_CPL;
    
$this ->config_dir "";
    
$this ->php_handling SMARTY_PHP_ALLOW;
}

function 
load$template )
{
    
$this ->__fb_template $this ->findTemplateFile$template );
}

function 
render( )
{
    
$template __$this ->templates$this ->__fb_template ] );
    if( 
is_null$template ) ) return '<pre>template '.$this ->__fb_template.' is absent</pre>';
    echo 
parent::$this->fetch$template );
    
//iconv( 'utf-8', 'cp1251', 
}





function 
initializeTemplateList( )
{
    if( 
is_array$this ->templates ) ) return;
    
    
$ls ls$this ->__fb_root );
    
$files $ls['file'];
    
$this ->templates array_flat$files'name''path' );
}


function 
clear_all_assign( )
{
    
parent::clear_all_assign( );
    
$this ->initializeParameters( );
}

function 
initializeParameters( )
{
    global 
$core;
    
$module $core ->getModuleTicker( );
    
$project $core ->getProjectTicker( );
    
$language $core ->getLanguageTicker( );
    
    
$user $core ->getUser( );
    
$userInfo $user ->getInfo( );
    
    
$this ->assign'project',    $project );
    
$this ->assign'language',    $language );
    
$this ->assign'now',        date"Y-m-d H:i:s" ) );
    
$this ->assign'user',        $userInfo );
}

function 
findTemplateFile$template )
{
    
// fetch current tickers
    
global $core;
    
$module $core ->getModuleTicker( );
    
$project $core ->getProjectTicker( );
    
$language $core ->getLanguageTicker( );
    
$unique $core ->getTemplateTicker( ); //fixme
    
    
$guesses = array( );
    if( 
strlen$unique ) )
    {
    
$guesses[] = "{$module}\${$template}.{$unique}!{$language}.{$project}";    // full with unique ticker
    
$guesses[] = "{$module}\${$template}.{$unique}!{$project}";        // uni-language with unique ticker
    
$guesses[] = "{$module}\${$template}.{$unique}!{$language}";        // uni-project with unique ticker
    
$guesses[] = "{$module}\${$template}.{$unique}";            // default for unique ticker
    
$guesses[] = "{$template}.{$unique}";                    // default for unique ticker
    
}
    
    
$guesses[] = "{$module}\${$template}!{$language}.{$project}";    // full
    
$guesses[] = "{$module}\${$template}!{$project}";        // uni-language
    
$guesses[] = "{$module}\${$template}!{$language}";        // uni-project
    
$guesses[] = "{$module}\${$template}";                // default template for module
    
$guesses[] = "{$template}";                    // default template
    
    //return findTemplateFile;
    // fixme: переделать поиск шаблонов: использовать пересечение + выборку первого элемента как то так:
    // fixme: ибо отрисовка выполняется в среднем порядка 10-20 раз за страницу
    // list( $__foundTemplate ) = array_values( array_intersect( $a, $b ) );
    
    
foreach( $guesses as $templateTicker )
    if( isset( 
$this ->templates$templateTicker.".tpl" ] ) )
        return 
$templateTicker.".tpl";
    
    return 
null;
}

}

?>