aboutsummaryrefslogtreecommitdiffstats
path: root/public/system/engine/event.php
diff options
context:
space:
mode:
Diffstat (limited to 'public/system/engine/event.php')
-rw-r--r--public/system/engine/event.php97
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