diff options
Diffstat (limited to 'public/system/engine/event.php')
-rw-r--r-- | public/system/engine/event.php | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/public/system/engine/event.php b/public/system/engine/event.php new file mode 100644 index 0000000..d4f92ec --- /dev/null +++ b/public/system/engine/event.php @@ -0,0 +1,97 @@ +<?php +/** + * @package OpenCart + * @author Daniel Kerr + * @copyright Copyright (c) 2005 - 2017, OpenCart, Ltd. (https://www.opencart.com/) + * @license https://opensource.org/licenses/GPL-3.0 + * @link https://www.opencart.com +*/ + +/** +* Event class +* +* Event System Userguide +* +* https://github.com/opencart/opencart/wiki/Events-(script-notifications)-2.2.x.x +*/ +class Event { + protected $registry; + protected $data = array(); + + /** + * Constructor + * + * @param object $route + */ + public function __construct($registry) { + $this->registry = $registry; + } + + /** + * + * + * @param string $trigger + * @param object $action + * @param int $priority + */ + public function register($trigger, Action $action, $priority = 0) { + $this->data[] = array( + 'trigger' => $trigger, + 'action' => $action, + 'priority' => $priority + ); + + $sort_order = array(); + + foreach ($this->data as $key => $value) { + $sort_order[$key] = $value['priority']; + } + + array_multisort($sort_order, SORT_ASC, $this->data); + } + + /** + * + * + * @param string $event + * @param array $args + */ + public function trigger($event, array $args = array()) { + foreach ($this->data as $value) { + if (preg_match('/^' . str_replace(array('\*', '\?'), array('.*', '.'), preg_quote($value['trigger'], '/')) . '/', $event)) { + $result = $value['action']->execute($this->registry, $args); + + if (!is_null($result) && !($result instanceof Exception)) { + return $result; + } + } + } + } + + /** + * + * + * @param string $trigger + * @param string $route + */ + public function unregister($trigger, $route) { + foreach ($this->data as $key => $value) { + if ($trigger == $value['trigger'] && $value['action']->getId() == $route) { + unset($this->data[$key]); + } + } + } + + /** + * + * + * @param string $trigger + */ + public function clear($trigger) { + foreach ($this->data as $key => $value) { + if ($trigger == $value['trigger']) { + unset($this->data[$key]); + } + } + } +}
\ No newline at end of file |