Add option to clone filters on project duplication

* Fixed missing metadata option from project "create from"
* Added option to clone project custom filters
* Added append option to custom field tests
* Added a test that uses the "append" option
* Fixed disabled swimlane duplication error with Postgresql
This commit is contained in:
Rafael de Camargo
2019-07-17 18:32:16 -03:00
committed by Frédéric Guillot
parent d3be738d4f
commit c250f3b1b8
7 changed files with 95 additions and 3 deletions

View File

@@ -101,4 +101,39 @@ class CustomFilterModel extends Base
{
return $this->db->table(self::TABLE)->eq('id', $filter_id)->remove();
}
/**
* Duplicate custom filters from a project to another one, must be executed inside a transaction
*
* @param integer $src_project_id Source project id
* @param integer $dst_project_id Destination project id
* @return boolean
*/
public function duplicate($src_project_id, $dst_project_id)
{
$filters = $this->db
->table(self::TABLE)
->columns(
self::TABLE.'.user_id',
self::TABLE.'.filter',
self::TABLE.'.name',
self::TABLE.'.is_shared',
self::TABLE.'.append'
)
->eq('project_id', $src_project_id)
->findAll();
foreach ($filters as $filter) {
$filter['project_id'] = $dst_project_id;
// Avoid SQL error with Postgres
$filter['is_shared'] = $filter['is_shared'] ?: 0;
$filter['append'] = $filter['append'] ?: 0;
if (! $this->db->table(self::TABLE)->save($filter)) {
return false;
}
}
return true;
}
}

View File

@@ -28,6 +28,7 @@ class ProjectDuplicationModel extends Base
'projectPermissionModel',
'actionModel',
'tagDuplicationModel',
'customFilterModel',
'projectMetadataModel',
'projectTaskDuplicationModel',
);
@@ -50,6 +51,7 @@ class ProjectDuplicationModel extends Base
'actionModel',
'swimlaneModel',
'tagDuplicationModel',
'customFilterModel',
'projectMetadataModel',
'projectTaskDuplicationModel',
);

View File

@@ -443,7 +443,7 @@ class SwimlaneModel extends Base
'name' => $swimlane['name'],
'description' => $swimlane['description'],
'position' => $swimlane['position'],
'is_active' => $swimlane['is_active'],
'is_active' => $swimlane['is_active'] ? self::ACTIVE : self::INACTIVE, // Avoid SQL error with Postgres
'project_id' => $projectDstId,
);

View File

@@ -30,6 +30,8 @@
<?= $this->form->checkbox('categoryModel', t('Categories'), 1, true) ?>
<?= $this->form->checkbox('tagDuplicationModel', t('Tags'), 1, true) ?>
<?= $this->form->checkbox('actionModel', t('Actions'), 1, true) ?>
<?= $this->form->checkbox('customFilterModel', t('Custom filters'), 1, true) ?>
<?= $this->form->checkbox('projectMetadataModel', t('Metadata'), 1, false) ?>
<?= $this->form->checkbox('projectTaskDuplicationModel', t('Tasks'), 1, false) ?>
</div>

View File

@@ -18,6 +18,7 @@
<?= $this->form->checkbox('categoryModel', t('Categories'), 1, true) ?>
<?= $this->form->checkbox('tagDuplicationModel', t('Tags'), 1, true) ?>
<?= $this->form->checkbox('actionModel', t('Actions'), 1, true) ?>
<?= $this->form->checkbox('customFilterModel', t('Custom filters'), 1, true) ?>
<?= $this->form->checkbox('projectMetadataModel', t('Metadata'), 1, false) ?>
<?= $this->form->checkbox('projectTaskDuplicationModel', t('Tasks'), 1, false) ?>