64 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
| package calendar
 | |
| 
 | |
| import (
 | |
| 	"math/rand"
 | |
| 
 | |
| 	"github.com/gin-gonic/gin"
 | |
| 	"gorm.io/gorm"
 | |
| 	"kumoly.io/kumoly/app/auth"
 | |
| 	"kumoly.io/kumoly/app/errors"
 | |
| )
 | |
| 
 | |
| func HasCalAccess(c *gin.Context, cal *Calendar, cid string) error {
 | |
| 	err := db.First(cal, "id = ?", cid).Error
 | |
| 	if err != nil {
 | |
| 		return errors.NewError(404, err)
 | |
| 	}
 | |
| 	if cal.GroupName == "" {
 | |
| 		return nil
 | |
| 	}
 | |
| 	if !auth.ACHas(c, auth.ADMIN, auth.SYSTEM, cal.GroupName) {
 | |
| 		return errors.ErrorForbidden
 | |
| 	}
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func HasEventAccess(c *gin.Context, e *Event, eid string) error {
 | |
| 	err := db.First(e, "id = ?", eid).Error
 | |
| 	if err != nil {
 | |
| 		return errors.NewError(404, err)
 | |
| 	}
 | |
| 	if e.EventGroup.GroupName == "" {
 | |
| 		return nil
 | |
| 	}
 | |
| 	if !auth.ACHas(c, auth.ADMIN, auth.SYSTEM, e.EventGroup.GroupName) {
 | |
| 		return errors.ErrorForbidden
 | |
| 	}
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func ChangeCalGroup(tx *gorm.DB, cal_id, to string) error {
 | |
| 	affected := tx.Exec(`update calendars set group_id = (
 | |
| 		select id from groups where name = ?
 | |
| 	) where id = ?`, to, cal_id).RowsAffected
 | |
| 	if affected == 0 {
 | |
| 		return errors.ErrorNotFound
 | |
| 	}
 | |
| 	tx.Exec(`update event_groups set group_id = (
 | |
| 		select id from groups where name = ?
 | |
| 	) where id in ( 
 | |
| 		select event_group_id from events where calendar_id = ? 
 | |
| 	)`, to, cal_id)
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func GetNewColor(GroupName string) int {
 | |
| 	eg := &EventGroup{}
 | |
| 	if err := db.Select("color").
 | |
| 		Where("group_id = (select id from groups where name = ? )", GroupName).
 | |
| 		Last(eg).Error; err != nil {
 | |
| 		return rand.Intn(len(Color))
 | |
| 	}
 | |
| 	return eg.Color + 1
 | |
| }
 |