Index: trunk/core/kernel/event_manager.php
===================================================================
diff -u -r2592 -r2600
--- trunk/core/kernel/event_manager.php (.../event_manager.php) (revision 2592)
+++ trunk/core/kernel/event_manager.php (.../event_manager.php) (revision 2600)
@@ -2,20 +2,20 @@
define('hBEFORE', 1);
define('hAFTER', 2);
-
+
define('reBEFORE', 1);
define('reAFTER', 2);
class kEventManager extends kBase {
-
+
/**
* Connection to database
*
* @var kDBConnection
* @access public
*/
var $Conn;
-
+
/**
* Cache of QueryString parameters
* from config, that are represented
@@ -24,7 +24,7 @@
* @var Array
*/
var $queryMaps=Array();
-
+
/**
* Build events registred for
* pseudo classes. key - pseudo class
@@ -34,22 +34,22 @@
* @access private
*/
var $buildEvents=Array();
-
-
+
+
/**
* Events, that should be run before parser initialization
*
* @var Array
*/
var $beforeRegularEvents = Array();
-
+
/**
* Events, that should be run after parser initialization
*
* @var Array
*/
var $afterRegularEvents = Array();
-
+
/**
* Holds before hooks
* key - prefix.event (to link to)
@@ -59,7 +59,7 @@
* @access private
*/
var $beforeHooks=Array();
-
+
/**
* Holds after hooks
* key - prefix.event (to link to)
@@ -69,13 +69,13 @@
* @access private
*/
var $afterHooks = Array();
-
+
function kEventManager()
{
parent::kBase();
$this->Conn =& $this->Application->GetADODBConnection();
}
-
+
/**
* Set's new enviroment parameter mappings
* between their names as application vars
@@ -87,7 +87,7 @@
{
$this->queryMaps=$new_query_maps;
}
-
+
/**
* Registers new regular event
*
@@ -107,12 +107,12 @@
$this->afterRegularEvents[$short_name] = Array('EventName' => $event_name, 'RunInterval' => $run_interval);
}
}
-
+
function registerBuildEvent($pseudo_class,$build_event_name)
{
$this->buildEvents[$pseudo_class]=$build_event_name;
}
-
+
/**
* Returns build event by pseudo class
* name if any defined in config
@@ -123,14 +123,15 @@
*/
function &getBuildEvent($pseudo_class)
{
- if( !isset($this->buildEvents[$pseudo_class]) ) return false;
-
+ $false = false;
+ if( !isset($this->buildEvents[$pseudo_class]) ) return $false;
+
$event = new kEvent();
$event->Name=$this->buildEvents[$pseudo_class];
$event->MasterEvent=null;
return $event;
}
-
+
/**
* Allows to process any type of event
*
@@ -144,40 +145,40 @@
trigger_error('Prefix '.$event->Prefix.' not registred (requested event '.$event->Name.')', E_USER_NOTICE);
return false;
}
-
+
if (!$event->SkipBeforeHooks) {
$this->processHooks($event, hBEFORE);
if ($event->status == erFATAL) return true;
}
-
+
$event_handler =& $this->Application->recallObject($event->Prefix.'_EventHandler');
$event_handler->processEvent($event);
-
+
if ($event->status == erFATAL) return true;
if (!$event->SkipAfterHooks) {
$this->processHooks($event, hAFTER);
}
-
+
return true;
}
-
+
function ProcessRequest()
{
$this->processOpener();
-
+
// 1. get events from $_POST
$events=$this->Application->GetVar('events');
if($events===false) $events=Array();
// 2. if nothing there, then try to find them in $_GET
- if($this->queryMaps && !$events)
+ if($this->queryMaps && !$events)
{
// if we got $_GET type submit (links, not javascript)
foreach($this->queryMaps as $prefix_special => $query_map)
{
$query_map=array_flip($query_map);
if(isset($query_map['event']))
{
- $events[$prefix_special]=$this->Application->GetVar($prefix_special.'_event');
+ $events[$prefix_special]=$this->Application->GetVar($prefix_special.'_event');
}
}
$actions = $this->Application->GetVar('do');
@@ -186,7 +187,7 @@
$events[$prefix] = $event_name;
}
}
-
+
$passed = explode(',', $this->Application->GetVar('passed'));
foreach($events as $prefix_special => $event_name)
{
@@ -197,30 +198,30 @@
$events[$prefix_special] = $event_name;
$this->Application->SetVar($prefix_special.'_event', $event_name);
}
-
+
$event = new kEvent();
$event->Name=$event_name;
$event->Prefix_Special=$prefix_special;
-
+
$prefix_special=explode('.',$prefix_special);
$event->Prefix=$prefix_special[0];
array_push($passed, $prefix_special[0]);
$event->Special=isset($prefix_special[1])?$prefix_special[1]:'';
-
+
$event->redirect_params = Array('opener'=>'s', 'pass'=>'all');
$event->redirect = true;
$this->HandleEvent($event);
-
+
if($event->status==erSUCCESS && ($event->redirect === true || strlen($event->redirect) > 0) )
{
- $this->Application->Redirect($event->redirect, $event->redirect_params, null, $event->redirect_script);
+ $this->Application->Redirect($event->redirect, $event->redirect_params, null, $event->redirect_script);
}
}
-
+
$this->Application->SetVar('events', $events);
$this->Application->SetVar('passed', implode(',', $passed));
}
-
+
function processOpener()
{
$opener_action=$this->Application->GetVar('m_opener');
@@ -231,7 +232,7 @@
case 'r': // "reset" opener stack
$opener_stack=Array();
break;
-
+
case 'd': // "down/push" new template to opener stack, deeplevel++
if ($this->Application->GetVar('front')) {
array_push($opener_stack, '../'.$this->Application->RecallVar('last_template') );
@@ -240,18 +241,18 @@
array_push($opener_stack, $this->Application->RecallVar('last_template') );
}
break;
-
+
case 'u': // "up/pop" last template from opener stack, deeplevel--
array_pop($opener_stack);
break;
-
+
default: // "s/0," stay on same deep level
break;
}
$this->Application->SetVar('m_opener','s');
$this->Application->StoreVar('opener_stack',serialize($opener_stack));
}
-
+
function registerHook($hookto_prefix, $hookto_special, $hookto_event, $mode, $do_prefix, $do_special, $do_event, $conditional)
{
if( !$this->Application->getUnitOptions($hookto_prefix) )
@@ -280,7 +281,7 @@
);
}
}
-
+
/**
* Enter description here...
*
@@ -302,12 +303,12 @@
if( $hook['Conditional'] && !$this->Application->GetVar($prefix_special) ) continue;
$hook_event = new kEvent( Array('name'=>$hook['DoEvent'],'prefix'=>$hook['DoPrefix'],'special'=>$hook['DoSpecial']) );
$hook_event->MasterEvent =& $event;
-
+
$this->HandleEvent($hook_event);
}
}
}
-
+
/**
* Set's new event for $prefix_special
* passed
@@ -321,7 +322,7 @@
$actions =& $this->Application->recallObject('kActions');
$actions->Set('events['.$prefix_special.']',$event_name);
}
-
+
/**
* Run registred regular events with specified event type
*
@@ -330,16 +331,16 @@
function RunRegularEvents($event_type = reBEFORE)
{
$events_source = ($event_type == reBEFORE) ? $this->beforeRegularEvents : $this->afterRegularEvents;
-
+
/*if(rand(0, 100) < 90)
{
return;
}*/
-
+
$sql = 'SELECT Data FROM '.TABLE_PREFIX.'Cache WHERE VarName = %s';
$event_last_runs = $this->Conn->GetOne( sprintf($sql, $this->Conn->qstr('RegularEventRuns') ) );
$event_last_runs = $event_last_runs ? unserialize($event_last_runs) : Array();
-
+
foreach($events_source as $short_name => $event_data)
{
$event_last_run = getArrayValue($event_last_runs, $short_name);
@@ -353,9 +354,9 @@
$event->redirect = false;
$this->Application->HandleEvent($event);
$event_last_runs[$short_name] = mktime();
- }
+ }
}
-
+
$sql = 'REPLACE INTO '.TABLE_PREFIX.'Cache (VarName,Data,Cached) VALUES (%s,%s,%s)';
$this->Conn->Query( sprintf($sql, $this->Conn->qstr('RegularEventRuns'), $this->Conn->qstr(serialize($event_last_runs)), mktime() ) );
}