mirror of https://github.com/gogits/gogs.git
Unknwon
10 years ago
12 changed files with 202 additions and 11 deletions
@ -0,0 +1,64 @@ |
|||||||
|
// Copyright 2014 The Gogs Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package models |
||||||
|
|
||||||
|
import ( |
||||||
|
"time" |
||||||
|
|
||||||
|
"github.com/Unknwon/com" |
||||||
|
) |
||||||
|
|
||||||
|
type NoticeType int |
||||||
|
|
||||||
|
const ( |
||||||
|
NOTICE_REPOSITORY NoticeType = iota + 1 |
||||||
|
) |
||||||
|
|
||||||
|
// Notice represents a system notice for admin.
|
||||||
|
type Notice struct { |
||||||
|
Id int64 |
||||||
|
Type NoticeType |
||||||
|
Description string `xorm:"TEXT"` |
||||||
|
Created time.Time `xorm:"CREATED"` |
||||||
|
} |
||||||
|
|
||||||
|
// TrStr returns a translation format string.
|
||||||
|
func (n *Notice) TrStr() string { |
||||||
|
return "admin.notices.type_" + com.ToStr(n.Type) |
||||||
|
} |
||||||
|
|
||||||
|
// CreateNotice creates new system notice.
|
||||||
|
func CreateNotice(tp NoticeType, desc string) error { |
||||||
|
n := &Notice{ |
||||||
|
Type: tp, |
||||||
|
Description: desc, |
||||||
|
} |
||||||
|
_, err := x.Insert(n) |
||||||
|
return err |
||||||
|
} |
||||||
|
|
||||||
|
// CreateRepositoryNotice creates new system notice with type NOTICE_REPOSITORY.
|
||||||
|
func CreateRepositoryNotice(desc string) error { |
||||||
|
return CreateNotice(NOTICE_REPOSITORY, desc) |
||||||
|
} |
||||||
|
|
||||||
|
// CountNotices returns number of notices.
|
||||||
|
func CountNotices() int64 { |
||||||
|
count, _ := x.Count(new(Notice)) |
||||||
|
return count |
||||||
|
} |
||||||
|
|
||||||
|
// GetNotices returns given number of notices with offset.
|
||||||
|
func GetNotices(num, offset int) ([]*Notice, error) { |
||||||
|
notices := make([]*Notice, 0, num) |
||||||
|
err := x.Limit(num, offset).Desc("id").Find(¬ices) |
||||||
|
return notices, err |
||||||
|
} |
||||||
|
|
||||||
|
// DeleteNotice deletes a system notice by given ID.
|
||||||
|
func DeleteNotice(id int64) error { |
||||||
|
_, err := x.Id(id).Delete(new(Notice)) |
||||||
|
return err |
||||||
|
} |
@ -0,0 +1,46 @@ |
|||||||
|
// Copyright 2014 The Gogs Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package admin |
||||||
|
|
||||||
|
import ( |
||||||
|
"github.com/Unknwon/com" |
||||||
|
|
||||||
|
"github.com/gogits/gogs/models" |
||||||
|
"github.com/gogits/gogs/modules/base" |
||||||
|
"github.com/gogits/gogs/modules/log" |
||||||
|
"github.com/gogits/gogs/modules/middleware" |
||||||
|
) |
||||||
|
|
||||||
|
const ( |
||||||
|
NOTICES base.TplName = "admin/notice" |
||||||
|
) |
||||||
|
|
||||||
|
func Notices(ctx *middleware.Context) { |
||||||
|
ctx.Data["Title"] = ctx.Tr("admin.notices") |
||||||
|
ctx.Data["PageIsAdmin"] = true |
||||||
|
ctx.Data["PageIsAdminNotices"] = true |
||||||
|
|
||||||
|
pageNum := 50 |
||||||
|
p := pagination(ctx, models.CountNotices(), pageNum) |
||||||
|
|
||||||
|
notices, err := models.GetNotices(pageNum, (p-1)*pageNum) |
||||||
|
if err != nil { |
||||||
|
ctx.Handle(500, "GetNotices", err) |
||||||
|
return |
||||||
|
} |
||||||
|
ctx.Data["Notices"] = notices |
||||||
|
ctx.HTML(200, NOTICES) |
||||||
|
} |
||||||
|
|
||||||
|
func DeleteNotice(ctx *middleware.Context) { |
||||||
|
id := com.StrTo(ctx.Params(":id")).MustInt64() |
||||||
|
if err := models.DeleteNotice(id); err != nil { |
||||||
|
ctx.Handle(500, "DeleteNotice", err) |
||||||
|
return |
||||||
|
} |
||||||
|
log.Trace("System notice deleted by admin(%s): %d", ctx.User.Name, id) |
||||||
|
ctx.Flash.Success(ctx.Tr("admin.notices.delete_success")) |
||||||
|
ctx.Redirect("/admin/notices") |
||||||
|
} |
@ -0,0 +1,54 @@ |
|||||||
|
{{template "ng/base/head" .}} |
||||||
|
{{template "ng/base/header" .}} |
||||||
|
<div id="admin-wrapper"> |
||||||
|
<div id="setting-wrapper" class="main-wrapper"> |
||||||
|
<div id="admin-setting" class="container clear"> |
||||||
|
{{template "admin/nav" .}} |
||||||
|
<div class="grid-4-5 left"> |
||||||
|
<div class="setting-content"> |
||||||
|
{{template "ng/base/alert" .}} |
||||||
|
<div id="setting-content"> |
||||||
|
<div class="panel panel-radius"> |
||||||
|
<div class="panel-header"> |
||||||
|
<strong>{{.i18n.Tr "admin.notices.system_notice_list"}}</strong> |
||||||
|
</div> |
||||||
|
<div class="panel-body admin-panel"> |
||||||
|
<div class="admin-table"> |
||||||
|
<table class="table table-striped"> |
||||||
|
<thead> |
||||||
|
<tr> |
||||||
|
<th>Id</th> |
||||||
|
<th>{{.i18n.Tr "admin.notices.type"}}</th> |
||||||
|
<th>{{.i18n.Tr "admin.notices.desc"}}</th> |
||||||
|
<th>{{.i18n.Tr "admin.users.created"}}</th> |
||||||
|
<th>{{.i18n.Tr "admin.notices.op"}}</th> |
||||||
|
</tr> |
||||||
|
</thead> |
||||||
|
<tbody> |
||||||
|
{{range .Notices}} |
||||||
|
<tr> |
||||||
|
<td>{{.Id}}</td> |
||||||
|
<td>{{$.i18n.Tr .TrStr}}</td> |
||||||
|
<td class="grid-1-2"><span>{{.Description}}</span></td> |
||||||
|
<td>{{.Created}}</td> |
||||||
|
<td><a href="{{AppSubUrl}}/admin/notices/{{.Id}}/delete"><i class="fa fa-trash-o text-red"></i></a></td> |
||||||
|
</tr> |
||||||
|
{{end}} |
||||||
|
</tbody> |
||||||
|
</table> |
||||||
|
{{if or .LastPageNum .NextPageNum}} |
||||||
|
<ul class="pagination"> |
||||||
|
{{if .LastPageNum}}<li><a class="btn btn-medium btn-gray btn-radius" href="{{AppSubUrl}}/admin/users?p={{.LastPageNum}}">« {{.i18n.Tr "admin.prev"}}</a></li>{{end}} |
||||||
|
{{if .NextPageNum}}<li><a class="btn btn-medium btn-gray btn-radius" href="{{AppSubUrl}}/admin/users?p={{.NextPageNum}}">» {{.i18n.Tr "admin.next"}}</a></li>{{end}} |
||||||
|
</ul> |
||||||
|
{{end}} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
{{template "ng/base/footer" .}} |
Loading…
Reference in new issue