Merge pull-request #580
This commit is contained in:
@@ -34,6 +34,7 @@ use Pimple\Container;
|
||||
* @property \Model\Swimlane $swimlane
|
||||
* @property \Model\Task $task
|
||||
* @property \Model\TaskCreation $taskCreation
|
||||
* @property \Model\TaskDuplication $taskDuplication
|
||||
* @property \Model\TaskExport $taskExport
|
||||
* @property \Model\TaskFinder $taskFinder
|
||||
* @property \Model\TaskHistory $taskHistory
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -183,7 +183,7 @@ class Swimlane extends Base
|
||||
* @access public
|
||||
* @param integer $project_id
|
||||
* @param string $name
|
||||
* @return bool
|
||||
* @return integer|boolean
|
||||
*/
|
||||
public function create($project_id, $name)
|
||||
{
|
||||
@@ -412,6 +412,37 @@ class Swimlane extends Base
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Duplicate Swimlane to project
|
||||
*
|
||||
* @access public
|
||||
* @param integer $project_from Project Template
|
||||
* @param integer $project_to Project that receives the copy
|
||||
* @return integer|boolean
|
||||
*/
|
||||
|
||||
public function duplicate($project_from, $project_to)
|
||||
{
|
||||
$swimlanes = $this->getAll($project_from);
|
||||
|
||||
foreach ($swimlanes as $swimlane) {
|
||||
|
||||
unset($swimlane['id']);
|
||||
$swimlane['project_id'] = $project_to;
|
||||
|
||||
if (! $this->db->table(self::TABLE)->save($swimlane)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$default_swimlane = $this->getDefault($project_from);
|
||||
$default_swimlane['id'] = $project_to;
|
||||
|
||||
$this->updateDefault($default_swimlane);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate creation
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user