Index: branches/5.3.x/core/kernel/event_handler.php =================================================================== diff -u -N -r15698 -r15964 --- branches/5.3.x/core/kernel/event_handler.php (.../event_handler.php) (revision 15698) +++ branches/5.3.x/core/kernel/event_handler.php (.../event_handler.php) (revision 15964) @@ -1,6 +1,6 @@ getAjaxSubEventName($event) != '' ) { + return 'wrapForAjax'; + } throw new Exception('Event "' . $event->Name . '" not implemented in class "' . get_class($this) . '"'); } /** + * Automatically wraps events in Ajax calls + * + * @param kEvent $event + * + * @return void + */ + protected function wrapForAjax(kEvent $event) + { + $ajax_form_helper = $this->Application->recallObject('AjaxFormHelper'); + /* @var $ajax_form_helper AjaxFormHelper */ + + $ajax_form_helper->transitEvent($event, $this->getAjaxSubEventName($event)); + } + + /** * Sample dummy event * * @param kEvent $event @@ -194,10 +212,39 @@ $perm_helper = $this->Application->recallObject('PermissionsHelper'); /* @var $perm_helper kPermissionsHelper */ + if ( !isset($this->permMapping[$event->Name]) ) { + $ajax_event_name = $this->getAjaxSubEventName($event); + + if ( $ajax_event_name != '' && isset($this->permMapping[$ajax_event_name]) ) { + $this->permMapping[$event->Name] = $this->permMapping[$ajax_event_name]; + } + } + return $perm_helper->CheckEventPermission($event, $this->permMapping); } /** + * Returns event name, that can be wrapped in AJAX response. + * + * @param kEvent $event Event. + * + * @return string + */ + protected function getAjaxSubEventName(kEvent $event) + { + if ( method_exists($this, $event->Name) ) { + return ''; + } + + if ( preg_match('/(.*)Ajax$/', $event->Name, $regs) && method_exists($this, $regs[1]) ) { + return $regs[1]; + } + + return ''; + } + + + /** * Occurs, when config was parsed, allows to change config data dynamically * * @param kEvent $event