Add subtasks export and move export actions to a specific controller
This commit is contained in:
@@ -50,7 +50,8 @@ class Acl extends Base
|
||||
'analytic' => '*',
|
||||
'board' => array('movecolumn', 'edit', 'update', 'add', 'remove'),
|
||||
'category' => '*',
|
||||
'project' => array('edit', 'update', 'exporttasks', 'exportdailyprojectsummary', 'share', 'integration', 'users', 'alloweverybody', 'allow', 'setowner', 'revoke', 'duplicate', 'disable', 'enable'),
|
||||
'export' => array('tasks', 'subtasks', 'summary'),
|
||||
'project' => array('edit', 'update', 'share', 'integration', 'users', 'alloweverybody', 'allow', 'setowner', 'revoke', 'duplicate', 'disable', 'enable'),
|
||||
'swimlane' => '*',
|
||||
);
|
||||
|
||||
@@ -179,7 +180,7 @@ class Acl extends Base
|
||||
|
||||
// Check project member permissions
|
||||
if ($this->isMemberAction($controller, $action)) {
|
||||
return $this->isMemberActionAllowed($project_id);
|
||||
return $project_id > 0 && $this->projectPermission->isMember($project_id, $this->userSession->getId());
|
||||
}
|
||||
|
||||
// Other applications actions are allowed
|
||||
@@ -188,11 +189,10 @@ class Acl extends Base
|
||||
|
||||
public function isManagerActionAllowed($project_id)
|
||||
{
|
||||
if ($this->userSession->isAdmin()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return $project_id > 0 && $this->projectPermission->isManager($project_id, $this->userSession->getId());
|
||||
}
|
||||
|
||||
public function isMemberActionAllowed($project_id)
|
||||
{
|
||||
return $project_id > 0 && $this->projectPermission->isMember($project_id, $this->userSession->getId());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,15 +58,11 @@ class SubTask extends Base
|
||||
*/
|
||||
public function getStatusList()
|
||||
{
|
||||
$status = array(
|
||||
return array(
|
||||
self::STATUS_TODO => t('Todo'),
|
||||
self::STATUS_INPROGRESS => t('In progress'),
|
||||
self::STATUS_DONE => t('Done'),
|
||||
);
|
||||
|
||||
asort($status);
|
||||
|
||||
return $status;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
119
app/Model/SubtaskExport.php
Normal file
119
app/Model/SubtaskExport.php
Normal file
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
|
||||
namespace Model;
|
||||
|
||||
/**
|
||||
* Subtask Export
|
||||
*
|
||||
* @package model
|
||||
* @author Frederic Guillot
|
||||
*/
|
||||
class SubtaskExport extends Base
|
||||
{
|
||||
/**
|
||||
* Subtask statuses
|
||||
*
|
||||
* @access private
|
||||
* @var array
|
||||
*/
|
||||
private $subtask_status = array();
|
||||
|
||||
/**
|
||||
* Fetch subtasks and return the prepared CSV
|
||||
*
|
||||
* @access public
|
||||
* @param integer $project_id Project id
|
||||
* @param mixed $from Start date (timestamp or user formatted date)
|
||||
* @param mixed $to End date (timestamp or user formatted date)
|
||||
* @return array
|
||||
*/
|
||||
public function export($project_id, $from, $to)
|
||||
{
|
||||
$this->subtask_status = $this->subTask->getStatusList();
|
||||
$subtasks = $this->getSubtasks($project_id, $from, $to);
|
||||
$results = array($this->getColumns());
|
||||
|
||||
foreach ($subtasks as $subtask) {
|
||||
$results[] = $this->format($subtask);
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get column titles
|
||||
*
|
||||
* @access public
|
||||
* @return string[]
|
||||
*/
|
||||
public function getColumns()
|
||||
{
|
||||
return array(
|
||||
e('Subtask Id'),
|
||||
e('Title'),
|
||||
e('Status'),
|
||||
e('Assignee'),
|
||||
e('Time estimated'),
|
||||
e('Time spent'),
|
||||
e('Task Id'),
|
||||
e('Task Title'),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Format the output of a subtask array
|
||||
*
|
||||
* @access public
|
||||
* @param array $subtask Subtask properties
|
||||
* @return array
|
||||
*/
|
||||
public function format(array $subtask)
|
||||
{
|
||||
$values = array();
|
||||
$values[] = $subtask['id'];
|
||||
$values[] = $subtask['title'];
|
||||
$values[] = $this->subtask_status[$subtask['status']];
|
||||
$values[] = $subtask['assignee_name'] ?: $subtask['assignee_username'];
|
||||
$values[] = $subtask['time_estimated'];
|
||||
$values[] = $subtask['time_spent'];
|
||||
$values[] = $subtask['task_id'];
|
||||
$values[] = $subtask['task_title'];
|
||||
|
||||
return $values;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all subtasks for a given project
|
||||
*
|
||||
* @access public
|
||||
* @param integer $task_id Task id
|
||||
* @param mixed $from Start date (timestamp or user formatted date)
|
||||
* @param mixed $to End date (timestamp or user formatted date)
|
||||
* @return array
|
||||
*/
|
||||
public function getSubtasks($project_id, $from, $to)
|
||||
{
|
||||
if (! is_numeric($from)) {
|
||||
$from = $this->dateParser->resetDateToMidnight($this->dateParser->getTimestamp($from));
|
||||
}
|
||||
|
||||
if (! is_numeric($to)) {
|
||||
$to = $this->dateParser->resetDateToMidnight(strtotime('+1 day', $this->dateParser->getTimestamp($to)));
|
||||
}
|
||||
|
||||
return $this->db->table(SubTask::TABLE)
|
||||
->eq('project_id', $project_id)
|
||||
->columns(
|
||||
SubTask::TABLE.'.*',
|
||||
User::TABLE.'.username AS assignee_username',
|
||||
User::TABLE.'.name AS assignee_name',
|
||||
Task::TABLE.'.title AS task_title'
|
||||
)
|
||||
->gte('date_creation', $from)
|
||||
->lte('date_creation', $to)
|
||||
->join(Task::TABLE, 'id', 'task_id')
|
||||
->join(User::TABLE, 'id', 'user_id')
|
||||
->asc(SubTask::TABLE.'.id')
|
||||
->findAll();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user