diff --git a/app/controllers/calendar/date.php b/app/controllers/calendar/date.php index 5c1db1ab3442a4bd3f148633e73dfdc36d391c0f..72f3a405931cf766e17c2ef57eb6890828f3188e 100644 --- a/app/controllers/calendar/date.php +++ b/app/controllers/calendar/date.php @@ -783,7 +783,10 @@ class Calendar_DateController extends AuthenticatedController $this->selected_date->setTimestamp($this->date->begin); } } + $this->date_is_in_multiple_calendars = count($this->date->calendars) > 1; + $this->repetition_handling = Request::get('repetition_handling', 'create_exception'); + $this->multiple_calendar_handling = Request::get('multiple_calendar_handling', 'delete_from_mine'); if (Request::submitted('delete')) { $delete_whole_date = false; CSRFProtection::verifyUnsafeRequest(); @@ -801,6 +804,7 @@ class Calendar_DateController extends AuthenticatedController ); $this->response->add_header('X-Dialog-Close', '1'); $this->render_nothing(); + return; } else { PageLayout::postError( sprintf( @@ -809,11 +813,11 @@ class Calendar_DateController extends AuthenticatedController ) ); } - } elseif ($this->repetition_handling === 'delete_all') { + } elseif ($this->repetition_handling === 'delete_all' && $this->multiple_calendar_handling === 'delete_all') { $delete_whole_date = true; } } else { - $delete_whole_date = true; + $delete_whole_date = $this->multiple_calendar_handling === 'delete_all'; } if ($delete_whole_date) { if ($this->date->delete()) { @@ -831,6 +835,21 @@ class Calendar_DateController extends AuthenticatedController PageLayout::postError(_('Der Termin konnte nicht gelöscht werden!')); } } + } elseif ($this->multiple_calendar_handling === 'delete_from_mine') { + $result = CalendarDateAssignment::deleteBySQL( + '`calendar_date_id` = :calendar_date_id AND `range_id` = :current_user_id', + [ + 'calendar_date_id' => $this->date->id, + 'current_user_id' => User::findCurrent()->id + ] + ); + if ($result) { + PageLayout::postSuccess(_('Der Termin wurde aus Ihrem Kalender gelöscht.')); + $this->response->add_header('X-Dialog-Close', '1'); + $this->render_nothing(); + } else { + PageLayout::postError(_('Der Termin konnte nicht aus Ihrem Kalender gelöscht werden!')); + } } } } diff --git a/app/views/calendar/date/delete.php b/app/views/calendar/date/delete.php index ccb982973d5700158800bff93a8fa942a3b8339c..7e0db637f8e2dd5a384b9125cb2ee73afa8e2d92 100644 --- a/app/views/calendar/date/delete.php +++ b/app/views/calendar/date/delete.php @@ -7,6 +7,7 @@ <legend><?= _('Es handelt sich um einen Termin in einer Terminserie. Was möchten Sie tun?') ?></legend> <label> <input type="radio" name="repetition_handling" value="create_exception" + data-hides="#calendar_delete_date_form_delete_question" <?= $repetition_handling === 'create_exception' ? 'checked' : '' ?>> <?= sprintf( _('Am %s soll aus dem Einzeltermin eine Ausnahme der Terminserie werden.'), @@ -15,11 +16,28 @@ </label> <label> <input type="radio" name="repetition_handling" value="delete_all" + data-shows="#calendar_delete_date_form_delete_question" <?= $repetition_handling === 'delete_all' ? 'checked' : '' ?>> <?= _('Die gesamte Terminserie soll gelöscht werden.') ?> </label> </fieldset> - <? else : ?> + <? endif ?> + <? if ($date_is_in_multiple_calendars) : ?> + <fieldset id="calendar_delete_date_form_delete_question" <?= $date_has_repetitions ? 'style="display: none"' : '' ?>> + <legend><?= _('Der Termin ist in mehreren Kalendern eingetragen. Was möchten Sie tun?') ?></legend> + <label> + <input type="radio" name="multiple_calendar_handling" value="delete_from_mine" + <?= $multiple_calendar_handling === 'delete_from_mine' ? 'checked' : '' ?>> + <?= _('Den Termin nur aus meinem Kalender löschen.') ?> + </label> + <label> + <input type="radio" name="multiple_calendar_handling" value="delete_all" + <?= $multiple_calendar_handling === 'delete_all' ? 'checked' : '' ?>> + <?= _('Den Termin aus allen Kalendern löschen.') ?> + </label> + </fieldset> + <? endif ?> + <? if (!$date_has_repetitions && !$date_is_in_multiple_calendars) : ?> <?= MessageBox::warning(_('Soll der folgende Termin wirklich gelöscht werden?')) ?> <? endif ?> <fieldset>