Вход Регистрация
Файл: source/library/Hook.php
Строк: 154
<?php
class Hook{

    private 
$active_plugins null;

    private 
$plugins = array();

    
// hooks data
    
private $hooks = array();

    
// errors data
    
private $errors = array();

    
// Hold an instance of the class
    
private static $instance;
    
    private function 
__construct() {}

    
// The singleton method
    
public static function singleton(){
        if (!isset(
self::$instance)){
            
$c __CLASS__;
            
self::$instance = new $c;
        }

        return 
self::$instance;
    }

    
/**
     *
     * Enter description here ...
     * @param $tag
     * @param $args
     */
    
public function execute($tag$args = array()){
        if (isset ( 
self::$instance->hooks [$tag] )) {
            
$hooks self::$instance->hooks [$tag];
            if (
is_array($hooks)){
                
ksort($hooks);
                foreach (
$hooks as $hook){
                    foreach ( 
$hook as $h) {
                        
call_user_func($h,$args);
                    }
                }
            }else{
                
self::$instance->errors[] =  "There is no such place ($tag) for hooks.";
            }
        } else {
            
self::$instance->errors[] =  "There is no such place ($tag) for hooks.";
        }
    }
    
/**
     *
     * Enter description here ...
     * @param $tag
     * @param $args
     */
    
public function filter($tag$args ''){
        
$result $args;
        if (isset ( 
self::$instance->hooks [$tag] )) {
            
$hooks self::$instance->hooks [$tag];
            if (
is_array($hooks)){
                
ksort($hooks);
                foreach (
$hooks as $hook){
                    foreach ( 
$hook as $h) {
                        
$args  $result;
                        
$result call_user_func $h$args );
                    }
                }
            }else{
                
self::$instance->errors[] =  "There is no such place ($tag) for hooks.";
            }
            return 
$result;
        } else {
            
self::$instance->errors[] =  "There is no such place ($tag) for hooks.";
        }
    }
    
/**
     *
     * Enter description here ...
     * @param  $tag
     * @param  $function
     * @param  $priority
     */
    
public function addFunction($tag$function$priority 10){
        if (! isset ( 
self::$instance->hooks [$tag] )) {
            
self::$instance->errors[] =  "There is no such place ($tag) for hooks.";
        } else {
            
self::$instance->hooks [$tag] [$priority] [] = $function;
        }
    }
    public function 
isExisted($tag){
        return (isset(
self::$instance->hooks[$tag]) && is_array(self::$instance->hooks[$tag]))?true:false;
    }

    
/**
     *
     * Enter description here ...
     * @param  $tag
     */
    
public function set($tag){
        if (
is_array($tag)){
            foreach (
$tag as $t){
                
self::$instance->hooks[$t] = '';
            }
        }else{
            
self::$instance->hooks[$tag] = '';
        }
    }
    
/**
     *
     * Enter description here ...
     * @param $tag
     */
    
public function remove($tag){
        if (
is_array($tag)){
            foreach (
$tag as $t){
                if (isset(
self::$instance->hooks[$t])){
                    unset(
self::$instance->hooks[$t]);
                }
            }
        }else{
            if (isset(
self::$instance->hooks[$tag])){
                unset(
self::$instance->hooks[$tag]);
            }
        }
    }

    public function 
set_active_plugins($active_plugins null){
        
self::$instance->active_plugins $active_plugins;
    }

    public function 
load_plugins($from_folder PLUGINS_FOLDER){
        if (
is_dir($from_folder)){
            if (
$handle = @opendir $from_folder )) {
                while ( 
$file readdir($handle)){
                    if (
is_file($from_folder.'/'.$file )) {
                        if ((
self::$instance->active_plugins == null || in_array$fileself::$instance->active_plugins)) &&
                        
strpos($from_folder.'/'.$file,'.plugin.php')){
                            require_once 
$from_folder.'/'.$file;
                            
self::$instance->plugins[$file]['file'] = $file;
                        }
                    } else if ((
is_dir $from_folder.'/'.$file )) && ($file != '.') && ($file != '..') && ($file != '.svn')) {
                        
self::$instance->load_plugins $from_folder.'/'.$file);
                    }
                }
                
closedir $handle );
            }
        }
    }

    public function 
errors(){
        return 
self::$instance->errors;
    }

    
// Prevent users to clone the instance
    
public function __clone(){
        
self::$instance->errors[] =  'Clone is not allowed.'.E_USER_ERROR;
    }
}
Онлайн: 1
Реклама