Notifications - Step 2
parent
42904cb98a
commit
6069abe5fd
@ -0,0 +1,54 @@
|
|||||||
|
package user
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"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 !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 status models.NotificationStatus
|
||||||
|
switch c.Query("status") {
|
||||||
|
case "read":
|
||||||
|
status = models.NotificationStatusRead
|
||||||
|
default:
|
||||||
|
status = models.NotificationStatusUnread
|
||||||
|
}
|
||||||
|
|
||||||
|
notifications, err := models.NotificationsForUser(c.User, status)
|
||||||
|
if err != nil {
|
||||||
|
c.Handle(500, "ErrNotificationsForUser", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
title := "Notifications"
|
||||||
|
if count := len(notifications); count > 0 {
|
||||||
|
title = fmt.Sprintf("(%d) %s", count, title)
|
||||||
|
}
|
||||||
|
c.Data["Title"] = title
|
||||||
|
c.Data["Status"] = status
|
||||||
|
c.Data["Notifications"] = notifications
|
||||||
|
c.HTML(200, tplNotification)
|
||||||
|
}
|
@ -0,0 +1,68 @@
|
|||||||
|
{{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?status=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?status=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.Title}}</div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{template "base/footer" .}}
|
Loading…
Reference in New Issue