2014-10-08 18:29:18 -04:00
// 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 (
2016-02-05 14:11:53 -05:00
"fmt"
2019-03-10 21:56:36 +00:00
"os"
2014-10-08 18:29:18 -04:00
2017-03-29 10:05:23 +08:00
"code.gitea.io/gitea/modules/log"
2019-08-15 22:46:21 +08:00
"code.gitea.io/gitea/modules/timeutil"
2017-03-29 10:05:23 +08:00
2019-08-23 09:40:30 -07:00
"github.com/unknwon/com"
2014-10-08 18:29:18 -04:00
)
2016-11-24 21:54:00 +01:00
//NoticeType describes the notice type
2014-10-08 18:29:18 -04:00
type NoticeType int
const (
2016-11-24 21:54:00 +01:00
//NoticeRepository type
2016-11-07 17:24:59 +01:00
NoticeRepository NoticeType = iota + 1
2014-10-08 18:29:18 -04:00
)
// Notice represents a system notice for admin.
type Notice struct {
2015-12-05 01:09:14 -05:00
ID int64 ` xorm:"pk autoincr" `
2014-10-08 18:29:18 -04:00
Type NoticeType
2019-08-15 22:46:21 +08:00
Description string ` xorm:"TEXT" `
CreatedUnix timeutil . TimeStamp ` xorm:"INDEX created" `
2014-10-08 18:29:18 -04:00
}
// 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 {
2017-02-24 23:19:13 +08:00
return createNotice ( x , tp , desc )
}
2016-05-06 16:48:18 -03:00
2017-02-24 23:19:13 +08:00
func createNotice ( e Engine , tp NoticeType , desc string ) error {
2014-10-08 18:29:18 -04:00
n := & Notice {
Type : tp ,
Description : desc ,
}
2017-02-24 23:19:13 +08:00
_ , err := e . Insert ( n )
2014-10-08 18:29:18 -04:00
return err
}
2016-11-07 17:24:59 +01:00
// CreateRepositoryNotice creates new system notice with type NoticeRepository.
2014-10-08 18:29:18 -04:00
func CreateRepositoryNotice ( desc string ) error {
2017-02-24 23:19:13 +08:00
return createNotice ( x , NoticeRepository , desc )
2014-10-08 18:29:18 -04:00
}
2016-02-05 14:11:53 -05:00
// RemoveAllWithNotice removes all directories in given path and
// creates a system notice when error occurs.
func RemoveAllWithNotice ( title , path string ) {
2017-02-24 23:19:13 +08:00
removeAllWithNotice ( x , title , path )
}
func removeAllWithNotice ( e Engine , title , path string ) {
2019-03-10 21:56:36 +00:00
if err := os . RemoveAll ( path ) ; err != nil {
2016-02-05 14:11:53 -05:00
desc := fmt . Sprintf ( "%s [%s]: %v" , title , path , err )
2019-06-15 23:20:29 +01:00
log . Warn ( title + " [%s]: %v" , path , err )
2017-02-24 23:19:13 +08:00
if err = createNotice ( e , NoticeRepository , desc ) ; err != nil {
2019-04-02 08:48:31 +01:00
log . Error ( "CreateRepositoryNotice: %v" , err )
2016-02-05 14:11:53 -05:00
}
}
}
2014-10-08 18:29:18 -04:00
// CountNotices returns number of notices.
func CountNotices ( ) int64 {
count , _ := x . Count ( new ( Notice ) )
return count
}
2017-01-09 13:26:05 -05:00
// Notices returns notices in given page.
2015-09-25 18:13:38 +02:00
func Notices ( page , pageSize int ) ( [ ] * Notice , error ) {
notices := make ( [ ] * Notice , 0 , pageSize )
2016-11-10 16:16:32 +01:00
return notices , x .
Limit ( pageSize , ( page - 1 ) * pageSize ) .
Desc ( "id" ) .
Find ( & notices )
2014-10-08 18:29:18 -04:00
}
// DeleteNotice deletes a system notice by given ID.
func DeleteNotice ( id int64 ) error {
2017-10-04 21:43:04 -07:00
_ , err := x . ID ( id ) . Delete ( new ( Notice ) )
2014-10-08 18:29:18 -04:00
return err
}
2015-12-01 23:33:08 -05:00
// DeleteNotices deletes all notices with ID from start to end (inclusive).
func DeleteNotices ( start , end int64 ) error {
sess := x . Where ( "id >= ?" , start )
if end > 0 {
sess . And ( "id <= ?" , end )
}
_ , err := sess . Delete ( new ( Notice ) )
return err
}
2015-12-05 01:09:14 -05:00
// DeleteNoticesByIDs deletes notices by given IDs.
func DeleteNoticesByIDs ( ids [ ] int64 ) error {
if len ( ids ) == 0 {
return nil
}
2016-11-10 16:16:32 +01:00
_ , err := x .
2016-11-12 16:29:18 +08:00
In ( "id" , ids ) .
2016-11-10 16:16:32 +01:00
Delete ( new ( Notice ) )
2015-12-05 01:09:14 -05:00
return err
}