fix(projects): delete child projects when deleting a project

This commit is contained in:
kolaente 2023-12-01 17:27:40 +01:00
parent 4615b4dbfb
commit 66b44da85b
Signed by untrusted user: konrad
GPG Key ID: F40E70337AB24C9B
2 changed files with 23 additions and 1 deletions

View File

@ -1041,10 +1041,28 @@ func (p *Project) Delete(s *xorm.Session, a web.Auth) (err error) {
return
}
return events.Dispatch(&ProjectDeletedEvent{
err = events.Dispatch(&ProjectDeletedEvent{
Project: fullProject,
Doer: a,
})
if err != nil {
return
}
childProjects := []*Project{}
err = s.Where("parent_project_id = ?", fullProject.ID).Find(&childProjects)
if err != nil {
return
}
for _, child := range childProjects {
err = child.Delete(s, a)
if err != nil {
return
}
}
return
}
// DeleteBackgroundFileIfExists deletes the list's background file from the db and the filesystem,

View File

@ -137,6 +137,10 @@ func DeleteUser(s *xorm.Session, u *user.User) (err error) {
}
for _, p := range projectsToDelete {
if p.ParentProjectID != 0 {
// Child projects are deleted by p.Delete
continue
}
err = p.Delete(s, u)
// If the user is the owner of the default project it will be deleted, if they are not the owner
// we can ignore the error as the project was shared in that case.