225 行
		
	
	
		
			无行尾
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			225 行
		
	
	
		
			无行尾
		
	
	
		
			4.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 | |
| /**
 | |
|  * CodeIgniter
 | |
|  *
 | |
|  * An open source application development framework for PHP 5.1.6 or newer
 | |
|  *
 | |
|  * @package		CodeIgniter
 | |
|  * @author		ExpressionEngine Dev Team
 | |
|  * @copyright	Copyright (c) 2008 - 2011, 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.
 | |
|  *
 | |
|  * @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 __construct()
 | |
| 	{
 | |
| 		$this->_initialize();
 | |
| 		log_message('debug', "Hooks Class Initialized");
 | |
| 	}
 | |
| 
 | |
| 	// --------------------------------------------------------------------
 | |
| 
 | |
| 	/**
 | |
| 	 * Initialize the Hooks Preferences
 | |
| 	 *
 | |
| 	 * @access	private
 | |
| 	 * @return	void
 | |
| 	 */
 | |
| 	function _initialize()
 | |
| 	{
 | |
| 		$CFG =& load_class('Config', 'core');
 | |
| 
 | |
| 		// If hooks are not enabled in the config file
 | |
| 		// there is nothing else to do
 | |
| 
 | |
| 		if ($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 happen
 | |
| 
 | |
| 		if ($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/core/Hooks.php */ |