mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-07-19 07:52:16 +00:00
feature(LvPlan Feiertage): adds endpoint to fetch feiertage and adds renderer components for the feiertage in the LvPlan
This commit is contained in:
@@ -102,19 +102,37 @@ class LvPlan extends FHCAPI_Controller
|
||||
'username' => getAuthUID()
|
||||
]
|
||||
);
|
||||
|
||||
$lvAndMoodleEvents = array_merge($lvplan_events,$moodle_events);
|
||||
|
||||
$this->load->model('education/Studentlehrverband_model','StudentLehrverbandModel');
|
||||
$this->load->model('organisation/Studiensemester_model','StudiensemesterModel');
|
||||
$current_Studiensemester = $this->StudiensemesterModel->getAkt();
|
||||
$current_Studiensemester = $this->getDataOrTerminateWithError($current_Studiensemester);
|
||||
$current_Studiensemester = current($current_Studiensemester)->studiensemester_kurzbz;
|
||||
$studiengang = $this->StudentLehrverbandModel->loadWhere(["student_uid"=>getAuthUID(),"studiensemester_kurzbz"=>$current_Studiensemester]);
|
||||
$studiengang = $this->getDataOrTerminateWithError($studiengang);
|
||||
$studiengang = current($studiengang)->studiengang_kz;
|
||||
|
||||
$ferienEvents = $this->stundenplanlib->fetchFerienTageEvents($start_date, $end_date, $studiengang);
|
||||
|
||||
$result = array_merge($lvplan_events,$moodle_events);
|
||||
$allEvents = array_merge($lvAndMoodleEvents,$ferienEvents);
|
||||
// sort array with moodle events first
|
||||
usort($result, function($a, $b){
|
||||
usort($lvAndMoodleEvents, function($a, $b){
|
||||
if ($a->type === 'moodle' && $b->type !== 'moodle') {
|
||||
return -1;
|
||||
} elseif ($a->type !== 'moodle' && $b->type === 'moodle') {
|
||||
return 1;
|
||||
} elseif ($a->type === 'ferien' && ($b->type !== 'moodle' && $b->type !== 'ferien')) {
|
||||
return -1;
|
||||
} elseif (($a->type !== 'ferien' && $a->type !== 'moodle') && $b->type === 'ferien') {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
$this->terminateWithSuccess($result);
|
||||
|
||||
$this->terminateWithSuccess($allEvents);
|
||||
}
|
||||
|
||||
//TODO: delete this function if we don't use the old calendar export endpoints anymore
|
||||
|
||||
@@ -23,4 +23,14 @@ Events::on('loadRenderers', function ($renderers) {
|
||||
);
|
||||
});
|
||||
|
||||
Events::on('loadRenderers', function ($renderers) {
|
||||
$fhc_core_renderers =& $renderers();
|
||||
$fhc_core_renderers["ferien"] = array(
|
||||
'calendarEvent' => APP_ROOT.'public/js/components/Cis/Renderer/Feiertage/calendarEvent.js',
|
||||
'modalTitle' => APP_ROOT.'public/js/components/Cis/Renderer/Feiertage/modalTitle.js',
|
||||
'modalContent' => APP_ROOT.'public/js/components/Cis/Renderer/Feiertage/modalContent.js',
|
||||
'calendarEventStyles' => APP_ROOT.'public/css/Cis4/CoreCalendarEvents.css'
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
|
||||
@@ -254,6 +254,66 @@ class StundenplanLib{
|
||||
}
|
||||
}
|
||||
|
||||
public function fetchFerienTageEvents($start_date, $end_date, $studiengang_kz){
|
||||
$this->_ci =& get_instance();
|
||||
$this->_ci->load->model('organisation/Ferien_model','FerienModel');
|
||||
$ferienEvents = $this->_ci->FerienModel->execReadOnlyQuery("
|
||||
SELECT *
|
||||
FROM lehre.tbl_ferien
|
||||
WHERE (bisdatum BETWEEN ? AND ?) AND (studiengang_kz = 0 OR studiengang_kz = ?)
|
||||
",[$start_date, $end_date, $studiengang_kz]);
|
||||
|
||||
if (isError($ferienEvents)) {
|
||||
return error(getData($ferienEvents));
|
||||
}
|
||||
$ferienEvents = getData($ferienEvents);
|
||||
|
||||
$ferienEvents = array_map(function($event){
|
||||
$event_start = new DateTime($event->vondatum);
|
||||
$event_end = new DateTime($event->bisdatum);
|
||||
$event_end->modify('+1 day');
|
||||
|
||||
$interval = new DateInterval('P1D');
|
||||
$period = new DatePeriod($event_start, $interval, $event_end);
|
||||
$event->dates = array_map(function($date){
|
||||
return $date->format('Y-m-d');
|
||||
}, iterator_to_array($period));
|
||||
return $event;
|
||||
}, $ferienEvents);
|
||||
|
||||
$ferienEventsFlattened=[];
|
||||
foreach($ferienEvents as $ferien_event){
|
||||
foreach($ferien_event->dates as $date){
|
||||
$event = new stdClass();
|
||||
$event->bezeichnung = $ferien_event->bezeichnung;
|
||||
$event->datum = $date;
|
||||
$event->type = 'ferien';
|
||||
$ferienEventsFlattened[] = $event;
|
||||
}
|
||||
};
|
||||
|
||||
$today=new DateTime();
|
||||
$ferienEventsFlattened = array_map(function($event) use($today){
|
||||
$ferien_event = (object) array(
|
||||
'type' => 'ferien',
|
||||
'beginn' => $today->format('H:i:s'),
|
||||
'ende' => $today->format('H:i:s'),
|
||||
'allDayEvent' => true,
|
||||
'datum' => $event->datum,
|
||||
'topic' => $event->bezeichnung,
|
||||
'titel' => $event->bezeichnung,
|
||||
'farbe' => '00689E'
|
||||
|
||||
);
|
||||
return $ferien_event;
|
||||
}, $ferienEventsFlattened);
|
||||
|
||||
|
||||
return $ferienEventsFlattened;
|
||||
}
|
||||
|
||||
// start of the private functions ########################################################################################################
|
||||
|
||||
// function used to sort an array of studiensemester strings
|
||||
private function sortStudienSemester(&$semester_range){
|
||||
usort(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Moodle Events in Month Page */
|
||||
/* Lehreinheits Events in Month Page */
|
||||
.monthPageContainer .lehreinheitEventContent{
|
||||
display: flex;
|
||||
border-bottom: 1px solid var(--bs-border-color);
|
||||
@@ -24,7 +24,7 @@
|
||||
display:none;
|
||||
}
|
||||
|
||||
/* Moodle Events in Week Page */
|
||||
/* Lehreinheits Events in Week Page */
|
||||
.weekPageContainer .lehreinheitEventContent {
|
||||
display: grid;
|
||||
grid-template-columns: auto 1fr;
|
||||
@@ -50,7 +50,7 @@
|
||||
|
||||
}
|
||||
|
||||
/* Moodle Events in Day Page */
|
||||
/* Lehreinheits Events in Day Page */
|
||||
.dayPageContainer .lehreinheitEventContent {
|
||||
display: flex;
|
||||
padding-left:4rem;
|
||||
@@ -72,3 +72,51 @@
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/* Ferientage Events in Month Page */
|
||||
.monthPageContainer .feiertagEventContent {
|
||||
display: grid;
|
||||
grid-template-columns: auto 1fr;
|
||||
justify-items: center;
|
||||
align-items:center;
|
||||
color: var(--fhc-light);
|
||||
}
|
||||
|
||||
.monthPageContainer .feiertagEventContent #ferienEventIcon{
|
||||
margin: 0.5rem;
|
||||
}
|
||||
|
||||
.monthPageContainer .feiertagEventContent #ferienEventTitle {
|
||||
|
||||
}
|
||||
|
||||
/* Ferientage Events in Week Page */
|
||||
.weekPageContainer .feiertagEventContent {
|
||||
display: grid;
|
||||
grid-template-columns: auto 1fr;
|
||||
justify-items: center;
|
||||
align-items:center;
|
||||
color: var(--fhc-light);
|
||||
}
|
||||
|
||||
.weekPageContainer .feiertagEventContent #ferienEventIcon {
|
||||
margin: 0.25rem;
|
||||
}
|
||||
|
||||
.weekPageContainer .feiertagEventContent #ferienEventTitle {
|
||||
|
||||
}
|
||||
|
||||
/* Ferientage Events in Day Page */
|
||||
.dayPageContainer .feiertagEventContent {
|
||||
display: grid;
|
||||
grid-template-columns: auto 1fr;
|
||||
justify-items: center;
|
||||
align-items: center;
|
||||
color: var(--fhc-light);
|
||||
}
|
||||
|
||||
.dayPageContainer .feiertagEventContent #ferienEventIcon {
|
||||
margin: 0.5rem;
|
||||
}
|
||||
|
||||
.dayPageContainer .feiertagEventContent #ferienEventTitle {}
|
||||
@@ -0,0 +1,14 @@
|
||||
|
||||
export default {
|
||||
props: {
|
||||
event: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
template: `
|
||||
<div class="feiertagEventContent " >
|
||||
<i id="ferienEventIcon" class="fa-regular fa-calendar"></i>
|
||||
<span id="ferienEventTitle" ><strong>{{event.titel}}</strong></span>
|
||||
</div>`,
|
||||
};
|
||||
@@ -0,0 +1,21 @@
|
||||
import { formatDate } from "../../../../helpers/DateHelpers.js"
|
||||
|
||||
export default {
|
||||
props:{
|
||||
event: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
|
||||
},
|
||||
methods:{
|
||||
methodFormatDate: function (d) {
|
||||
return formatDate(d);
|
||||
},
|
||||
},
|
||||
template: `
|
||||
<div>
|
||||
<h2>{{event.titel ? event.titel : event.topic}}</h2>
|
||||
<p><i id="ferienEventIcon" class="fa-regular fa-calendar me-2"></i>{{methodFormatDate(event?.datum)}}</p>
|
||||
</div>`,
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
export default {
|
||||
props:{
|
||||
event: {
|
||||
type: Object,
|
||||
required: true,
|
||||
}
|
||||
},
|
||||
template:`
|
||||
<div>{{ $p.t('global','feiertag') }}</div>
|
||||
`
|
||||
}
|
||||
@@ -188,6 +188,26 @@ $phrases = array(
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'global',
|
||||
'phrase' => 'feiertag',
|
||||
'insertvon' => 'system',
|
||||
'phrases' => array(
|
||||
array(
|
||||
'sprache' => 'German',
|
||||
'text' => 'Feiertag',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
),
|
||||
array(
|
||||
'sprache' => 'English',
|
||||
'text' => 'Holiday',
|
||||
'description' => '',
|
||||
'insertvon' => 'system'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'app' => 'core',
|
||||
'category' => 'global',
|
||||
|
||||
Reference in New Issue
Block a user