diff options
Diffstat (limited to 'controllers')
-rw-r--r-- | controllers/action.php | 140 | ||||
-rw-r--r-- | controllers/app.php | 2 | ||||
-rw-r--r-- | controllers/base.php | 51 | ||||
-rw-r--r-- | controllers/board.php | 2 | ||||
-rw-r--r-- | controllers/config.php | 2 | ||||
-rw-r--r-- | controllers/project.php | 2 | ||||
-rw-r--r-- | controllers/task.php | 2 | ||||
-rw-r--r-- | controllers/user.php | 2 |
8 files changed, 164 insertions, 39 deletions
diff --git a/controllers/action.php b/controllers/action.php new file mode 100644 index 00000000..3ee44364 --- /dev/null +++ b/controllers/action.php @@ -0,0 +1,140 @@ +<?php + +namespace Controller; + +require_once __DIR__.'/Base.php'; + +/** + * Automatic actions management + * + * @package controllers + * @author Frederic Guillot + */ +class Action extends Base +{ + /** + * List of automatic actions for a given project + * + * @access public + */ + public function index() + { + $project_id = $this->request->getIntegerParam('project_id'); + $project = $this->project->getById($project_id); + + if (! $project) { + $this->session->flashError(t('Project not found.')); + $this->response->redirect('?controller=project'); + } + + $this->response->html($this->template->layout('action_index', array( + 'values' => array('project_id' => $project['id']), + 'project' => $project, + 'actions' => $this->action->getAllByProject($project['id']), + 'available_actions' => $this->action->getAvailableActions(), + 'available_events' => $this->action->getAvailableEvents(), + 'available_params' => $this->action->getAllActionParameters(), + 'columns_list' => $this->board->getColumnsList($project['id']), + 'users_list' => $this->project->getUsersList($project['id'], false), + 'projects_list' => $this->project->getList(false), + 'menu' => 'projects', + 'title' => t('Automatic actions') + ))); + } + + /** + * Define action parameters (step 2) + * + * @access public + */ + public function params() + { + $project_id = $this->request->getIntegerParam('project_id'); + $project = $this->project->getById($project_id); + + if (! $project) { + $this->session->flashError(t('Project not found.')); + $this->response->redirect('?controller=project'); + } + + $values = $this->request->getValues(); + $action = $this->action->load($values['action_name'], $values['project_id']); + + $this->response->html($this->template->layout('action_params', array( + 'values' => $values, + 'action_params' => $action->getActionRequiredParameters(), + 'columns_list' => $this->board->getColumnsList($project['id']), + 'users_list' => $this->project->getUsersList($project['id'], false), + 'projects_list' => $this->project->getList(false), + 'project' => $project, + 'menu' => 'projects', + 'title' => t('Automatic actions') + ))); + } + + /** + * Create a new action (last step) + * + * @access public + */ + public function create() + { + $project_id = $this->request->getIntegerParam('project_id'); + $project = $this->project->getById($project_id); + + if (! $project) { + $this->session->flashError(t('Project not found.')); + $this->response->redirect('?controller=project'); + } + + $values = $this->request->getValues(); + + list($valid, $errors) = $this->action->validateCreation($values); + + if ($valid) { + + if ($this->action->create($values)) { + $this->session->flash(t('Your automatic action have been created successfully.')); + } + else { + $this->session->flashError(t('Unable to create your automatic action.')); + } + } + + $this->response->redirect('?controller=action&action=index&project_id='.$project['id']); + } + + /** + * Confirmation dialog before removing an action + * + * @access public + */ + public function confirm() + { + $this->response->html($this->template->layout('action_remove', array( + 'action' => $this->action->getById($this->request->getIntegerParam('action_id')), + 'available_events' => $this->action->getAvailableEvents(), + 'available_actions' => $this->action->getAvailableActions(), + 'menu' => 'projects', + 'title' => t('Remove an action') + ))); + } + + /** + * Remove an action + * + * @access public + */ + public function remove() + { + $action = $this->action->getById($this->request->getIntegerParam('action_id')); + + if ($action && $this->action->remove($action['id'])) { + $this->session->flash(t('Action removed successfully.')); + } else { + $this->session->flashError(t('Unable to remove this action.')); + } + + $this->response->redirect('?controller=action&action=index&project_id='.$action['project_id']); + } +} diff --git a/controllers/app.php b/controllers/app.php index 981abbbe..633433fc 100644 --- a/controllers/app.php +++ b/controllers/app.php @@ -2,6 +2,8 @@ namespace Controller; +require_once __DIR__.'/Base.php'; + class App extends Base { public function index() diff --git a/controllers/base.php b/controllers/base.php index 6dc9c0be..dd7c0642 100644 --- a/controllers/base.php +++ b/controllers/base.php @@ -2,48 +2,18 @@ namespace Controller; -require __DIR__.'/../lib/request.php'; -require __DIR__.'/../lib/response.php'; -require __DIR__.'/../lib/session.php'; -require __DIR__.'/../lib/template.php'; -require __DIR__.'/../lib/helper.php'; -require __DIR__.'/../lib/translator.php'; -require __DIR__.'/../models/base.php'; -require __DIR__.'/../models/acl.php'; -require __DIR__.'/../models/config.php'; -require __DIR__.'/../models/user.php'; -require __DIR__.'/../models/project.php'; -require __DIR__.'/../models/task.php'; -require __DIR__.'/../models/board.php'; -require __DIR__.'/../models/comment.php'; - abstract class Base { - protected $request; - protected $response; - protected $session; - protected $template; - protected $user; - protected $project; - protected $task; - protected $board; - protected $config; - protected $acl; - protected $comment; - - public function __construct() + public function __construct(\Core\Registry $registry) { - $this->request = new \Request; - $this->response = new \Response; - $this->session = new \Session; - $this->template = new \Template; - $this->config = new \Model\Config; - $this->user = new \Model\User; - $this->project = new \Model\Project; - $this->task = new \Model\Task; - $this->board = new \Model\Board; - $this->acl = new \Model\Acl; - $this->comment = new \Model\Comment; + $this->acl = $registry->acl; + $this->action = $registry->action; + $this->board = $registry->board; + $this->config = $registry->config; + $this->project = $registry->project; + $this->task = $registry->task; + $this->user = $registry->user; + $this->comment = $registry->comment; } public function beforeAction($controller, $action) @@ -74,6 +44,9 @@ abstract class Base if (! $this->acl->isPageAccessAllowed($controller, $action)) { $this->response->redirect('?controller=user&action=forbidden'); } + + // Attach events for automatic actions + $this->action->attachEvents(); } public function checkProjectPermissions($project_id) diff --git a/controllers/board.php b/controllers/board.php index 13714b3c..9cdc4386 100644 --- a/controllers/board.php +++ b/controllers/board.php @@ -2,6 +2,8 @@ namespace Controller; +require_once __DIR__.'/Base.php'; + class Board extends Base { // Change a task assignee directly from the board diff --git a/controllers/config.php b/controllers/config.php index 064fa06d..c4880b4a 100644 --- a/controllers/config.php +++ b/controllers/config.php @@ -2,6 +2,8 @@ namespace Controller; +require_once __DIR__.'/Base.php'; + class Config extends Base { // Settings page diff --git a/controllers/project.php b/controllers/project.php index 8d8584bc..8b232e94 100644 --- a/controllers/project.php +++ b/controllers/project.php @@ -2,6 +2,8 @@ namespace Controller; +require_once __DIR__.'/Base.php'; + class Project extends Base { // Display access forbidden page diff --git a/controllers/task.php b/controllers/task.php index fba4d4f5..05dd935e 100644 --- a/controllers/task.php +++ b/controllers/task.php @@ -2,6 +2,8 @@ namespace Controller; +require_once __DIR__.'/Base.php'; + class Task extends Base { // Webhook to create a task (useful for external software) diff --git a/controllers/user.php b/controllers/user.php index 10d3ad21..700e5fae 100644 --- a/controllers/user.php +++ b/controllers/user.php @@ -2,6 +2,8 @@ namespace Controller; +require_once __DIR__.'/Base.php'; + class User extends Base { // Display access forbidden page |