| | <?php |
| |
|
| | namespace Kanboard\Core\Action; |
| |
|
| | use Exception; |
| | use RuntimeException; |
| | use Kanboard\Core\Base; |
| | use Kanboard\Action\Base as ActionBase; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | class ActionManager extends Base |
| | { |
| | |
| | |
| | |
| | |
| | |
| | |
| | private $actions = array(); |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function register(ActionBase $action) |
| | { |
| | $this->actions[$action->getName()] = $action; |
| | return $this; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getAction($name) |
| | { |
| | if (isset($this->actions[$name])) { |
| | return $this->actions[$name]; |
| | } |
| |
|
| | throw new RuntimeException('Automatic Action Not Found: '.$name); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getAvailableActions() |
| | { |
| | $actions = array(); |
| |
|
| | foreach ($this->actions as $action) { |
| | if (count($action->getEvents()) > 0) { |
| | $actions[$action->getName()] = $action->getDescription(); |
| | } |
| | } |
| |
|
| | asort($actions); |
| |
|
| | return $actions; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getAvailableParameters(array $actions) |
| | { |
| | $params = array(); |
| |
|
| | foreach ($actions as $action) { |
| | try { |
| | $currentAction = $this->getAction($action['action_name']); |
| | $params[$currentAction->getName()] = $currentAction->getActionRequiredParameters(); |
| | } catch (Exception $e) { |
| | $this->logger->error(__METHOD__.': '.$e->getMessage()); |
| | } |
| | } |
| |
|
| | return $params; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function getCompatibleEvents($name) |
| | { |
| | $events = array(); |
| | $actionEvents = $this->getAction($name)->getEvents(); |
| |
|
| | foreach ($this->eventManager->getAll() as $event => $description) { |
| | if (in_array($event, $actionEvents)) { |
| | $events[$event] = $description; |
| | } |
| | } |
| |
|
| | return $events; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function attachEvents() |
| | { |
| | if ($this->userSession->isLogged()) { |
| | $actions = $this->actionModel->getAllByUser($this->userSession->getId()); |
| | } else { |
| | $actions = $this->actionModel->getAll(); |
| | } |
| |
|
| | foreach ($actions as $action) { |
| | try { |
| | $listener = clone $this->getAction($action['action_name']); |
| | $listener->setProjectId($action['project_id']); |
| |
|
| | foreach ($action['params'] as $param_name => $param_value) { |
| | $listener->setParam($param_name, $param_value); |
| | } |
| |
|
| | $this->dispatcher->addListener($action['event_name'], array($listener, 'execute')); |
| | } catch (Exception $e) { |
| | $this->logger->error(__METHOD__.': '.$e->getMessage()); |
| | } |
| | } |
| |
|
| | return $this; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | public function removeEvents() |
| | { |
| | foreach ($this->dispatcher->getListeners() as $eventName => $listeners) { |
| | foreach ($listeners as $listener) { |
| | if (is_array($listener) && $listener[0] instanceof ActionBase) { |
| | $this->dispatcher->removeListener($eventName, $listener); |
| | } |
| | } |
| | } |
| | } |
| | } |
| |
|