summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--models/notification.go16
-rw-r--r--routers/user/notification.go28
-rw-r--r--templates/user/notification/notification.tmpl6
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(&notifications)
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>