mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender.git
synced 2025-08-02 09:49:13 +02:00
added UserDefined Module Naming
This commit is contained in:
@@ -1,15 +1,11 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"github.com/jordic/goics"
|
||||
"github.com/pocketbase/dbx"
|
||||
"github.com/pocketbase/pocketbase"
|
||||
"github.com/pocketbase/pocketbase/models"
|
||||
"htwkalender/model"
|
||||
"log"
|
||||
"strings"
|
||||
"time"
|
||||
"unicode"
|
||||
)
|
||||
|
||||
func SaveEvents(seminarGroup []model.SeminarGroup, collection *models.Collection, app *pocketbase.PocketBase) ([]*models.Record, error) {
|
||||
@@ -81,60 +77,10 @@ func findEventByDayWeekStartEndNameCourse(event model.Event, course string, app
|
||||
return &event, err
|
||||
}
|
||||
|
||||
func contains(s []string, e string) bool {
|
||||
for _, a := range s {
|
||||
if a == e {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// GetRooms function to get all rooms from database that are stored as a string in the Event struct
|
||||
func GetRooms(app *pocketbase.PocketBase) []string {
|
||||
|
||||
var events []struct {
|
||||
Rooms string `db:"Rooms" json:"Rooms"`
|
||||
}
|
||||
|
||||
// get all rooms from event records in the events collection
|
||||
err := app.Dao().DB().Select("Rooms").From("events").All(&events)
|
||||
if err != nil {
|
||||
print("Error while getting rooms from database: ", err)
|
||||
return nil
|
||||
}
|
||||
|
||||
var roomArray []string
|
||||
|
||||
for _, event := range events {
|
||||
var room = strings.Split(event.Rooms, " ")
|
||||
//split string room by space and add each room to array if it is not already in there
|
||||
for _, r := range room {
|
||||
var text = strings.TrimSpace(r)
|
||||
if !contains(roomArray, text) && !strings.Contains(text, " ") && len(text) >= 1 {
|
||||
roomArray = append(roomArray, text)
|
||||
}
|
||||
}
|
||||
}
|
||||
return roomArray
|
||||
}
|
||||
|
||||
func GetRoomScheduleForDay(app *pocketbase.PocketBase, room string, date string) []model.Event {
|
||||
var events []model.Event
|
||||
|
||||
// get all events from event records in the events collection
|
||||
err := app.Dao().DB().Select("*").From("events").Where(dbx.Like("Rooms", room)).AndWhere(dbx.Like("Start", date)).All(&events)
|
||||
if err != nil {
|
||||
print("Error while getting events from database: ", err)
|
||||
return nil
|
||||
}
|
||||
return events
|
||||
}
|
||||
|
||||
// gets all events for specific course and semester
|
||||
// TODO add filter for year
|
||||
func GetPlanForCourseAndSemester(app *pocketbase.PocketBase, course string, semester string) Events {
|
||||
var events Events
|
||||
func GetPlanForCourseAndSemester(app *pocketbase.PocketBase, course string, semester string) model.Events {
|
||||
var events model.Events
|
||||
// get all events from event records in the events collection
|
||||
err := app.Dao().DB().Select("*").From("events").Where(dbx.NewExp("course = {:course} AND semester = {:semester}", dbx.Params{"course": course, "semester": semester})).All(&events)
|
||||
if err != nil {
|
||||
@@ -144,12 +90,9 @@ func GetPlanForCourseAndSemester(app *pocketbase.PocketBase, course string, seme
|
||||
return events
|
||||
}
|
||||
|
||||
func GetPlanForModules(app *pocketbase.PocketBase, modules []struct {
|
||||
Name string `db:"Name" json:"Name"`
|
||||
Course string `db:"course" json:"Course"`
|
||||
}) Events {
|
||||
func GetPlanForModules(app *pocketbase.PocketBase, modules []model.FeedCollection) model.Events {
|
||||
|
||||
// build query string with name equals elements in modules for dbx query
|
||||
// build query functions with name equals elements in modules for dbx query
|
||||
|
||||
var queryString string
|
||||
for i, module := range modules {
|
||||
@@ -160,7 +103,7 @@ func GetPlanForModules(app *pocketbase.PocketBase, modules []struct {
|
||||
}
|
||||
}
|
||||
|
||||
var events Events
|
||||
var events model.Events
|
||||
// get all events from event records in the events collection
|
||||
err := app.Dao().DB().Select("*").From("events").Where(dbx.NewExp(queryString)).All(&events)
|
||||
if err != nil {
|
||||
@@ -218,59 +161,3 @@ func GetAllModulesDistinct(app *pocketbase.PocketBase) ([]struct {
|
||||
}
|
||||
return eventArray, nil
|
||||
}
|
||||
|
||||
type Events []*model.Event
|
||||
|
||||
// EmitICal implements the interface for goics
|
||||
func (e Events) EmitICal() goics.Componenter {
|
||||
layout := "2006-01-02 15:04:05 -0700 MST"
|
||||
c := goics.NewComponent()
|
||||
c.SetType("VCALENDAR")
|
||||
c.AddProperty("VERSION", "2.0")
|
||||
c.AddProperty("CALSCAL", "GREGORIAN")
|
||||
c.AddProperty("TZID", "Europe/Berlin")
|
||||
c.AddProperty("X-WR-CALNAME", "HTWK Kalender")
|
||||
c.AddProperty("X-WR-TIMEZONE", "Europe/Berlin")
|
||||
c.AddProperty("X-LIC-LOCATION", "Europe/Berlin")
|
||||
for _, event := range e {
|
||||
s := goics.NewComponent()
|
||||
s.SetType("VEVENT")
|
||||
timeEnd, _ := time.Parse(layout, event.End)
|
||||
timeStart, _ := time.Parse(layout, event.Start)
|
||||
k, v := goics.FormatDateTime("DTEND;TZID=Europe/Berlin", timeEnd)
|
||||
s.AddProperty(k, v)
|
||||
k, v = goics.FormatDateTime("DTSTART;TZID=Europe/Berlin", timeStart)
|
||||
s.AddProperty(k, v)
|
||||
s.AddProperty("SUMMARY", event.Name)
|
||||
s.AddProperty("DESCRIPTION", generateDescription(event))
|
||||
s.AddProperty("LOCATION", event.Rooms)
|
||||
c.AddComponent(s)
|
||||
}
|
||||
return c
|
||||
}
|
||||
|
||||
func generateDescription(event *model.Event) string {
|
||||
var description string
|
||||
|
||||
if !CheckIfOnlyWhitespace(event.Notes) {
|
||||
description += "Notizen: " + event.Notes + "\n"
|
||||
}
|
||||
if !CheckIfOnlyWhitespace(event.Prof) {
|
||||
description += "Prof: " + event.Prof + "\n"
|
||||
}
|
||||
if !CheckIfOnlyWhitespace(event.Course) {
|
||||
description += "Gruppe: " + event.Course + "\n"
|
||||
}
|
||||
|
||||
return description
|
||||
}
|
||||
|
||||
// check if course is empty or contains only whitespaces
|
||||
func CheckIfOnlyWhitespace(word string) bool {
|
||||
for _, letter := range word {
|
||||
if !unicode.IsSpace(letter) || !(letter == int32(160)) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
49
backend/service/db/dbRooms.go
Normal file
49
backend/service/db/dbRooms.go
Normal file
@@ -0,0 +1,49 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"github.com/pocketbase/dbx"
|
||||
"github.com/pocketbase/pocketbase"
|
||||
"htwkalender/model"
|
||||
"htwkalender/service/functions"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func GetRooms(app *pocketbase.PocketBase) []string {
|
||||
|
||||
var events []struct {
|
||||
Rooms string `db:"Rooms" json:"Rooms"`
|
||||
}
|
||||
|
||||
// get all rooms from event records in the events collection
|
||||
err := app.Dao().DB().Select("Rooms").From("events").All(&events)
|
||||
if err != nil {
|
||||
print("Error while getting rooms from database: ", err)
|
||||
return nil
|
||||
}
|
||||
|
||||
var roomArray []string
|
||||
|
||||
for _, event := range events {
|
||||
var room = strings.Split(event.Rooms, " ")
|
||||
//split functions room by space and add each room to array if it is not already in there
|
||||
for _, r := range room {
|
||||
var text = strings.TrimSpace(r)
|
||||
if !functions.Contains(roomArray, text) && !strings.Contains(text, " ") && len(text) >= 1 {
|
||||
roomArray = append(roomArray, text)
|
||||
}
|
||||
}
|
||||
}
|
||||
return roomArray
|
||||
}
|
||||
|
||||
func GetRoomScheduleForDay(app *pocketbase.PocketBase, room string, date string) []model.Event {
|
||||
var events []model.Event
|
||||
|
||||
// get all events from event records in the events collection
|
||||
err := app.Dao().DB().Select("*").From("events").Where(dbx.Like("Rooms", room)).AndWhere(dbx.Like("Start", date)).All(&events)
|
||||
if err != nil {
|
||||
print("Error while getting events from database: ", err)
|
||||
return nil
|
||||
}
|
||||
return events
|
||||
}
|
Reference in New Issue
Block a user