From 0434a96c3ac00213657db005e4bf247a2c1acca7 Mon Sep 17 00:00:00 2001 From: kolaente Date: Mon, 12 Aug 2024 15:53:51 +0200 Subject: [PATCH] fix(views): do not create task bucket and task position entries when duplicating a project Resolves https://github.com/go-vikunja/vikunja/issues/297 Resolves https://community.vikunja.io/t/duplicating-a-board-puts-the-buckets-in-the-original-board/2579 (cherry picked from commit b83448b7a6d78fea07e3e88af45a468b7d5b968b) --- pkg/models/project_duplicate.go | 7 ++++--- pkg/models/project_view.go | 26 ++++++++++++++++---------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/pkg/models/project_duplicate.go b/pkg/models/project_duplicate.go index 61cb36c0d..8c6349cb7 100644 --- a/pkg/models/project_duplicate.go +++ b/pkg/models/project_duplicate.go @@ -180,7 +180,7 @@ func duplicateViews(s *xorm.Session, pd *ProjectDuplicate, doer web.Auth, taskMa view.ID = 0 view.ProjectID = pd.Project.ID - err = createProjectView(s, view, doer, false) + err = createProjectView(s, view, doer, false, false) if err != nil { return } @@ -225,8 +225,9 @@ func duplicateViews(s *xorm.Session, pd *ProjectDuplicate, doer web.Auth, taskMa taskBuckets := []*TaskBucket{} for _, tb := range oldTaskBuckets { taskBuckets = append(taskBuckets, &TaskBucket{ - BucketID: bucketMap[tb.BucketID], - TaskID: taskMap[tb.TaskID], + BucketID: bucketMap[tb.BucketID], + TaskID: taskMap[tb.TaskID], + ProjectViewID: viewMap[tb.ProjectViewID], }) } diff --git a/pkg/models/project_view.go b/pkg/models/project_view.go index 28e7d7d70..63ed27a10 100644 --- a/pkg/models/project_view.go +++ b/pkg/models/project_view.go @@ -259,10 +259,10 @@ func (pv *ProjectView) Delete(s *xorm.Session, _ web.Auth) (err error) { // @Failure 500 {object} models.Message "Internal error" // @Router /projects/{project}/views [put] func (pv *ProjectView) Create(s *xorm.Session, a web.Auth) (err error) { - return createProjectView(s, pv, a, true) + return createProjectView(s, pv, a, true, true) } -func createProjectView(s *xorm.Session, p *ProjectView, a web.Auth, createBacklogBucket bool) (err error) { +func createProjectView(s *xorm.Session, p *ProjectView, a web.Auth, createBacklogBucket bool, addExistingTasksToView bool) (err error) { _, err = s.Insert(p) if err != nil { return @@ -280,13 +280,19 @@ func createProjectView(s *xorm.Session, p *ProjectView, a web.Auth, createBacklo } // Move all tasks into the new bucket when the project already has tasks - err = addTasksToView(s, a, p, b) - if err != nil { - return + if addExistingTasksToView { + err = addTasksToView(s, a, p, b) + if err != nil { + return + } } } - return RecalculateTaskPositions(s, p, a) + if addExistingTasksToView { + return RecalculateTaskPositions(s, p, a) + } + + return } func addTasksToView(s *xorm.Session, a web.Auth, pv *ProjectView, b *Bucket) (err error) { @@ -413,7 +419,7 @@ func CreateDefaultViewsForProject(s *xorm.Session, project *Project, a web.Auth, if createDefaultListFilter { list.Filter = "done = false" } - err = createProjectView(s, list, a, createBacklogBucket) + err = createProjectView(s, list, a, createBacklogBucket, true) if err != nil { return } @@ -424,7 +430,7 @@ func CreateDefaultViewsForProject(s *xorm.Session, project *Project, a web.Auth, ViewKind: ProjectViewKindGantt, Position: 200, } - err = createProjectView(s, gantt, a, createBacklogBucket) + err = createProjectView(s, gantt, a, createBacklogBucket, true) if err != nil { return } @@ -435,7 +441,7 @@ func CreateDefaultViewsForProject(s *xorm.Session, project *Project, a web.Auth, ViewKind: ProjectViewKindTable, Position: 300, } - err = createProjectView(s, table, a, createBacklogBucket) + err = createProjectView(s, table, a, createBacklogBucket, true) if err != nil { return } @@ -447,7 +453,7 @@ func CreateDefaultViewsForProject(s *xorm.Session, project *Project, a web.Auth, Position: 400, BucketConfigurationMode: BucketConfigurationModeManual, } - err = createProjectView(s, kanban, a, createBacklogBucket) + err = createProjectView(s, kanban, a, createBacklogBucket, true) if err != nil { return }