Index: trunk/core/kernel/event_manager.php =================================================================== diff -u -r2270 -r2368 --- trunk/core/kernel/event_manager.php (.../event_manager.php) (revision 2270) +++ trunk/core/kernel/event_manager.php (.../event_manager.php) (revision 2368) @@ -1,10 +1,20 @@ Conn =& $this->Application->GetADODBConnection(); + } + /** * Set's new enviroment parameter mappings * between their names as application vars @@ -57,6 +88,26 @@ $this->queryMaps=$new_query_maps; } + /** + * Registers new regular event + * + * @param string $short_name name to be used to store last maintenace run info + * @param string $event_name + * @param int $run_interval run interval in seconds + * @param int $type before or after regular event + */ + function registerRegularEvent($short_name, $event_name, $run_interval, $type = reBEFORE) + { + if($type == reBEFORE) + { + $this->beforeRegularEvents[$short_name] = Array('EventName' => $event_name, 'RunInterval' => $run_interval); + } + else + { + $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; @@ -270,7 +321,44 @@ $actions =& $this->Application->recallObject('kActions'); $actions->Set('events['.$prefix_special.']',$event_name); } - + + /** + * Run registred regular events with specified event type + * + * @param int $event_type + */ + 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); + if($event_last_run && $event_last_run > mktime() - $event_data['RunInterval']) + { + continue; + } + else + { + $event = new kEvent($event_data['EventName']); + $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() ) ); + } }