Index: branches/RC/core/kernel/event_manager.php =================================================================== diff -u -r9298 -r9616 --- branches/RC/core/kernel/event_manager.php (.../event_manager.php) (revision 9298) +++ branches/RC/core/kernel/event_manager.php (.../event_manager.php) (revision 9616) @@ -99,10 +99,8 @@ function setQueryMap($prefix_special) { list($prefix) = explode('.', $prefix_special); - $query_map = $this->Application->getUnitOption($prefix, 'QueryString'); - if (!$query_map && preg_match('/(.*)-cdata/', $prefix)) { - $query_map = $this->Application->getUnitOption('cdata', 'QueryString'); - } + + $query_map = $this->getQueryMap($prefix); if ($query_map) { $this->queryMaps[$prefix_special] = $query_map; } @@ -116,6 +114,27 @@ } /** + * Returns QueryMap for requested unit config. In case if unit config is a clone, then get parent item's (from prefix) config to create clone + * + * @param string $prefix + * @return Array + */ + function getQueryMap($prefix) + { + $query_map = $this->Application->getUnitOption($prefix, 'QueryString'); + if (!$query_map) { + if (preg_match('/(.*?)-(.*)/', $prefix, $regs)) { + // #prefix - format for configs, that are only cloned & optionally used for hooking (without # is old format) + $prefix = $this->Application->UnitConfigReader->prefixRegistred('#'.$regs[2]) ? '#'.$regs[2] : $regs[2]; + + return $this->Application->getUnitOption($prefix, 'QueryString'); + } + } + + return $query_map; + } + + /** * Registers new regular event * * @param string $short_name name to be used to store last maintenace run info @@ -281,6 +300,13 @@ $event_handler =& $this->Application->recallObject($event->Prefix.'_EventHandler'); /* @var $event_handler kEventHandler */ + + if (preg_match('/(.*?)-(.*)/', $event->Prefix, $regs)) { + // this is event from cloned config -> load parent config to create valid clone + $this->Application->UnitConfigReader->loadConfig($regs[1]); + $this->Application->HandleEvent( new kEvent($regs[1].':OnAfterConfigRead') ); + } + $event->setEventParam('top_prefix', $this->Application->GetTopmostPrefix($event->Prefix, true)); if (($this->Application->RecallVar('user_id') == -1) || $event_handler->CheckPermission($event)) { $this->HandleEvent($event);