diff options
Diffstat (limited to 'actions/Base.php')
-rw-r--r-- | actions/Base.php | 55 |
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; + } +} |