Add pagination for notifications

tokarchuk/v1.17
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 // NotificationsForUser returns notifications for a given user and status
func NotificationsForUser(user *User, status NotificationStatus) ([]*Notification, error) { func NotificationsForUser(user *User, status NotificationStatus, page, perPage int) ([]*Notification, error) {
return notificationsForUser(x, user, status) return notificationsForUser(x, user, status, page, perPage)
} }
func notificationsForUser(e Engine, user *User, status NotificationStatus) (notifications []*Notification, err error) { func notificationsForUser(e Engine, user *User, status NotificationStatus, page, perPage int) (notifications []*Notification, err error) {
err = e. sess := e.
Where("user_id = ?", user.ID). Where("user_id = ?", user.ID).
And("status = ?", status). 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) Find(&notifications)
return return
} }

@ -4,6 +4,8 @@ import (
"fmt" "fmt"
"strings" "strings"
"github.com/Unknwon/paginater"
"code.gitea.io/gitea/models" "code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/context"
@ -34,26 +36,46 @@ func GetNotificationCount(c *context.Context) {
// Notifications is the notifications page // Notifications is the notifications page
func Notifications(c *context.Context) { func Notifications(c *context.Context) {
var status models.NotificationStatus var (
switch c.Query("status") { 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": case "read":
status = models.NotificationStatusRead status = models.NotificationStatusRead
default: default:
status = models.NotificationStatusUnread status = models.NotificationStatusUnread
} }
notifications, err := models.NotificationsForUser(c.User, status) notifications, err := models.NotificationsForUser(c.User, status, page, perPage)
if err != nil { if err != nil {
c.Handle(500, "ErrNotificationsForUser", err) c.Handle(500, "ErrNotificationsForUser", err)
return return
} }
total, err := models.GetNotificationCount(c.User, status)
if err != nil {
c.Handle(500, "ErrGetNotificationCount", err)
return
}
title := "Notifications" title := "Notifications"
if count := len(notifications); count > 0 { if count := len(notifications); count > 0 {
title = fmt.Sprintf("(%d) %s", count, title) title = fmt.Sprintf("(%d) %s", count, title)
} }
c.Data["Title"] = title c.Data["Title"] = title
c.Data["Keyword"] = keyword
c.Data["Status"] = status c.Data["Status"] = status
c.Data["Notifications"] = notifications c.Data["Notifications"] = notifications
c.Data["Page"] = paginater.New(int(total), perPage, page, 5)
c.HTML(200, tplNotification) c.HTML(200, tplNotification)
} }

@ -5,7 +5,7 @@
<h1 class="ui header">{{.i18n.Tr "notification.notifications"}}</h1> <h1 class="ui header">{{.i18n.Tr "notification.notifications"}}</h1>
<div class="ui top attached tabular menu"> <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"> <div class="{{if eq .Status 1}}active{{end}} item">
{{.i18n.Tr "notification.unread"}} {{.i18n.Tr "notification.unread"}}
{{if eq .Status 1}} {{if eq .Status 1}}
@ -13,7 +13,7 @@
{{end}} {{end}}
</div> </div>
</a> </a>
<a href="/notifications?status=read"> <a href="/notifications?q=read">
<div class="{{if eq .Status 2}}active{{end}} item"> <div class="{{if eq .Status 2}}active{{end}} item">
{{.i18n.Tr "notification.read"}} {{.i18n.Tr "notification.read"}}
{{if eq .Status 2}} {{if eq .Status 2}}
@ -62,6 +62,8 @@
</div> </div>
{{end}} {{end}}
</div> </div>
{{template "base/paginate" .}}
</div> </div>
</div> </div>

Loading…
Cancel
Save