First version of page to see notifications
This commit is contained in:
parent
a9844aeb8d
commit
7da3f899a6
|
@ -1208,3 +1208,10 @@ default_message = Drop files here or click to upload.
|
|||
invalid_input_type = You can't upload files of this type.
|
||||
file_too_big = File size ({{filesize}} MB) exceeds maximum size ({{maxFilesize}} MB).
|
||||
remove_file = Remove file
|
||||
|
||||
[notification]
|
||||
notifications = Notifications
|
||||
unread = Unread
|
||||
read = Read
|
||||
no_unread = You have no unread notifications.
|
||||
no_read = You have no read notifications.
|
||||
|
|
|
@ -1199,3 +1199,9 @@ invalid_input_type=Você não pode enviar arquivos deste tipo.
|
|||
file_too_big=O tamanho do arquivo ({{filesize}} MB) excede o limite máximo ({{maxFilesize}} MB).
|
||||
remove_file=Remover
|
||||
|
||||
[notification]
|
||||
notifications = Notificações
|
||||
unread = Não lidas
|
||||
read = Lidas
|
||||
no_unread = Você não possui notificações não lidas.
|
||||
no_read = Você não possui notificações lidas.
|
||||
|
|
|
@ -151,3 +151,34 @@ func getIssueNotification(e Engine, userID, issueID int64) (*Notification, error
|
|||
Get(notification)
|
||||
return notification, err
|
||||
}
|
||||
|
||||
// NotificationsForUser returns notifications for a given user and status
|
||||
func NotificationsForUser(user *User, status NotificationStatus) ([]*Notification, error) {
|
||||
return notificationsForUser(x, user, status)
|
||||
}
|
||||
func notificationsForUser(e Engine, user *User, status NotificationStatus) (notifications []*Notification, err error) {
|
||||
err = e.
|
||||
Where("user_id = ?", user.ID).
|
||||
And("status = ?", status).
|
||||
OrderBy("updated_unix DESC").
|
||||
Find(¬ifications)
|
||||
return
|
||||
}
|
||||
|
||||
// GetRepo returns the repo of the notification
|
||||
func (n *Notification) GetRepo() (repo *Repository, err error) {
|
||||
repo = new(Repository)
|
||||
_, err = x.
|
||||
Where("id = ?", n.RepoID).
|
||||
Get(repo)
|
||||
return
|
||||
}
|
||||
|
||||
// GetIssue returns the issue of the notification
|
||||
func (n *Notification) GetIssue() (issue *Issue, err error) {
|
||||
issue = new(Issue)
|
||||
_, err = x.
|
||||
Where("id = ?", n.IssueID).
|
||||
Get(issue)
|
||||
return
|
||||
}
|
||||
|
|
|
@ -2691,6 +2691,24 @@ footer .ui.language .menu {
|
|||
.user.followers .follow .ui.button {
|
||||
padding: 8px 15px;
|
||||
}
|
||||
.user.notification .octicon {
|
||||
float: left;
|
||||
font-size: 2em;
|
||||
}
|
||||
.user.notification .content {
|
||||
float: left;
|
||||
margin-left: 7px;
|
||||
}
|
||||
.user.notification .octicon-issue-opened,
|
||||
.user.notification .octicon-git-pull-request {
|
||||
color: green;
|
||||
}
|
||||
.user.notification .octicon-issue-closed {
|
||||
color: red;
|
||||
}
|
||||
.user.notification .octicon-git-merge {
|
||||
color: purple;
|
||||
}
|
||||
.dashboard {
|
||||
padding-top: 15px;
|
||||
padding-bottom: 80px;
|
||||
|
|
|
@ -74,4 +74,25 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.notification {
|
||||
.octicon {
|
||||
float: left;
|
||||
font-size: 2em;
|
||||
}
|
||||
.content {
|
||||
float: left;
|
||||
margin-left: 7px;
|
||||
}
|
||||
|
||||
.octicon-issue-opened, .octicon-git-pull-request {
|
||||
color: green;
|
||||
}
|
||||
.octicon-issue-closed {
|
||||
color: red;
|
||||
}
|
||||
.octicon-git-merge {
|
||||
color: purple;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,10 +1,39 @@
|
|||
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"
|
||||
)
|
||||
|
||||
// Notifications is the notifications page
|
||||
func Notifications(c *context.Context) {
|
||||
panic("Not implemented")
|
||||
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)
|
||||
}
|
||||
|
|
|
@ -29,7 +29,6 @@ const (
|
|||
tplSettingsSocial base.TplName = "user/settings/social"
|
||||
tplSettingsApplications base.TplName = "user/settings/applications"
|
||||
tplSettingsDelete base.TplName = "user/settings/delete"
|
||||
tplNotification base.TplName = "user/notification"
|
||||
tplSecurity base.TplName = "user/security"
|
||||
)
|
||||
|
||||
|
|
|
@ -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