diff options
-rw-r--r-- | models/notification.go | 16 | ||||
-rw-r--r-- | routers/user/notification.go | 28 | ||||
-rw-r--r-- | templates/user/notification/notification.tmpl | 6 |
3 files changed, 40 insertions, 10 deletions
diff --git a/models/notification.go b/models/notification.go index 46d63b4823..188c987536 100644 --- a/models/notification.go +++ b/models/notification.go @@ -182,14 +182,20 @@ func getIssueNotification(e Engine, userID, issueID int64) (*Notification, error } // NotificationsForUser returns notifications for a given user and status -func NotificationsForUser(user *User, status NotificationStatus) ([]*Notification, error) { - return notificationsForUser(x, user, status) +func NotificationsForUser(user *User, status NotificationStatus, page, perPage int) ([]*Notification, error) { + return notificationsForUser(x, user, status, page, perPage) } -func notificationsForUser(e Engine, user *User, status NotificationStatus) (notifications []*Notification, err error) { - err = e. +func notificationsForUser(e Engine, user *User, status NotificationStatus, page, perPage int) (notifications []*Notification, err error) { + sess := e. Where("user_id = ?", user.ID). And("status = ?", status). - OrderBy("updated_unix DESC"). + OrderBy("updated_unix DESC") + + if page > 0 && perPage > 0 { + sess.Limit(perPage, (page-1)*perPage) + } + + err = sess. Find(¬ifications) return } diff --git a/routers/user/notification.go b/routers/user/notification.go index 866cc6de02..7e556ae2ea 100644 --- a/routers/user/notification.go +++ b/routers/user/notification.go @@ -4,6 +4,8 @@ import ( "fmt" "strings" + "github.com/Unknwon/paginater" + "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" @@ -34,26 +36,46 @@ func GetNotificationCount(c *context.Context) { // Notifications is the notifications page func Notifications(c *context.Context) { - var status models.NotificationStatus - switch c.Query("status") { + var ( + keyword = c.Query("q") + status models.NotificationStatus + page = c.QueryInt("page") + perPage = c.QueryInt("perPage") + ) + if page < 1 { + page = 1 + } + if perPage < 1 { + perPage = 20 + } + + switch keyword { case "read": status = models.NotificationStatusRead default: status = models.NotificationStatusUnread } - notifications, err := models.NotificationsForUser(c.User, status) + notifications, err := models.NotificationsForUser(c.User, status, page, perPage) if err != nil { c.Handle(500, "ErrNotificationsForUser", err) return } + total, err := models.GetNotificationCount(c.User, status) + if err != nil { + c.Handle(500, "ErrGetNotificationCount", err) + return + } + title := "Notifications" if count := len(notifications); count > 0 { title = fmt.Sprintf("(%d) %s", count, title) } c.Data["Title"] = title + c.Data["Keyword"] = keyword c.Data["Status"] = status c.Data["Notifications"] = notifications + c.Data["Page"] = paginater.New(int(total), perPage, page, 5) c.HTML(200, tplNotification) } diff --git a/templates/user/notification/notification.tmpl b/templates/user/notification/notification.tmpl index 154f8b1790..ddfcd4f717 100644 --- a/templates/user/notification/notification.tmpl +++ b/templates/user/notification/notification.tmpl @@ -5,7 +5,7 @@ <h1 class="ui header">{{.i18n.Tr "notification.notifications"}}</h1> <div class="ui top attached tabular menu"> - <a href="/notifications?status=unread"> + <a href="/notifications?q=unread"> <div class="{{if eq .Status 1}}active{{end}} item"> {{.i18n.Tr "notification.unread"}} {{if eq .Status 1}} @@ -13,7 +13,7 @@ {{end}} </div> </a> - <a href="/notifications?status=read"> + <a href="/notifications?q=read"> <div class="{{if eq .Status 2}}active{{end}} item"> {{.i18n.Tr "notification.read"}} {{if eq .Status 2}} @@ -62,6 +62,8 @@ </div> {{end}} </div> + + {{template "base/paginate" .}} </div> </div> |