diff options
author | Frédéric Guillot <fguillot@users.noreply.github.com> | 2014-03-19 21:49:39 -0400 |
---|---|---|
committer | Frédéric Guillot <fguillot@users.noreply.github.com> | 2014-03-19 21:49:39 -0400 |
commit | ab63ffafc565e75c73c27910abd465bebb09306e (patch) | |
tree | 795e09656cfaf3a2042b714dcc3850c9555dec72 /models/task.php | |
parent | 41dd9b2eff07434a3393b20dcd875e76ac3846b3 (diff) |
Task duplication
Diffstat (limited to 'models/task.php')
-rw-r--r-- | models/task.php | 214 |
1 files changed, 206 insertions, 8 deletions
diff --git a/models/task.php b/models/task.php index fe0f6350..cbe37feb 100644 --- a/models/task.php +++ b/models/task.php @@ -8,9 +8,34 @@ require_once __DIR__.'/comment.php'; use \SimpleValidator\Validator; use \SimpleValidator\Validators; +/** + * Task model + * + * @package model + * @author Frederic Guillot + */ class Task extends Base { + /** + * SQL table name + * + * @var string + */ const TABLE = 'tasks'; + + /** + * Task status + * + * @var integer + */ + const STATUS_OPEN = 1; + const STATUS_CLOSED = 0; + + /** + * Events + * + * @var string + */ const EVENT_MOVE_COLUMN = 'task.move.column'; const EVENT_MOVE_POSITION = 'task.move.position'; const EVENT_UPDATE = 'task.update'; @@ -18,6 +43,12 @@ class Task extends Base const EVENT_CLOSE = 'task.close'; const EVENT_OPEN = 'task.open'; + /** + * Get available colors + * + * @access public + * @return array + */ public function getColors() { return array( @@ -31,6 +62,14 @@ class Task extends Base ); } + /** + * Fetch one task + * + * @access public + * @param integer $task_id Task id + * @param boolean $more If true, fetch all related information + * @return array + */ public function getById($task_id, $more = false) { if ($more) { @@ -67,7 +106,15 @@ class Task extends Base } } - public function getAllByProjectId($project_id, array $status = array(1, 0)) + /** + * Get all tasks for a given project + * + * @access public + * @param integer $project_id Project id + * @param array $status List of status id + * @return array + */ + public function getAllByProjectId($project_id, array $status = array(self::STATUS_OPEN, self::STATUS_CLOSED)) { return $this->db->table(self::TABLE) ->columns( @@ -95,7 +142,15 @@ class Task extends Base ->findAll(); } - public function countByProjectId($project_id, $status = array(1, 0)) + /** + * Count all tasks for a given project and status + * + * @access public + * @param integer $project_id Project id + * @param array $status List of status id + * @return integer + */ + public function countByProjectId($project_id, array $status = array(self::STATUS_OPEN, self::STATUS_CLOSED)) { return $this->db ->table(self::TABLE) @@ -104,7 +159,16 @@ class Task extends Base ->count(); } - public function getAllByColumnId($project_id, $column_id, $status = array(1)) + /** + * Get all tasks for a given column + * + * @access public + * @param integer $project_id Project id + * @param integer $column_id Column id + * @param array $status List of status id + * @return array + */ + public function getAllByColumnId($project_id, $column_id, array $status = array(self::STATUS_OPEN)) { $tasks = $this->db ->table(self::TABLE) @@ -125,7 +189,16 @@ class Task extends Base return $tasks; } - public function countByColumnId($project_id, $column_id, $status = array(1)) + /** + * Count the number of tasks for a given column and status + * + * @access public + * @param integer $project_id Project id + * @param integer $column_id Column id + * @param array $status List of status id + * @return integer + */ + public function countByColumnId($project_id, $column_id, array $status = array(self::STATUS_OPEN)) { return $this->db ->table(self::TABLE) @@ -135,6 +208,55 @@ class Task extends Base ->count(); } + /** + * Duplicate a task + * + * @access public + * @param integer $task_id Task id + * @return boolean + */ + public function duplicate($task_id) + { + $this->db->startTransaction(); + + $boardModel = new Board($this->db, $this->event); + + // Get the original task + $task = $this->getById($task_id); + + // Cleanup data + unset($task['id']); + unset($task['date_completed']); + + // Assign new values + $task['date_creation'] = time(); + $task['is_active'] = 1; + $task['position'] = $this->countByColumnId($task['project_id'], $task['column_id']); + + // Save task + if (! $this->db->table(self::TABLE)->save($task)) { + $this->db->cancelTransaction(); + return false; + } + + $task_id = $this->db->getConnection()->getLastId(); + + $this->db->closeTransaction(); + + // Trigger events + $this->event->trigger(self::EVENT_CREATE, array('task_id' => $task_id) + $task); + + return $task_id; + } + + /** + * Duplicate a task to another project (always copy to the first column) + * + * @access public + * @param integer $task_id Task id + * @param integer $project_id Destination project id + * @return boolean + */ public function duplicateToAnotherProject($task_id, $project_id) { $this->db->startTransaction(); @@ -172,6 +294,13 @@ class Task extends Base return $task_id; } + /** + * Create a task + * + * @access public + * @param array $values Form values + * @return boolean + */ public function create(array $values) { $this->db->startTransaction(); @@ -204,6 +333,13 @@ class Task extends Base return $task_id; } + /** + * Update a task + * + * @access public + * @param array $values Form values + * @return boolean + */ public function update(array $values) { // Prepare data @@ -241,7 +377,13 @@ class Task extends Base return $result; } - // Mark a task closed + /** + * Mark a task closed + * + * @access public + * @param integer $task_id Task id + * @return boolean + */ public function close($task_id) { $result = $this->db @@ -259,7 +401,13 @@ class Task extends Base return $result; } - // Mark a task open + /** + * Mark a task open + * + * @access public + * @param integer $task_id Task id + * @return boolean + */ public function open($task_id) { $result = $this->db @@ -277,13 +425,27 @@ class Task extends Base return $result; } - // Remove a task + /** + * Remove a task + * + * @access public + * @param integer $task_id Task id + * @return boolean + */ public function remove($task_id) { return $this->db->table(self::TABLE)->eq('id', $task_id)->remove(); } - // Move a task to another column or to another position + /** + * Move a task to another column or to another position + * + * @access public + * @param integer $task_id Task id + * @param integer $column_id Column id + * @param integer $position Position (must be greater than 1) + * @return boolean + */ public function move($task_id, $column_id, $position) { return $this->update(array( @@ -293,6 +455,13 @@ class Task extends Base )); } + /** + * Validate task creation + * + * @access public + * @param array $values Form values + * @return array $valid, $errors [0] = Success or not, [1] = List of errors + */ public function validateCreation(array $values) { $v = new Validator($values, array( @@ -314,6 +483,13 @@ class Task extends Base ); } + /** + * Validate description creation + * + * @access public + * @param array $values Form values + * @return array $valid, $errors [0] = Success or not, [1] = List of errors + */ public function validateDescriptionCreation(array $values) { $v = new Validator($values, array( @@ -328,6 +504,13 @@ class Task extends Base ); } + /** + * Validate task modification + * + * @access public + * @param array $values Form values + * @return array $valid, $errors [0] = Success or not, [1] = List of errors + */ public function validateModification(array $values) { $v = new Validator($values, array( @@ -351,6 +534,13 @@ class Task extends Base ); } + /** + * Validate assignee change + * + * @access public + * @param array $values Form values + * @return array $valid, $errors [0] = Success or not, [1] = List of errors + */ public function validateAssigneeModification(array $values) { $v = new Validator($values, array( @@ -368,6 +558,14 @@ class Task extends Base ); } + /** + * Parse a date (different format for each locale) to a timestamp + * + * @access public + * @param string $value Date to parse + * @param string $format Date format + * @return integer + */ public function getTimestampFromDate($value, $format) { $date = \DateTime::createFromFormat($format, $value); |