Blame | Last modification | View Log | RSS feed
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');/*** CodeIgniter** An open source application development framework for PHP 4.3.2 or newer** @package CodeIgniter* @author ExpressionEngine Dev Team* @copyright Copyright (c) 2008, EllisLab, Inc.* @license http://codeigniter.com/user_guide/license.html* @link http://codeigniter.com* @since Version 1.0* @filesource*/// ------------------------------------------------------------------------/*** CodeIgniter Hooks Class** Provides a mechanism to extend the base system without hacking. Most of* this class is borrowed from Paul's Extension class in ExpressionEngine.** @package CodeIgniter* @subpackage Libraries* @category Libraries* @author ExpressionEngine Dev Team* @link http://codeigniter.com/user_guide/libraries/encryption.html*/class CI_Hooks {var $enabled = FALSE;var $hooks = array();var $in_progress = FALSE;/*** Constructor**/function CI_Hooks(){$this->_initialize();log_message('debug', "Hooks Class Initialized");}// --------------------------------------------------------------------/*** Initialize the Hooks Preferences** @access private* @return void*/function _initialize(){$CFG =& load_class('Config');// If hooks are not enabled in the config file// there is nothing else to doif ($CFG->item('enable_hooks') == FALSE){return;}// Grab the "hooks" definition file.// If there are no hooks, we're done.@include(APPPATH.'config/hooks'.EXT);if ( ! isset($hook) OR ! is_array($hook)){return;}$this->hooks =& $hook;$this->enabled = TRUE;}// --------------------------------------------------------------------/*** Call Hook** Calls a particular hook** @access private* @param string the hook name* @return mixed*/function _call_hook($which = ''){if ( ! $this->enabled OR ! isset($this->hooks[$which])){return FALSE;}if (isset($this->hooks[$which][0]) AND is_array($this->hooks[$which][0])){foreach ($this->hooks[$which] as $val){$this->_run_hook($val);}}else{$this->_run_hook($this->hooks[$which]);}return TRUE;}// --------------------------------------------------------------------/*** Run Hook** Runs a particular hook** @access private* @param array the hook details* @return bool*/function _run_hook($data){if ( ! is_array($data)){return FALSE;}// -----------------------------------// Safety - Prevents run-away loops// -----------------------------------// If the script being called happens to have the same// hook call within it a loop can happenif ($this->in_progress == TRUE){return;}// -----------------------------------// Set file path// -----------------------------------if ( ! isset($data['filepath']) OR ! isset($data['filename'])){return FALSE;}$filepath = APPPATH.$data['filepath'].'/'.$data['filename'];if ( ! file_exists($filepath)){return FALSE;}// -----------------------------------// Set class/function name// -----------------------------------$class = FALSE;$function = FALSE;$params = '';if (isset($data['class']) AND $data['class'] != ''){$class = $data['class'];}if (isset($data['function'])){$function = $data['function'];}if (isset($data['params'])){$params = $data['params'];}if ($class === FALSE AND $function === FALSE){return FALSE;}// -----------------------------------// Set the in_progress flag// -----------------------------------$this->in_progress = TRUE;// -----------------------------------// Call the requested class and/or function// -----------------------------------if ($class !== FALSE){if ( ! class_exists($class)){require($filepath);}$HOOK = new $class;$HOOK->$function($params);}else{if ( ! function_exists($function)){require($filepath);}$function($params);}$this->in_progress = FALSE;return TRUE;}}// END CI_Hooks class/* End of file Hooks.php *//* Location: ./system/libraries/Hooks.php */