Index: branches/5.2.x/index.php
===================================================================
diff -u -N -r16410 -r16411
--- branches/5.2.x/index.php (.../index.php) (revision 16410)
+++ branches/5.2.x/index.php (.../index.php) (revision 16411)
@@ -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