diff options
Diffstat (limited to 'kohana/core/Event.php')
| -rw-r--r-- | kohana/core/Event.php | 232 | 
1 files changed, 0 insertions, 232 deletions
diff --git a/kohana/core/Event.php b/kohana/core/Event.php deleted file mode 100644 index 22a9f69d..00000000 --- a/kohana/core/Event.php +++ /dev/null @@ -1,232 +0,0 @@ -<?php defined('SYSPATH') OR die('No direct access allowed.'); -/** - * Process queuing/execution class. Allows an unlimited number of callbacks - * to be added to 'events'. Events can be run multiple times, and can also - * process event-specific data. By default, Kohana has several system events. - * - * $Id: Event.php 3993 2009-02-17 18:42:50Z jheathco $ - * - * @package    Core - * @author     Kohana Team - * @copyright  (c) 2007 Kohana Team - * @license    http://kohanaphp.com/license.html - * @link       http://docs.kohanaphp.com/general/events - */ -final class Event { - -	// Event callbacks -	private static $events = array(); - -	// Cache of events that have been run -	private static $has_run = array(); - -	// Data that can be processed during events -	public static $data; - -	/** -	 * Add a callback to an event queue. -	 * -	 * @param   string   event name -	 * @param   array    http://php.net/callback -	 * @return  boolean -	 */ -	public static function add($name, $callback) -	{ -		if ( ! isset(self::$events[$name])) -		{ -			// Create an empty event if it is not yet defined -			self::$events[$name] = array(); -		} -		elseif (in_array($callback, self::$events[$name], TRUE)) -		{ -			// The event already exists -			return FALSE; -		} - -		// Add the event -		self::$events[$name][] = $callback; - -		return TRUE; -	} - -	/** -	 * Add a callback to an event queue, before a given event. -	 * -	 * @param   string   event name -	 * @param   array    existing event callback -	 * @param   array    event callback -	 * @return  boolean -	 */ -	public static function add_before($name, $existing, $callback) -	{ -		if (empty(self::$events[$name]) OR ($key = array_search($existing, self::$events[$name])) === FALSE) -		{ -			// Just add the event if there are no events -			return self::add($name, $callback); -		} -		else -		{ -			// Insert the event immediately before the existing event -			return self::insert_event($name, $key, $callback); -		} -	} - -	/** -	 * Add a callback to an event queue, after a given event. -	 * -	 * @param   string   event name -	 * @param   array    existing event callback -	 * @param   array    event callback -	 * @return  boolean -	 */ -	public static function add_after($name, $existing, $callback) -	{ -		if (empty(self::$events[$name]) OR ($key = array_search($existing, self::$events[$name])) === FALSE) -		{ -			// Just add the event if there are no events -			return self::add($name, $callback); -		} -		else -		{ -			// Insert the event immediately after the existing event -			return self::insert_event($name, $key + 1, $callback); -		} -	} - -	/** -	 * Inserts a new event at a specfic key location. -	 * -	 * @param   string   event name -	 * @param   integer  key to insert new event at -	 * @param   array    event callback -	 * @return  void -	 */ -	private static function insert_event($name, $key, $callback) -	{ -		if (in_array($callback, self::$events[$name], TRUE)) -			return FALSE; - -		// Add the new event at the given key location -		self::$events[$name] = array_merge -		( -			// Events before the key -			array_slice(self::$events[$name], 0, $key), -			// New event callback -			array($callback), -			// Events after the key -			array_slice(self::$events[$name], $key) -		); - -		return TRUE; -	} - -	/** -	 * Replaces an event with another event. -	 * -	 * @param   string   event name -	 * @param   array    event to replace -	 * @param   array    new callback -	 * @return  boolean -	 */ -	public static function replace($name, $existing, $callback) -	{ -		if (empty(self::$events[$name]) OR ($key = array_search($existing, self::$events[$name], TRUE)) === FALSE) -			return FALSE; - -		if ( ! in_array($callback, self::$events[$name], TRUE)) -		{ -			// Replace the exisiting event with the new event -			self::$events[$name][$key] = $callback; -		} -		else -		{ -			// Remove the existing event from the queue -			unset(self::$events[$name][$key]); - -			// Reset the array so the keys are ordered properly -			self::$events[$name] = array_values(self::$events[$name]); -		} - -		return TRUE; -	} - -	/** -	 * Get all callbacks for an event. -	 * -	 * @param   string  event name -	 * @return  array -	 */ -	public static function get($name) -	{ -		return empty(self::$events[$name]) ? array() : self::$events[$name]; -	} - -	/** -	 * Clear some or all callbacks from an event. -	 * -	 * @param   string  event name -	 * @param   array   specific callback to remove, FALSE for all callbacks -	 * @return  void -	 */ -	public static function clear($name, $callback = FALSE) -	{ -		if ($callback === FALSE) -		{ -			self::$events[$name] = array(); -		} -		elseif (isset(self::$events[$name])) -		{ -			// Loop through each of the event callbacks and compare it to the -			// callback requested for removal. The callback is removed if it -			// matches. -			foreach (self::$events[$name] as $i => $event_callback) -			{ -				if ($callback === $event_callback) -				{ -					unset(self::$events[$name][$i]); -				} -			} -		} -	} - -	/** -	 * Execute all of the callbacks attached to an event. -	 * -	 * @param   string   event name -	 * @param   array    data can be processed as Event::$data by the callbacks -	 * @return  void -	 */ -	public static function run($name, & $data = NULL) -	{ -		if ( ! empty(self::$events[$name])) -		{ -			// So callbacks can access Event::$data -			self::$data =& $data; -			$callbacks  =  self::get($name); - -			foreach ($callbacks as $callback) -			{ -				call_user_func($callback); -			} - -			// Do this to prevent data from getting 'stuck' -			$clear_data = ''; -			self::$data =& $clear_data; -		} - -		// The event has been run! -		self::$has_run[$name] = $name; -	} - -	/** -	 * Check if a given event has been run. -	 * -	 * @param   string   event name -	 * @return  boolean -	 */ -	public static function has_run($name) -	{ -		return isset(self::$has_run[$name]); -	} - -} // End Event
\ No newline at end of file  | 
