CodeIgniter installed
[living-lab-site.git] / system / core / Hooks.php
diff --git a/system/core/Hooks.php b/system/core/Hooks.php
new file mode 100755 (executable)
index 0000000..24fa105
--- /dev/null
@@ -0,0 +1,233 @@
+<?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.
+
+               if (defined('ENVIRONMENT') AND is_file(APPPATH.'config/'.ENVIRONMENT.'/hooks'.EXT))
+               {
+                   include(APPPATH.'config/'.ENVIRONMENT.'/hooks'.EXT);
+               }
+               elseif (is_file(APPPATH.'config/hooks'.EXT))
+               {
+                       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 */
\ No newline at end of file