Duplicate attachments & external links during task duplication & importing

This commit is contained in:
mundry
2023-03-25 03:48:32 +01:00
committed by GitHub
parent 39d78cf424
commit 59a4c7f73b
6 changed files with 62 additions and 4 deletions

View File

@@ -199,10 +199,15 @@ abstract class FileModel extends Base
$this->fireDestructionEvent($file_id); $this->fireDestructionEvent($file_id);
$file = $this->getById($file_id); $file = $this->getById($file_id);
$this->objectStorage->remove($file['path']);
if ($file['is_image'] == 1) { // Only remove files from disk attached to a single task.
$this->objectStorage->remove($this->getThumbnailPath($file['path'])); $multiple_tasks_count = $this->db->table($this->getTable())->eq('path', $file['path'])->count();
if ($multiple_tasks_count === 1) {
$this->objectStorage->remove($file['path']);
if ($file['is_image'] == 1) {
$this->objectStorage->remove($this->getThumbnailPath($file['path']));
}
} }
return $this->db->table($this->getTable())->eq('id', $file['id'])->remove(); return $this->db->table($this->getTable())->eq('id', $file['id'])->remove();

View File

@@ -31,6 +31,24 @@ class TaskProjectDuplicationModel extends TaskDuplicationModel
if ($new_task_id !== false) { if ($new_task_id !== false) {
$this->tagDuplicationModel->duplicateTaskTagsToAnotherProject($task_id, $new_task_id, $project_id); $this->tagDuplicationModel->duplicateTaskTagsToAnotherProject($task_id, $new_task_id, $project_id);
$this->taskLinkModel->create($new_task_id, $task_id, 4); $this->taskLinkModel->create($new_task_id, $task_id, 4);
$attachments = $this->taskFileModel->getAll($task_id);
$externalLinks = $this->taskExternalLinkModel->getAll($task_id);
foreach ($attachments as $attachment) {
$this->taskFileModel->create($new_task_id, $attachment['name'], $attachment['path'], $attachment['size']);
}
foreach ($externalLinks as $externalLink) {
$this->taskExternalLinkModel->create([
'task_id' => $new_task_id,
'creator_id' => $externalLink['creator_id'],
'dependency' => $externalLink['dependency'],
'title' => $externalLink['title'],
'link_type' => $externalLink['link_type'],
'url' => $externalLink['url'],
]);
}
} }
$hook_values = [ 'source_task_id' => $task_id, 'destination_task_id' => $new_task_id]; $hook_values = [ 'source_task_id' => $task_id, 'destination_task_id' => $new_task_id];

View File

@@ -13,6 +13,12 @@ class TaskDuplicateAnotherProjectTest extends Base
{ {
public function testSuccess() public function testSuccess()
{ {
$this->container['externalLinkManager'] = $this
->getMockBuilder('Kanboard\Core\ExternalLink\ExternalLinkManager')
->setConstructorArgs(array($this->container))
->setMethods(['push'])
->getMock();
$projectModel = new ProjectModel($this->container); $projectModel = new ProjectModel($this->container);
$taskCreationModel = new TaskCreationModel($this->container); $taskCreationModel = new TaskCreationModel($this->container);
$taskFinderModel = new TaskFinderModel($this->container); $taskFinderModel = new TaskFinderModel($this->container);

View File

@@ -498,6 +498,12 @@ class ProjectDuplicationModelTest extends Base
public function testCloneProjectWithTasks() public function testCloneProjectWithTasks()
{ {
$this->container['externalLinkManager'] = $this
->getMockBuilder('Kanboard\Core\ExternalLink\ExternalLinkManager')
->setConstructorArgs(array($this->container))
->setMethods(['push'])
->getMock();
$projectModel = new ProjectModel($this->container); $projectModel = new ProjectModel($this->container);
$projectDuplicationModel = new ProjectDuplicationModel($this->container); $projectDuplicationModel = new ProjectDuplicationModel($this->container);
$taskCreationModel = new TaskCreationModel($this->container); $taskCreationModel = new TaskCreationModel($this->container);
@@ -522,6 +528,12 @@ class ProjectDuplicationModelTest extends Base
public function testCloneProjectWithSwimlanesAndTasks() public function testCloneProjectWithSwimlanesAndTasks()
{ {
$this->container['externalLinkManager'] = $this
->getMockBuilder('Kanboard\Core\ExternalLink\ExternalLinkManager')
->setConstructorArgs(array($this->container))
->setMethods(['push'])
->getMock();
$projectModel = new ProjectModel($this->container); $projectModel = new ProjectModel($this->container);
$projectDuplicationModel = new ProjectDuplicationModel($this->container); $projectDuplicationModel = new ProjectDuplicationModel($this->container);
$swimlaneModel = new SwimlaneModel($this->container); $swimlaneModel = new SwimlaneModel($this->container);
@@ -572,6 +584,12 @@ class ProjectDuplicationModelTest extends Base
public function testCloneProjectWithTags() public function testCloneProjectWithTags()
{ {
$this->container['externalLinkManager'] = $this
->getMockBuilder('Kanboard\Core\ExternalLink\ExternalLinkManager')
->setConstructorArgs(array($this->container))
->setMethods(['push'])
->getMock();
$projectModel = new ProjectModel($this->container); $projectModel = new ProjectModel($this->container);
$projectDuplicationModel = new ProjectDuplicationModel($this->container); $projectDuplicationModel = new ProjectDuplicationModel($this->container);
$taskCreationModel = new TaskCreationModel($this->container); $taskCreationModel = new TaskCreationModel($this->container);

View File

@@ -435,7 +435,7 @@ class TaskFileModelTest extends Base
$this->assertEquals(2, $fileModel->create(1, 'test', 'tmp/foo', 10)); $this->assertEquals(2, $fileModel->create(1, 'test', 'tmp/foo', 10));
$this->container['objectStorage'] $this->container['objectStorage']
->expects($this->exactly(2)) ->expects($this->exactly(1))
->method('remove') ->method('remove')
->with('tmp/foo'); ->with('tmp/foo');

View File

@@ -17,6 +17,17 @@ use Kanboard\Model\UserModel;
class TaskProjectDuplicationModelTest extends Base class TaskProjectDuplicationModelTest extends Base
{ {
protected function setUp(): void
{
parent::setUp();
$this->container['externalLinkManager'] = $this
->getMockBuilder('Kanboard\Core\ExternalLink\ExternalLinkManager')
->setConstructorArgs(array($this->container))
->setMethods(['push'])
->getMock();
}
public function testDuplicateAnotherProject() public function testDuplicateAnotherProject()
{ {
$taskProjectDuplicationModel = new TaskProjectDuplicationModel($this->container); $taskProjectDuplicationModel = new TaskProjectDuplicationModel($this->container);