Add pagination for notifications

pull/539/head
Andrey Nering 8 years ago
parent 545ba2e2e6
commit b354cf362e
  1. 16
      models/notification.go
  2. 28
      routers/user/notification.go
  3. 6
      templates/user/notification/notification.tmpl

@ -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(&notifications)
return
}

@ -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)
}

@ -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>

Loading…
Cancel
Save