diff options
author | emkael <emkael@tlen.pl> | 2016-06-07 15:17:49 +0200 |
---|---|---|
committer | emkael <emkael@tlen.pl> | 2016-06-10 11:46:41 +0200 |
commit | 823d71ced9b4947b1a5a5ade7245d521ed490061 (patch) | |
tree | a9a6c7cb0de74ff705e8320c284de423a698f5b5 /app/frontend/events | |
parent | df401552aac363655ab8f056a6c910a7611954d6 (diff) |
* renaming php directory
Diffstat (limited to 'app/frontend/events')
-rw-r--r-- | app/frontend/events/CalendarPreferenceEvents.php | 16 | ||||
-rw-r--r-- | app/frontend/events/EventModule.php | 53 | ||||
-rw-r--r-- | app/frontend/events/config.xml | 6 |
3 files changed, 75 insertions, 0 deletions
diff --git a/app/frontend/events/CalendarPreferenceEvents.php b/app/frontend/events/CalendarPreferenceEvents.php new file mode 100644 index 0000000..76fa071 --- /dev/null +++ b/app/frontend/events/CalendarPreferenceEvents.php @@ -0,0 +1,16 @@ +<?php + +Prado::using('Application.events.EventModule'); +Prado::using('Application.model.User'); +Prado::using('Application.facades.CalendarFacade'); + +class CalendarPreferenceEvents extends EventModule { + + public function onUserRegistered(User $user) { + $facade = CalendarFacade::getInstance(); + $facade->setPreferredCalendars($user, $facade->getDefaultPreference()); + } + +} + +?> diff --git a/app/frontend/events/EventModule.php b/app/frontend/events/EventModule.php new file mode 100644 index 0000000..6474523 --- /dev/null +++ b/app/frontend/events/EventModule.php @@ -0,0 +1,53 @@ +<?php + +class EventModule extends TModule { + + public function init($config) { + $reflection = new ReflectionClass($this); + foreach ($reflection->getMethods() as $method) { + if (is_a($method->class, get_class(), TRUE)) { + $eventPattern = []; + if (preg_match('/^on(.*)/', $method->name, $eventPattern)) { + $this->_registerEventHandler( + $eventPattern[1], + $method->getClosure($this) + ); + } + } + } + if (get_class() === get_called_class()) { + $directory = dirname(__FILE__); + foreach (scandir($directory) as $dirEntry) { + $classNameMatch = []; + if (preg_match('/(.*)\.php$/', $dirEntry, $classNameMatch)) { + $className = $classNameMatch[1]; + include_once($directory . DIRECTORY_SEPARATOR . $dirEntry); + if ($className != get_class() + && is_a($className, get_class(), TRUE)) { + $class = new $className(); + $class->init(NULL); + } + } + } + } + } + + protected static $_handlers = []; + private function _registerEventHandler($event, $handler) { + if (!isset(self::$_handlers[$event])) { + self::$_handlers[$event] = []; + } + self::$_handlers[$event][] = $handler; + } + + public function raiseApplicationEvent($event, ...$params) { + if (isset(self::$_handlers[$event])) { + foreach (self::$_handlers[$event] as $handler) { + call_user_func_array($handler, $params); + } + } + } + +} + +?> diff --git a/app/frontend/events/config.xml b/app/frontend/events/config.xml new file mode 100644 index 0000000..d1c1e3f --- /dev/null +++ b/app/frontend/events/config.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<configuration> + <modules> + <module id="events" class="Application.events.EventModule" /> + </modules> +</configuration> |