Index: branches/RC/core/kernel/event_manager.php =================================================================== diff -u -N -r11403 -r11538 --- branches/RC/core/kernel/event_manager.php (.../event_manager.php) (revision 11403) +++ branches/RC/core/kernel/event_manager.php (.../event_manager.php) (revision 11538) @@ -291,29 +291,64 @@ return true; } + /** + * Returns event names given in POST + * + * @return Array + */ + function _getEventsFromPost() + { + $events = $this->Application->GetVar('events'); + if ($events === false) { + return Array (); + } + + $ret = Array (); + foreach ($events as $prefix_special => $event_name) { + if (!$event_name) { + continue; + } + + if (is_array($event_name)) { + // HTML-input names like "events[prefix.special][event_name]", input value don't matter + $event_name = key($event_name); + $this->Application->SetVar($prefix_special . '_event', $event_name); + } + + // HTML-input names like "events[prefix.special]", input value is event name + $ret[$prefix_special] = $event_name; + } + + return $ret; + } + function ProcessRequest() { $this->processOpener(); // 1. get events from $_POST - $events = $this->Application->GetVar('events'); - if ($events === false) $events = Array(); + $events = $this->_getEventsFromPost(); + // 2. if nothing there, then try to find them in $_GET 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'])) { - $event_name = $this->Application->GetVar($prefix_special.'_event'); + $event_name = $this->Application->GetVar($prefix_special . '_event'); if ($event_name) { $events[$prefix_special] = $event_name; } } } + + // used ? $actions = $this->Application->GetVar('do'); if ($actions) { - list($prefix, $event_name) = explode('_', $actions); - $events[$prefix] = $event_name; + list ($prefix, $event_name) = explode('_', $actions); + if ($event_name) { + $events[$prefix] = $event_name; + } } } @@ -327,13 +362,6 @@ $this->Application->SetVar('all_passed', implode(',', $all_passed)); foreach ($events as $prefix_special => $event_name) { - if (!$event_name) continue; - if (is_array($event_name)) { - $event_name = key($event_name); - $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;