diff --git a/application/core/Events.php b/application/core/Events.php index a7d4754cc..9ad474fc5 100644 --- a/application/core/Events.php +++ b/application/core/Events.php @@ -6,9 +6,19 @@ use CI3_Events as Events; Events::on('loadRenderers', function ($renderers) { $fhc_core_renderers =& $renderers(); $fhc_core_renderers["lehreinheit"] = array( - 'calendarEvent' => APP_ROOT.'public/js/components/Cis/LvPlan/EventTypes/calendarEvent.js', - 'modalTitle' => APP_ROOT.'public/js/components/Cis/Mylv/modalTitle.js', - 'modalContent' => APP_ROOT.'public/js/components/Cis/Mylv/modalContent.js', + 'calendarEvent' => APP_ROOT.'public/js/components/Cis/Renderer/Lehreinheit/calendarEvent.js', + 'modalTitle' => APP_ROOT.'public/js/components/Cis/Renderer/Lehreinheit/modalTitle.js', + 'modalContent' => APP_ROOT.'public/js/components/Cis/Renderer/Lehreinheit/modalContent.js', + 'calendarEventStyles' => APP_ROOT.'public/css/Cis4/CoreCalendarEvents.css' + ); +}); + +Events::on('loadRenderers', function ($renderers) { + $fhc_core_renderers =& $renderers(); + $fhc_core_renderers["reservierung"] = array( + 'calendarEvent' => APP_ROOT.'public/js/components/Cis/Renderer/Reservierungen/calendarEvent.js', + 'modalTitle' => APP_ROOT.'public/js/components/Cis/Renderer/Reservierungen/modalTitle.js', + 'modalContent' => APP_ROOT.'public/js/components/Cis/Renderer/Reservierungen/modalContent.js', 'calendarEventStyles' => APP_ROOT.'public/css/Cis4/CoreCalendarEvents.css' ); }); diff --git a/public/css/Cis4/CoreCalendarEvents.css b/public/css/Cis4/CoreCalendarEvents.css index 79ca36d00..17dc817ef 100644 --- a/public/css/Cis4/CoreCalendarEvents.css +++ b/public/css/Cis4/CoreCalendarEvents.css @@ -1,30 +1,29 @@ /* Moodle Events in Month Page */ .monthPageContainer .lehreinheitEventContent{ - display: grid; - grid-template-columns: auto 1fr; - grid-template-rows: 1fr; - border-bottom: 1px solid var(--bs-border-color); - + display: flex; + border-bottom: 1px solid var(--bs-border-color); } .monthPageContainer .lehreinheitEventContent #lehreinheitEventHeader { - display:grid; - padding: .25rem .5rem .25rem .25rem; - margin-right: .25rem; - align-content: center; + display:none; } .monthPageContainer .lehreinheitEventContent #lehreinheitEventText { - display: flex; - flex-wrap: wrap; - column-gap: 5px; + width: 100%; font-size: .875em; - align-items:center; - justify-content: space-evenly; + overflow:hidden; + white-space: nowrap; + text-overflow: ellipsis; + display:flex; + place-content: center space-evenly; } +.monthPageContainer .lehreinheitEventContent #lehreinheitEventText #lehreinheitLektoren{ + display:none; +} + /* Moodle Events in Week Page */ .weekPageContainer .lehreinheitEventContent { display: grid; @@ -44,10 +43,10 @@ .weekPageContainer .lehreinheitEventContent #lehreinheitEventText { display: flex; + flex-direction: column; + place-content: center space-evenly; flex-wrap: wrap; column-gap: 5px; - align-items: center; - justify-content: space-evenly; } diff --git a/public/js/apps/Dashboard/Fhc.js b/public/js/apps/Dashboard/Fhc.js index f04d25efc..075a399d8 100644 --- a/public/js/apps/Dashboard/Fhc.js +++ b/public/js/apps/Dashboard/Fhc.js @@ -305,11 +305,13 @@ const app = Vue.createApp({ if (data[rendertype].calendarEventStyles){ var head = document.head; - var link = document.createElement("link"); - link.type = "text/css"; - link.rel = "stylesheet"; - link.href = data[rendertype].calendarEventStyles; - head.appendChild(link); + if(!head.querySelector(`link[href="${data[rendertype].calendarEventStyles}"]`)){ + var link = document.createElement("link"); + link.type = "text/css"; + link.rel = "stylesheet"; + link.href = data[rendertype].calendarEventStyles; + head.appendChild(link); + } } if(this.renderers === null) { diff --git a/public/js/components/Calendar/Day/Page.js b/public/js/components/Calendar/Day/Page.js index 180122e6a..4247ffcd5 100644 --- a/public/js/components/Calendar/Day/Page.js +++ b/public/js/components/Calendar/Day/Page.js @@ -441,10 +441,10 @@ export default {
{{hour}}:00
- +
-
+
@@ -452,7 +452,7 @@ export default {
-
+

this is a slot placeholder

diff --git a/public/js/components/Calendar/Week/Page.js b/public/js/components/Calendar/Week/Page.js index b7705b1ed..cec65e577 100644 --- a/public/js/components/Calendar/Week/Page.js +++ b/public/js/components/Calendar/Week/Page.js @@ -369,10 +369,10 @@ export default {
-

this is a placeholder which means that no template was passed to the Calendar Page slot

diff --git a/public/js/components/Cis/LvPlan/LvPlan.js b/public/js/components/Cis/LvPlan/LvPlan.js index 64f67d8cb..a0b93062a 100644 --- a/public/js/components/Cis/LvPlan/LvPlan.js +++ b/public/js/components/Cis/LvPlan/LvPlan.js @@ -2,7 +2,7 @@ import FhcCalendar from "../../Calendar/Calendar.js"; import CalendarDate from "../../../composables/CalendarDate.js"; import LvModal from "../Mylv/LvModal.js"; import LvMenu from "../Mylv/LvMenu.js" -import lehreinheitEvent from "./EventTypes/calendarEvent.js" +import lehreinheitEvent from "../Renderer/Lehreinheit/calendarEvent.js" import ApiLvPlan from '../../../api/factory/lvPlan.js'; import ApiAuthinfo from '../../../api/factory/authinfo.js'; @@ -352,14 +352,14 @@ const LvPlan = { diff --git a/public/js/components/Cis/Renderer/Lehreinheit/calendarEvent.js b/public/js/components/Cis/Renderer/Lehreinheit/calendarEvent.js new file mode 100644 index 000000000..b5f9ae617 --- /dev/null +++ b/public/js/components/Cis/Renderer/Lehreinheit/calendarEvent.js @@ -0,0 +1,31 @@ +export default { + methods:{ + convertTime: function ([hour, minute]) { + let date = new Date(); + date.setHours(hour); + date.setMinutes(minute); + // returns date string as hh:mm + return date.toLocaleTimeString(this.$p.user_locale, { hour: '2-digit', minute: '2-digit', hour12: false }); + + }, + }, + props:{ + event: { + type:Object, + required:true, + }, + }, + template: ` +
+
+ {{convertTime(event.beginn.split(":"))}} + {{convertTime(event.ende.split(":"))}} +
+
+ {{event.topic}} + {{lektor.kurzbz}} + {{event.ort_kurzbz}} +
+
+ `, +} diff --git a/public/js/components/Cis/Mylv/modalContent.js b/public/js/components/Cis/Renderer/Lehreinheit/modalContent.js similarity index 96% rename from public/js/components/Cis/Mylv/modalContent.js rename to public/js/components/Cis/Renderer/Lehreinheit/modalContent.js index d3ed0b0db..d6dce547c 100644 --- a/public/js/components/Cis/Mylv/modalContent.js +++ b/public/js/components/Cis/Renderer/Lehreinheit/modalContent.js @@ -1,5 +1,5 @@ -import { numberPadding, formatDate } from "../../../helpers/DateHelpers.js" -import LvMenu from "./LvMenu.js"; +import { numberPadding, formatDate } from "../../../../helpers/DateHelpers.js" +import LvMenu from "../../Mylv/LvMenu.js"; export default { props:{ diff --git a/public/js/components/Cis/Mylv/modalTitle.js b/public/js/components/Cis/Renderer/Lehreinheit/modalTitle.js similarity index 100% rename from public/js/components/Cis/Mylv/modalTitle.js rename to public/js/components/Cis/Renderer/Lehreinheit/modalTitle.js diff --git a/public/js/components/Cis/LvPlan/EventTypes/calendarEvent.js b/public/js/components/Cis/Renderer/Reservierungen/calendarEvent.js similarity index 93% rename from public/js/components/Cis/LvPlan/EventTypes/calendarEvent.js rename to public/js/components/Cis/Renderer/Reservierungen/calendarEvent.js index 6fa957d91..c6b8054c2 100644 --- a/public/js/components/Cis/LvPlan/EventTypes/calendarEvent.js +++ b/public/js/components/Cis/Renderer/Reservierungen/calendarEvent.js @@ -1,5 +1,5 @@ export default { - methods:{ + methods: { convertTime: function ([hour, minute]) { let date = new Date(); date.setHours(hour); @@ -9,10 +9,10 @@ export default { }, }, - props:{ + props: { event: { - type:Object, - required:true, + type: Object, + required: true, }, }, template: ` diff --git a/public/js/components/Cis/Renderer/Reservierungen/modalContent.js b/public/js/components/Cis/Renderer/Reservierungen/modalContent.js new file mode 100644 index 000000000..6dcef418c --- /dev/null +++ b/public/js/components/Cis/Renderer/Reservierungen/modalContent.js @@ -0,0 +1,109 @@ +import { numberPadding, formatDate } from "../../../../helpers/DateHelpers.js" +import LvMenu from "../../Mylv/LvMenu.js"; + +export default { + props:{ + event: { + type: Object, + required: true, + }, + lvMenu:{ + type: Object, + required: false, + default: null, + }, + }, + components:{ + LvMenu, + }, + computed: { + lektorenLinks: function () { + if (!this.event || !Array.isArray(this.event.lektor) || !this.event.lektor.length) return "a"; + + let lektorenLinks = {}; + this.event.lektor.forEach((lektor) => { + lektorenLinks[lektor.kurzbz] = FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + `/Cis/Profil/View/${lektor.mitarbeiter_uid}`; + }) + return lektorenLinks; + }, + getOrtContentLink: function () { + if (!this.event || !this.event.ort_content_id) return "a"; + + return FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + `/CisVue/Cms/content/${this.event.ort_content_id}` + }, + start_time: function () { + if (!this.event.start) return 'N/A'; + if (!this.event.start instanceof Date) { + return this.event.start; + } + return numberPadding(this.event.start.getHours()) + ":" + numberPadding(this.event.start.getMinutes()); + }, + end_time: function () { + if (!this.event.end) return 'N/A'; + if (!this.event.end instanceof Date) { + return this.event.end; + } + return numberPadding(this.event.end.getHours()) + ":" + numberPadding(this.event.end.getMinutes()); + } + }, + methods: { + mehtodNumberPadding: function (number) { + return numberPadding(number); + }, + methodFormatDate: function (d) { + return formatDate(d); + }, + }, + template: ` +
+

+ {{$p.t('lvinfo','lehrveranstaltungsinformationen')}} +

+ + + + + + + + + + + + + + + + + + + + +
{{ + $p.t('global','datum')? + $p.t('global','datum')+':' + :'' + }}{{methodFormatDate(event.datum)}}
{{ + $p.t('global','raum')? + $p.t('global','raum')+':' + :'' + }} + + {{event.ort_kurzbz}} +
{{ + $p.t('lehre','lektor')? + $p.t('lehre','lektor')+':' + :'' + }} +
+ + {{lektor.kurzbz}} +
+
{{ + $p.t('ui','zeitraum')? + $p.t('ui','zeitraum')+':' + :'' + }}{{start_time + ' - ' + end_time}}
+ +
`, +} \ No newline at end of file diff --git a/public/js/components/Cis/Renderer/Reservierungen/modalTitle.js b/public/js/components/Cis/Renderer/Reservierungen/modalTitle.js new file mode 100644 index 000000000..c5f195ddb --- /dev/null +++ b/public/js/components/Cis/Renderer/Reservierungen/modalTitle.js @@ -0,0 +1,11 @@ +export default { + props:{ + event: { + type: Object, + required: true, + } + }, + template:` +
{{ event.topic + ' [' + event.ort_kurzbz+']'}}
+` +} \ No newline at end of file