summaryrefslogtreecommitdiff
path: root/actions/Base.php
diff options
context:
space:
mode:
Diffstat (limited to 'actions/Base.php')
-rw-r--r--actions/Base.php55
1 files changed, 55 insertions, 0 deletions
diff --git a/actions/Base.php b/actions/Base.php
new file mode 100644
index 00000000..bb9b8bc1
--- /dev/null
+++ b/actions/Base.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace Action;
+
+abstract class Base implements \Core\Listener
+{
+ private $project_id = 0;
+ private $params = array();
+
+ abstract public function doAction(array $data);
+ abstract public function getActionRequiredParameters();
+ abstract public function getEventRequiredParameters();
+
+ public function __construct($project_id)
+ {
+ $this->project_id = $project_id;
+ }
+
+ public function setParam($name, $value)
+ {
+ $this->params[$name] = $value;
+ }
+
+ public function getParam($name, $default_value = null)
+ {
+ return isset($this->params[$name]) ? $this->params[$name] : $default_value;
+ }
+
+ public function isExecutable(array $data)
+ {
+ if (isset($data['project_id']) && $data['project_id'] == $this->project_id && $this->hasRequiredParameters($data)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ public function hasRequiredParameters(array $data)
+ {
+ foreach ($this->getEventRequiredParameters() as $parameter) {
+ if (! isset($data[$parameter])) return false;
+ }
+
+ return true;
+ }
+
+ public function execute(array $data)
+ {
+ if ($this->isExecutable($data)) {
+ return $this->doAction($data);
+ }
+
+ return false;
+ }
+}