first commit
This commit is contained in:
248
system/core/Hooks.php
Normal file
248
system/core/Hooks.php
Normal file
@ -0,0 +1,248 @@
|
||||
<?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 {
|
||||
|
||||
/**
|
||||
* Determines wether hooks are enabled
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
var $enabled = FALSE;
|
||||
/**
|
||||
* List of all hooks set in config/hooks.php
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
var $hooks = array();
|
||||
/**
|
||||
* Determines wether hook is in progress, used to prevent infinte loops
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
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.
|
||||
|
||||
if (defined('ENVIRONMENT') AND is_file(APPPATH.'config/'.ENVIRONMENT.'/hooks.php'))
|
||||
{
|
||||
include(APPPATH.'config/'.ENVIRONMENT.'/hooks.php');
|
||||
}
|
||||
elseif (is_file(APPPATH.'config/hooks.php'))
|
||||
{
|
||||
include(APPPATH.'config/hooks.php');
|
||||
}
|
||||
|
||||
|
||||
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 */
|
Reference in New Issue
Block a user