aboutsummaryrefslogtreecommitdiffstats
path: root/public/system/engine/router.php
diff options
context:
space:
mode:
Diffstat (limited to 'public/system/engine/router.php')
-rw-r--r--public/system/engine/router.php81
1 files changed, 81 insertions, 0 deletions
diff --git a/public/system/engine/router.php b/public/system/engine/router.php
new file mode 100644
index 0000000..650fb0d
--- /dev/null
+++ b/public/system/engine/router.php
@@ -0,0 +1,81 @@
+<?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
+*/
+
+/**
+* Router class
+*/
+final class Router {
+ private $registry;
+ private $pre_action = array();
+ private $error;
+
+ /**
+ * Constructor
+ *
+ * @param object $route
+ */
+ public function __construct($registry) {
+ $this->registry = $registry;
+ }
+
+ /**
+ *
+ *
+ * @param object $pre_action
+ */
+ public function addPreAction(Action $pre_action) {
+ $this->pre_action[] = $pre_action;
+ }
+
+ /**
+ *
+ *
+ * @param object $action
+ * @param object $error
+ */
+ public function dispatch(Action $action, Action $error) {
+ $this->error = $error;
+
+ foreach ($this->pre_action as $pre_action) {
+ $result = $this->execute($pre_action);
+
+ if ($result instanceof Action) {
+ $action = $result;
+
+ break;
+ }
+ }
+
+ while ($action instanceof Action) {
+ $action = $this->execute($action);
+ }
+ }
+
+ /**
+ *
+ *
+ * @param object $action
+ * @return object
+ */
+ private function execute(Action $action) {
+ $result = $action->execute($this->registry);
+
+ if ($result instanceof Action) {
+ return $result;
+ }
+
+ if ($result instanceof Exception) {
+ $action = $this->error;
+
+ $this->error = null;
+
+ return $action;
+ }
+ }
+} \ No newline at end of file