*
* @package CodeIgniter
* @author ExpressionEngine Dev Team
- * @copyright Copyright (c) 2008, EllisLab, Inc.
+ * @copyright Copyright (c) 2008 - 2009, EllisLab, Inc.
* @license http://codeigniter.com/user_guide/license.html
* @link http://codeigniter.com
* @since Version 1.0
* @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();
+ $this->_initialize();
log_message('debug', "Hooks Class Initialized");
}
-
+
// --------------------------------------------------------------------
/**
*
* @access private
* @return void
- */
+ */
function _initialize()
{
$CFG =& load_class('Config');
-
+
// 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;
}
-
+
// --------------------------------------------------------------------
/**
{
return FALSE;
}
-
+
if (isset($this->hooks[$which][0]) AND is_array($this->hooks[$which][0]))
{
foreach ($this->hooks[$which] as $val)
{
$this->_run_hook($this->hooks[$which]);
}
-
+
return TRUE;
}
{
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'];
{
$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);
}
{
require($filepath);
}
-
+
$function($params);
}
-
+
$this->in_progress = FALSE;
return TRUE;
}