diff options
author | Frederic Guillot <fred@kanboard.net> | 2015-01-04 21:14:57 -0500 |
---|---|---|
committer | Frederic Guillot <fred@kanboard.net> | 2015-01-04 21:14:57 -0500 |
commit | d1d04d6feeebeba2aea5333d7a4229fcec799f75 (patch) | |
tree | 51da4416973b2b60f3d50d5acddf2c4c258c1ff3 /app/Model/SubtaskExport.php | |
parent | 07b07c7697439dc0e6bdf87f65b4b3bd46f6bfc8 (diff) |
Add subtasks export and move export actions to a specific controller
Diffstat (limited to 'app/Model/SubtaskExport.php')
-rw-r--r-- | app/Model/SubtaskExport.php | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/app/Model/SubtaskExport.php b/app/Model/SubtaskExport.php new file mode 100644 index 00000000..50b028e2 --- /dev/null +++ b/app/Model/SubtaskExport.php @@ -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(); + } +} |