Merge pull request #539 from andreynering/notifications-step-2
Notifications - Step 2tokarchuk/v1.17
commit
79d527195d
@ -0,0 +1,81 @@ |
||||
package user |
||||
|
||||
import ( |
||||
"fmt" |
||||
"strings" |
||||
|
||||
"github.com/Unknwon/paginater" |
||||
|
||||
"code.gitea.io/gitea/models" |
||||
"code.gitea.io/gitea/modules/base" |
||||
"code.gitea.io/gitea/modules/context" |
||||
) |
||||
|
||||
const ( |
||||
tplNotification base.TplName = "user/notification/notification" |
||||
) |
||||
|
||||
// GetNotificationCount is the middleware that sets the notification count in the context
|
||||
func GetNotificationCount(c *context.Context) { |
||||
if strings.HasPrefix(c.Req.URL.Path, "/api") { |
||||
return |
||||
} |
||||
|
||||
if !c.IsSigned { |
||||
return |
||||
} |
||||
|
||||
count, err := models.GetNotificationUnreadCount(c.User) |
||||
if err != nil { |
||||
c.Handle(500, "GetNotificationCount", err) |
||||
return |
||||
} |
||||
|
||||
c.Data["NotificationUnreadCount"] = count |
||||
} |
||||
|
||||
// Notifications is the notifications page
|
||||
func Notifications(c *context.Context) { |
||||
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, 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) |
||||
} |
@ -0,0 +1,70 @@ |
||||
{{template "base/head" .}} |
||||
|
||||
<div class="user notification"> |
||||
<div class="ui container"> |
||||
<h1 class="ui header">{{.i18n.Tr "notification.notifications"}}</h1> |
||||
|
||||
<div class="ui top attached tabular menu"> |
||||
<a href="/notifications?q=unread"> |
||||
<div class="{{if eq .Status 1}}active{{end}} item"> |
||||
{{.i18n.Tr "notification.unread"}} |
||||
{{if eq .Status 1}} |
||||
<div class="ui label">{{len .Notifications}}</div> |
||||
{{end}} |
||||
</div> |
||||
</a> |
||||
<a href="/notifications?q=read"> |
||||
<div class="{{if eq .Status 2}}active{{end}} item"> |
||||
{{.i18n.Tr "notification.read"}} |
||||
{{if eq .Status 2}} |
||||
<div class="ui label">{{len .Notifications}}</div> |
||||
{{end}} |
||||
</div> |
||||
</a> |
||||
</div> |
||||
<div class="ui bottom attached active tab segment"> |
||||
{{if eq (len .Notifications) 0}} |
||||
{{if eq .Status 1}} |
||||
{{.i18n.Tr "notification.no_unread"}} |
||||
{{else}} |
||||
{{.i18n.Tr "notification.no_read"}} |
||||
{{end}} |
||||
{{else}} |
||||
<div class="ui relaxed divided list"> |
||||
{{range $notification := .Notifications}} |
||||
{{$issue := $notification.GetIssue}} |
||||
{{$repo := $notification.GetRepo}} |
||||
{{$repoOwner := $repo.MustOwner}} |
||||
|
||||
<div class="item"> |
||||
<a href="{{$.AppSubUrl}}/{{$repoOwner.Name}}/{{$repo.Name}}/issues/{{$issue.Index}}"> |
||||
{{if and $issue.IsPull}} |
||||
{{if $issue.IsClosed}} |
||||
<i class="octicon octicon-git-merge"></i> |
||||
{{else}} |
||||
<i class="octicon octicon-git-pull-request"></i> |
||||
{{end}} |
||||
{{else}} |
||||
{{if $issue.IsClosed}} |
||||
<i class="octicon octicon-issue-closed"></i> |
||||
{{else}} |
||||
<i class="octicon octicon-issue-opened"></i> |
||||
{{end}} |
||||
{{end}} |
||||
|
||||
<div class="content"> |
||||
<div class="header">{{$repoOwner.Name}}/{{$repo.Name}}</div> |
||||
<div class="description">#{{$issue.Index}} - {{$issue.Title}}</div> |
||||
</div> |
||||
</a> |
||||
</div> |
||||
{{end}} |
||||
</div> |
||||
{{end}} |
||||
</div> |
||||
|
||||
{{template "base/paginate" .}} |
||||
</div> |
||||
</div> |
||||
|
||||
{{template "base/footer" .}} |
Loading…
Reference in new issue