65 $this->timing_start = $a_start;
85 $this->timing_end = $a_end;
105 $this->suggestion_start = $a_start;
125 $this->suggestion_end = $a_end;
145 $this->earliest_start = $a_start;
165 $this->latest_end = $a_end;
185 $this->visible = (int) $a_status;
205 $this->changeable = (int) $a_status;
227 $ilErr->setMessage(
'');
233 $ilErr->appendMessage($lng->txt(
"crs_activation_start_invalid"));
240 $ilErr->appendMessage($lng->txt(
'crs_latest_end_not_valid'));
244 if($ilErr->getMessage())
257 function update($a_ref_id, $a_parent_id = null)
262 $query =
"UPDATE crs_items SET ".
263 "timing_type = ".$ilDB->quote($this->
getTimingType(),
'integer').
", ".
264 "timing_start = ".$ilDB->quote((
int)$this->
getTimingStart(),
'integer').
", ".
265 "timing_end = ".$ilDB->quote((
int)$this->
getTimingEnd(),
'integer').
", ".
267 "suggestion_end = ".$ilDB->quote((
int)$this->
getSuggestionEnd(),
'integer').
", ".
269 "earliest_start = ".$ilDB->quote((
int)$this->
getEarliestStart(),
'integer').
", ".
270 "latest_end = ".$ilDB->quote((
int)$this->
getLatestEnd(),
'integer').
", ";
274 $query .=
"parent_id = ".$ilDB->quote($a_parent_id,
'integer').
", ";
278 "WHERE obj_id = ".$ilDB->quote($a_ref_id,
'integer');
279 $ilDB->manipulate(
$query);
281 unset(self::$preloaded_data[$a_ref_id]);
295 $sql =
"SELECT * FROM crs_items".
296 " WHERE ".$ilDB->in(
"obj_id", $a_ref_ids,
"",
"integer");
297 $set = $ilDB->query($sql);
298 while(
$row = $ilDB->fetchAssoc($set))
300 self::$preloaded_data[
$row[
"obj_id"]] =
$row;
314 if(isset(self::$preloaded_data[$a_ref_id]))
316 return self::$preloaded_data[$a_ref_id];
319 $sql =
"SELECT * FROM crs_items".
320 " WHERE obj_id = ".$ilDB->quote($a_ref_id,
"integer");
321 $set = $ilDB->query($sql);
322 $row = $ilDB->fetchAssoc($set);
324 if(!isset(
$row[
"obj_id"]))
326 $row = self::createDefaultEntry($a_ref_id);
330 self::$preloaded_data[
$row[
"obj_id"]] =
$row;
344 $item = self::getItem($a_item[
'ref_id']);
346 $a_item[
'obj_id'] = ($a_item[
'obj_id'] > 0)
349 $a_item[
'type'] = ($a_item[
'type'] !=
'')
353 $a_item[
'timing_type'] = $item[
'timing_type'];
355 if($item[
'changeable'] &&
356 $item[
'timing_type'] == self::TIMINGS_PRESETTING)
358 include_once
'Modules/Course/classes/Timings/class.ilTimingPlaned.php';
360 if($user_data[
'planed_start'])
362 $a_item[
'start'] = $user_data[
'planed_start'];
363 $a_item[
'end'] = $user_data[
'planed_end'];
364 $a_item[
'activation_info'] =
'crs_timings_planed_info';
368 $a_item[
'start'] = $item[
'suggestion_start'];
369 $a_item[
'end'] = $item[
'suggestion_end'];
370 $a_item[
'activation_info'] =
'crs_timings_suggested_info';
373 elseif($item[
'timing_type'] == self::TIMINGS_PRESETTING)
375 $a_item[
'start'] = $item[
'suggestion_start'];
376 $a_item[
'end'] = $item[
'suggestion_end'];
377 $a_item[
'activation_info'] =
'crs_timings_suggested_info';
379 elseif($item[
'timing_type'] == self::TIMINGS_ACTIVATION)
381 $a_item[
'start'] = $item[
'timing_start'];
382 $a_item[
'end'] = $item[
'timing_end'];
383 $a_item[
'activation_info'] =
'obj_activation_list_gui';
387 $a_item[
'start'] =
'abc';
391 if($a_item[
'type'] ==
'sess')
393 include_once(
'./Modules/Session/classes/class.ilSessionAppointment.php');
397 $a_item[
'masked_start'] = $a_item[
'start'];
398 $a_item[
'masked_end'] = $a_item[
'end'];
399 $a_item[
'start'] =
$info[
'start'];
400 $a_item[
'end'] =
$info[
'end'];
415 self::addAdditionalSubItemInformation($a_item);
416 if(isset($a_item[
'timing_type']))
418 if(!isset($a_item[
'masked_start']))
420 $start = $a_item[
'start'];
421 $end = $a_item[
'end'];
425 $start = $a_item[
'masked_start'];
426 $end = $a_item[
'masked_end'];
429 switch($a_item[
'timing_type'])
443 if ($activation !=
"")
446 $lng->loadLanguageModule(
'crs');
449 $activation,
false,
true);
464 $parent_id = $tree->getParentId($a_ref_id);
471 $ilAtomQuery = $ilDB->buildAtomQuery();
472 $ilAtomQuery->addTableLock(
"crs_items");
474 $ilAtomQuery->addQueryCallable(
function(
ilDBInterface $ilDB) use ($a_ref_id, $parent_id, &$a_item){
476 $sql =
"SELECT * FROM crs_items".
477 " WHERE obj_id = ".$ilDB->quote($a_ref_id,
"integer");
478 $set = $ilDB->
query($sql);
482 $now_parts = getdate($now);
485 $a_item[
"timing_type"] = self::TIMINGS_DEACTIVATED;
486 $a_item[
"timing_start"] = $now;
487 $a_item[
"timing_end"] = $now;
488 $a_item[
"suggestion_start"] = $now;
489 $a_item[
"suggestion_end"] = $now;
490 $a_item[
'visible'] = 0;
491 $a_item[
'changeable'] = 0;
492 $a_item[
'earliest_start'] = $now;
493 $a_item[
'latest_end'] = mktime(23,55,00,$now_parts[
"mon"],$now_parts[
"mday"],$now_parts[
"year"]);
494 $a_item[
'visible'] = 0;
495 $a_item[
'changeable'] = 0;
497 $query =
"INSERT INTO crs_items (parent_id,obj_id,timing_type,timing_start,timing_end," .
498 "suggestion_start,suggestion_end, ".
499 "changeable,earliest_start,latest_end,visible,position) ".
501 $ilDB->
quote($parent_id,
'integer').
",".
502 $ilDB->
quote($a_ref_id,
'integer').
",".
503 $ilDB->
quote($a_item[
"timing_type"],
'integer').
",".
504 $ilDB->
quote($a_item[
"timing_start"],
'integer').
",".
505 $ilDB->
quote($a_item[
"timing_end"],
'integer').
",".
506 $ilDB->
quote($a_item[
"suggestion_start"],
'integer').
",".
507 $ilDB->
quote($a_item[
"suggestion_end"],
'integer').
",".
508 $ilDB->
quote($a_item[
"changeable"],
'integer').
",".
509 $ilDB->
quote($a_item[
'earliest_start'],
'integer').
", ".
510 $ilDB->
quote($a_item[
'latest_end'],
'integer').
", ".
511 $ilDB->
quote($a_item[
"visible"],
'integer').
", ".
512 $ilDB->
quote(0,
'integer').
")";
521 $a_item[
"obj_id"] = $a_ref_id;
522 $a_item[
"parent_id"] = $parent_id;
541 $query =
"DELETE FROM crs_items ".
542 "WHERE obj_id = ".$ilDB->quote($a_ref_id,
'integer');
543 $ilDB->manipulate(
$query);
545 $query =
"DELETE FROM crs_items ".
546 "WHERE parent_id = ".$ilDB->quote($a_ref_id,
'integer');
547 $ilDB->manipulate(
$query);
563 $ilLog->write(__METHOD__.
': Begin course items...');
565 $items = self::getItems($a_ref_id);
568 $ilLog->write(__METHOD__.
': No course items found.');
575 $ilLog->write(__METHOD__.
': Cannot create target object.');
579 include_once(
'Services/CopyWizard/classes/class.ilCopyWizardOptions.php');
581 $mappings = $cp_options->getMappings();
583 foreach($items as $item)
585 if(!isset($mappings[$item[
'parent_id']])
or !$mappings[$item[
'parent_id']])
587 $ilLog->write(__METHOD__.
': No mapping for parent nr. '.$item[
'parent_id']);
590 if(!isset($mappings[$item[
'obj_id']])
or !$mappings[$item[
'obj_id']])
592 $ilLog->write(__METHOD__.
': No mapping for item nr. '.$item[
'obj_id']);
595 $new_item_id = $mappings[$item[
'obj_id']];
596 $new_parent = $mappings[$item[
'parent_id']];
598 $new_item =
new self();
599 $new_item->setTimingType($item[
'timing_type']);
600 $new_item->setTimingStart($item[
'timing_start']);
601 $new_item->setTimingEnd($item[
'timing_end']);
602 $new_item->setSuggestionStart($item[
'suggestion_start']);
603 $new_item->setSuggestionEnd($item[
'suggestion_end']);
604 $new_item->toggleChangeable($item[
'changeable']);
605 $new_item->setEarliestStart($item[
'earliest_start']);
606 $new_item->setLatestEnd($item[
'latest_end']);
607 $new_item->toggleVisible($item[
'visible']);
608 $new_item->update($new_item_id, $new_parent);
610 $ilLog->write(__METHOD__.
': Added new entry for item nr. '.$item[
'obj_id']);
612 $ilLog->write(__METHOD__.
': Finished course items.');
630 $subtree = $tree->getSubTree($tree->getNodeData($a_ref_id));
632 foreach($subtree as $node)
634 $ref_ids[] = $node[
'ref_id'];
637 $query =
"SELECT * FROM crs_items ".
638 "WHERE timing_type = ".$ilDB->quote(self::TIMINGS_PRESETTING,
'integer').
" ".
639 "AND ".$ilDB->in(
'obj_id',$ref_ids,
false,
'integer');
641 return $res->numRows() ? true :
false;
654 $subtree = $tree->getSubTree($tree->getNodeData($a_ref_id));
656 foreach($subtree as $node)
658 $ref_ids[] = $node[
'ref_id'];
661 $query =
"SELECT * FROM crs_items ".
662 "WHERE timing_type = ".$ilDB->quote(self::TIMINGS_PRESETTING,
'integer').
" ".
663 "AND changeable = ".$ilDB->quote(1,
'integer').
" ".
664 "AND ".$ilDB->in(
'obj_id',$ref_ids,
false,
'integer');
666 return $res->numRows() ? true :
false;
681 foreach($a_ref_ids as $item_ref_id)
683 if($tree->isDeleted($item_ref_id))
688 $node = $tree->getNodeData($item_ref_id);
689 if($node[
"ref_id"] != $item_ref_id)
693 $res[$item_ref_id] = $node;
698 self::preloadData(array_keys(
$res));
699 foreach(
$res as $idx => $item)
701 self::addAdditionalSubItemInformation($item);
706 return array_values(
$res);
717 include_once
'Modules/Session/classes/class.ilEventItems.php';
719 return self::processListItems($event_items->getItems());
730 include_once
'Modules/ItemGroup/classes/class.ilItemGroupItems.php';
732 $items = $ig_items->getValidItems();
733 return self::processListItems($items);
744 include_once(
'./Modules/Course/classes/class.ilCourseObjectiveMaterials.php');
746 return self::processListItems($item_ids);
756 public static function getItems($a_parent_id, $a_with_list_data =
true)
763 foreach($tree->getChilds($a_parent_id) as $item)
765 if($item[
'type'] !=
'rolf')
768 $ref_ids[] = $item[
'ref_id'];
774 self::preloadData($ref_ids);
776 foreach($items as $idx => $item)
778 if(!$a_with_list_data)
780 $items[$idx] = array_merge($item, self::getItem($item[
'ref_id']));
784 self::addAdditionalSubItemInformation($item);
785 $items[$idx] = $item;
801 $items = self::getItems($a_parent_id,
false);
805 $active = $inactive =
array();
806 foreach($items as $item)
809 if($item[
'timing_type'] == self::TIMINGS_DEACTIVATED)
821 $items = array_merge($active,$inactive);
835 global $objDefinition;
839 include_once
'Modules/Session/classes/class.ilEventItems.php';
841 foreach(self::getTimingsAdministrationItems($a_container_ref_id) as $item)
843 if(!in_array($item[
'ref_id'],$event_items) &&
844 !$objDefinition->isSideBlock($item[
'type']))
getTimingEnd()
Get timing end.
validateActivation()
Validate current properties.
static createDefaultEntry($a_ref_id)
Create db entry with default values.
setTimingStart($a_start)
Set timing start.
static getItems($a_parent_id, $a_with_list_data=true)
Get sub item data.
static getItemsByEvent($a_event_id)
Get session material / event items.
update($a_ref_id, $a_parent_id=null)
Update db entry.
static hasTimings($a_ref_id)
Check if there is any active timing (in subtree)
static _getItemsOfContainer($a_ref_id)
static getTimingsItems($a_container_ref_id)
Get (sub) item data for timings view (no session material, no side blocks)
static formatPeriod(ilDateTime $start, ilDateTime $end)
Format a period of two date Shows: 14.
static getItem($a_ref_id)
Get item data.
const TIMINGS_DEACTIVATED
enabledVisible()
Get visible status.
static sortArray($array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
getSuggestionEnd()
Get suggestion end.
getTimingStart()
Get timing start.
static addAdditionalSubItemInformation(array &$a_item)
Parse item data for list entries.
toggleVisible($a_status)
Set visible status.
static _getInstance($a_copy_id)
Get instance of copy wizard options.
setLatestEnd($a_end)
Set latest end.
setEarliestStart($a_start)
Set earliest start.
static getTimingsAdministrationItems($a_parent_id)
Get (sub) item data for timings administration view (active/inactive)
static hasChangeableTimings($a_ref_id)
Check if there is any active changeable timing (in subtree)
static _lookupObjId($a_id)
setTimingEnd($a_end)
Set timing end.
static processListItems(array $a_ref_ids)
Validate ref ids and add list data.
static preloadData(array $a_ref_ids)
Preload data to internal cache.
getTimingType()
get timing type
getSuggestionStart()
Get suggestion start.
static addListGUIActivationProperty(ilObjectListGUI $a_list_gui, array &$a_item)
Get timing details for list gui.
enabledChangeable()
Get changeable status.
Create styles array
The data for the language used.
static _lookupType($a_id, $a_reference=false)
lookup object type
static deleteAllEntries($a_ref_id)
Delete all db entries for ref id.
static _getAssignedMaterials($a_objective_id)
get assigned materials
setSuggestionStart($a_start)
Set suggestion start.
setTimingType($a_type)
Set timing type.
addCustomProperty($a_property="", $a_value="", $a_alert=false, $a_newline=false)
add custom property
getLatestEnd()
Get latest end.
static _getPlanedTimings($a_usr_id, $a_item_id)
static getItemsByObjective($a_objective_id)
Get objective items.
toggleChangeable($a_status)
Set changeable status.
static cloneDependencies($a_ref_id, $a_target_id, $a_copy_id)
Clone dependencies.
static _lookupAppointment($a_obj_id)
lookup appointment
static getInstanceByRefId($a_ref_id, $stop_on_error=true)
get an instance of an Ilias object by reference id
getEarliestStart()
Get earliest start.
static getItemsByItemGroup($a_item_group_ref_id)
Get materials of item group.
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
Class ilObjectActivation.
setSuggestionEnd($a_end)
Set suggestion end.