2021-02-07 22:05:09 +01:00
|
|
|
// Vikunja is a to-do list application to facilitate your life.
|
|
|
|
// Copyright 2018-2021 Vikunja and contributors. All rights reserved.
|
|
|
|
//
|
|
|
|
// This program is free software: you can redistribute it and/or modify
|
|
|
|
// it under the terms of the GNU Affero General Public Licensee as published by
|
|
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
|
|
// (at your option) any later version.
|
|
|
|
//
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
// GNU Affero General Public Licensee for more details.
|
|
|
|
//
|
|
|
|
// You should have received a copy of the GNU Affero General Public Licensee
|
|
|
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
package models
|
|
|
|
|
|
|
|
import (
|
2021-02-14 20:18:14 +01:00
|
|
|
"bufio"
|
2021-02-07 22:05:09 +01:00
|
|
|
"strconv"
|
2021-02-14 20:18:14 +01:00
|
|
|
"strings"
|
2021-04-11 17:08:43 +02:00
|
|
|
"time"
|
2021-02-07 22:05:09 +01:00
|
|
|
|
|
|
|
"code.vikunja.io/api/pkg/config"
|
|
|
|
"code.vikunja.io/api/pkg/notifications"
|
|
|
|
"code.vikunja.io/api/pkg/user"
|
|
|
|
)
|
|
|
|
|
|
|
|
// ReminderDueNotification represents a ReminderDueNotification notification
|
|
|
|
type ReminderDueNotification struct {
|
2021-02-21 15:50:34 +01:00
|
|
|
User *user.User `json:"user"`
|
|
|
|
Task *Task `json:"task"`
|
2021-02-07 22:05:09 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// ToMail returns the mail notification for ReminderDueNotification
|
|
|
|
func (n *ReminderDueNotification) ToMail() *notifications.Mail {
|
|
|
|
return notifications.NewMail().
|
|
|
|
To(n.User.Email).
|
|
|
|
Subject(`Reminder for "`+n.Task.Title+`"`).
|
|
|
|
Greeting("Hi "+n.User.GetName()+",").
|
|
|
|
Line(`This is a friendly reminder of the task "`+n.Task.Title+`".`).
|
|
|
|
Action("Open Task", config.ServiceFrontendurl.GetString()+"tasks/"+strconv.FormatInt(n.Task.ID, 10)).
|
|
|
|
Line("Have a nice day!")
|
|
|
|
}
|
|
|
|
|
|
|
|
// ToDB returns the ReminderDueNotification notification in a format which can be saved in the db
|
|
|
|
func (n *ReminderDueNotification) ToDB() interface{} {
|
|
|
|
return nil
|
|
|
|
}
|
2021-02-14 20:18:14 +01:00
|
|
|
|
2021-02-21 15:50:34 +01:00
|
|
|
// Name returns the name of the notification
|
|
|
|
func (n *ReminderDueNotification) Name() string {
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
2021-02-14 20:18:14 +01:00
|
|
|
// TaskCommentNotification represents a TaskCommentNotification notification
|
|
|
|
type TaskCommentNotification struct {
|
2021-02-21 15:50:34 +01:00
|
|
|
Doer *user.User `json:"doer"`
|
|
|
|
Task *Task `json:"task"`
|
|
|
|
Comment *TaskComment `json:"comment"`
|
2021-02-14 20:18:14 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// ToMail returns the mail notification for TaskCommentNotification
|
|
|
|
func (n *TaskCommentNotification) ToMail() *notifications.Mail {
|
|
|
|
|
|
|
|
mail := notifications.NewMail().
|
2021-02-17 20:48:06 +01:00
|
|
|
From(n.Doer.GetNameAndFromEmail()).
|
2021-02-14 20:18:14 +01:00
|
|
|
Subject("Re: " + n.Task.Title)
|
|
|
|
|
|
|
|
lines := bufio.NewScanner(strings.NewReader(n.Comment.Comment))
|
|
|
|
for lines.Scan() {
|
|
|
|
mail.Line(lines.Text())
|
|
|
|
}
|
|
|
|
|
|
|
|
return mail.
|
|
|
|
Action("View Task", n.Task.GetFrontendURL())
|
|
|
|
}
|
|
|
|
|
|
|
|
// ToDB returns the TaskCommentNotification notification in a format which can be saved in the db
|
|
|
|
func (n *TaskCommentNotification) ToDB() interface{} {
|
|
|
|
return n
|
|
|
|
}
|
|
|
|
|
2021-02-21 15:50:34 +01:00
|
|
|
// Name returns the name of the notification
|
|
|
|
func (n *TaskCommentNotification) Name() string {
|
|
|
|
return "task.comment"
|
|
|
|
}
|
|
|
|
|
2021-02-14 20:18:14 +01:00
|
|
|
// TaskAssignedNotification represents a TaskAssignedNotification notification
|
|
|
|
type TaskAssignedNotification struct {
|
2021-02-21 15:50:34 +01:00
|
|
|
Doer *user.User `json:"doer"`
|
|
|
|
Task *Task `json:"task"`
|
|
|
|
Assignee *user.User `json:"assignee"`
|
2021-02-14 20:18:14 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// ToMail returns the mail notification for TaskAssignedNotification
|
|
|
|
func (n *TaskAssignedNotification) ToMail() *notifications.Mail {
|
|
|
|
return notifications.NewMail().
|
|
|
|
Subject(n.Task.Title+"("+n.Task.GetFullIdentifier()+")"+" has been assigned to "+n.Assignee.GetName()).
|
|
|
|
Line(n.Doer.GetName()+" has assigned this task to "+n.Assignee.GetName()).
|
|
|
|
Action("View Task", n.Task.GetFrontendURL())
|
|
|
|
}
|
|
|
|
|
|
|
|
// ToDB returns the TaskAssignedNotification notification in a format which can be saved in the db
|
|
|
|
func (n *TaskAssignedNotification) ToDB() interface{} {
|
|
|
|
return n
|
|
|
|
}
|
|
|
|
|
2021-02-21 15:50:34 +01:00
|
|
|
// Name returns the name of the notification
|
|
|
|
func (n *TaskAssignedNotification) Name() string {
|
|
|
|
return "task.assigned"
|
|
|
|
}
|
|
|
|
|
2021-02-14 20:18:14 +01:00
|
|
|
// TaskDeletedNotification represents a TaskDeletedNotification notification
|
|
|
|
type TaskDeletedNotification struct {
|
2021-02-21 15:50:34 +01:00
|
|
|
Doer *user.User `json:"doer"`
|
|
|
|
Task *Task `json:"task"`
|
2021-02-14 20:18:14 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// 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").
|
|
|
|
Line(n.Doer.GetName() + " has deleted the task " + n.Task.Title + "(" + n.Task.GetFullIdentifier() + ")")
|
|
|
|
}
|
|
|
|
|
|
|
|
// ToDB returns the TaskDeletedNotification notification in a format which can be saved in the db
|
|
|
|
func (n *TaskDeletedNotification) ToDB() interface{} {
|
|
|
|
return n
|
|
|
|
}
|
|
|
|
|
2021-02-21 15:50:34 +01:00
|
|
|
// Name returns the name of the notification
|
|
|
|
func (n *TaskDeletedNotification) Name() string {
|
|
|
|
return "task.deleted"
|
|
|
|
}
|
|
|
|
|
2021-02-14 20:18:14 +01:00
|
|
|
// ListCreatedNotification represents a ListCreatedNotification notification
|
|
|
|
type ListCreatedNotification struct {
|
2021-02-21 15:50:34 +01:00
|
|
|
Doer *user.User `json:"doer"`
|
|
|
|
List *List `json:"list"`
|
2021-02-14 20:18:14 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// ToMail returns the mail notification for ListCreatedNotification
|
|
|
|
func (n *ListCreatedNotification) ToMail() *notifications.Mail {
|
|
|
|
return notifications.NewMail().
|
|
|
|
Subject(n.Doer.GetName()+` created the list "`+n.List.Title+`"`).
|
|
|
|
Line(n.Doer.GetName()+` created the list "`+n.List.Title+`"`).
|
|
|
|
Action("View List", config.ServiceFrontendurl.GetString()+"lists/")
|
|
|
|
}
|
|
|
|
|
|
|
|
// ToDB returns the ListCreatedNotification notification in a format which can be saved in the db
|
|
|
|
func (n *ListCreatedNotification) ToDB() interface{} {
|
2021-02-21 15:50:34 +01:00
|
|
|
return n
|
|
|
|
}
|
|
|
|
|
|
|
|
// Name returns the name of the notification
|
|
|
|
func (n *ListCreatedNotification) Name() string {
|
|
|
|
return "list.created"
|
2021-02-14 20:18:14 +01:00
|
|
|
}
|
2021-02-17 20:48:06 +01:00
|
|
|
|
|
|
|
// TeamMemberAddedNotification represents a TeamMemberAddedNotification notification
|
|
|
|
type TeamMemberAddedNotification struct {
|
2021-02-21 15:50:34 +01:00
|
|
|
Member *user.User `json:"member"`
|
|
|
|
Doer *user.User `json:"doer"`
|
|
|
|
Team *Team `json:"team"`
|
2021-02-17 20:48:06 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// ToMail returns the mail notification for TeamMemberAddedNotification
|
|
|
|
func (n *TeamMemberAddedNotification) ToMail() *notifications.Mail {
|
|
|
|
return notifications.NewMail().
|
|
|
|
Subject(n.Doer.GetName()+" added you to the "+n.Team.Name+" team in Vikunja").
|
|
|
|
From(n.Doer.GetNameAndFromEmail()).
|
|
|
|
Greeting("Hi "+n.Member.GetName()+",").
|
|
|
|
Line(n.Doer.GetName()+" has just added you to the "+n.Team.Name+" team in Vikunja.").
|
|
|
|
Action("View Team", config.ServiceFrontendurl.GetString()+"teams/"+strconv.FormatInt(n.Team.ID, 10)+"/edit")
|
|
|
|
}
|
|
|
|
|
|
|
|
// ToDB returns the TeamMemberAddedNotification notification in a format which can be saved in the db
|
|
|
|
func (n *TeamMemberAddedNotification) ToDB() interface{} {
|
2021-02-21 15:50:34 +01:00
|
|
|
return n
|
|
|
|
}
|
|
|
|
|
|
|
|
// Name returns the name of the notification
|
|
|
|
func (n *TeamMemberAddedNotification) Name() string {
|
|
|
|
return "team.member.added"
|
2021-02-17 20:48:06 +01:00
|
|
|
}
|
2021-04-11 17:08:43 +02:00
|
|
|
|
|
|
|
// UndoneTaskOverdueNotification represents a UndoneTaskOverdueNotification notification
|
|
|
|
type UndoneTaskOverdueNotification struct {
|
|
|
|
User *user.User
|
|
|
|
Task *Task
|
|
|
|
}
|
|
|
|
|
|
|
|
// ToMail returns the mail notification for UndoneTaskOverdueNotification
|
|
|
|
func (n *UndoneTaskOverdueNotification) ToMail() *notifications.Mail {
|
|
|
|
return notifications.NewMail().
|
|
|
|
Subject(`Task "`+n.Task.Title+`" is overdue`).
|
|
|
|
Greeting("Hi "+n.User.GetName()+",").
|
|
|
|
Line(`This is a friendly reminder of the task "`+n.Task.Title+`" which is overdue since `+time.Until(n.Task.DueDate).String()+` and not yet done.`).
|
|
|
|
Action("Open Task", config.ServiceFrontendurl.GetString()+"tasks/"+strconv.FormatInt(n.Task.ID, 10)).
|
|
|
|
Line("Have a nice day!")
|
|
|
|
}
|
|
|
|
|
|
|
|
// ToDB returns the UndoneTaskOverdueNotification notification in a format which can be saved in the db
|
|
|
|
func (n *UndoneTaskOverdueNotification) ToDB() interface{} {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// Name returns the name of the notification
|
|
|
|
func (n *UndoneTaskOverdueNotification) Name() string {
|
|
|
|
return "task.undone.overdue"
|
|
|
|
}
|