PageRenderTime 303ms CodeModel.GetById 180ms app.highlight 6ms RepoModel.GetById 115ms app.codeStats 0ms

/halogy/libraries/Hooks.php

https://bitbucket.org/haloweb/halogy-1.0/
PHP | 226 lines | 104 code | 41 blank | 81 comment | 19 complexity | 8cd59979c77096f344f2dd3a52dcd6fb MD5 | raw file
  1<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  2/**
  3 * CodeIgniter
  4 *
  5 * An open source application development framework for PHP 4.3.2 or newer
  6 *
  7 * @package		CodeIgniter
  8 * @author		ExpressionEngine Dev Team
  9 * @copyright	Copyright (c) 2008 - 2009, EllisLab, Inc.
 10 * @license		http://codeigniter.com/user_guide/license.html
 11 * @link		http://codeigniter.com
 12 * @since		Version 1.0
 13 * @filesource
 14 */
 15
 16// ------------------------------------------------------------------------
 17
 18/**
 19 * CodeIgniter Hooks Class
 20 *
 21 * Provides a mechanism to extend the base system without hacking.  Most of
 22 * this class is borrowed from Paul's Extension class in ExpressionEngine.
 23 *
 24 * @package		CodeIgniter
 25 * @subpackage	Libraries
 26 * @category	Libraries
 27 * @author		ExpressionEngine Dev Team
 28 * @link		http://codeigniter.com/user_guide/libraries/encryption.html
 29 */
 30class CI_Hooks {
 31
 32	var $enabled 		= FALSE;
 33	var $hooks   		= array();
 34	var $in_progress	= FALSE;
 35
 36	/**
 37	 * Constructor
 38	 *
 39	 */
 40	function CI_Hooks()
 41	{
 42		$this->_initialize();
 43		log_message('debug', "Hooks Class Initialized");
 44	}
 45  
 46	// --------------------------------------------------------------------
 47
 48	/**
 49	 * Initialize the Hooks Preferences
 50	 *
 51	 * @access	private
 52	 * @return	void
 53	 */  
 54  	function _initialize()
 55  	{
 56		$CFG =& load_class('Config');
 57
 58		// If hooks are not enabled in the config file
 59		// there is nothing else to do
 60
 61		if ($CFG->item('enable_hooks') == FALSE)
 62		{
 63			return;
 64		}
 65
 66		// Grab the "hooks" definition file.
 67		// If there are no hooks, we're done.
 68
 69		@include(APPPATH.'config/hooks'.EXT);
 70
 71		if ( ! isset($hook) OR ! is_array($hook))
 72		{
 73			return;
 74		}
 75
 76		$this->hooks =& $hook;
 77		$this->enabled = TRUE;
 78  	}
 79  
 80	// --------------------------------------------------------------------
 81
 82	/**
 83	 * Call Hook
 84	 *
 85	 * Calls a particular hook
 86	 *
 87	 * @access	private
 88	 * @param	string	the hook name
 89	 * @return	mixed
 90	 */
 91	function _call_hook($which = '')
 92	{
 93		if ( ! $this->enabled OR ! isset($this->hooks[$which]))
 94		{
 95			return FALSE;
 96		}
 97
 98		if (isset($this->hooks[$which][0]) AND is_array($this->hooks[$which][0]))
 99		{
100			foreach ($this->hooks[$which] as $val)
101			{
102				$this->_run_hook($val);
103			}
104		}
105		else
106		{
107			$this->_run_hook($this->hooks[$which]);
108		}
109
110		return TRUE;
111	}
112
113	// --------------------------------------------------------------------
114
115	/**
116	 * Run Hook
117	 *
118	 * Runs a particular hook
119	 *
120	 * @access	private
121	 * @param	array	the hook details
122	 * @return	bool
123	 */
124	function _run_hook($data)
125	{
126		if ( ! is_array($data))
127		{
128			return FALSE;
129		}
130
131		// -----------------------------------
132		// Safety - Prevents run-away loops
133		// -----------------------------------
134
135		// If the script being called happens to have the same
136		// hook call within it a loop can happen
137
138		if ($this->in_progress == TRUE)
139		{
140			return;
141		}
142
143		// -----------------------------------
144		// Set file path
145		// -----------------------------------
146
147		if ( ! isset($data['filepath']) OR ! isset($data['filename']))
148		{
149			return FALSE;
150		}
151
152		$filepath = APPPATH.$data['filepath'].'/'.$data['filename'];
153
154		if ( ! file_exists($filepath))
155		{
156			return FALSE;
157		}
158
159		// -----------------------------------
160		// Set class/function name
161		// -----------------------------------
162
163		$class		= FALSE;
164		$function	= FALSE;
165		$params		= '';
166
167		if (isset($data['class']) AND $data['class'] != '')
168		{
169			$class = $data['class'];
170		}
171
172		if (isset($data['function']))
173		{
174			$function = $data['function'];
175		}
176
177		if (isset($data['params']))
178		{
179			$params = $data['params'];
180		}
181
182		if ($class === FALSE AND $function === FALSE)
183		{
184			return FALSE;
185		}
186
187		// -----------------------------------
188		// Set the in_progress flag
189		// -----------------------------------
190
191		$this->in_progress = TRUE;
192
193		// -----------------------------------
194		// Call the requested class and/or function
195		// -----------------------------------
196
197		if ($class !== FALSE)
198		{
199			if ( ! class_exists($class))
200			{
201				require($filepath);
202			}
203
204			$HOOK = new $class;
205			$HOOK->$function($params);
206		}
207		else
208		{
209			if ( ! function_exists($function))
210			{
211				require($filepath);
212			}
213
214			$function($params);
215		}
216
217		$this->in_progress = FALSE;
218		return TRUE;
219	}
220
221}
222
223// END CI_Hooks class
224
225/* End of file Hooks.php */
226/* Location: ./system/libraries/Hooks.php */