From 7e44dee903015399e221cdda52e540e75c2484f5 Mon Sep 17 00:00:00 2001 From: Frédéric Guillot Date: Sat, 30 Aug 2014 22:35:50 -0800 Subject: Move a task to another project --- app/Model/Acl.php | 1 + app/Model/Board.php | 2 +- app/Model/Task.php | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 54 insertions(+), 2 deletions(-) (limited to 'app/Model') diff --git a/app/Model/Acl.php b/app/Model/Acl.php index b2644686..23f6ff44 100644 --- a/app/Model/Acl.php +++ b/app/Model/Acl.php @@ -52,6 +52,7 @@ class Acl extends Base 'confirmremove', 'editdescription', 'savedescription', + 'move', ), ); diff --git a/app/Model/Board.php b/app/Model/Board.php index 74e29040..8fb30e70 100644 --- a/app/Model/Board.php +++ b/app/Model/Board.php @@ -35,7 +35,7 @@ class Board extends Base foreach ($positions as $value) { // We trigger events only for the selected task - if (! $this->task->move($value['task_id'], $value['column_id'], $value['position'], $value['task_id'] == $selected_task_id)) { + if (! $this->task->movePosition($value['task_id'], $value['column_id'], $value['position'], $value['task_id'] == $selected_task_id)) { $this->db->cancelTransaction(); return false; } diff --git a/app/Model/Task.php b/app/Model/Task.php index 09c77573..64f3b74c 100644 --- a/app/Model/Task.php +++ b/app/Model/Task.php @@ -545,7 +545,7 @@ class Task extends Base * @param boolean $trigger_events Flag to trigger events * @return boolean */ - public function move($task_id, $column_id, $position, $trigger_events = true) + public function movePosition($task_id, $column_id, $position, $trigger_events = true) { $this->event->clearTriggeredEvents(); @@ -558,6 +558,35 @@ class Task extends Base return $this->update($values, $trigger_events); } + /** + * Move a task to another project + * + * @access public + * @param integer $project_id Project id + * @param array $task Task data + * @return boolean + */ + public function moveToAnotherProject($project_id, array $task) + { + $values = array(); + + // Clear values (categories are different for each project) + $values['category_id'] = 0; + $values['owner_id'] = 0; + + // Check if the assigned user is allowed for the new project + if ($task['owner_id'] && $this->project->isUserAllowed($project_id, $task['owner_id'])) { + $values['owner_id'] = $task['owner_id']; + } + + // We use the first column of the new project + $values['column_id'] = $this->board->getFirstColumn($project_id); + $values['position'] = $this->countByColumnId($project_id, $values['column_id']); + $values['project_id'] = $project_id; + + return $this->db->table(self::TABLE)->eq('id', $task['id'])->update($values); + } + /** * Validate task creation * @@ -662,6 +691,28 @@ class Task extends Base ); } + /** + * Validate project modification + * + * @access public + * @param array $values Form values + * @return array $valid, $errors [0] = Success or not, [1] = List of errors + */ + public function validateProjectModification(array $values) + { + $v = new Validator($values, array( + new Validators\Required('id', t('The id is required')), + new Validators\Integer('id', t('This value must be an integer')), + new Validators\Required('project_id', t('The project is required')), + new Validators\Integer('project_id', t('This value must be an integer')), + )); + + return array( + $v->execute(), + $v->getErrors() + ); + } + /** * Return a timestamp if the given date format is correct otherwise return 0 * -- cgit v1.2.3