diff --git a/pkg/models/listeners.go b/pkg/models/listeners.go index 6e88a349510..373f3054d44 100644 --- a/pkg/models/listeners.go +++ b/pkg/models/listeners.go @@ -298,7 +298,13 @@ func (s *SendTaskDeletedNotification) Handle(msg *message.Message) (err error) { sess := db.NewSession() defer sess.Close() - subscribers, err := getSubscribersForEntity(sess, SubscriptionEntityTask, event.Task.ID) + var subscribers []*Subscription + subscribers, err = getSubscribersForEntity(sess, SubscriptionEntityTask, event.Task.ID) + // If the task does not exist and no one has explicitely subscribed to it, we won't find any subscriptions for it. + // Hence, we need to check for subscriptions to the parent project manually. + if err != nil && (IsErrTaskDoesNotExist(err) || IsErrProjectDoesNotExist(err)) { + subscribers, err = getSubscribersForEntity(sess, SubscriptionEntityProject, event.Task.ProjectID) + } if err != nil { return err } diff --git a/pkg/models/notifications.go b/pkg/models/notifications.go index 9daa5d73589..c43f15ab3ea 100644 --- a/pkg/models/notifications.go +++ b/pkg/models/notifications.go @@ -136,7 +136,7 @@ type TaskDeletedNotification struct { // ToMail returns the mail notification for TaskDeletedNotification func (n *TaskDeletedNotification) ToMail() *notifications.Mail { return notifications.NewMail(). - Subject(n.Task.Title + "(" + n.Task.GetFullIdentifier() + ")" + " has been delete"). + Subject(n.Task.Title + "(" + n.Task.GetFullIdentifier() + ")" + " has been deleted"). Line(n.Doer.GetName() + " has deleted the task " + n.Task.Title + "(" + n.Task.GetFullIdentifier() + ")") } diff --git a/pkg/models/tasks.go b/pkg/models/tasks.go index 8dda06fdef3..23d07141ce0 100644 --- a/pkg/models/tasks.go +++ b/pkg/models/tasks.go @@ -1603,6 +1603,13 @@ func updateTaskLastUpdated(s *xorm.Session, task *Task) error { // @Router /tasks/{ID} [delete] func (t *Task) Delete(s *xorm.Session, a web.Auth) (err error) { + // duplicate the task for the event + fullTask := &Task{ID: t.ID} + err = fullTask.ReadOne(s, a) + if err != nil { + return err + } + if _, err = s.ID(t.ID).Delete(Task{}); err != nil { return err } @@ -1657,7 +1664,7 @@ func (t *Task) Delete(s *xorm.Session, a web.Auth) (err error) { doer, _ := user.GetFromAuth(a) err = events.Dispatch(&TaskDeletedEvent{ - Task: t, + Task: fullTask, Doer: doer, }) if err != nil {