summaryrefslogtreecommitdiff
path: root/app/frontend/events/EventModule.php
diff options
context:
space:
mode:
authoremkael <emkael@tlen.pl>2016-06-07 15:17:49 +0200
committeremkael <emkael@tlen.pl>2016-06-10 11:46:41 +0200
commit823d71ced9b4947b1a5a5ade7245d521ed490061 (patch)
treea9a6c7cb0de74ff705e8320c284de423a698f5b5 /app/frontend/events/EventModule.php
parentdf401552aac363655ab8f056a6c910a7611954d6 (diff)
* renaming php directory
Diffstat (limited to 'app/frontend/events/EventModule.php')
-rw-r--r--app/frontend/events/EventModule.php53
1 files changed, 53 insertions, 0 deletions
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);
+ }
+ }
+ }
+
+}
+
+?>