Вход Регистрация
Файл: mg-core/lib/eventhook.php
Строк: 73
<?php

/**
 * Класс EventHook - вешает обработчик для заданного хука.
 * Доступен из любой точки программы.
 * Реализован в виде синглтона, что исключает его дублирование.
 *
 * @author Авдеев Марк <mark-avdeev@mail.ru>
 * @package moguta.cms
 * @subpackage Libraries
 */
class EventHook implements Hook {

  
/**
   * @var string наименование хука.
   */
  
private $_hookName;

  
/**
   * @var string пользовательская функция, которая сработает при хуке.
   */
  
private $_functionName;

  
/**
   * @var string количество агрументов которое ждет пользовательская функция.
   */
  
private $_countArg;

  
/**
   * @var string приоритет выполнения.
   */
  
private $_priority;

  
/**
   * @var string класс в котором находится пользовательская функция
   */
  
private $_class;

  public function 
__construct($hookName$functionName$countArg 0$priority 10) {

    
//Если имя хука является путем, то названием считается последняя директория в пути.
    //Необходимо для валидной работы страницы настроек плагина.
    
$section explode(DIRECTORY_SEPARATORdirname($hookName));

    
$hookName count($section) > end($section) : $hookName;

    
$this->_hookName $hookName;

    
// если функция передана в массиве, вместе с указанием ее класса
    
if (is_array($functionName)) {
      
$this->_class $functionName[0];
      
$functionName $functionName[1];
    }

    
$this->_functionName $functionName;
    
$this->_countArg $countArg;
    
$this->_priority $priority;
  }

  
/**
   * Запускает обработчик для хука.
   * @param type $arg массив параметров.
   * @return type результат работы пользовательской функции.
   */
  
public function run($arg) {

    if (
function_exists($this->_functionName)) {
      
// Если  хук передал параметры, то передать их в пользовательскую функцию.
      
if (empty($arg)) {
        return 
call_user_func($this->_functionName);
      } else {
        
$args[0] = $arg;
        return 
call_user_func_array($this->_functionName$args);
      }
    } else {
      
// если пользовательская функция задана в классе
      
if ($this->_class && class_exists($this->_class)) {
        if (empty(
$arg)) {
          return 
call_user_func(array($this->_class$this->_functionName));
        } else {
          
$args[0] = $arg;
          return 
call_user_func_array(array($this->_class$this->_functionName), $args);
        }
      }
    }
  }

  
/**
   * Возвращает название хука.
   */
  
public function getHookName() {
    return 
$this->_hookName;
  }

  
/**
   * Возвращает количество агрументов которое ожидает пользовательская функция.
   */
  
public function getCountArg() {
    return 
$this->_countArg;
  }

  
/**
   * Возвращает приоритет пользовательской функций.
   */
  
public function getPriority() {
    return 
$this->_priority;
  }

}
Онлайн: 0
Реклама