function updateTimings()
 {
     include_once 'Services/Object/classes/class.ilObjectActivation.php';
     global $ilAccess, $ilErr;
     if (!$ilAccess->checkAccess('write', '', $this->container_obj->getRefId())) {
         $ilErr->raiseError($this->lng->txt('msg_no_perm_write'), $ilErr->WARNING);
     }
     $this->failed = array();
     // Validate
     $_POST['item'] = is_array($_POST['item']) ? $_POST['item'] : array();
     $all_items = array();
     foreach ($_POST['item'] as $ref_id => $data) {
         $item_obj = new ilObjectActivation();
         $old_data = ilObjectActivation::getItem($ref_id);
         $item_obj->setTimingType($_POST['item_active'][$ref_id]['active'] ? ilObjectActivation::TIMINGS_PRESETTING : ilObjectActivation::TIMINGS_DEACTIVATED);
         $item_obj->setTimingStart($old_data['timing_start']);
         $item_obj->setTimingEnd($old_data['timing_end']);
         $item_obj->setSuggestionStart($this->__toUnix($data["sug_start"]));
         // add duration
         $data['sug_start']['d'] += abs($data['duration_a']);
         $item_obj->setSuggestionEnd($this->__toUnix($data['sug_start'], array('h' => 23, 'm' => 55)));
         $item_obj->setEarliestStart(time());
         $item_obj->setLatestEnd($this->__toUnix($data['lim_end'], array('h' => 23, 'm' => 55)));
         $item_obj->toggleVisible($old_data['visible']);
         $item_obj->toggleChangeable($_POST['item_change'][$ref_id]['change']);
         if (!$item_obj->validateActivation()) {
             $this->failed[$ref_id] = $old_data['title'];
         }
         $all_items[$ref_id] =& $item_obj;
         unset($item_obj);
     }
     if (count($this->failed)) {
         $message = $this->lng->txt('crs_timings_update_error');
         $message .= "<br />" . $this->lng->txt('crs_materials') . ': ';
         $message .= implode(',', $this->failed);
         ilUtil::sendFailure($message);
         $this->editTimings();
         return false;
     }
     // No do update
     foreach ($all_items as $ref_id => $item_obj_new) {
         $item_obj_new->update($ref_id);
     }
     ilUtil::sendSuccess($this->lng->txt('settings_saved'));
     $this->editTimings();
     return false;
 }
 private function addReferences($source, $a_object_data)
 {
     global $tree, $ilLog;
     if (!isset($a_object_data['references']) or !count($a_object_data['references'])) {
         return true;
     }
     $original_id = $source->getRefId();
     foreach ($a_object_data['references'] as $ref_data) {
         $new_ref_id = $ref_id = $original_id;
         if ($tree->getParentId($original_id) != $ref_data['parent_id']) {
             // New reference requested => create it
             $new_ref_id = $source->createReference();
             $source->putInTree($ref_data['parent_id']);
             $source->setPermissions($ref_data['parent_id']);
         }
         if (isset($ref_data['time_target'])) {
             include_once './webservice/soap/classes/class.ilObjectXMLWriter.php';
             include_once './Services/Object/classes/class.ilObjectActivation.php';
             if (!isset($ref_data['time_target']['starting_time'])) {
                 $ref_data['time_target']['starting_time'] = time();
             }
             if (!isset($ref_data['time_target']['ending_time'])) {
                 $ref_data['time_target']['ending_time'] = time();
             }
             $items = new ilObjectActivation();
             $items->toggleChangeable($ref_data['time_target']['changeable']);
             $items->setTimingStart($ref_data['time_target']['starting_time']);
             $items->setTimingEnd($ref_data['time_target']['ending_time']);
             $items->toggleVisible($ref_data['time_target']['timing_visibility']);
             $items->setSuggestionStart($ref_data['time_target']['suggestion_start']);
             $items->setSuggestionEnd($ref_data['time_target']['suggestion_end']);
             $items->setEarliestStart($ref_data['time_target']['earliest_start']);
             $items->setLatestEnd($ref_data['time_target']['latest_end']);
             switch ($ref_data['time_target']['timing_type']) {
                 case ilObjectXMLWriter::TIMING_DEACTIVATED:
                     $ilLog->write(__METHOD__ . ilObjectActivation::TIMINGS_DEACTIVATED . ' ' . $ref_data['time_target']['timing_type']);
                     $items->setTimingType(ilObjectActivation::TIMINGS_DEACTIVATED);
                     break;
                 case ilObjectXMLWriter::TIMING_TEMPORARILY_AVAILABLE:
                     $ilLog->write(__METHOD__ . ilObjectActivation::TIMINGS_ACTIVATION . ' ' . $ref_data['time_target']['timing_type']);
                     $items->setTimingType(ilObjectActivation::TIMINGS_ACTIVATION);
                     break;
                 case ilObjectXMLWriter::TIMING_PRESETTING:
                     $ilLog->write(__METHOD__ . ilObjectActivation::TIMINGS_PRESETTING . ' ' . $ref_data['time_target']['timing_type']);
                     $items->setTimingType(ilObjectActivation::TIMINGS_PRESETTING);
                     break;
             }
             $items->update($new_ref_id);
         }
     }
 }
 /**
  * update
  *
  * @access public
  * @return
  */
 public function update()
 {
     global $ilErr, $ilAccess, $tpl, $ilUser;
     // #19997 - see ilObjectListGUI::insertTimingsCommand()
     if (!$ilAccess->checkAccess('write', '', $this->parent_ref_id) && !$ilAccess->checkAccess('write', '', $this->getItemId())) {
         $ilErr->raiseError($this->lng->txt('permission_denied'), $ilErr->MESSAGE);
     }
     $this->initFormEdit();
     if ($this->form->checkInput()) {
         include_once "Services/Object/classes/class.ilObjectActivation.php";
         $activation = new ilObjectActivation();
         $activation->setTimingType($this->form->getInput('timing_type'));
         $date = $this->form->getInput('timing_start');
         $date = new ilDateTime($date['date'] . ' ' . $date['time'], IL_CAL_DATETIME, $ilUser->getTimeZone());
         $activation->setTimingStart($date->get(IL_CAL_UNIX));
         $date = $this->form->getInput('timing_end');
         $date = new ilDateTime($date['date'] . ' ' . $date['time'], IL_CAL_DATETIME, $ilUser->getTimeZone());
         $activation->setTimingEnd($date->get(IL_CAL_UNIX));
         $date = $this->form->getInput('sug_start');
         $date = new ilDate($date['date'], IL_CAL_DATE);
         $activation->setSuggestionStart($date->get(IL_CAL_UNIX));
         $date = $this->form->getInput('sug_end');
         $date = new ilDate($date['date'], IL_CAL_DATE);
         $activation->setSuggestionEnd($date->get(IL_CAL_UNIX));
         $date = $this->form->getInput('early_start');
         $date = new ilDate($date['date'], IL_CAL_DATE);
         $activation->setEarliestStart($date->get(IL_CAL_UNIX));
         $date = $this->form->getInput('late_end');
         $date = new ilDate($date['date'], IL_CAL_DATE);
         $activation->setLatestEnd($date->get(IL_CAL_UNIX));
         $activation->toggleVisible((bool) $this->form->getInput('visible'));
         $activation->toggleChangeable((bool) $this->form->getInput('changeable'));
         if (!$activation->validateActivation()) {
             ilUtil::sendFailure($ilErr->getMessage());
             $this->form->setValuesByPost();
             $tpl->setContent($this->form->getHTML());
             return false;
         } else {
             $activation->update($this->getItemId());
             ilUtil::sendSuccess($this->lng->txt('settings_saved'), true);
             $this->ctrl->redirect($this, "edit");
         }
     } else {
         $this->form->setValuesByPost();
         $tpl->setContent($this->form->getHTML());
     }
 }
 /**
  * Parse timing info
  * @param object $a_ref_id
  * @param object $a_parent_id
  * @param object $timing
  * @return 
  */
 protected function parseTiming($a_ref_id, $a_parent_id, $timing)
 {
     $type = (string) $timing['Type'];
     $visible = (string) $timing['Visible'];
     $changeable = (string) $timing['Changeable'];
     include_once './Services/Object/classes/class.ilObjectActivation.php';
     $crs_item = new ilObjectActivation();
     $crs_item->setTimingType($type);
     $crs_item->toggleVisible((bool) $visible);
     $crs_item->toggleChangeable((bool) $changeable);
     foreach ($timing->children() as $sub) {
         switch ((string) $sub->getName()) {
             case 'Start':
                 $dt = new ilDateTime((string) $sub, IL_CAL_DATETIME, ilTimeZone::UTC);
                 $crs_item->setTimingStart($dt->get(IL_CAL_UNIX));
                 break;
             case 'End':
                 $dt = new ilDateTime((string) $sub, IL_CAL_DATETIME, ilTimeZone::UTC);
                 $crs_item->setTimingEnd($dt->get(IL_CAL_UNIX));
                 break;
             case 'SuggestionStart':
                 $dt = new ilDateTime((string) $sub, IL_CAL_DATETIME, ilTimeZone::UTC);
                 $crs_item->setSuggestionStart($dt->get(IL_CAL_UNIX));
                 break;
             case 'SuggestionEnd':
                 $dt = new ilDateTime((string) $sub, IL_CAL_DATETIME, ilTimeZone::UTC);
                 $crs_item->setSuggestionEnd($dt->get(IL_CAL_UNIX));
                 break;
             case 'EarliestStart':
                 $dt = new ilDateTime((string) $sub, IL_CAL_DATETIME, ilTimeZone::UTC);
                 $crs_item->setEarliestStart($dt->get(IL_CAL_UNIX));
                 break;
             case 'LatestEnd':
                 $dt = new ilDateTime((string) $sub, IL_CAL_DATETIME, ilTimeZone::UTC);
                 $crs_item->setLatestEnd($dt->get(IL_CAL_UNIX));
                 break;
         }
     }
     if ($crs_item->getTimingStart()) {
         $crs_item->update($a_ref_id, $a_parent_id);
     }
 }