mirror of
				https://github.com/e107inc/e107.git
				synced 2025-10-27 03:31:47 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			391 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			391 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /*
 | |
|  * e107 website system
 | |
|  *
 | |
|  * Copyright (C) 2008-2015 e107 Inc (e107.org)
 | |
|  * Released under the terms and conditions of the
 | |
|  * GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
 | |
|  *
 | |
|  */
 | |
| 
 | |
| 
 | |
| if (!defined('e107_INIT')) { exit; }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  *
 | |
|  */
 | |
| class e107_event
 | |
| {
 | |
| 	var $functions = array();
 | |
| 	var $includes = array();
 | |
| 
 | |
| 	protected $coreEvents;
 | |
| 	private $triggered = array();
 | |
| 
 | |
| 	protected $oldCoreEvents = array(
 | |
| 
 | |
| 		'usersup'		=> 'user_signup_submitted',
 | |
| 		'userveri'		=> 'user_signup_activated',
 | |
| 		'flood'			=> 'user_ban_flood',
 | |
| 		'subnews'		=> 'user_news_submit',
 | |
| 		'fileupload'	=> 'user_file_upload',
 | |
| 		'newspost'		=> 'admin_news_created',
 | |
| 		'newsupd'		=> 'admin_news_updated',
 | |
| 		'newsdel'		=> 'admin_news_deleted',
 | |
| 		'userdatachanged' => 'user_profile_edit'
 | |
| 	);
 | |
| 
 | |
| 
 | |
| 	function __construct()
 | |
| 	{
 | |
| 
 | |
| 
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * @return void
 | |
| 	 */
 | |
| 	public function init()
 | |
| 	{
 | |
| 
 | |
| 		$temp = e107::getAddonConfig('e_event');
 | |
| 
 | |
| 		if(!empty($temp))
 | |
| 		{
 | |
| 			foreach($temp as $plug=>$data)
 | |
| 			{
 | |
| 				foreach($data as $event)
 | |
| 				{
 | |
| 					$name = $event['name'];
 | |
| 					$class = array($plug."_event", $event['function']);
 | |
| 
 | |
| 					if(!empty($name) && !empty($event['function']))
 | |
| 					{
 | |
| 						$this->register($name, $class);
 | |
| 					}
 | |
| 				}
 | |
| 
 | |
| 			}
 | |
| 
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * @return array[]
 | |
| 	 */
 | |
| 	function coreList()
 | |
| 	{
 | |
| 
 | |
| 		$this->coreEvents = array( // used by e_notify admin area.
 | |
| 
 | |
| 			'session'	=> array(
 | |
| 
 | |
| 				'user_signup_submitted'		=> NU_LAN_2,
 | |
| 				'user_signup_activated'		=> NU_LAN_3,
 | |
| 				'login' 					=> NU_LAN_4,
 | |
| 				'logout'					=> NU_LAN_5,
 | |
| 				'user_xup_login'			=> NU_LAN_6,
 | |
| 				'user_xup_signup'			=> NU_LAN_7,
 | |
| 				'user_ban_flood'			=> NS_LAN_2,
 | |
| 				'user_ban_failed_login'		=> NS_LAN_3,
 | |
| 				'user_profile_display'      => NU_LAN_8,
 | |
| 				'user_profile_edit'         => NU_LAN_9,
 | |
| 				'user_ip_changed'           => defset('NU_LAN_10', 'User IP changed')
 | |
| 
 | |
| 			),
 | |
| 
 | |
| 			'administrators'	=> array(
 | |
| 				'admin_password_update'		=> NA_LAN_1,
 | |
| 				'admin_user_created'		=> NA_LAN_2,
 | |
| 				'admin_user_activated'		=> NA_LAN_3
 | |
| 
 | |
| 			),
 | |
| 
 | |
| 			'news'	=> array(
 | |
| 
 | |
| 				'admin_news_created'	=> NN_LAN_3,
 | |
| 				'admin_news_updated'	=> NN_LAN_4,
 | |
| 				'admin_news_deleted'	=> NN_LAN_5,
 | |
| 				'admin_news_notify'     => NN_LAN_6,
 | |
| 				'user_news_submit'		=> NN_LAN_2,
 | |
| 
 | |
| 			),
 | |
| 
 | |
| 			'mail'	=> array(
 | |
| 
 | |
| 				'maildone'			=> NM_LAN_2,
 | |
| 			),
 | |
| 
 | |
| 			'file'	=> array(
 | |
| 
 | |
| 				//		'fileupload'		=> NF_LAN_2,
 | |
| 				'user_file_upload'	=> NF_LAN_2,
 | |
| 			),
 | |
| 
 | |
| 		);
 | |
| 
 | |
| 
 | |
| 		return $this->coreEvents; 	
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * @return string[]
 | |
| 	 */
 | |
| 	function oldCoreList()
 | |
| 	{
 | |
| 		return $this->oldCoreEvents; 	
 | |
| 	}
 | |
| 	
 | |
| 
 | |
| 	/**
 | |
| 	 * Register event
 | |
| 	 * 
 | |
| 	 * @param string $eventname
 | |
| 	 * @param array|string $function [class_name, method_name] or function name
 | |
| 	 * @param string $include [optional] include path 
 | |
| 	 * @return void
 | |
| 	 */
 | |
| 	function register($eventname, $function, $include='')
 | |
| 	{
 | |
| 
 | |
| 
 | |
| 		if(!isset($this->functions[$eventname]) || !in_array($function, $this->functions[$eventname]))
 | |
| 		{
 | |
| 			if (!empty($include))
 | |
| 			{
 | |
| 				$this->includes[$eventname][] = $include;
 | |
| 			}
 | |
| 
 | |
| 			$this->functions[$eventname][] = $function;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * @return string
 | |
| 	 */
 | |
| 	function debug()
 | |
| 	{
 | |
| 		$text = "<h3>Event Functions</h3>";
 | |
| 		$text .= print_a($this->functions,true);
 | |
| 		$text .= "<h3>Event Includes</h3>";
 | |
| 		$text .= print_a($this->includes,true);
 | |
| 
 | |
| 		return $text;
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * Triggers an event
 | |
| 	 *
 | |
| 	 * @param string $eventname
 | |
| 	 * @param mixed $data
 | |
| 	 * @return mixed
 | |
| 	 */
 | |
| 	function trigger($eventname, $data=null)
 | |
| 	{
 | |
| 		/*if (isset($this->includes[$eventname]))
 | |
| 		{
 | |
| 			foreach($this->includes[$eventname] as $evt_inc)
 | |
| 			{
 | |
| 				if (file_exists($evt_inc))
 | |
| 				{
 | |
| 					include_once($evt_inc);
 | |
| 				}
 | |
| 			}
 | |
| 		}*/
 | |
| 
 | |
| 	//	echo ($this->debug());
 | |
| 		$this->triggered[$eventname] = true;
 | |
| 
 | |
| 		if (isset($this->functions[$eventname]))
 | |
| 		{
 | |
| 
 | |
| 
 | |
| 			foreach($this->functions[$eventname] as $i => $evt_func)
 | |
| 			{
 | |
| 				$location = '';
 | |
| 				if(isset($this->includes[$eventname][$i])) //no checks
 | |
| 				{
 | |
| 					$location = $this->includes[$eventname][$i];
 | |
| 
 | |
| 					e107_include_once($location); 
 | |
| 					unset($this->includes[$eventname][$i]);
 | |
| 
 | |
| 				}
 | |
| 
 | |
| 				if(is_array($evt_func)) //class, method
 | |
| 				{
 | |
| 					$class = $evt_func[0];
 | |
| 					$method = $evt_func[1];
 | |
| 						
 | |
| 					try
 | |
| 					{
 | |
| 					
 | |
| 						$tmp = new $class($eventname);
 | |
| 						$ret = $tmp->{$method}($data, $eventname); //let callback know what event is calling it
 | |
| 						unset($tmp);
 | |
| 						if (!empty($ret))
 | |
| 						{
 | |
| 							break;
 | |
| 						}
 | |
| 					}
 | |
| 					catch(Exception $e)
 | |
| 					{
 | |
| 						e107::getLog()->add('Event Trigger failed',array('name'=>$eventname,'location'=>$location,'class'=>$class,'method'=>$method,'error'=>$e),E_LOG_WARNING,'EVENT_01'); 
 | |
| 						continue;
 | |
| 					}
 | |
| 				}
 | |
| 				elseif (function_exists($evt_func))
 | |
| 				{
 | |
| 					$ret = $evt_func($data, $eventname); //let callback know what event is calling it
 | |
| 					if (!empty($ret))
 | |
| 					{
 | |
| 						break;
 | |
| 					}
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					e107::getLog()->add('Event Trigger failed',array('name'=>$eventname,'location'=>$location,'function'=>$evt_func), E_LOG_WARNING,'EVENT_01'); 
 | |
| 				}
 | |
| 				
 | |
| 			}
 | |
| 		}
 | |
| 		return (isset($ret) ? $ret : false);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Returns true if an event has been triggered.
 | |
| 	 * @param $eventname
 | |
| 	 * @return bool
 | |
| 	 */
 | |
| 	public function triggered($eventname)
 | |
| 	{
 | |
| 		return !empty($this->triggered[$eventname]);
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	 * @Deprecated
 | |
| 	 */
 | |
| 	function triggerAdminEvent($type, $parms=null)
 | |
| 	{
 | |
| 		global $pref;
 | |
| 		if(!is_array($parms))
 | |
| 		{
 | |
| 			parse_str($parms, $parms);
 | |
| 		}
 | |
| 		if(isset($pref['e_admin_events_list']) && is_array($pref['e_admin_events_list']))
 | |
| 		{
 | |
| 			// $called = getcachedvars('admin_events_called');
 | |
| 			$called = e107::getRegistry('core/cachedvars/admin_events_called', false);
 | |
| 			if(!is_array($called)) { $called = array(); }
 | |
| 			foreach($pref['e_admin_events_list'] as $plugin)
 | |
| 			{
 | |
| 				if(e107::isInstalled($plugin))
 | |
| 				{
 | |
| 					$func = 'plugin_'.$plugin.'_admin_events';
 | |
| 					if(!function_exists($func))
 | |
| 					{
 | |
| 						$fname = e_PLUGIN.$plugin.'/e_admin_events.php';
 | |
| 						if(is_readable($fname)) { include_once($fname); }
 | |
| 					}
 | |
| 					if(function_exists($func))
 | |
| 					{
 | |
| 						$event_func = call_user_func($func, $type, $parms);
 | |
| 						if ($event_func && function_exists($event_func) && !in_array($event_func, $called))
 | |
| 						{
 | |
| 							$called[] = $event_func;
 | |
| 							// cachevars('admin_events_called', $called);
 | |
| 							e107::setRegistry('core/cachedvars/admin_events_called', $called);
 | |
| 							call_user_func($event_func);
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/*
 | |
| 	* triggerHook trigger a hooked in element
 | |
| 	*   four methods are allowed hooks: form, create, update, delete
 | |
| 	*   form : return array('caption'=>'', 'text'=>'');
 | |
| 	*   create, update, delete : return string message
 | |
| 	* @param array $data array containing
 | |
| 	* @param string $method form,insert,update,delete
 | |
| 	* @param string $table the table name of the calling plugin
 | |
| 	* @param int $id item id of the record
 | |
| 	* @param string $plugin identifier for the calling plugin
 | |
| 	* @param string $function identifier for the calling function
 | |
| 	* @return string $text string of rendered html, or message from db handler
 | |
| 	*/
 | |
| 	/**
 | |
| 	 * @param $data
 | |
| 	 * @return array|string
 | |
| 	 */
 | |
| 	function triggerHook($data=array())
 | |
| 	{
 | |
| 		$text = null;
 | |
| 		$e_event_list = e107::getPref('e_event_list');
 | |
| 		
 | |
| 		if(is_array($e_event_list))
 | |
| 		{
 | |
| 			foreach($e_event_list as $hook)
 | |
| 			{
 | |
| 				if(e107::isInstalled($hook))
 | |
| 				{
 | |
| 					if(is_readable(e_PLUGIN.$hook."/e_event.php"))
 | |
| 					{
 | |
| 						require_once(e_PLUGIN.$hook."/e_event.php");
 | |
| 						$name = "e_event_{$hook}";
 | |
| 						if(class_exists($name))
 | |
| 						{
 | |
| 							$class = new $name();
 | |
| 							
 | |
| 							switch($data['method'])
 | |
| 							{
 | |
| 								//returns array('caption'=>'', 'text'=>'');
 | |
| 								case 'form':
 | |
| 									if(method_exists($class, "event_{$data['method']}"))
 | |
| 									{
 | |
| 										$ret = $class->event_form($data);
 | |
| 										
 | |
| 										if(!isset($ret[0]))
 | |
| 										{
 | |
| 											$text[$hook][0] = $ret;		
 | |
| 										}
 | |
| 										else 
 | |
| 										{
 | |
| 											$text[$hook] = $ret;
 | |
| 										}
 | |
| 										
 | |
| 										
 | |
| 									}
 | |
| 									break;
 | |
| 								//returns string message
 | |
| 								case 'create':
 | |
| 								case 'update':
 | |
| 								case 'delete':
 | |
| 									if(method_exists($class, "event_{$data['method']}"))
 | |
| 									{
 | |
| 										$text .= call_user_func(array($class, "event_{$data['method']}"), $data);
 | |
| 									}
 | |
| 									break;
 | |
| 							}
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		return $text;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 |