Browse Source

Add pagination for notifications

tags/v1.21.12.1
Andrey Nering 9 years ago
parent
commit
b354cf362e
3 changed files with 40 additions and 10 deletions
  1. +11
    -5
      models/notification.go
  2. +25
    -3
      routers/user/notification.go
  3. +4
    -2
      templates/user/notification/notification.tmpl

+ 11
- 5
models/notification.go View File

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


+ 25
- 3
routers/user/notification.go View File

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

+ 4
- 2
templates/user/notification/notification.tmpl View File

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