mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender-pwa.git
synced 2025-07-16 17:48:51 +02:00
update paths and ical link url
This commit is contained in:
@ -1,4 +1,4 @@
|
|||||||
module htwk-planner
|
module htwkalender
|
||||||
|
|
||||||
go 1.20
|
go 1.20
|
||||||
|
|
||||||
|
@ -3,8 +3,8 @@ package main
|
|||||||
import (
|
import (
|
||||||
"github.com/pocketbase/pocketbase"
|
"github.com/pocketbase/pocketbase"
|
||||||
"github.com/pocketbase/pocketbase/plugins/migratecmd"
|
"github.com/pocketbase/pocketbase/plugins/migratecmd"
|
||||||
_ "htwk-planner/migrations"
|
_ "htwkalender/migrations"
|
||||||
"htwk-planner/service"
|
"htwkalender/service"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -5,10 +5,10 @@ import (
|
|||||||
"github.com/pocketbase/pocketbase"
|
"github.com/pocketbase/pocketbase"
|
||||||
"github.com/pocketbase/pocketbase/apis"
|
"github.com/pocketbase/pocketbase/apis"
|
||||||
"github.com/pocketbase/pocketbase/core"
|
"github.com/pocketbase/pocketbase/core"
|
||||||
events2 "htwk-planner/service/events"
|
"htwkalender/service/events"
|
||||||
fetch2 "htwk-planner/service/fetch"
|
"htwkalender/service/fetch"
|
||||||
"htwk-planner/service/ical"
|
"htwkalender/service/ical"
|
||||||
"htwk-planner/service/room"
|
"htwkalender/service/room"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
@ -25,7 +25,7 @@ func AddRoutes(app *pocketbase.PocketBase) {
|
|||||||
Method: http.MethodGet,
|
Method: http.MethodGet,
|
||||||
Path: "/api/fetchPlans",
|
Path: "/api/fetchPlans",
|
||||||
Handler: func(c echo.Context) error {
|
Handler: func(c echo.Context) error {
|
||||||
return fetch2.GetSeminarEvents(c, app)
|
return fetch.GetSeminarEvents(c, app)
|
||||||
},
|
},
|
||||||
Middlewares: []echo.MiddlewareFunc{
|
Middlewares: []echo.MiddlewareFunc{
|
||||||
apis.ActivityLogger(app),
|
apis.ActivityLogger(app),
|
||||||
@ -42,7 +42,7 @@ func AddRoutes(app *pocketbase.PocketBase) {
|
|||||||
Method: http.MethodGet,
|
Method: http.MethodGet,
|
||||||
Path: "/api/fetchGroups",
|
Path: "/api/fetchGroups",
|
||||||
Handler: func(c echo.Context) error {
|
Handler: func(c echo.Context) error {
|
||||||
return fetch2.SeminarGroups(c, app)
|
return fetch.SeminarGroups(c, app)
|
||||||
},
|
},
|
||||||
Middlewares: []echo.MiddlewareFunc{
|
Middlewares: []echo.MiddlewareFunc{
|
||||||
apis.ActivityLogger(app),
|
apis.ActivityLogger(app),
|
||||||
@ -113,7 +113,7 @@ func AddRoutes(app *pocketbase.PocketBase) {
|
|||||||
Handler: func(c echo.Context) error {
|
Handler: func(c echo.Context) error {
|
||||||
course := c.QueryParam("course")
|
course := c.QueryParam("course")
|
||||||
semester := c.QueryParam("semester")
|
semester := c.QueryParam("semester")
|
||||||
return events2.GetModulesForCourseDistinct(app, c, course, semester)
|
return events.GetModulesForCourseDistinct(app, c, course, semester)
|
||||||
},
|
},
|
||||||
Middlewares: []echo.MiddlewareFunc{
|
Middlewares: []echo.MiddlewareFunc{
|
||||||
apis.ActivityLogger(app),
|
apis.ActivityLogger(app),
|
||||||
@ -130,7 +130,7 @@ func AddRoutes(app *pocketbase.PocketBase) {
|
|||||||
Method: http.MethodGet,
|
Method: http.MethodGet,
|
||||||
Path: "/api/modules",
|
Path: "/api/modules",
|
||||||
Handler: func(c echo.Context) error {
|
Handler: func(c echo.Context) error {
|
||||||
return events2.GetAllModulesDistinct(app, c)
|
return events.GetAllModulesDistinct(app, c)
|
||||||
},
|
},
|
||||||
Middlewares: []echo.MiddlewareFunc{
|
Middlewares: []echo.MiddlewareFunc{
|
||||||
apis.ActivityLogger(app),
|
apis.ActivityLogger(app),
|
||||||
@ -147,7 +147,7 @@ func AddRoutes(app *pocketbase.PocketBase) {
|
|||||||
Method: http.MethodGet,
|
Method: http.MethodGet,
|
||||||
Path: "/api/courses",
|
Path: "/api/courses",
|
||||||
Handler: func(c echo.Context) error {
|
Handler: func(c echo.Context) error {
|
||||||
return events2.GetAllCourses(app, c)
|
return events.GetAllCourses(app, c)
|
||||||
},
|
},
|
||||||
Middlewares: []echo.MiddlewareFunc{
|
Middlewares: []echo.MiddlewareFunc{
|
||||||
apis.ActivityLogger(app),
|
apis.ActivityLogger(app),
|
||||||
|
@ -5,7 +5,7 @@ import (
|
|||||||
"github.com/pocketbase/dbx"
|
"github.com/pocketbase/dbx"
|
||||||
"github.com/pocketbase/pocketbase"
|
"github.com/pocketbase/pocketbase"
|
||||||
"github.com/pocketbase/pocketbase/models"
|
"github.com/pocketbase/pocketbase/models"
|
||||||
"htwk-planner/model"
|
"htwkalender/model"
|
||||||
"log"
|
"log"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
@ -4,7 +4,7 @@ import (
|
|||||||
"github.com/pocketbase/dbx"
|
"github.com/pocketbase/dbx"
|
||||||
"github.com/pocketbase/pocketbase"
|
"github.com/pocketbase/pocketbase"
|
||||||
"github.com/pocketbase/pocketbase/models"
|
"github.com/pocketbase/pocketbase/models"
|
||||||
"htwk-planner/model"
|
"htwkalender/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
func SaveFeed(feed model.Feed, collection *models.Collection, app *pocketbase.PocketBase) (*models.Record, error) {
|
func SaveFeed(feed model.Feed, collection *models.Collection, app *pocketbase.PocketBase) (*models.Record, error) {
|
||||||
|
@ -4,7 +4,7 @@ import (
|
|||||||
"github.com/pocketbase/dbx"
|
"github.com/pocketbase/dbx"
|
||||||
"github.com/pocketbase/pocketbase"
|
"github.com/pocketbase/pocketbase"
|
||||||
"github.com/pocketbase/pocketbase/models"
|
"github.com/pocketbase/pocketbase/models"
|
||||||
"htwk-planner/model"
|
"htwkalender/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
func SaveGroups(seminarGroup []model.SeminarGroup, collection *models.Collection, app *pocketbase.PocketBase) ([]*models.Record, error) {
|
func SaveGroups(seminarGroup []model.SeminarGroup, collection *models.Collection, app *pocketbase.PocketBase) ([]*models.Record, error) {
|
||||||
|
@ -3,7 +3,7 @@ package events
|
|||||||
import (
|
import (
|
||||||
"github.com/labstack/echo/v5"
|
"github.com/labstack/echo/v5"
|
||||||
"github.com/pocketbase/pocketbase"
|
"github.com/pocketbase/pocketbase"
|
||||||
"htwk-planner/service/db"
|
"htwkalender/service/db"
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetAllCourses(app *pocketbase.PocketBase, c echo.Context) error {
|
func GetAllCourses(app *pocketbase.PocketBase, c echo.Context) error {
|
||||||
|
@ -3,7 +3,7 @@ package events
|
|||||||
import (
|
import (
|
||||||
"github.com/labstack/echo/v5"
|
"github.com/labstack/echo/v5"
|
||||||
"github.com/pocketbase/pocketbase"
|
"github.com/pocketbase/pocketbase"
|
||||||
"htwk-planner/service/db"
|
"htwkalender/service/db"
|
||||||
"unicode"
|
"unicode"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -6,9 +6,9 @@ import (
|
|||||||
"github.com/pocketbase/pocketbase"
|
"github.com/pocketbase/pocketbase"
|
||||||
"github.com/pocketbase/pocketbase/apis"
|
"github.com/pocketbase/pocketbase/apis"
|
||||||
"golang.org/x/net/html"
|
"golang.org/x/net/html"
|
||||||
"htwk-planner/model"
|
"htwkalender/model"
|
||||||
"htwk-planner/service/date"
|
"htwkalender/service/date"
|
||||||
"htwk-planner/service/db"
|
"htwkalender/service/db"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
@ -7,8 +7,8 @@ import (
|
|||||||
"github.com/pocketbase/pocketbase"
|
"github.com/pocketbase/pocketbase"
|
||||||
"github.com/pocketbase/pocketbase/apis"
|
"github.com/pocketbase/pocketbase/apis"
|
||||||
"github.com/pocketbase/pocketbase/models"
|
"github.com/pocketbase/pocketbase/models"
|
||||||
"htwk-planner/model"
|
"htwkalender/model"
|
||||||
"htwk-planner/service/db"
|
"htwkalender/service/db"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
@ -7,8 +7,8 @@ import (
|
|||||||
"github.com/labstack/echo/v5"
|
"github.com/labstack/echo/v5"
|
||||||
"github.com/pocketbase/pocketbase"
|
"github.com/pocketbase/pocketbase"
|
||||||
"github.com/pocketbase/pocketbase/apis"
|
"github.com/pocketbase/pocketbase/apis"
|
||||||
model "htwk-planner/model"
|
model "htwkalender/model"
|
||||||
db "htwk-planner/service/db"
|
db "htwkalender/service/db"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
|
@ -3,7 +3,7 @@ package room
|
|||||||
import (
|
import (
|
||||||
"github.com/labstack/echo/v5"
|
"github.com/labstack/echo/v5"
|
||||||
"github.com/pocketbase/pocketbase"
|
"github.com/pocketbase/pocketbase"
|
||||||
"htwk-planner/service/db"
|
"htwkalender/service/db"
|
||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -17,4 +17,4 @@ If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has a
|
|||||||
2. Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)`
|
2. Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)`
|
||||||
2. Reload the VSCode window by running `Developer: Reload Window` from the command palette.
|
2. Reload the VSCode window by running `Developer: Reload Window` from the command palette.
|
||||||
|
|
||||||
# htwk-planner-frontend
|
# htwkalender-frontend
|
||||||
|
4
frontend/package-lock.json
generated
4
frontend/package-lock.json
generated
@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"name": "htwk-planner",
|
"name": "htwkalender",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "htwk-planner",
|
"name": "htwkalender",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"pinia": "^2.1.6",
|
"pinia": "^2.1.6",
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "htwk-planner",
|
"name": "htwkalender",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
Binary file not shown.
@ -5,6 +5,8 @@ import { onMounted } from "vue";
|
|||||||
import router from "../router";
|
import router from "../router";
|
||||||
const toast = useToast();
|
const toast = useToast();
|
||||||
|
|
||||||
|
const domain = window.location.hostname;
|
||||||
|
|
||||||
const show = () => {
|
const show = () => {
|
||||||
toast.add({
|
toast.add({
|
||||||
severity: "info",
|
severity: "info",
|
||||||
@ -25,7 +27,7 @@ function rerouteIfTokenIsEmpty() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function copyToClipboard() {
|
function copyToClipboard() {
|
||||||
const text = "http://localhost:8090/api/feed?token=" + tokenStore().token;
|
const text = "https://" + domain + "/api/feed?token=" + tokenStore().token;
|
||||||
// Copy the text inside the text field
|
// Copy the text inside the text field
|
||||||
navigator.clipboard.writeText(text);
|
navigator.clipboard.writeText(text);
|
||||||
show();
|
show();
|
||||||
@ -37,7 +39,7 @@ function copyToClipboard() {
|
|||||||
<div class="flex flex-column">
|
<div class="flex flex-column">
|
||||||
<div class="flex align-items-center justify-content-center h-4rem m-2">
|
<div class="flex align-items-center justify-content-center h-4rem m-2">
|
||||||
<h2>
|
<h2>
|
||||||
{{ "http://localhost:8090/api/feed?token=" + tokenStore().token }}
|
{{ "https://" + domain + "/api/feed?token=" + tokenStore().token }}
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex align-items-center justify-content-center h-4rem m-2">
|
<div class="flex align-items-center justify-content-center h-4rem m-2">
|
||||||
|
@ -42,7 +42,7 @@ async function getModules() {
|
|||||||
<template>
|
<template>
|
||||||
<div class="flex flex-column">
|
<div class="flex flex-column">
|
||||||
<div class="flex align-items-center justify-content-center h-4rem m-2">
|
<div class="flex align-items-center justify-content-center h-4rem m-2">
|
||||||
<h3 class="text-4xl">Welcome to the Course Calendar</h3>
|
<h3 class="text-4xl">Welcome to HTWKalender <i class="pi pi-calendar vertical-align-baseline" style="font-size: 2rem"></i></h3>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="flex align-items-center justify-content-center h-4rem border-round m-2"
|
class="flex align-items-center justify-content-center h-4rem border-round m-2"
|
||||||
|
@ -1,10 +1,175 @@
|
|||||||
<script lang="ts" setup></script>
|
<script lang="ts" setup>
|
||||||
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="flex flex-column">
|
<div class="flex align-items-center justify-content-center flex-column">
|
||||||
<div class="flex align-items-center justify-content-center h-4rem m-2">
|
<div class="flex align-items-center justify-content-center h-4rem m-2">
|
||||||
<h2>FAQ</h2>
|
<h1>FAQ</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="flex flex-column col-7">
|
||||||
|
|
||||||
|
<div class="grid my-2">
|
||||||
|
<div class="col">
|
||||||
|
Wie funktioniert das Kalender erstellen mit dem HTWKalender?
|
||||||
|
</div>
|
||||||
|
<div class="col">Die Webseite ermöglicht es deinen HTWK-Stundenplan in eines deiner bevorzugten Kalender-Verwaltungs-Programme (Outlook, Google Kalender, etc.) einzubinden.</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="grid my-2">
|
||||||
|
<div class="col">
|
||||||
|
Wie genau funktioniert das alles?
|
||||||
|
</div>
|
||||||
|
<div class="col">Du wählst deinen Studiengang und das gewünschte Semester aus, danach kannst du aus den dazugehörigen Modulen wählen. Dabei kannst du einzelne Module an/abwählen wie "Feiertage" oder Wahlpflichtmodule, die du nicht belegst. <br>
|
||||||
|
Im letzten Schritt wird dir der Link mit dem entsprechenden Token für den von dir erstellenten Kalenders angezeigt. Mit diesem Link kannst du den Kalender abonnieren oder herunterladen.</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="grid my-2">
|
||||||
|
<div class="col">
|
||||||
|
Wie kann ich den Kalender abonnieren?
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<Accordion>
|
||||||
|
<AccordionTab header="Google Calendar">
|
||||||
|
<ol>
|
||||||
|
<li>Erstelle deinen Kalender und kopiere den Link.</li>
|
||||||
|
<li>Bei Google Kalender selbst hast du in der linken Seitenleiste eine Sektion namens <em>"Weitere Kalender"</em>. Dort klickst du das kleine Pfeil-Icon rechts neben dem Schritzug. Im daraufhin erscheinenden Menü gibt es einen Punkt <em>"Über URL hinzufügen"</em>, den du anklicken musst.</li>
|
||||||
|
<li>Füge den kopierten Kalenderlink ein, klicke auf <em>"Kalender hinzufügen"</em> und du bist fertig.</li>
|
||||||
|
</ol>
|
||||||
|
</AccordionTab>
|
||||||
|
<AccordionTab header="Microsoft Outlook">
|
||||||
|
|
||||||
|
<p>Unter Outlook 2010:</p>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li>Erstelle deinen Kalender und kopiere den Link.</li>
|
||||||
|
<li>Klicke auf den Reiter <em>“Start”</em>.</li>
|
||||||
|
<li>Dort befindest sich in der Sektion <em>“Kalender verwalten”</em> der Button <em>“Kalender öffnen”</em>, auf den du kicken musst.</li>
|
||||||
|
<li>Es öffnet sich ein Kontextmenü, in dem du den Punkt <em>“Aus dem Internet”</em> anklickst.</li>
|
||||||
|
<li>Im daraufhin erscheinenden Fenster kannst du den Link einfügen und mit <em>“OK”</em> bestätigen. Eventuell musst du das Abonnement in einem weiteren Schritt noch bestätigen. Dann bist du fertig.</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<p>Unter Outlook 2007:</p>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li>Erstelle deinen Kalender und kopiere den Link.</li>
|
||||||
|
<li>Unter <em>“Extras”</em> findest du die <em>“Kontoeinstellungen”</em>.</li>
|
||||||
|
<li>Dort auf den Reiter <em>“Internetkalender”</em> klicken.</li>
|
||||||
|
<li>Auf <em>“Neu”</em> klicken.</li>
|
||||||
|
<li>Im sich öffnenden Fenster musst du den Link einfügen. Allerdings musst du <em>“http://”</em> durch <em>“webcal://”</em> austauschen.</li>
|
||||||
|
<li>Spätestens beim nächsten Start sollte der Kalender aktualisiert werden und dir fortan zur Verfügung stehen.</li>
|
||||||
|
</ol>
|
||||||
|
</AccordionTab>
|
||||||
|
<AccordionTab header="Kalender (OS X)">
|
||||||
|
<ol>
|
||||||
|
<li>Erstelle deinen Kalender und kopiere den Link.</li>
|
||||||
|
<li>Unter <em>“Ablage”</em> findest du den Punkt <em>“Neues Kalenderabonnement”</em> (oder unter Snow Leopard <em>“Abonnieren”</em>).</li>
|
||||||
|
<li>Im daraufhin erscheinenden Fenster musst du den kopierten Link einfügen und <em>“abonnieren”</em> klicken.</li>
|
||||||
|
<li>Anschließend kannst du dem Kalender noch einen Namen geben und bestimmen, wie oft er aktualisiert werden soll. Falls du iCloud auf deinem iPhone o.ä. verwendest, empfehle ich dir bei <em>“Ort”</em> unbedingt <em>“iCloud”</em> zu wählen. So hast du deinen Stundenplan ohne weiteres zutun auch unterwegs immer parat.</li>
|
||||||
|
</ol>
|
||||||
|
</AccordionTab>
|
||||||
|
<AccordionTab header="Thunderbird">
|
||||||
|
<ol>
|
||||||
|
<li>Erstelle deinen Kalender und kopiere den Link.</li>
|
||||||
|
<li>Im Menü <em>“Termine und Aufgaben”</em> den Punkt <em>“Kalender”</em> wählen.</li>
|
||||||
|
<li>Links siehst du die Kalenderübersicht. In diesem Bereich über die rechte Maustaste klicken und im darauf erscheinenden Kontextmenü <em>“Neuer Kalender”</em> anklicken.</li>
|
||||||
|
<li>Du hast die Wahl zwischen <em>“Auf meinem Computer”</em> und <em>“Im Netzwerk”</em>. Bitte letzteres wählen und <em>“Fortsetzen”</em> klicken.</li>
|
||||||
|
<li>Im folgenden Fenster lässt du das <em>“Format”</em> wie es ist (<em>“iCalender”</em>).</li>
|
||||||
|
<li>Unter <em>"Adresse"</em> den kopierten Kalenderlink einfügen.</li>
|
||||||
|
<li>Anschließend kannst du noch einen Namen vergeben und weitere Einstellungen nach Belieben vornehmen.</li>
|
||||||
|
</ol>
|
||||||
|
</AccordionTab>
|
||||||
|
<AccordionTab header="IPhone">
|
||||||
|
|
||||||
|
<p>Der einfachste Weg unter iOS ist der iCloud-Sync (siehe Anleitung für OS X Kalender). Hier ist der andere Weg:</p>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li>Erstelle deinen Kalender und kopiere den Link.</li>
|
||||||
|
<li>Gehe in die <em>“Systemeinstellungen”</em>.</li>
|
||||||
|
<li>Dort wählst du <em>“Mail, Kontakte, Kalender”</em>.</li>
|
||||||
|
<li><em>“Account hinzufügen”</em> auswählen.</li>
|
||||||
|
<li>Ganz unten tippst du auf <em>“Andere”</em>.</li>
|
||||||
|
<li>Der letzte Punkt ist <em>“Kalenderabo hinzufügen”</em>. Dort drauftippen.</li>
|
||||||
|
<li>Im daraufhin erscheinenden Textfeld fügst du den Kalenderlink ein und drückst oben auf <em>“weiter”</em>.</li>
|
||||||
|
<li>Du kannst noch eine <em>“Beschreibung”</em> vergeben. Den Rest solltest du lassen, wie er ist.</li>
|
||||||
|
<li>Nach kurzer Zeit taucht der abonnierte Kalender in der Kalender-App auf.</li>
|
||||||
|
</ol>
|
||||||
|
</AccordionTab>
|
||||||
|
<AccordionTab header="Android">
|
||||||
|
<p>
|
||||||
|
Unter Android ist die Synchronisierung mit dem Google Kalender die einfachste Variante.
|
||||||
|
Schaue bitte in die Google Kalender Anleitung um zu erfahren, wie du den Kalender dort abonnierst.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</AccordionTab>
|
||||||
|
<AccordionTab header="Windows Phone">
|
||||||
|
|
||||||
|
|
||||||
|
<p>Am einfachsten ist unter Windows Phone die Synchronisierung über Outlook.com:</p>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li>Erstelle deinen Kalender und kopiere den Link.</li>
|
||||||
|
<li>Bei Outlook.com anmelden und in den Kalender wechseln.</li>
|
||||||
|
<li>Auf <em>“Subscribe”</em> klicken.</li>
|
||||||
|
<li><em>“Subscribe to a public calendar”</em> auswählen.</li>
|
||||||
|
<li>Bei <em>“Calendar URL”</em> den Kalenderlink einfügen.</li>
|
||||||
|
<li>Sonstige Einstellungen nach Belieben vornehmen.</li>
|
||||||
|
<li>Auf <em>“Subscribe to calendar”</em> klicken.</li>
|
||||||
|
<li>Das Windows-Phone-Gerät muss mit dem gleichen Outlook.com-Benutzerkonto angemeldet sein. Fortan sollte die Synchronisierung des Kalenders automatisch erfolgen.</li>
|
||||||
|
</ol>
|
||||||
|
</AccordionTab>
|
||||||
|
</Accordion>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="grid my-2">
|
||||||
|
<div class="col">
|
||||||
|
Kalender abonnieren? Ich will den <em>downloaden</em>!
|
||||||
|
</div>
|
||||||
|
<div class="col">Das kannst du gern tun. Nachdem dein persönlicher Stundenplan erstellt wurde, hast du die Möglichkeit ihn herunterzuladen. Außerdem kannst du ihn jederzeit herunterladen,
|
||||||
|
wenn du den generierten Link einfach in deinem Browser aufrufst.
|
||||||
|
<br> Bedenke hierbei, dass heruntergeladene Kalender bzw. Stundenpläne sich nicht aktualisieren werden. Das ist nur möglich, wenn du den Kalender abonnierst.</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="grid my-2">
|
||||||
|
<div class="col">
|
||||||
|
Ich belege zusätzlich Module aus anderen Studiengängen und möchte diese auch in meinem Stundenplan haben.
|
||||||
|
</div>
|
||||||
|
<div class="col">Nachdem du die Möglichkeit hattest, die für deinen Studiengang vorgesehenen Module aus dem Modulhandbuch auszuwählen, wirst du auf eine zweite Seite weitergeleitet.
|
||||||
|
Dort hast du die Möglichkeit, weitere Module aus anderen Studiengängen in deinen Studienplan einzufügen.</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="grid my-2">
|
||||||
|
<div class="col my-2">
|
||||||
|
Aktualisierung Probleme mit dem Kalender?
|
||||||
|
</div>
|
||||||
|
<div class="col">Das liegt vermutlich daran, dass du ihn heruntergeladen statt abonniert hast. Automatisch aktualisieren können sich nur Kalender, die du abonniert hast.
|
||||||
|
Eine Aktualisierung des Kalenders auf dem Server wird täglich um 4:00 Uhr durchgeführt. So wird gewährleistet das alle Veränderungen seitens der HTWK übernommen werden.</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="grid my-2">
|
||||||
|
<div class="col">
|
||||||
|
Wie lange ist mein Stundenplan bzw. der Link dorthin gültig?
|
||||||
|
</div>
|
||||||
|
<div class="col">Studenpläne sind erstmal nur für die ausgewählten Semester gültig. Da durch Wahlpflichtmodule oder deine Planung sich Veränderungen ergeben können.</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="grid my-2">
|
||||||
|
<div class="col">
|
||||||
|
Preis und Entwicklung?
|
||||||
|
</div>
|
||||||
|
<div class="col">Die Kosten können durch das selbständiges Hosting vollständig ausgelagert werden. Die Entwicklung soll als aktives Git Projekt auch durch die Community verwaltet werden.</div>
|
||||||
|
</div>
|
||||||
|
<p>
|
||||||
|
Nicht gefunden, wonach du suchst?<br>
|
||||||
|
<a href="/impress">Kontakt aufnehmen</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -1,10 +1,45 @@
|
|||||||
<script lang="ts" setup></script>
|
<script lang="ts" setup>
|
||||||
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="flex align-items-center justify-content-center flex-column">
|
<div class="flex align-items-center justify-content-center flex-column">
|
||||||
<div class="flex align-items-center justify-content-center h-4rem mt-2">
|
<div class="flex align-items-center justify-content-center h-4rem mt-2">
|
||||||
<h3 class="text-4xl">Impress</h3>
|
<h3 class="text-4xl">Impress</h3>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="flex flex-column col-7">
|
||||||
|
<p>nach dem Telemediengesetz (TMG) der Bundesrepublik Deutschland.</p>
|
||||||
|
|
||||||
|
<h2>Kontakt</h2>
|
||||||
|
<p>Per Email: <a href="mailto:support@ekresse.de">support@ekresse.de</a></p>
|
||||||
|
|
||||||
|
<h2>Adresse</h2>
|
||||||
|
<p>Angaben gemäß § 5 TMG und verantwortlich für den Inhalt nach § 55 Abs. 2 RStV:</p>
|
||||||
|
<p>
|
||||||
|
Elmar Kresse<br>
|
||||||
|
Philipp-Rosenthal-Straße 33<br>
|
||||||
|
04103 Leipzig
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>Haftungsausschluss</h2>
|
||||||
|
|
||||||
|
<h3>Haftung für Inhalte</h3>
|
||||||
|
<p>Ich bemühe mich die Inhalte der Seite aktuell zu halten. Trotz sorgfältiger Bearbeitung bleibt eine Haftung ausgeschlossen.</p>
|
||||||
|
<p>Als Diensteanbieter bin ich gemäß § 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich.</p>
|
||||||
|
<p>Nach §§ 8 bis 10 TMG bin ich als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen. Bei bekannt werden von Rechtsverletzungen, werde ich diese Inhalte umgehend entfernen. Eine diesbezügliche Haftung übernehme ich erst ab dem Zeitpunkt der Kenntnis einer möglichen Rechtsverletzung.</p>
|
||||||
|
|
||||||
|
<h3>Haftung für Links</h3>
|
||||||
|
<p>Unser Angebot enthält Links zu externen Webseiten Dritter, auf deren Inhalte wir keinen Einfluss haben. Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Für die Inhalte und die Richtigkeit der Informationen verlinkter Websites fremder Informationsanbieter wird keine Gewähr übernommen.</p>
|
||||||
|
<p>Die verlinkten Seiten wurden zum Zeitpunkt der Verlinkung auf mögliche Rechtsverstöße <strong>ohne Beanstandung</strong> überprüft. Bei bekannt werden von Rechtsverletzungen werden wir derartige Links umgehend entfernen.</p>
|
||||||
|
|
||||||
|
<h2>Urheberrecht</h2>
|
||||||
|
<p>Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers.</p>
|
||||||
|
|
||||||
|
<h2>Datenschutz</h2>
|
||||||
|
<p>siehe <a href="/privacy-policy">Datenschutzerklärung</a></p>
|
||||||
|
|
||||||
|
<h2>Salvatorische Klausel</h2>
|
||||||
|
<p>Sollte eine Bestimmung des Vertrages unwirksam sein, so bleibt die Wirksamkeit der übrigen unberührt. Die unwirksame Bestimmung ist durch eine Bestimmung zu ersetzen, die dem gewollten Zweck in rechtlich zulässiger Weise am nächsten kommt. Das gleiche gilt für Vertragslücken.</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ function nextStep() {
|
|||||||
<template #header>
|
<template #header>
|
||||||
<div class="flex justify-content-between flex-wrap">
|
<div class="flex justify-content-between flex-wrap">
|
||||||
<div class="flex align-items-center justify-content-center">
|
<div class="flex align-items-center justify-content-center">
|
||||||
<h3>Selected Modules - {{ selectedModules().length }}</h3>
|
<h3>Modules - {{ selectedModules().length }}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex align-items-center justify-content-center">
|
<div class="flex align-items-center justify-content-center">
|
||||||
<ToggleButton
|
<ToggleButton
|
||||||
|
@ -1,16 +1,17 @@
|
|||||||
<script lang="ts" setup></script>
|
<script lang="ts" setup>
|
||||||
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="flex align-items-center justify-content-center flex-column">
|
<div class="flex align-items-center justify-content-center flex-column">
|
||||||
<div class="flex align-items-center justify-content-center h-4rem mt-2">
|
<div class="flex align-items-center justify-content-center h-4rem mt-2">
|
||||||
<h3 class="text-4xl">Privacy policy</h3>
|
<h3 class="text-4xl">Privacy policy</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex align-items-center justify-content-center h-4rem">
|
|
||||||
<p>https://github.com/primefaces/primevue/blob/master/LICENSE.md</p>
|
|
||||||
</div>
|
|
||||||
<div class="flex flex-column col-7">
|
<div class="flex flex-column col-7">
|
||||||
<h1>Datenschutzerklärung</h1>
|
<h1>Datenschutzerklärung</h1>
|
||||||
<p>Stand: 19. September 2023</p>
|
<p>Stand: 19. September 2023</p>
|
||||||
|
<p>Mit der folgenden Datenschutzerklärung möchten wir Sie darüber aufklären, welche Arten Ihrer personenbezogenen Daten (nachfolgend auch kurz als "Daten“ bezeichnet) wir zu welchen Zwecken und in welchem Umfang im Rahmen der Bereitstellung unserer Applikation verarbeiten.
|
||||||
|
Die verwendeten Begriffe sind nicht geschlechtsspezifisch.</p>
|
||||||
|
|
||||||
<h2>Inhaltsübersicht</h2>
|
<h2>Inhaltsübersicht</h2>
|
||||||
<ul class="index">
|
<ul class="index">
|
||||||
<li><a class="index-link" href="#m3">Verantwortlicher</a></li>
|
<li><a class="index-link" href="#m3">Verantwortlicher</a></li>
|
||||||
@ -50,7 +51,7 @@
|
|||||||
Deutschland
|
Deutschland
|
||||||
</p>
|
</p>
|
||||||
E-Mail-Adresse:
|
E-Mail-Adresse:
|
||||||
<p><a href="mailto:support@kresse.dev">support@kresse.dev</a></p>
|
<p><a href="mailto:support@ekresse.de">support@ekresse.de</a></p>
|
||||||
|
|
||||||
<h2 id="mOverview">Übersicht der Verarbeitungen</h2>
|
<h2 id="mOverview">Übersicht der Verarbeitungen</h2>
|
||||||
<p>
|
<p>
|
||||||
@ -520,6 +521,93 @@
|
|||||||
1 S. 1 lit. f) DSGVO).
|
1 S. 1 lit. f) DSGVO).
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<h2 id="m10">Rechte der betroffenen Personen</h2>
|
||||||
|
<p>Ihnen stehen als Betroffene nach der DSGVO verschiedene Rechte zu, die sich insbesondere aus Art. 15
|
||||||
|
bis 21 DSGVO
|
||||||
|
ergeben:</p>
|
||||||
|
<ul>
|
||||||
|
<li><strong>Widerspruchsrecht: Sie haben das Recht, aus Gründen, die sich aus Ihrer besonderen
|
||||||
|
Situation
|
||||||
|
ergeben, jederzeit gegen die Verarbeitung der Sie betreffenden personenbezogenen Daten, die
|
||||||
|
aufgrund von
|
||||||
|
Art. 6 Abs. 1 lit. e oder f DSGVO erfolgt, Widerspruch einzulegen; dies gilt auch für ein
|
||||||
|
auf diese
|
||||||
|
Bestimmungen gestütztes Profiling. Werden die Sie betreffenden personenbezogenen Daten
|
||||||
|
verarbeitet, um
|
||||||
|
Direktwerbung zu betreiben, haben Sie das Recht, jederzeit Widerspruch gegen die
|
||||||
|
Verarbeitung der Sie
|
||||||
|
betreffenden personenbezogenen Daten zum Zwecke derartiger Werbung einzulegen; dies gilt
|
||||||
|
auch für das
|
||||||
|
Profiling, soweit es mit solcher Direktwerbung in Verbindung steht.</strong></li>
|
||||||
|
<li><strong>Widerrufsrecht bei Einwilligungen:</strong> Sie haben das Recht, erteilte Einwilligungen
|
||||||
|
jederzeit
|
||||||
|
zu widerrufen.</li>
|
||||||
|
<li><strong>Auskunftsrecht:</strong> Sie haben das Recht, eine Bestätigung darüber zu verlangen, ob
|
||||||
|
betreffende
|
||||||
|
Daten verarbeitet werden und auf Auskunft über diese Daten sowie auf weitere Informationen und
|
||||||
|
Kopie der
|
||||||
|
Daten entsprechend den gesetzlichen Vorgaben.</li>
|
||||||
|
<li><strong>Recht auf Berichtigung:</strong> Sie haben entsprechend den gesetzlichen Vorgaben das
|
||||||
|
Recht, die
|
||||||
|
Vervollständigung der Sie betreffenden Daten oder die Berichtigung der Sie betreffenden
|
||||||
|
unrichtigen Daten zu
|
||||||
|
verlangen.</li>
|
||||||
|
<li><strong>Recht auf Löschung und Einschränkung der Verarbeitung:</strong> Sie haben nach Maßgabe
|
||||||
|
der
|
||||||
|
gesetzlichen Vorgaben das Recht, zu verlangen, dass Sie betreffende Daten unverzüglich gelöscht
|
||||||
|
werden, bzw.
|
||||||
|
alternativ nach Maßgabe der gesetzlichen Vorgaben eine Einschränkung der Verarbeitung der Daten
|
||||||
|
zu
|
||||||
|
verlangen.</li>
|
||||||
|
<li><strong>Recht auf Datenübertragbarkeit:</strong> Sie haben das Recht, Sie betreffende Daten, die
|
||||||
|
Sie uns
|
||||||
|
bereitgestellt haben, nach Maßgabe der gesetzlichen Vorgaben in einem strukturierten, gängigen
|
||||||
|
und
|
||||||
|
maschinenlesbaren Format zu erhalten oder deren Übermittlung an einen anderen Verantwortlichen
|
||||||
|
zu fordern.
|
||||||
|
</li>
|
||||||
|
<li><strong>Beschwerde bei Aufsichtsbehörde:</strong> Sie haben unbeschadet eines anderweitigen
|
||||||
|
verwaltungsrechtlichen oder gerichtlichen Rechtsbehelfs das Recht auf Beschwerde bei einer
|
||||||
|
Aufsichtsbehörde,
|
||||||
|
insbesondere in dem Mitgliedstaat ihres gewöhnlichen Aufenthaltsorts, ihres Arbeitsplatzes oder
|
||||||
|
des Orts des
|
||||||
|
mutmaßlichen Verstoßes, wenn Sie der Ansicht sind, dass die Verarbeitung der Sie betreffenden
|
||||||
|
personenbezogenen Daten gegen die Vorgaben der DSGVO verstößt.</li>
|
||||||
|
</ul>
|
||||||
|
<h2 id="m42">Begriffsdefinitionen</h2>
|
||||||
|
<p>In diesem Abschnitt erhalten Sie eine Übersicht über die in dieser Datenschutzerklärung verwendeten
|
||||||
|
Begrifflichkeiten. Viele der Begriffe sind dem Gesetz entnommen und vor allem im Art. 4 DSGVO
|
||||||
|
definiert. Die
|
||||||
|
gesetzlichen Definitionen sind verbindlich. Die nachfolgenden Erläuterungen sollen dagegen vor allem
|
||||||
|
dem
|
||||||
|
Verständnis dienen. Die Begriffe sind alphabetisch sortiert.</p>
|
||||||
|
<ul class="glossary">
|
||||||
|
<li><strong>Personenbezogene Daten:</strong> "Personenbezogene Daten“ sind alle Informationen, die
|
||||||
|
sich auf eine
|
||||||
|
identifizierte oder identifizierbare natürliche Person (im Folgenden "betroffene Person“)
|
||||||
|
beziehen; als
|
||||||
|
identifizierbar wird eine natürliche Person angesehen, die direkt oder indirekt, insbesondere
|
||||||
|
mittels
|
||||||
|
Zuordnung zu einer Kennung wie einem Namen, zu einer Kennnummer, zu Standortdaten, zu einer
|
||||||
|
Online-Kennung
|
||||||
|
(z.B. Cookie) oder zu einem oder mehreren besonderen Merkmalen identifiziert werden kann, die
|
||||||
|
Ausdruck der
|
||||||
|
physischen, physiologischen, genetischen, psychischen, wirtschaftlichen, kulturellen oder
|
||||||
|
sozialen Identität
|
||||||
|
dieser natürlichen Person sind. </li>
|
||||||
|
<li><strong>Verantwortlicher:</strong> Als "Verantwortlicher“ wird die natürliche oder juristische
|
||||||
|
Person,
|
||||||
|
Behörde, Einrichtung oder andere Stelle, die allein oder gemeinsam mit anderen über die Zwecke
|
||||||
|
und Mittel
|
||||||
|
der Verarbeitung von personenbezogenen Daten entscheidet, bezeichnet. </li>
|
||||||
|
<li><strong>Verarbeitung:</strong> "Verarbeitung" ist jeder mit oder ohne Hilfe automatisierter
|
||||||
|
Verfahren
|
||||||
|
ausgeführte Vorgang oder jede solche Vorgangsreihe im Zusammenhang mit personenbezogenen Daten.
|
||||||
|
Der Begriff
|
||||||
|
reicht weit und umfasst praktisch jeden Umgang mit Daten, sei es das Erheben, das Auswerten, das
|
||||||
|
Speichern,
|
||||||
|
das Übermitteln oder das Löschen. </li>
|
||||||
|
</ul>
|
||||||
<p class="seal">
|
<p class="seal">
|
||||||
<a
|
<a
|
||||||
href="https://datenschutz-generator.de/"
|
href="https://datenschutz-generator.de/"
|
||||||
|
@ -19,6 +19,8 @@ import { createPinia } from "pinia";
|
|||||||
import MultiSelect from "primevue/multiselect";
|
import MultiSelect from "primevue/multiselect";
|
||||||
import ToastService from "primevue/toastservice";
|
import ToastService from "primevue/toastservice";
|
||||||
import Toast from "primevue/toast";
|
import Toast from "primevue/toast";
|
||||||
|
import Accordion from 'primevue/accordion';
|
||||||
|
import AccordionTab from 'primevue/accordiontab';
|
||||||
|
|
||||||
const app = createApp(App);
|
const app = createApp(App);
|
||||||
const pinia = createPinia();
|
const pinia = createPinia();
|
||||||
@ -38,4 +40,6 @@ app.component("TabView", TabView);
|
|||||||
app.component("TabPanel", TabPanel);
|
app.component("TabPanel", TabPanel);
|
||||||
app.component("MultiSelect", MultiSelect);
|
app.component("MultiSelect", MultiSelect);
|
||||||
app.component("Toast", Toast);
|
app.component("Toast", Toast);
|
||||||
|
app.component("Accordion", Accordion);
|
||||||
|
app.component("AccordionTab", AccordionTab);
|
||||||
app.mount("#app");
|
app.mount("#app");
|
||||||
|
Reference in New Issue
Block a user