summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBusfreak <Busfreak@users.noreply.github.com>2016-05-12 00:26:44 +0200
committerFrédéric Guillot <fred@kanboard.net>2016-05-11 18:26:44 -0400
commit58ccf9f6929512bc5ccba16279eacde3e9dc537e (patch)
tree08f2a144cef03cfa8232c1b374684598a8be781b
parent754b2bf1f0f833464c19c96c82bdc70d4d2d9c77 (diff)
Duplicate project metadata when duplicating project (#2074)
-rw-r--r--app/Model/ProjectDuplication.php4
-rw-r--r--app/Model/ProjectMetadata.php19
-rw-r--r--app/Template/project/duplicate.php1
-rw-r--r--tests/units/Model/ProjectDuplicationTest.php4
4 files changed, 24 insertions, 4 deletions
diff --git a/app/Model/ProjectDuplication.php b/app/Model/ProjectDuplication.php
index 9c5f80ad..79011258 100644
--- a/app/Model/ProjectDuplication.php
+++ b/app/Model/ProjectDuplication.php
@@ -21,7 +21,7 @@ class ProjectDuplication extends Base
*/
public function getOptionalSelection()
{
- return array('category', 'projectPermission', 'action', 'swimlane', 'task');
+ return array('category', 'projectPermission', 'action', 'swimlane', 'task', 'projectMetadata');
}
/**
@@ -32,7 +32,7 @@ class ProjectDuplication extends Base
*/
public function getPossibleSelection()
{
- return array('board', 'category', 'projectPermission', 'action', 'swimlane', 'task');
+ return array('board', 'category', 'projectPermission', 'action', 'swimlane', 'task', 'projectMetadata');
}
/**
diff --git a/app/Model/ProjectMetadata.php b/app/Model/ProjectMetadata.php
index 85498053..256f5e1f 100644
--- a/app/Model/ProjectMetadata.php
+++ b/app/Model/ProjectMetadata.php
@@ -27,4 +27,23 @@ class ProjectMetadata extends Metadata
{
return 'project_id';
}
+
+ /**
+ * Helper method to duplicate all metadata to another project
+ *
+ * @access public
+ * @param integer $src_project_id
+ * @param integer $dst_project_id
+ * @return boolean
+ */
+ public function duplicate($src_project_id, $dst_project_id)
+ {
+ $metadata = $this->getAll($src_project_id);
+
+ if (! $this->save($dst_project_id, $metadata)) {
+ return false;
+ }
+
+ return true;
+ }
}
diff --git a/app/Template/project/duplicate.php b/app/Template/project/duplicate.php
index 7cfa8969..e856ec80 100644
--- a/app/Template/project/duplicate.php
+++ b/app/Template/project/duplicate.php
@@ -18,6 +18,7 @@
<?= $this->form->checkbox('action', t('Actions'), 1, true) ?>
<?= $this->form->checkbox('swimlane', t('Swimlanes'), 1, false) ?>
<?= $this->form->checkbox('task', t('Tasks'), 1, false) ?>
+ <?= $this->form->checkbox('projectMetadata', t('Metadata'), 1, false) ?>
<div class="form-actions">
<button type="submit" class="btn btn-red"><?= t('Duplicate') ?></button>
diff --git a/tests/units/Model/ProjectDuplicationTest.php b/tests/units/Model/ProjectDuplicationTest.php
index ee5b4ce4..14db80bf 100644
--- a/tests/units/Model/ProjectDuplicationTest.php
+++ b/tests/units/Model/ProjectDuplicationTest.php
@@ -22,8 +22,8 @@ class ProjectDuplicationTest extends Base
public function testGetSelections()
{
$projectDuplicationModel = new ProjectDuplication($this->container);
- $this->assertCount(5, $projectDuplicationModel->getOptionalSelection());
- $this->assertCount(6, $projectDuplicationModel->getPossibleSelection());
+ $this->assertCount(6, $projectDuplicationModel->getOptionalSelection());
+ $this->assertCount(7, $projectDuplicationModel->getPossibleSelection());
}
public function testGetClonedProjectName()