diff --git a/models/admin.go b/models/admin.go index 903e35b0c9898..062b512f5851b 100644 --- a/models/admin.go +++ b/models/admin.go @@ -22,8 +22,10 @@ type NoticeType int const ( //NoticeRepository type NoticeRepository NoticeType = iota + 1 - // NoticeTask type - NoticeTask + // NoticeTaskSuccess type + NoticeTaskSuccess + // NoticeTaskFail type + NoticeTaskFail ) // Notice represents a system notice for admin. @@ -61,6 +63,14 @@ func CreateRepositoryNotice(desc string, args ...interface{}) error { return createNotice(x, NoticeRepository, desc, args...) } +// CreateTaskNotice creates new system notice with type NoticeTaskSuccess or NoticeTaskFail. +func CreateTaskNotice(isSuccess bool, desc string, args ...interface{}) error { + if isSuccess { + return createNotice(x, NoticeTaskSuccess, desc, args...) + } + return createNotice(x, NoticeTaskFail, desc, args...) +} + // RemoveAllWithNotice removes all directories in given path and // creates a system notice when error occurs. func RemoveAllWithNotice(title, path string) { @@ -94,14 +104,22 @@ func removeAllWithNotice(e Engine, title, path string) { } // CountNotices returns number of notices. -func CountNotices() int64 { - count, _ := x.Count(new(Notice)) - return count +func CountNotices(typ int) (int64, error) { + if typ >= 1 { + return x.Where("type = ?", typ).Count(new(Notice)) + } + return x.Count(new(Notice)) } // Notices returns notices in given page. -func Notices(page, pageSize int) ([]*Notice, error) { +func Notices(typ, page, pageSize int) ([]*Notice, error) { notices := make([]*Notice, 0, pageSize) + if typ >= 1 { + return notices, x.Where("type = ?", typ). + Limit(pageSize, (page-1)*pageSize). + Desc("id"). + Find(¬ices) + } return notices, x. Limit(pageSize, (page-1)*pageSize). Desc("id"). diff --git a/models/admin_test.go b/models/admin_test.go index b4383cb2d313e..70568cd4112f6 100644 --- a/models/admin_test.go +++ b/models/admin_test.go @@ -46,24 +46,35 @@ func TestCreateRepositoryNotice(t *testing.T) { func TestCountNotices(t *testing.T) { assert.NoError(t, PrepareTestDatabase()) - assert.Equal(t, int64(3), CountNotices()) + num, err := CountNotices(0) + assert.NoError(t, err) + assert.Equal(t, int64(3), num) + num, err = CountNotices(2) + assert.NoError(t, err) + assert.Equal(t, int64(1), num) } func TestNotices(t *testing.T) { assert.NoError(t, PrepareTestDatabase()) - notices, err := Notices(1, 2) + notices, err := Notices(0, 1, 2) assert.NoError(t, err) if assert.Len(t, notices, 2) { assert.Equal(t, int64(3), notices[0].ID) assert.Equal(t, int64(2), notices[1].ID) } - notices, err = Notices(2, 2) + notices, err = Notices(0, 2, 2) assert.NoError(t, err) if assert.Len(t, notices, 1) { assert.Equal(t, int64(1), notices[0].ID) } + + notices, err = Notices(2, 1, 2) + assert.NoError(t, err) + if assert.Len(t, notices, 1) { + assert.Equal(t, int64(3), notices[0].ID) + } } func TestDeleteNotice(t *testing.T) { diff --git a/models/fixtures/notice.yml b/models/fixtures/notice.yml index af08f07bfa137..b327f3beb4b46 100644 --- a/models/fixtures/notice.yml +++ b/models/fixtures/notice.yml @@ -10,5 +10,5 @@ - id: 3 - type: 1 # NoticeRepository + type: 2 # NoticeTaskSuccess description: description3 diff --git a/modules/cron/tasks.go b/modules/cron/tasks.go index 6f3a96fd3f850..338219d2e1675 100644 --- a/modules/cron/tasks.go +++ b/modules/cron/tasks.go @@ -88,18 +88,18 @@ func (t *Task) RunWithUser(doer *models.User, config Config) { if err := t.fun(ctx, doer, config); err != nil { if models.IsErrCancelled(err) { message := err.(models.ErrCancelled).Message - if err := models.CreateNotice(models.NoticeTask, config.FormatMessage(t.Name, "aborted", doer, message)); err != nil { + if err := models.CreateTaskNotice(false, config.FormatMessage(t.Name, "aborted", doer, message)); err != nil { log.Error("CreateNotice: %v", err) } return } - if err := models.CreateNotice(models.NoticeTask, config.FormatMessage(t.Name, "error", doer, err)); err != nil { + if err := models.CreateTaskNotice(false, config.FormatMessage(t.Name, "error", doer, err)); err != nil { log.Error("CreateNotice: %v", err) } return } if config.DoNoticeOnSuccess() { - if err := models.CreateNotice(models.NoticeTask, config.FormatMessage(t.Name, "finished", doer)); err != nil { + if err := models.CreateTaskNotice(true, config.FormatMessage(t.Name, "finished", doer)); err != nil { log.Error("CreateNotice: %v", err) } } diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index ff54bcd3b35aa..67bc442e51bcc 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -2452,7 +2452,10 @@ notices.delete_selected = Delete Selected notices.delete_all = Delete All Notices notices.type = Type notices.type_1 = Repository -notices.type_2 = Task +notices.type_2 = Success Task +notices.type_3 = Fail Task +notices.type_all = All Type +notices.type_filter = Type Filter notices.desc = Description notices.op = Op. notices.delete_success = The system notices have been deleted. diff --git a/routers/admin/notice.go b/routers/admin/notice.go index ad2bad21630ca..c16763e6a3c46 100644 --- a/routers/admin/notice.go +++ b/routers/admin/notice.go @@ -25,13 +25,19 @@ func Notices(ctx *context.Context) { ctx.Data["PageIsAdmin"] = true ctx.Data["PageIsAdminNotices"] = true - total := models.CountNotices() page := ctx.QueryInt("page") if page <= 1 { page = 1 } - notices, err := models.Notices(page, setting.UI.Admin.NoticePagingNum) + typ := ctx.QueryInt("type") + total, err := models.CountNotices(typ) + if err != nil { + ctx.ServerError("CountNotices", err) + return + } + + notices, err := models.Notices(typ, page, setting.UI.Admin.NoticePagingNum) if err != nil { ctx.ServerError("Notices", err) return @@ -40,7 +46,11 @@ func Notices(ctx *context.Context) { ctx.Data["Total"] = total - ctx.Data["Page"] = context.NewPagination(int(total), setting.UI.Admin.NoticePagingNum, page, 5) + p := context.NewPagination(int(total), setting.UI.Admin.NoticePagingNum, page, 5) + ctx.Data["Page"] = p + + ctx.Data["NoticesType"] = typ + p.AddParam(ctx, "type", "NoticesType") ctx.HTML(200, tplNotices) } diff --git a/templates/admin/notice.tmpl b/templates/admin/notice.tmpl index 3320f5884c05d..822cfa171c327 100644 --- a/templates/admin/notice.tmpl +++ b/templates/admin/notice.tmpl @@ -5,6 +5,26 @@ {{template "base/alert" .}}