diff options
author | Frederic Guillot <fred@kanboard.net> | 2015-02-07 14:19:19 -0500 |
---|---|---|
committer | Frederic Guillot <fred@kanboard.net> | 2015-02-07 14:19:19 -0500 |
commit | a6b3306072e910d5d51f87a5f5f6df95ecff3e5e (patch) | |
tree | a947d30c1c2245d3be4c04c9eba975768ecec2e0 /app/Model/ProjectDuplication.php | |
parent | a0f4343ef58ba09d8b74fd44d4e2bc9011c382ea (diff) | |
parent | 4bf6e6d5c4efe811f722aeccbc8dfa02426772ec (diff) |
Merge pull-request #580
Diffstat (limited to 'app/Model/ProjectDuplication.php')
-rw-r--r-- | app/Model/ProjectDuplication.php | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/app/Model/ProjectDuplication.php b/app/Model/ProjectDuplication.php index ef4558ba..b93cbee5 100644 --- a/app/Model/ProjectDuplication.php +++ b/app/Model/ProjectDuplication.php @@ -59,10 +59,11 @@ class ProjectDuplication extends Base /** * Clone a project with all settings * - * @param integer $project_id Project Id + * @param integer $project_id Project Id + * @param array $part_selection Selection of optional project parts to duplicate. Possible options: 'swimlane', 'action', 'category', 'task' * @return integer Cloned Project Id */ - public function duplicate($project_id) + public function duplicate($project_id, $part_selection = array('category', 'action')) { $this->db->startTransaction(); @@ -74,7 +75,14 @@ class ProjectDuplication extends Base return false; } - foreach (array('board', 'category', 'projectPermission', 'action') as $model) { + // Clone Columns, Categories, Permissions and Actions + $optional_parts = array('swimlane', 'action', 'category'); + foreach (array('board', 'category', 'projectPermission', 'action', 'swimlane') as $model) { + + // Skip if optional part has not been selected + if (in_array($model, $optional_parts) && ! in_array($model, $part_selection)) { + continue; + } if (! $this->$model->duplicate($project_id, $clone_project_id)) { $this->db->cancelTransaction(); @@ -82,8 +90,21 @@ class ProjectDuplication extends Base } } + $this->db->closeTransaction(); + //* Clone Tasks if in $part_selection + + if(in_array('task', $part_selection)) { + $tasks = $this->taskFinder->getAll($project_id); + + foreach ($tasks as $task) { + if (!$this->taskDuplication->duplicateToProject($task['id'], $clone_project_id)) { + return false; + } + } + } + return (int) $clone_project_id; } } |