/** * Saves an edited stack/cycle. * * @param String $cycle_id Id of the edited cycle to be saved. */ private function saveEditedStack($cycle_id = '') { $persons = Request::getArray('related_persons'); $action = Request::get('related_persons_action'); $groups = Request::getArray('related_groups'); $group_action = Request::get('related_groups_action'); $teacher_changed = false; $groups_changed = false; foreach ($_SESSION['_checked_dates'] as $singledate_id) { $singledate = CourseDate::find($singledate_id); if (!isset($singledate)) { $singledate = CourseExDate::find($singledate_id); } $singledates[] = $singledate; } // Update related persons if (in_array($action, words('add delete'))) { foreach ($singledates as $key => $singledate) { $dozenten = User::findDozentenByTermin_id($singledate->termin_id); $dozenten_new = $dozenten; if ($singledate->range_id === $this->course->id) { foreach ($persons as $user_id) { $is_in_list = false; foreach ($dozenten as $user_key => $user) { if ($user->user_id == $user_id) { $is_in_list = $user_key; } } if ($is_in_list === false && $action === 'add') { $dozenten_new[] = User::find($user_id); $teacher_changed = true; } else { if ($is_in_list !== false && $action === 'delete') { unset($dozenten_new[$is_in_list]); $teacher_changed = true; } } } } $singledates[$key]->dozenten = $dozenten_new; } } if ($teacher_changed) { $this->course->createMessage(_('Zuständige Personen für die Termine wurden geändert.')); } if (in_array($group_action, words('add delete'))) { foreach ($singledates as $key => $singledate) { $groups_db = Statusgruppen::findByTermin_id($singledate->termin_id); $groups_new = $groups_db; if ($singledate->range_id === $this->course->id) { foreach ($groups as $statusgruppe_id) { $is_in_list = false; foreach ($groups_db as $group_key => $group) { if ($statusgruppe_id == $group->statusgruppe_id) { $is_in_list = $group_key; } } if ($is_in_list === false && $group_action === 'add') { $groups_new[] = Statusgruppen::find($statusgruppe_id); $groups_changed = true; } elseif ($is_in_list !== false && $group_action === 'delete') { unset($groups_new[$is_in_list]); $groups_changed = true; } } } $singledates[$key]->statusgruppen = $groups_new; } } if ($groups_changed) { $this->course->createMessage(_('Zugewiesene Gruppen für die Termine wurden geändert.')); } foreach ($singledates as $key => $singledate) { if (Request::option('action') == 'room') { $singledate->raum = ''; ResourceAssignment::deleteBySQL('assign_user_id = :termin', array(':termin' => $singledate->termin_id)); $resObj = new ResourceObject($room_id); $room = new ResourceAssignment(); $room->assign_user_id = $singledate->termin_id; $room->resource_id = Request::get('room'); $room->begin = $singledate->date; $room->end = $singledate->end_time; $room->repeat_end = $singledate->end_time; $room->store(); } elseif (Request::option('action') == 'freetext') { ResourceAssignment::deleteBySQL('assign_user_id = :termin', array(':termin' => $singledate->termin_id)); $singledates[$key]->raum = Request::get('freeRoomText'); $this->course->createMessage(sprintf(_('Der Termin %s wurde geändert, etwaige ' . 'Raumbuchungen wurden entfernt und stattdessen der angegebene Freitext' . ' eingetragen!'), '<b>' . $singledate->getFullname() . '</b>')); } elseif (Request::option('action') == 'noroom') { ResourceAssignment::deleteBySQL('assign_user_id = :termin', array(':termin' => $singledate->termin_id)); $singledates[$key]->raum = ''; } } foreach ($singledates as $singledate) { $singledate->store(); } }