<? use Studip\Button, Studip\LinkButton; ?> <? if (Request::isXhr()) : ?> <? foreach (PageLayout::getMessages() as $messagebox) : ?> <?= $messagebox ?> <? endforeach ?> <? endif; ?> <form data-dialog="" method="post" action="<?= $controller->url_for($base . 'edit/' . $range_id . '/' . $event->event_id) ?>" class="default collapsable"> <?= CSRFProtection::tokenTag() ?> <fieldset> <legend> <? if ($event->isNew()) : ?> <?= _('Neuen Termin anlegen') ?> <? else : ?> <?= _('Termin bearbeiten') ?> <? endif; ?> </legend> <label class="hidden-tiny-down"> <input type="checkbox" name="isdayevent" value="1" <?= $event->isDayEvent() ? 'checked' : '' ?> onChange="jQuery(this).closest('fieldset').find('input[size=\'2\']').prop('disabled', function (i,val) { return !val; });"> <?= _('Ganztägig') ?> </label> <section class="required"> <?= _('Beginn') ?> </section> <label class="col-3"> <?= _('Datum') ?> <input type="text" name="start_date" id="start-date" value="<?= strftime('%x', $event->getStart()) ?>" size="12" required> </label> <label class="col-3"> <?= _('Uhrzeit') ?> <div class="hgroup"> <input class="size-s no-hint" type="text" name="start_hour" value="<?= date('G', $event->getStart()) ?>" size="2" maxlength="2"<?= $event->isDayEvent() ? ' disabled' : '' ?> aria-label="Stunde"> : <input class="size-s no-hint" type="text" name="start_minute" value="<?= date('i', $event->getStart()) ?>" size="2" maxlength="2"<?= $event->isDayEvent() ? ' disabled' : '' ?> aria-label="Minuten"> </div> </label> <section class="required"> <?= _('Ende') ?> </section> <label class="col-3"> <?= _('Datum') ?> <input type="text" name="end_date" id="end-date" value="<?= strftime('%x', $event->getEnd()) ?>" size="12" required> </label> <label class="col-3"> <?= _('Uhrzeit') ?> <div class="hgroup"> <input class="size-s no-hint" type="text" name="end_hour" value="<?= date('G', $event->getEnd()) ?>" size="2" aria-label="<?= _("Stunde") ?>" maxlength="2"<?= $event->isDayEvent() ? ' disabled' : '' ?>> : <input class="size-s no-hint" type="text" name="end_minute" value="<?= date('i', $event->getEnd()) ?>" size="2" aria-label="<?= _("Minuten") ?>" maxlength="2"<?= $event->isDayEvent() ? ' disabled' : '' ?>> </div> </label> <label> <span class="required"> <?= _('Zusammenfassung') ?> </span> <input type="text" size="50" name="summary" id="summary" value="<?= htmlReady($event->getTitle()) ?>"> </label> <label> <?= _('Beschreibung') ?> <textarea rows="2" cols="40" id="description" name="description"><?= htmlReady($event->getDescription()) ?></textarea> </label> <label class="col-3"> <?= _('Kategorie') ?> <select name="category_intern" id="category-intern" class="nested-select"> <? foreach ($GLOBALS['PERS_TERMIN_KAT'] as $key => $category) : ?> <option value="<?= $key ?>" <?= $key == $event->getCategory() ? 'selected' : '' ?> class="calendar-category<?= $key ?>" data-color-class="calendar-category<?= $key ?>"> <?= htmlReady($category['name']) ?> </option> <? endforeach; ?> </select> </label> <label class="col-3"> <?= tooltipicon(_('Sie können beliebige Kategorien in das Freitextfeld eingeben. Trennen Sie einzelne Kategorien bitte durch ein Komma.')) ?> <input type="text" name="categories" value="<?= htmlReady($event->getUserDefinedCategories()) ?>" placeholder="<?= _('Eigener Kategoriename') ?>"> </label> <label> <?= _('Raum/Ort') ?> <input type="text" name="location" id="location" value="<?= htmlReady($event->getLocation()) ?>"> </label> <? if ($calendar->getPermissionByUser($GLOBALS['user']->id) == Calendar::PERMISSION_OWN) : ?> <? $info = _('Private und vertrauliche Termine sind nur für Sie sichtbar.') ?> <? /* SEMBBS nur private und vertrauliche Termine <? $info = _('Private und vertrauliche Termine sind nur für Sie sichtbar. Öffentliche Termine werden auf ihrer internen Homepage auch anderen Nutzern bekanntgegeben.') ?> * */ ?> <? elseif ($calendar->getRange() == Calendar::RANGE_SEM) : ?> <? $info = _('In Veranstaltungskalendern können nur private Termine angelegt werden.') ?> <? elseif ($calendar->getRange() == Calendar::RANGE_INST) : ?> <? $info = _('In Einrichtungskalendern können nur private Termine angelegt werden.') ?> <? else : ?> <? $info = _('Im Kalender eines anderen Nutzers können Sie nur private oder vertrauliche Termine einstellen. Vertrauliche Termine sind nur für Sie und den Kalenderbesitzer sichtbar. Alle anderen sehen den Termin nur als Besetztzeit.') ?> <? endif; ?> <label for="accessibility"> <?= _('Zugriff') ?> <?= tooltipicon($info) ?> <select name="accessibility" id="accessibility" size="1"> <? foreach ($event->getAccessibilityOptions($calendar->getPermissionByUser($GLOBALS['user']->id)) as $key => $option) : ?> <option value="<?= $key ?>"<?= $event->getAccessibility() == $key ? ' selected' : '' ?>><?= $option ?></option> <? endforeach; ?> </select> </label> <label> <?= _('Priorität') ?> <? $priority_names = [_('Keine Angabe'), _('Hoch'), _('Mittel'), _('Niedrig')] ?> <select name="priority" id="priority" size="1"> <? foreach ($priority_names as $key => $priority) : ?> <option value="<?= $key ?>"<?= $key == $event->getPriority() ? ' selected' : '' ?>><?= $priority ?></option> <? endforeach; ?> </select> </label> <? if (!$event->isNew() && Config::get()->CALENDAR_GROUP_ENABLE) : ?> <section> <? $author = $event->getAuthor() ?> <? if ($author) : ?> <?= sprintf(_('Eingetragen am: %s von %s'), strftime('%x, %X', $event->mkdate), htmlReady($author->getFullName('no_title'))) ?> <? endif; ?> </section> <? if ($event->event->mkdate < $event->event->chdate) : ?> <? $editor = $event->getEditor() ?> <? if ($editor) : ?> <section> <?= sprintf(_('Zuletzt bearbeitet am: %s von %s'), strftime('%x, %X', $event->chdate), htmlReady($editor->getFullName('no_title'))) ?> </section> <? endif; ?> <? endif; ?> <? endif; ?> </fieldset> <fieldset class="collapsed"> <legend> <?= _('Wiederholung') ?> <? if ($event->getRecurrence('rtype') != 'SINGLE') : ?> (<?= $event->toStringRecurrence() ?>) <? endif ?> </legend> <h2><?= _('Wiederholungsart') ?></h2> <section> <? $linterval = $event->getRecurrence('linterval') ?: '1' ?> <? $rec_type = $event->toStringRecurrence(true) ?> <ul class="recurrences"> <li> <label class="rec-label"> <input type="radio" class="rec-select" id="rec-none" name="recurrence" value="single"<?= $event->getRecurrence('rtype') == 'SINGLE' ? ' checked' : '' ?>> <?= _('Keine') ?> <?= tooltipIcon(_('Der Termin wird nicht wiederholt.')) ?> </label> </li> <li> <label class="rec-label"> <input type="radio" class="rec-select" id="rec-daily" name="recurrence" value="daily"<?= $event->getRecurrence('rtype') == 'DAILY' ? ' checked' : '' ?>> <?= _('Täglich') ?> </label> <div class="rec-content" id="rec-content-daily"> <div class="hgroup"> <label> <input type="radio" name="type_daily" value="day"<?= in_array($rec_type, ['daily', 'xdaily']) ? ' checked' : '' ?>> <?= sprintf(_('Jeden %s. Tag'), '<input type="text" size="3" name="linterval_d" value="' . $linterval . '">') ?> </label> </div> <label> <input type="radio" name="type_daily" value="workday"<?= $rec_type == 'workdaily' ? ' checked' : '' ?>> <?= _('Jeden Werktag') ?> </label> </div> </li> <li> <? $wdays = [ '1' => _('Montag'), '2' => _('Dienstag'), '3' => _('Mittwoch'), '4' => _('Donnerstag'), '5' => _('Freitag'), '6' => _('Samstag'), '7' => _('Sonntag')] ?> <label class="rec-label" for="rec-weekly"> <input type="radio" class="rec-select" id="rec-weekly" name="recurrence" value="weekly"<?= $event->getRecurrence('rtype') == 'WEEKLY' ? ' checked' : '' ?>> <?= _('Wöchentlich') ?> </label> <div class="rec-content" id="rec-content-weekly"> <div class="hgroup"> <label> <?= sprintf(_('Jede %s. Woche am:'), '<input type="text" size="3" name="linterval_w" value="' . $linterval . '">') ?> </label> </div> <div> <? $aday = $event->getRecurrence('wdays') ?: date('N', $event->getStart()) ?> <? foreach ($wdays as $key => $wday) : ?> <label style="white-space: nowrap;"> <input type="checkbox" name="wdays[]" value="<?= $key ?>"<?= mb_strpos((string) $aday, (string) $key) !== false ? ' checked' : '' ?>> <?= $wday ?> </label> <? endforeach; ?> </div> </div> </li> <li> <? $mdays = [ '1' => _('Ersten'), '2' => _('Zweiten'), '3' => _('Dritten'), '4' => _('Vierten'), '5' => _('Letzten')] ?> <? $mdays_options = '' ?> <? $mday_selected = $event->getRecurrence('sinterval') ?> <? foreach ($mdays as $key => $mday) : $mdays_options .= '<option value="' . $key . '"'; if ($key == $mday_selected) { $mdays_options .= ' selected'; } $mdays_options .= '>' . $mday . '</option>'; endforeach; ?> <? $wdays_options = '' ?> <? $wday_selected = $event->getRecurrence('wdays') ?: date('N', $event->getStart()) ?> <? foreach ($wdays as $key => $wday) : $wdays_options .= '<option value="' . $key . '"'; if ($key == $wday_selected) { $wdays_options .= ' selected'; } $wdays_options .= '>' . $wday . '</option>'; endforeach; ?> <label class="rec-label" for="rec-monthly"> <input type="radio" class="rec-select" id="rec-monthly" name="recurrence" value="monthly"<?= $event->getRecurrence('rtype') == 'MONTHLY' ? ' checked' : '' ?>> <?= _('Monatlich') ?> </label> <div class="rec-content" id="rec-content-monthly"> <div class="hgroup"> <label> <input type="radio" value="day" name="type_m"<?= in_array($rec_type, ['mday_monthly', 'mday_xmonthly']) ? ' checked' : '' ?>> <? $mday = $event->getRecurrence('day') ?: date('j', $event->getStart()) ?> <?= sprintf(_('Wiederholt am %s. jeden %s. Monat'), '<input type="text" name="day_m" size="2" value="' . $mday . '">', '<input type="text" name="linterval_m1" size="3" value="' . $linterval . '">') ?> </label> </div> <div class="hgroup"> <label> <input type="radio" value="wday" name="type_m"<?= in_array($rec_type, ['xwday_xmonthly', 'lastwday_xmonthly', 'xwday_monthly', 'lastwday_monthly']) ? ' checked' : '' ?>> <?= sprintf(_('Jeden %s alle %s Monate'), '<select size="1" name="sinterval_m">' . $mdays_options . '</select>' . '<select size="1" name="wday_m">' . $wdays_options . '</select>', '<input type="text" class="no-hint" size="3" maxlength="3" name="linterval_m2" value="' . $linterval . '">')?> </label> </div> </div> </li> <li> <? $months = [ '1' => _('Januar'), '2' => _('Februar'), '3' => _('März'), '4' => _('April'), '5' => _('Mai'), '6' => _('Juni'), '7' => _('Juli'), '8' => _('August'), '9' => _('September'), '10' => _('Oktober'), '11' => _('November'), '12' => _('Dezember')] ?> <? $months_options = '' ?> <? $month_selected = $event->getRecurrence('month') ?: date('n', $event->getStart()) ?> <? foreach ($months as $key => $month) : $months_options .= '<option value="' . $key . '"'; if ($key == $month_selected) { $months_options .= ' selected'; } $months_options .= '>' . $month . '</option>'; endforeach; ?> <label class="rec-label" for="rec-yearly"> <input type="radio" class="rec-select" id="rec-yearly" name="recurrence" value="yearly"<?= $event->getRecurrence('rtype') == 'YEARLY' ? ' checked' : '' ?>> <?= _('Jährlich') ?> </label> <div class="rec-content" id="rec-content-yearly"> <div class="hgroup"> <label> <input type="radio" value="day" name="type_y"<?= $rec_type == 'mday_month_yearly' ? ' checked' : '' ?>> <?= sprintf(_('Jeden %s. %s'), '<input type="text" size="2" maxlength="2" name="day_y" value="' . ($event->getRecurrence('day') ?: date('j', $event->getStart())) . '">', '<select size="1" name="month_y1">' . $months_options . '</select>') ?> </label> </div> <div class="hgroup"> <label> <input type="radio" value="wday" name="type_y"<?= in_array($rec_type, ['xwday_month_yearly', 'lastwday_month_yearly']) ? ' checked' : '' ?>> <?= sprintf(_('Jeden %s im %s'), '<select size="1" name="sinterval_y">' . $mdays_options . '</select>' . '<select size="1" name="wday_y">' . $wdays_options . '</select>', '<select size="1" name="month_y2">' . $months_options . '</select>') ?> </label> </div> </div> </li> </ul> </section> <h2><?= _('Wiederholung endet') ?></h2> <label> <? $checked = (!$event->getRecurrence('expire') || $event->getRecurrence('expire') >= Calendar::CALENDAR_END) && !$event->getRecurrence('count') ?> <input type="radio" name="exp_c" value="never"<?= $checked ? ' checked' : '' ?>> <?= _('Nie') ?> </label> <? $checked = $event->getRecurrence('expire') && $event->getRecurrence('expire') < Calendar::CALENDAR_END && !$event->getRecurrence('count') ?> <section class="hgroup"> <label> <input type="radio" name="exp_c" value="date"<?= $checked ? ' checked' : '' ?>> <? $exp_date = $event->getRecurrence('expire') != Calendar::CALENDAR_END ? $event->getRecurrence('expire') : $event->getEnd() ?> <?= sprintf(_('Am %s'), '<input type="text" class="size-s" name="exp_date" id="exp-date" value="' . strftime('%x', $exp_date) . '">') ?> </label> </section> <section class="hgroup"> <? $checked = $event->getRecurrence('count') ?> <label> <input type="radio" name="exp_c" value="count"<?= $checked ? ' checked' : '' ?>> <? $exp_count = $event->getRecurrence('count') ?: '10' ?> <?= sprintf(_('Nach %s Wiederholungen'), '<input type="text" size="5" name="exp_count" value="' . $exp_count . '">') ?> </label> </section> <label for="exc-dates"> <?= _('Ausnahmen') ?> </label> <ul id="exc-dates"> <? $exceptions = $event->getExceptions(); ?> <? sort($exceptions, SORT_NUMERIC); ?> <? foreach ($exceptions as $exception) : ?> <li> <label class="undecorated"> <input type="checkbox" name="del_exc_dates[]" value="<?= strftime('%d.%m.%Y', $exception) ?>" style="display: none;"> <span><?= strftime('%x', $exception) ?><?= Icon::create('trash', 'clickable', ['title' => _('Ausnahme löschen')])->asImg(16, ['style' => 'vertical-align: text-top;']) ?></span> </label> <input type="hidden" name="exc_dates[]" value="<?= strftime('%d.%m.%Y', $exception) ?>"> </li> <? endforeach; ?> </ul> <div class="hgroup"> <input style="vertical-align: top; opacity: 0.8;" type="text" size="12" name="exc_date" id="exc-date" value="" placeholder="<?= _("Datum eingeben") ?>"> <span style="vertical-align: top;" onclick="STUDIP.CalendarDialog.addException(); return false;"> <?= Icon::create('add', 'clickable', ['title' => _('Ausnahme hinzufügen')])->asInput(['class' => 'text-bottom']) ?> </span> </div> </fieldset> <? if (Config::get()->CALENDAR_GROUP_ENABLE && $calendar->getRange() == Calendar::RANGE_USER) : ?> <?= $this->render_partial('calendar/group/_attendees') ?> <? endif; ?> <footer data-dialog-button> <?= Button::create(_('Speichern'), 'store', ['title' => _('Termin speichern')]) ?> <? if (!$event->isNew()) : ?> <? if ($event->getRecurrence('rtype') != 'SINGLE') : ?> <?= LinkButton::create(_('Aus Serie löschen'), $controller->url_for('calendar/single/delete_recurrence/' . implode('/', $event->getId()) . '/' . $atime)) ?> <? endif; ?> <?= LinkButton::create(_('Löschen'), $controller->url_for('calendar/single/delete/' . implode('/', $event->getId()))) ?> <? endif; ?> <? if (!Request::isXhr()) : ?> <?= LinkButton::create(_('Abbrechen'), $controller->url_for('calendar/single/' . $last_view, [$event->getStart()])) ?> <? endif; ?> </footer> </form> <script> jQuery('#start-date').datepicker({ altField: '#end-date' }); jQuery('#end-date').datepicker(); jQuery('#exp-date').datepicker(); jQuery('#exc-date').datepicker(); $('ul.recurrences input[type=radio][id^=rec]').bind('change', function() { $('.rec-content').hide(); if ($(this).is(':checked')) { $(this).parent().siblings('.rec-content').show(); } }) </script>