Automatic actions

This commit is contained in:
Frédéric Guillot
2014-03-09 23:21:23 -04:00
parent 7bd4697dfc
commit 7749b8ed56
49 changed files with 1678 additions and 190 deletions

140
controllers/action.php Normal file
View File

@@ -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']);
}
}

View File

@@ -2,6 +2,8 @@
namespace Controller;
require_once __DIR__.'/Base.php';
class App extends Base
{
public function index()

View File

@@ -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)

View File

@@ -2,6 +2,8 @@
namespace Controller;
require_once __DIR__.'/Base.php';
class Board extends Base
{
// Change a task assignee directly from the board

View File

@@ -2,6 +2,8 @@
namespace Controller;
require_once __DIR__.'/Base.php';
class Config extends Base
{
// Settings page

View File

@@ -2,6 +2,8 @@
namespace Controller;
require_once __DIR__.'/Base.php';
class Project extends Base
{
// Display access forbidden page

View File

@@ -2,6 +2,8 @@
namespace Controller;
require_once __DIR__.'/Base.php';
class Task extends Base
{
// Webhook to create a task (useful for external software)

View File

@@ -2,6 +2,8 @@
namespace Controller;
require_once __DIR__.'/Base.php';
class User extends Base
{
// Display access forbidden page