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() ) ); }