Add pagination for notifications
This commit is contained in:
		
							parent
							
								
									545ba2e2e6
								
							
						
					
					
						commit
						b354cf362e
					
				| 
						 | 
				
			
			@ -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
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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…
	
		Reference in New Issue