Вход Регистрация
Файл: sngine-v2.8/Script/includes/libs/Smarty/sysplugins/smarty_internal_method_loadplugin.php
Строк: 150
<?php

/**
 * Smarty Extension Loadplugin
 *
 * $smarty->loadPlugin() method
 *
 * @package    Smarty
 * @subpackage PluginsInternal
 * @author     Uwe Tews
 */
class Smarty_Internal_Method_LoadPlugin
{
    
/**
     * Cache of searched plugin files
     *
     * @var array
     */
    
public $plugin_files = array();

    
/**
     * Takes unknown classes and loads plugin files for them
     * class name format: Smarty_PluginType_PluginName
     * plugin filename format: plugintype.pluginname.php
     *
     * @param Smarty $smarty
     * @param string  $plugin_name class plugin name to load
     * @param bool    $check       check if already loaded
     *
     * @return bool|string
     * @throws SmartyException
     */
    
public function loadPlugin(Smarty $smarty$plugin_name$check)
    {
        
// if function or class exists, exit silently (already loaded)
        
if ($check && (is_callable($plugin_name) || class_exists($plugin_namefalse))) {
            return 
true;
        }
        if (!
preg_match('#^smarty_((internal)|([^_]+))_(.+)$#i'$plugin_name$match)) {
            throw new 
SmartyException("plugin {$plugin_name} is not a valid name format");
        }
        if (!empty(
$match])) {
            
$file SMARTY_SYSPLUGINS_DIR strtolower($plugin_name) . '.php';
            if (isset(
$this->plugin_files$file ])) {
                if (
$this->plugin_files$file ] !== false) {
                    return 
$this->plugin_files$file ];
                } else {
                    return 
false;
                }
            } else {
                if (
is_file($file)) {
                    
$this->plugin_files$file ] = $file;
                    include_once 
$file;
                    return 
$file;
                } else {
                    
$this->plugin_files$file ] = false;
                    return 
false;
                }
            }
        }
        
// plugin filename is expected to be: [type].[name].php
        
$_plugin_filename "{$match[1]}.{$match[4]}.php";
        
$_lower_filename strtolower($_plugin_filename);
        if (isset(
$this->plugin_files)) {
            if (isset(
$this->plugin_files'plugins_dir' ][ $_lower_filename ])) {
                if (!
$smarty->use_include_path || $this->plugin_files'plugins_dir' ][ $_lower_filename ] !== false) {
                    return 
$this->plugin_files'plugins_dir' ][ $_lower_filename ];
                }
            }
            if (!
$smarty->use_include_path || $smarty->ext->_getIncludePath->isNewIncludePath($smarty)) {
                unset(
$this->plugin_files'include_path' ]);
            } else {
                if (isset(
$this->plugin_files'include_path' ][ $_lower_filename ])) {
                    return 
$this->plugin_files'include_path' ][ $_lower_filename ];
                }
            }
        }
        
$_file_names = array($_plugin_filename);
        if (
$_lower_filename !== $_plugin_filename) {
            
$_file_names[] = $_lower_filename;
        }
        
$_p_dirs $smarty->getPluginsDir();
        if (!isset(
$this->plugin_files'plugins_dir' ][ $_lower_filename ])) {
            
// loop through plugin dirs and find the plugin
            
foreach ($_p_dirs as $_plugin_dir) {
                foreach (
$_file_names as $name) {
                    
$file $_plugin_dir $name;
                    if (
is_file($file)) {
                        
$this->plugin_files'plugins_dir' ][ $_lower_filename ] = $file;
                        include_once 
$file;
                        return 
$file;
                    }
                    
$this->plugin_files'plugins_dir' ][ $_lower_filename ] = false;
                }
            }
        }
        if (
$smarty->use_include_path) {
            foreach (
$_file_names as $_file_name) {
                
// try PHP include_path
                
$file $smarty->ext->_getIncludePath->getIncludePath($_p_dirs$_file_name$smarty);
                
$this->plugin_files'include_path' ][ $_lower_filename ] = $file;
                if (
$file !== false) {
                    include_once 
$file;
                    return 
$file;
                }
            }
        }
        
// no plugin loaded
        
return false;
    }
}
Онлайн: 3
Реклама