summaryrefslogtreecommitdiff
path: root/app/Model/Task.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/Model/Task.php')
-rw-r--r--app/Model/Task.php55
1 files changed, 35 insertions, 20 deletions
diff --git a/app/Model/Task.php b/app/Model/Task.php
index 64f3b74c..30c1781b 100644
--- a/app/Model/Task.php
+++ b/app/Model/Task.php
@@ -306,43 +306,54 @@ class Task extends Base
* 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
+ * @param array $task Task data
* @return boolean
*/
- public function duplicateToAnotherProject($task_id, $project_id)
+ public function duplicateToAnotherProject($project_id, array $task)
{
$this->db->startTransaction();
- // 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['owner_id'] = 0;
- $task['category_id'] = 0;
- $task['is_active'] = 1;
- $task['column_id'] = $this->board->getFirstColumn($project_id);
- $task['project_id'] = $project_id;
- $task['position'] = $this->countByColumnId($task['project_id'], $task['column_id']);
+ $values = array();
+ $values['title'] = $task['title'];
+ $values['description'] = $task['description'];
+ $values['date_creation'] = time();
+ $values['date_modification'] = $values['date_creation'];
+ $values['date_due'] = $task['date_due'];
+ $values['color_id'] = $task['color_id'];
+ $values['project_id'] = $project_id;
+ $values['column_id'] = $this->board->getFirstColumn($project_id);
+ $values['owner_id'] = 0;
+ $values['creator_id'] = $task['creator_id'];
+ $values['position'] = $this->countByColumnId($project_id, $values['column_id']);
+ $values['score'] = $task['score'];
+ $values['category_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'];
+ }
// Save task
- if (! $this->db->table(self::TABLE)->save($task)) {
+ if (! $this->db->table(self::TABLE)->save($values)) {
$this->db->cancelTransaction();
return false;
}
$task_id = $this->db->getConnection()->getLastId();
+ // Duplicate subtasks
+ if (! $this->subTask->duplicate($task['id'], $task_id)) {
+ $this->db->cancelTransaction();
+ return false;
+ }
+
$this->db->closeTransaction();
// Trigger events
- $this->event->trigger(self::EVENT_CREATE_UPDATE, array('task_id' => $task_id) + $task);
- $this->event->trigger(self::EVENT_CREATE, array('task_id' => $task_id) + $task);
+ $this->event->trigger(self::EVENT_CREATE_UPDATE, array('task_id' => $task_id) + $values);
+ $this->event->trigger(self::EVENT_CREATE, array('task_id' => $task_id) + $values);
return $task_id;
}
@@ -584,7 +595,11 @@ class Task extends Base
$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);
+ if ($this->db->table(self::TABLE)->eq('id', $task['id'])->update($values)) {
+ return $task['id'];
+ }
+
+ return false;
}
/**