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