diff --git a/application/controllers/api/frontend/v1/stv/Students.php b/application/controllers/api/frontend/v1/stv/Students.php
index 39ed72072..6427df0ac 100644
--- a/application/controllers/api/frontend/v1/stv/Students.php
+++ b/application/controllers/api/frontend/v1/stv/Students.php
@@ -108,6 +108,7 @@ class Students extends FHCAPI_Controller
'studiensemester_kurzbz' => $studiensemester_kurzbz
]);
+ $studiensemester_kurzbz = $this->getStudiensemesterKurzbz($studiensemester_kurzbz);
$this->studentlistlib->addJoin(
"(
@@ -153,7 +154,8 @@ class Students extends FHCAPI_Controller
$this->addMeta('ci_params', [
'studiensemester_kurzbz' => $studiensemester_kurzbz
]);
-
+
+ $studiensemester_kurzbz = $this->getStudiensemesterKurzbz($studiensemester_kurzbz);
$this->studentlistlib->addJoin(
"(
@@ -213,6 +215,7 @@ class Students extends FHCAPI_Controller
'studiensemester_kurzbz' => $studiensemester_kurzbz
]);
+ $studiensemester_kurzbz = $this->getStudiensemesterKurzbz($studiensemester_kurzbz);
$this->studentlistlib->addJoin(
"(
diff --git a/application/helpers/hlp_header_helper.php b/application/helpers/hlp_header_helper.php
index eb2cd9f85..41f361bf1 100644
--- a/application/helpers/hlp_header_helper.php
+++ b/application/helpers/hlp_header_helper.php
@@ -82,6 +82,21 @@ function generateCSSsInclude($CSSs)
}
}
+/**
+ * Generates tags for the style sheets you want to include, the parameter could by a string or an array of strings
+ */
+function generatePrintCSS($path)
+{
+ $cssLink = '';
+
+ $ci =& get_instance();
+ $cachetoken = '?'.$ci->config->item('fhcomplete_build_version');
+
+ if (isset($path)) {
+ echo sprintf($cssLink, base_url($path).$cachetoken) . PHP_EOL;
+ }
+}
+
/**
* Generates global JS-Object to pass parms to other javascripts
*/
diff --git a/application/views/templates/CISVUE-Header.php b/application/views/templates/CISVUE-Header.php
index d98cbc9cd..1746f3704 100644
--- a/application/views/templates/CISVUE-Header.php
+++ b/application/views/templates/CISVUE-Header.php
@@ -7,6 +7,7 @@ $includesArray = array(
'fontawesome6' => true,
'axios027' => true,
'primevue3' => true,
+ 'printCssPath' => 'public/css/Cis4/print.css',
'customJSModules' => array_merge([
'public/js/apps/Cis/Menu.js'
], $customJSModules ?? []),
diff --git a/application/views/templates/FHC-Header.php b/application/views/templates/FHC-Header.php
index 4203aa571..f9e2620bf 100644
--- a/application/views/templates/FHC-Header.php
+++ b/application/views/templates/FHC-Header.php
@@ -12,6 +12,8 @@
$customJSs = isset($customJSs) ? $customJSs : null;
$customJSModules = isset($customJSModules) ? $customJSModules : null;
$skipID = isset($skipID) ? $skipID : null;
+ $printCssPath = isset($printCssPath) ? $printCssPath : null;
+
?>
@@ -138,6 +140,9 @@
generateCSSsIncludeIfExtensionCssExists('tags.css');
}
+ // Print CSS
+ if ($printCssPath) generatePrintCSS($printCssPath);
+
$extapphelper = ExtendableAppsHelper::getInstance();
$extapphelper->init($customCSSs, $customJSs, $customJSModules);
diff --git a/public/css/Cis4/CoreCalendarEvents.css b/public/css/Cis4/CoreCalendarEvents.css
index 0e684b790..c2420cdf7 100644
--- a/public/css/Cis4/CoreCalendarEvents.css
+++ b/public/css/Cis4/CoreCalendarEvents.css
@@ -59,12 +59,21 @@
padding: .25em .5em .25em .25em;
margin-inline-end: .25rem;
}
+.rangePageContainer .calendar-event-default .event-time {
+ display: none !important;
+}
.weekPageContainer .calendar-event-default .event-text {
display: flex;
flex-direction: column;
justify-content: space-evenly;
align-items: center;
}
+.rangePageContainer .calendar-event-default .event-text {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-evenly;
+ align-items: start;
+}
.dayPageContainer .calendar-event-default,
.listPageContainer .calendar-event-default {
display: flex;
diff --git a/public/css/Cis4/print.css b/public/css/Cis4/print.css
new file mode 100644
index 000000000..c80391ebc
--- /dev/null
+++ b/public/css/Cis4/print.css
@@ -0,0 +1,51 @@
+@page {
+ size: landscape;
+}
+
+* {
+ background-color: white !important;
+ color: black !important;
+ font-size: x-small !important;
+ overflow: visible !important;
+}
+
+.fhc-calendar-base-slider > div {
+ position: relative !important;
+}
+
+header,
+#skiplink,
+#cis-lvplan-personal-heading,
+.cis-lvplan-personal hr,
+.fhc-calendar-base-header,
+.fhc-calendar-mode-range .grid-allday,
+.fhc-calendar-mode-range #rangePresetSelector,
+.fhc-calendar-base-grid-line-background {
+ display: none !important;
+}
+
+.fhc-calendar-mode-range .main-header-sunday,
+.fhc-calendar-mode-range .fhc-calendar-base-grid-line-sunday {
+ border-bottom-width: 0 !important;
+}
+
+.fhc-calendar-base-grid-line-sunday,
+.fhc-calendar-mode-range .main-header-sunday {
+ break-after: page !important;
+}
+
+.fhc-calendar-mode-range .fhc-calendar-base-grid {
+ grid-template-rows: auto repeat(var(--fhc-grid-displayed-axis-main-count), auto) !important;
+ gap: 0px !important;
+}
+
+.fhc-calendar-mode-range .fhc-calendar-base-grid * {
+ gap: 0px !important;
+}
+
+.fhc-calendar-mode-range .main-header:not(.main-header-empty),
+.fhc-calendar-mode-range .fhc-calendar-base-grid-line {
+ border-top: solid !important;
+ border-top-color: black !important;
+ border-top-width: 1px !important;
+}
diff --git a/public/css/components/calendar/frame.css b/public/css/components/calendar/frame.css
index 68b907179..617e029f5 100644
--- a/public/css/components/calendar/frame.css
+++ b/public/css/components/calendar/frame.css
@@ -111,11 +111,17 @@
.fhc-calendar-base-grid-line {
grid-gap: var(--fhc-calendar-gap-events, var(--fhc-calendar-gap, 1px));
}
+.fhc-calendar-mode-range .main-header-sunday,
+.fhc-calendar-mode-range .all-day-events-sunday,
+.fhc-calendar-mode-range .fhc-calendar-base-grid-line-sunday {
+ border: solid;
+ border-width: 0 0 8px 0;
+ border-color: var(--fhc-calendar-gap);
+}
.fhc-calendar-base-label-time {
display: flex;
flex-direction: column;
justify-content: space-between;
- align-items: end;
}
/* Header */
.fhc-calendar-base-header .header-picker {
diff --git a/public/js/apps/Cis/Cis.js b/public/js/apps/Cis/Cis.js
index d4f846f25..183298c83 100644
--- a/public/js/apps/Cis/Cis.js
+++ b/public/js/apps/Cis/Cis.js
@@ -190,7 +190,7 @@ const router = VueRouter.createRouter({
}
},
{
- path: `/Cis/MyLvPlan/:mode?/:focus_date?`,
+ path: `/Cis/MyLvPlan/:mode?/:focus_date?/:range_length?`,
name: 'MyLvPlan',
component: MyLvPlan,
props(route) {
diff --git a/public/js/components/Calendar/Base.js b/public/js/components/Calendar/Base.js
index 360c9afa2..7e634ada1 100644
--- a/public/js/components/Calendar/Base.js
+++ b/public/js/components/Calendar/Base.js
@@ -114,7 +114,8 @@ export default {
type: Boolean,
default: undefined
},
- btnTableList: {
+ btnTableList: {},
+ btnRange: {
type: Boolean,
default: undefined
},
@@ -193,8 +194,16 @@ export default {
return date.setLocale(this.locale);
},
set(value) {
- this.internalDate = value;
- this.$emit('update:date', value, this.cMode);
+ let date;
+ let rangeLength;
+ if (value instanceof luxon.DateTime) {
+ date = value;
+ } else {
+ date = value.date;
+ rangeLength = value.rangeLength;
+ }
+ this.internalDate = date;
+ this.$emit('update:date', date, this.cMode, rangeLength);
}
},
sMode() {
@@ -315,6 +324,7 @@ export default {
:btn-month="!!modes['month'] && (btnMonth || (showBtns && btnMonth !== false))"
:btn-list="!!modes['list'] && (btnList || (showBtns && btnList !== false))"
:btn-table-list="!!modes['tableList'] && (btnTableList || (showBtns && btnTableList !== false))"
+ :btn-range="!!modes['range'] && (btnRange || (showBtns && btnList !== false))"
:mode-options="modeOptions ? modeOptions[cMode] : undefined"
>