Skip to content
Snippets Groups Projects
Commit 305c2e4e authored by Moritz Strohm's avatar Moritz Strohm
Browse files

fixed functionality issues in TIC 4421, re #4421

Merge request studip/studip!3556
parent 0b60240a
No related branches found
No related tags found
No related merge requests found
...@@ -35,6 +35,26 @@ class Calendar_ScheduleController extends AuthenticatedController ...@@ -35,6 +35,26 @@ class Calendar_ScheduleController extends AuthenticatedController
$show_hidden = Request::bool('show_hidden', false); $show_hidden = Request::bool('show_hidden', false);
//Handle the selected semester and create a Fullcalendar instance.
$this->semester = null;
if (Request::submitted('semester_id')) {
$this->semester = Semester::find(Request::option('semester_id'));
if ($this->semester) {
//Store the new semester-ID in the session:
$_SESSION['schedule_semester_id'] = $this->semester->id;
}
}
if (!$this->semester) {
//Load the semester from the session:
$semester_id = $_SESSION['schedule_semester_id'] ?? '';
if ($semester_id) {
$this->semester = Semester::find($semester_id);
} else {
$this->semester = Semester::findCurrent();
}
}
//Build the sidebar: //Build the sidebar:
$sidebar = Sidebar::get(); $sidebar = Sidebar::get();
...@@ -43,6 +63,7 @@ class Calendar_ScheduleController extends AuthenticatedController ...@@ -43,6 +63,7 @@ class Calendar_ScheduleController extends AuthenticatedController
$semester_widget = new SemesterSelectorWidget( $semester_widget = new SemesterSelectorWidget(
$this->indexURL(['show_hidden' => $show_hidden ?: null]) $this->indexURL(['show_hidden' => $show_hidden ?: null])
); );
$semester_widget->setSelection($semester->id ?? '');
$sidebar->addWidget($semester_widget); $sidebar->addWidget($semester_widget);
//Then add the actions for the action widget: //Then add the actions for the action widget:
...@@ -84,16 +105,6 @@ class Calendar_ScheduleController extends AuthenticatedController ...@@ -84,16 +105,6 @@ class Calendar_ScheduleController extends AuthenticatedController
); );
$sidebar->addWidget($actions); $sidebar->addWidget($actions);
//Handle the selected semester and create a Fullcalendar instance.
$semester = null;
if (Request::submitted('semester_id')) {
$semester = Semester::find(Request::option('semester_id'));
}
if (!$semester) {
$semester = Semester::findCurrent();
}
$fullcalendar = \Studip\Calendar\Helper::getScheduleFullcalendar( $fullcalendar = \Studip\Calendar\Helper::getScheduleFullcalendar(
$semester->id ?? '', $semester->id ?? '',
Request::bool('show_hidden', false) Request::bool('show_hidden', false)
...@@ -190,7 +201,7 @@ class Calendar_ScheduleController extends AuthenticatedController ...@@ -190,7 +201,7 @@ class Calendar_ScheduleController extends AuthenticatedController
] ]
); );
$event_classes = []; $event_classes = ['schedule'];
$event_title = $cycle_date->course->getFullName(); $event_title = $cycle_date->course->getFullName();
if ($course_membership) { if ($course_membership) {
$event_classes[] = sprintf('course-color-%u', $course_membership->gruppe); $event_classes[] = sprintf('course-color-%u', $course_membership->gruppe);
...@@ -262,9 +273,21 @@ class Calendar_ScheduleController extends AuthenticatedController ...@@ -262,9 +273,21 @@ class Calendar_ScheduleController extends AuthenticatedController
$this->entry->user_id = $GLOBALS['user']->id; $this->entry->user_id = $GLOBALS['user']->id;
if (!Request::submitted('save')) { if (!Request::submitted('save')) {
//Provide good default values: //Provide good default values:
$this->entry->dow = Request::int('dow', date('N')); if (Request::submitted('start')) {
$this->entry->setFormattedStart(Request::get('start', date('H:00', strtotime('+1 hour')))); //String format
$this->entry->setFormattedEnd(Request::get('end', date('H:00', strtotime('+2 hours')))); $this->entry->dow = Request::int('dow', date('N'));
$this->entry->setFormattedStart(Request::get('start', date('H:00', strtotime('+1 hour'))));
$this->entry->setFormattedEnd(Request::get('end', date('H:00', strtotime('+2 hours'))));
} elseif (Request::submitted('begin')) {
//Fullcalendar: Timestamps
$begin = Request::get('begin');
$end = Request::get('end');
if ($begin && $end) {
$this->entry->dow = date('N', $begin);
$this->entry->setFormattedStart(date('H:i', $begin));
$this->entry->setFormattedEnd(date('H:i', $end));
}
}
} }
PageLayout::setTitle(_('Neuer Termin')); PageLayout::setTitle(_('Neuer Termin'));
} else { } else {
......
...@@ -68,10 +68,20 @@ ...@@ -68,10 +68,20 @@
['formaction' => $controller->url_for('calendar/schedule/hide_course/' . $course->id)] ['formaction' => $controller->url_for('calendar/schedule/hide_course/' . $course->id)]
) ?> ) ?>
<? endif ?> <? endif ?>
<?= \Studip\LinkButton::create( <?php
_('Direkt zur Veranstaltung'), $enrolment_info = $course->getEnrolmentInformation($GLOBALS['user']->id);
URLHelper::getURL('dispatch.php/course/overview', ['cid' => $course->id]) ?>
) ?> <? if ($enrolment_info->isEnrolmentAllowed()) : ?>
<?= \Studip\LinkButton::create(
_('Direkt zur Veranstaltung'),
URLHelper::getURL('dispatch.php/course/overview', ['cid' => $course->id])
) ?>
<? else : ?>
<?= \Studip\LinkButton::create(
_('Direkt zur Veranstaltung'),
URLHelper::getURL('dispatch.php/course/details', ['sem_id' => $course->id])
) ?>
<? endif ?>
</div> </div>
</form> </form>
<? endif ?> <? endif ?>
<?php <?php
/** /**
* @var ?Semester $semester The selected semester.
* @var \Studip\Fullcalendar $fullcalendar The fullcalendar instance to be rendered. * @var \Studip\Fullcalendar $fullcalendar The fullcalendar instance to be rendered.
*/ */
?> ?>
<? if ($semester) : ?>
<h2>
<?= studip_interpolate(
_('Mein Stundenplan im %{semester}'),
['semester' => $semester->name]
) ?>
</h2>
<? endif ?>
<?= $fullcalendar ?> <?= $fullcalendar ?>
...@@ -133,8 +133,8 @@ class Helper ...@@ -133,8 +133,8 @@ class Helper
return new \Studip\Fullcalendar( return new \Studip\Fullcalendar(
_('Stundenplan'), _('Stundenplan'),
[ [
'editable' => false, 'editable' => true,
'selectable' => false, 'selectable' => true,
'dialog_size' => 'auto', 'dialog_size' => 'auto',
'minTime' => sprintf('%02u:00', $calendar_settings['start'] ?? 8), 'minTime' => sprintf('%02u:00', $calendar_settings['start'] ?? 8),
'maxTime' => sprintf('%02u:00', $calendar_settings['end'] ?? 20), 'maxTime' => sprintf('%02u:00', $calendar_settings['end'] ?? 20),
...@@ -165,6 +165,9 @@ class Helper ...@@ -165,6 +165,9 @@ class Helper
'full_semester_time_range' => false 'full_semester_time_range' => false
] ]
] ]
],
'studip_urls' => [
'add' => \URLHelper::getURL('dispatch.php/calendar/schedule/entry/add')
] ]
] ]
); );
......
...@@ -273,7 +273,7 @@ class StartNavigation extends Navigation ...@@ -273,7 +273,7 @@ class StartNavigation extends Navigation
$this->addSubNavigation('profile', $navigation); $this->addSubNavigation('profile', $navigation);
$navigation = new Navigation(_('Kalender')); $navigation = new Navigation(_('Stundenplan'));
if (Config::get()->CALENDAR_ENABLE) { if (Config::get()->CALENDAR_ENABLE) {
$navigation->addSubNavigation('calendar', new Navigation(_('Kalender'), 'dispatch.php/calendar/calendar')); $navigation->addSubNavigation('calendar', new Navigation(_('Kalender'), 'dispatch.php/calendar/calendar'));
......
...@@ -125,108 +125,14 @@ td.rahmen_table_row_odd { ...@@ -125,108 +125,14 @@ td.rahmen_table_row_odd {
} }
} }
/* --- print-style for calendar api------------------------------------------ */ /* course date entries in the schedule need to be styled for print view: */
#schedule { .fc-event.schedule {
width: 100%; &.course-color-1, &.course-color-2, &.course-color-3, &.course-color-4,
height: 100%; &.course-color-5, &.course-color-6, &.course-color-7, &.course-color-8,
&.course-color-9 {
#schedule_headings { color: $black;
margin-left: 41pt; background-color: $white;
background: none; border-color: $black;
}
#schedule_data {
width: 100%;
table-layout: fixed;
thead td {
text-align: center;
}
th:first-child, td:first-child {
width: 40px;
}
td {
vertical-align: top;
}
}
div.schedule_entry {
position: absolute;
margin: 0;
padding: 0;
font-size: 11pt;
color: var(--black);
dl {
height: 100%;
margin: 0;
color: var(--black) ! important;
background-color: var(--white);
border: 1px solid var(--light-gray-color-60);
overflow: hidden;
dd {
margin: 0;
overflow: hidden;
word-wrap: break-word;
}
dt {
background-color: transparent ! important;
}
a:hover {
text-decoration: underline;
}
}
}
div.schedule_day {
border-left: 1pt solid var(--black);
position: relative;
}
div.schedule_hours {
border-top: 1px solid #ddd;
padding-bottom: 1px;
}
div.snatch {
position: absolute;
bottom: 4pt;
text-align: center;
width: 100%;
cursor: ns-resize;
padding-bottom: 2pt;
}
#new_entry {
position: absolute;
border: 2pt solid #E0E0F0;
width: 400pt;
height: 230pt;
background-color: #E8EEF7;
font-size: 12pt;
}
div.new_entry {
position: absolute;
left: 50%;
top: 180pt;
margin-left: -25%;
height: 320pt;
width: 50%;
font-size: 12pt;
background-color: #E8EEF7;
border: 2pt solid #E0E0F0;
}
div.schedule_marker {
border-bottom: 1px dotted #ddd;
border-top: 1px solid #ddd;
padding: 0;
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment