* @copyright 2017 MyAAC * @version 0.1.2 * @link http://my-aac.org */ defined('MYAAC') or die('Direct access not allowed!'); define('HOOK_STARTUP', 1); define('HOOK_BEFORE_PAGE', 2); define('HOOK_AFTER_PAGE', 3); define('HOOK_FINISH', 4); define('HOOK_TIBIACOM_ARTICLE', 5); define('HOOK_TIBIACOM_BORDER_3', 6); define('HOOK_FIRST', HOOK_STARTUP); define('HOOK_LAST', HOOK_TIBIACOM_BORDER_3); $hook_types = array( 'STARTUP' => HOOK_STARTUP, 'BEFORE_PAGE' => HOOK_BEFORE_PAGE, 'AFTER_PAGE' => HOOK_AFTER_PAGE, 'FINISH' => HOOK_FINISH, 'TIBIACOM_ARTICLE' => HOOK_TIBIACOM_ARTICLE, 'TIBIACOM_BORDER_3' => HOOK_TIBIACOM_BORDER_3 ); class Hook { private $_name, $_type, $_file; public function __construct($name, $type, $file) { $this->_name = $name; $this->_type = $type; $this->_file = $file; } public function execute($params) { /*if(is_callable($this->_callback)) { $tmp = $this->_callback; $ret = $tmp($params); }*/ global $db, $config, $template_path, $ots; if(file_exists(BASE . $this->_file)) { require(BASE . $this->_file); } return false; } public function name() {return $this->_name;} public function type() {return $this->_type;} } class Hooks { private static $_hooks = array(); public function register($hook, $type = '', $file = null) { if(!($hook instanceof Hook)) $hook = new Hook($hook, $type, $file); self::$_hooks[$hook->type()][] = $hook; } public function trigger($type, $params = array()) { $ret = true; if(isset(self::$_hooks[$type])) { foreach(self::$_hooks[$type] as $name => $hook) $ret = $hook->execute($params); } return $ret; } public function load() { global $db; $hooks = $db->query('SELECT `name`, `type`, `file` FROM `' . TABLE_PREFIX . 'hooks`;'); foreach($hooks as $hook) $this->register($hook['name'], $hook['type'], $hook['file']); } } ?>