示例#1
0
 /**
  * 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();
     }
 }