function &_getTimings($a_ref_id)
 {
     static $cache = array();
     if (isset($cache[$a_ref_id])) {
         return $cache[$a_ref_id];
     }
     $cache[$a_ref_id]['item'] = ilObjectActivation::getItem($a_ref_id);
     $cache[$a_ref_id]['user'] = ilTimingPlaned::_getPlanedTimingsByItem($a_ref_id);
     return $cache[$a_ref_id];
 }
 function updateUserTimings()
 {
     global $ilUser, $ilObjDataCache;
     include_once 'Modules/Course/classes/Timings/class.ilTimingPlaned.php';
     // Validate
     $this->invalid = array();
     foreach ($_POST['item'] as $ref_id => $data) {
         $tmp_planed = new ilTimingPlaned($ref_id, $ilUser->getId());
         $tmp_planed->setPlanedStartingTime($this->__toUnix($data['own_start']));
         if (isset($data['duration'])) {
             $data['own_start']['d'] += $data['duration'];
             $tmp_planed->setPlanedEndingTime($this->__toUnix($data['own_start'], array('h' => 23, 'm' => 55)));
         } else {
             $tmp_planed->setPlanedEndingTime($this->__toUnix($data['own_start']), array('h' => 23, 'm' => 55));
         }
         if (!$tmp_planed->validate()) {
             $this->invalid[$ref_id] = $ilObjDataCache->lookupTitle($ilObjDataCache->lookupObjId($ref_id));
         }
         $all_items[] = $tmp_planed;
     }
     if (count($this->invalid)) {
         $message = $this->lng->txt('crs_timings_update_error');
         $message .= "<br />" . $this->lng->txt('crs_materials') . ': ';
         $message .= implode(',', $this->invalid);
         ilUtil::sendFailure($message);
         $this->editUserTimings();
         return false;
     }
     foreach ($all_items as $new_item_obj) {
         $new_item_obj->update();
     }
     ilUtil::sendSuccess($this->lng->txt('settings_saved'));
     $this->editUserTimings();
     return true;
 }
 /**
  * Parse item data for list entries
  * 
  * @param array &$a_item
  */
 public static function addAdditionalSubItemInformation(array &$a_item)
 {
     global $ilUser;
     $item = self::getItem($a_item['ref_id']);
     $a_item['obj_id'] = $a_item['obj_id'] > 0 ? $a_item['obj_id'] : ilObject::_lookupObjId($a_item['ref_id']);
     $a_item['type'] = $a_item['type'] != '' ? $a_item['type'] : ilObject::_lookupType($a_item['obj_id']);
     $a_item['timing_type'] = $item['timing_type'];
     if ($item['changeable'] && $item['timing_type'] == self::TIMINGS_PRESETTING) {
         include_once 'Modules/Course/classes/Timings/class.ilTimingPlaned.php';
         $user_data = ilTimingPlaned::_getPlanedTimings($ilUser->getId(), $a_item['ref_id']);
         if ($user_data['planed_start']) {
             $a_item['start'] = $user_data['planed_start'];
             $a_item['end'] = $user_data['planed_end'];
             $a_item['activation_info'] = 'crs_timings_planed_info';
         } else {
             $a_item['start'] = $item['suggestion_start'];
             $a_item['end'] = $item['suggestion_end'];
             $a_item['activation_info'] = 'crs_timings_suggested_info';
         }
     } elseif ($item['timing_type'] == self::TIMINGS_PRESETTING) {
         $a_item['start'] = $item['suggestion_start'];
         $a_item['end'] = $item['suggestion_end'];
         $a_item['activation_info'] = 'crs_timings_suggested_info';
     } elseif ($item['timing_type'] == self::TIMINGS_ACTIVATION) {
         $a_item['start'] = $item['timing_start'];
         $a_item['end'] = $item['timing_end'];
         $a_item['activation_info'] = 'obj_activation_list_gui';
     } else {
         $a_item['start'] = 'abc';
     }
     // #7359 - session sorting should always base on appointment date
     if ($a_item['type'] == 'sess') {
         include_once './Modules/Session/classes/class.ilSessionAppointment.php';
         $info = ilSessionAppointment::_lookupAppointment($a_item['obj_id']);
         // #11987
         $a_item['masked_start'] = $a_item['start'];
         $a_item['masked_end'] = $a_item['end'];
         $a_item['start'] = $info['start'];
         $a_item['end'] = $info['end'];
     }
 }
 function delete()
 {
     return ilTimingPlaned::_delete($this->getItemId(), $this->getUserId());
 }