50 $this->error = $DIC[
"ilErr"];
51 $this->lng = $DIC->language();
52 $this->db = $DIC->database();
84 $this->timing_start = $a_start;
104 $this->timing_end = $a_end;
124 $this->suggestion_start = $a_start;
144 $this->suggestion_end = $a_end;
164 $this->earliest_start = $a_start;
184 $this->latest_end = $a_end;
204 $this->visible = (int) $a_status;
224 $this->changeable = (int) $a_status;
251 $ilErr->appendMessage(
$lng->txt(
"crs_activation_start_invalid"));
253 } elseif ($this->
getTimingType() == self::TIMINGS_PRESETTING) {
255 $ilErr->appendMessage(
$lng->txt(
'crs_latest_end_not_valid'));
259 if (
$ilErr->getMessage()) {
271 public function update($a_ref_id, $a_parent_id = null)
276 $query =
"UPDATE crs_items SET " .
287 $query .=
"parent_id = " .
$ilDB->quote($a_parent_id,
'integer') .
", ";
291 "WHERE obj_id = " .
$ilDB->quote($a_ref_id,
'integer');
294 unset(self::$preloaded_data[$a_ref_id]);
308 $ilDB = $DIC->database();
310 $sql =
"SELECT * FROM crs_items" .
311 " WHERE " .
$ilDB->in(
"obj_id", $a_ref_ids,
"",
"integer");
312 $set =
$ilDB->query($sql);
314 self::$preloaded_data[
$row[
"obj_id"]] =
$row;
328 $ilDB = $DIC->database();
330 if (isset(self::$preloaded_data[$a_ref_id])) {
331 return self::$preloaded_data[$a_ref_id];
334 $sql =
"SELECT * FROM crs_items" .
335 " WHERE obj_id = " .
$ilDB->quote($a_ref_id,
"integer");
336 $set =
$ilDB->query($sql);
339 if (!isset(
$row[
"obj_id"])) {
340 $row = self::createDefaultEntry($a_ref_id);
342 if (
$row[
"obj_id"]) {
343 self::$preloaded_data[
$row[
"obj_id"]] =
$row;
359 $item = self::getItem($a_item[
'ref_id']);
361 $a_item[
'obj_id'] = ($a_item[
'obj_id'] > 0)
364 $a_item[
'type'] = ($a_item[
'type'] !=
'')
368 $a_item[
'timing_type'] = $item[
'timing_type'];
370 if ($item[
'changeable'] &&
371 $item[
'timing_type'] == self::TIMINGS_PRESETTING) {
372 include_once
'Modules/Course/classes/Timings/class.ilTimingPlaned.php';
374 if ($user_data[
'planed_start']) {
375 $a_item[
'start'] = $user_data[
'planed_start'];
376 $a_item[
'end'] = $user_data[
'planed_end'];
377 $a_item[
'activation_info'] =
'crs_timings_planed_info';
379 $a_item[
'start'] = $item[
'suggestion_start'];
380 $a_item[
'end'] = $item[
'suggestion_end'];
381 $a_item[
'activation_info'] =
'crs_timings_suggested_info';
383 } elseif ($item[
'timing_type'] == self::TIMINGS_PRESETTING) {
384 $a_item[
'start'] = $item[
'suggestion_start'];
385 $a_item[
'end'] = $item[
'suggestion_end'];
386 $a_item[
'activation_info'] =
'crs_timings_suggested_info';
387 } elseif ($item[
'timing_type'] == self::TIMINGS_ACTIVATION) {
388 $a_item[
'start'] = $item[
'timing_start'];
389 $a_item[
'end'] = $item[
'timing_end'];
390 $a_item[
'activation_info'] =
'obj_activation_list_gui';
392 $a_item[
'start'] =
'abc';
396 if ($a_item[
'type'] ==
'sess') {
397 include_once(
'./Modules/Session/classes/class.ilSessionAppointment.php');
401 $a_item[
'masked_start'] = $a_item[
'start'];
402 $a_item[
'masked_end'] = $a_item[
'end'];
403 $a_item[
'start'] =
$info[
'start'];
404 $a_item[
'end'] =
$info[
'end'];
419 $lng = $DIC->language();
421 self::addAdditionalSubItemInformation($a_item);
422 if (isset($a_item[
'timing_type'])) {
423 if (!isset($a_item[
'masked_start'])) {
424 $start = $a_item[
'start'];
425 $end = $a_item[
'end'];
427 $start = $a_item[
'masked_start'];
428 $end = $a_item[
'masked_end'];
431 switch ($a_item[
'timing_type']) {
446 if ($activation !=
"") {
449 $lng = $DIC->language();
450 $lng->loadLanguageModule(
'crs');
453 $lng->txt($a_item[
'activation_info']),
472 $ilDB = $DIC->database();
473 $tree = $DIC->repositoryTree();
475 $parent_id = $tree->getParentId($a_ref_id);
481 $ilAtomQuery =
$ilDB->buildAtomQuery();
482 $ilAtomQuery->addTableLock(
"crs_items");
484 $ilAtomQuery->addQueryCallable(
function (
ilDBInterface $ilDB) use ($a_ref_id, $parent_id, &$a_item) {
485 $sql =
"SELECT * FROM crs_items" .
486 " WHERE obj_id = " . $ilDB->
quote($a_ref_id,
"integer");
487 $set = $ilDB->
query($sql);
490 $now_parts = getdate($now);
493 $a_item[
"timing_type"] = self::TIMINGS_DEACTIVATED;
494 $a_item[
"timing_start"] = $now;
495 $a_item[
"timing_end"] = $now;
496 $a_item[
"suggestion_start"] = $now;
497 $a_item[
"suggestion_end"] = $now;
498 $a_item[
'visible'] = 0;
499 $a_item[
'changeable'] = 0;
500 $a_item[
'earliest_start'] = $now;
501 $a_item[
'latest_end'] = mktime(23, 55, 00, $now_parts[
"mon"], $now_parts[
"mday"], $now_parts[
"year"]);
502 $a_item[
'visible'] = 0;
503 $a_item[
'changeable'] = 0;
505 $query =
"INSERT INTO crs_items (parent_id,obj_id,timing_type,timing_start,timing_end," .
506 "suggestion_start,suggestion_end, " .
507 "changeable,earliest_start,latest_end,visible,position) " .
509 $ilDB->
quote($parent_id,
'integer') .
"," .
510 $ilDB->
quote($a_ref_id,
'integer') .
"," .
511 $ilDB->
quote($a_item[
"timing_type"],
'integer') .
"," .
512 $ilDB->
quote($a_item[
"timing_start"],
'integer') .
"," .
513 $ilDB->
quote($a_item[
"timing_end"],
'integer') .
"," .
514 $ilDB->
quote($a_item[
"suggestion_start"],
'integer') .
"," .
515 $ilDB->
quote($a_item[
"suggestion_end"],
'integer') .
"," .
516 $ilDB->
quote($a_item[
"changeable"],
'integer') .
"," .
517 $ilDB->
quote($a_item[
'earliest_start'],
'integer') .
", " .
518 $ilDB->
quote($a_item[
'latest_end'],
'integer') .
", " .
519 $ilDB->
quote($a_item[
"visible"],
'integer') .
", " .
520 $ilDB->
quote(0,
'integer') .
")";
528 $a_item[
"obj_id"] = $a_ref_id;
529 $a_item[
"parent_id"] = $parent_id;
543 $ilDB = $DIC->database();
549 $query =
"DELETE FROM crs_items " .
550 "WHERE obj_id = " .
$ilDB->quote($a_ref_id,
'integer');
553 $query =
"DELETE FROM crs_items " .
554 "WHERE parent_id = " .
$ilDB->quote($a_ref_id,
'integer');
573 $ilLog->write(__METHOD__ .
': Begin course items...');
575 $items = self::getItems($a_ref_id);
577 $ilLog->write(__METHOD__ .
': No course items found.');
583 $ilLog->write(__METHOD__ .
': Cannot create target object.');
587 include_once(
'Services/CopyWizard/classes/class.ilCopyWizardOptions.php');
589 $mappings = $cp_options->getMappings();
591 foreach ($items as $item) {
592 if (!isset($mappings[$item[
'parent_id']]) or !$mappings[$item[
'parent_id']]) {
593 $ilLog->write(__METHOD__ .
': No mapping for parent nr. ' . $item[
'parent_id']);
596 if (!isset($mappings[$item[
'obj_id']]) or !$mappings[$item[
'obj_id']]) {
597 $ilLog->write(__METHOD__ .
': No mapping for item nr. ' . $item[
'obj_id']);
600 $new_item_id = $mappings[$item[
'obj_id']];
601 $new_parent = $mappings[$item[
'parent_id']];
603 $new_item =
new self();
604 $new_item->setTimingType($item[
'timing_type']);
605 $new_item->setTimingStart($item[
'timing_start']);
606 $new_item->setTimingEnd($item[
'timing_end']);
607 $new_item->setSuggestionStart($item[
'suggestion_start']);
608 $new_item->setSuggestionEnd($item[
'suggestion_end']);
609 $new_item->toggleChangeable($item[
'changeable']);
610 $new_item->setEarliestStart($item[
'earliest_start']);
611 $new_item->setLatestEnd($item[
'latest_end']);
612 $new_item->toggleVisible($item[
'visible']);
613 $new_item->update($new_item_id, $new_parent);
615 $ilLog->write(__METHOD__ .
': Added new entry for item nr. ' . $item[
'obj_id']);
617 $ilLog->write(__METHOD__ .
': Finished course items.');
635 $tree = $DIC->repositoryTree();
636 $ilDB = $DIC->database();
638 $subtree = $tree->getSubTree($tree->getNodeData($a_ref_id));
640 foreach ($subtree as $node) {
641 $ref_ids[] = $node[
'ref_id'];
644 $query =
"SELECT * FROM crs_items " .
645 "WHERE timing_type = " .
$ilDB->quote(self::TIMINGS_PRESETTING,
'integer') .
" " .
646 "AND " .
$ilDB->in(
'obj_id', $ref_ids,
false,
'integer');
648 return $res->numRows() ? true :
false;
661 $tree = $DIC->repositoryTree();
662 $ilDB = $DIC->database();
664 $subtree = $tree->getSubTree($tree->getNodeData($a_ref_id));
666 foreach ($subtree as $node) {
667 $ref_ids[] = $node[
'ref_id'];
670 $query =
"SELECT * FROM crs_items " .
671 "WHERE timing_type = " .
$ilDB->quote(self::TIMINGS_PRESETTING,
'integer') .
" " .
672 "AND changeable = " .
$ilDB->quote(1,
'integer') .
" " .
673 "AND " .
$ilDB->in(
'obj_id', $ref_ids,
false,
'integer');
675 return $res->numRows() ? true :
false;
688 $tree = $DIC->repositoryTree();
692 foreach ($a_ref_ids as $item_ref_id) {
693 if ($tree->isDeleted($item_ref_id)) {
697 $node = $tree->getNodeData($item_ref_id);
698 if ($node[
"ref_id"] != $item_ref_id) {
701 $res[$item_ref_id] = $node;
705 self::preloadData(array_keys(
$res));
706 foreach (
$res as $idx => $item) {
707 self::addAdditionalSubItemInformation($item);
712 return array_values(
$res);
723 include_once
'Modules/Session/classes/class.ilEventItems.php';
725 return self::processListItems($event_items->getItems());
736 include_once
'Modules/ItemGroup/classes/class.ilItemGroupItems.php';
738 $items = $ig_items->getValidItems();
739 return self::processListItems($items);
750 include_once(
'./Modules/Course/classes/class.ilCourseObjectiveMaterials.php');
752 return self::processListItems($item_ids);
762 public static function getItems($a_parent_id, $a_with_list_data =
true)
766 $tree = $DIC->repositoryTree();
771 foreach ($tree->getChilds($a_parent_id) as $item) {
772 if ($item[
'type'] !=
'rolf') {
774 $ref_ids[] = $item[
'ref_id'];
779 self::preloadData($ref_ids);
781 foreach ($items as $idx => $item) {
782 if (!$a_with_list_data) {
783 $items[$idx] = array_merge($item, self::getItem($item[
'ref_id']));
785 self::addAdditionalSubItemInformation($item);
786 $items[$idx] = $item;
802 $items = self::getItems($a_parent_id,
false);
805 $active = $inactive =
array();
806 foreach ($items as $item) {
808 if ($item[
'timing_type'] == self::TIMINGS_DEACTIVATED) {
817 $items = array_merge($active, $inactive);
833 $objDefinition = $DIC[
"objDefinition"];
837 include_once
'Modules/Session/classes/class.ilEventItems.php';
839 foreach (self::getTimingsAdministrationItems($a_container_ref_id) as $item) {
840 if (!in_array($item[
'ref_id'], $event_items) &&
841 !$objDefinition->isSideBlock($item[
'type'])) {
static sortArray( $array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
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 getItem($a_ref_id)
Get item data.
const TIMINGS_DEACTIVATED
enabledVisible()
Get visible status.
getSuggestionEnd()
Get suggestion end.
addCustomProperty( $a_property="", $a_value="", $a_alert=false, $a_newline=false)
add custom property
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.
foreach($_POST as $key=> $value) $res
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.
getLatestEnd()
Get latest end.
static formatPeriod(ilDateTime $start, ilDateTime $end, $a_skip_starting_day=false)
Format a period of two date Shows: 14.
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
query($query)
Run a (read-only) Query on the database.
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.
manipulate($query)
Run a (write) Query on the database.