Duplicate attachments & external links during task duplication & importing
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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];
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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');
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user