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]);
 
  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;
 
  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"])) {
 
  342        if (
$row[
"obj_id"]) {
 
  343            self::$preloaded_data[
$row[
"obj_id"]] = 
$row;
 
  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'];
 
  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 != 
"") {
 
  450                $lng->loadLanguageModule(
'crs');
 
  453                    $lng->txt($a_item[
'activation_info']),
 
  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);
 
  488            if (!
$ilDB->numRows($set)) {
 
  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') . 
")";
 
  521                $ilDB->manipulate($query);
 
  528        $a_item[
"obj_id"] = $a_ref_id;
 
  529        $a_item[
"parent_id"] = $parent_id;
 
  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...');
 
  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();
 
  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();
 
  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;
 
  706            foreach (
$res as $idx => $item) {
 
  712        return array_values(
$res);
 
  723        include_once 
'Modules/Session/classes/class.ilEventItems.php';
 
  736        include_once 
'Modules/ItemGroup/classes/class.ilItemGroupItems.php';
 
  738        $items = $ig_items->getValidItems();
 
  750        include_once(
'./Modules/Course/classes/class.ilCourseObjectiveMaterials.php');
 
  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'];
 
  781            foreach ($items as $idx => $item) {
 
  782                if (!$a_with_list_data) {
 
  783                    $items[$idx] = array_merge($item, self::getItem($item[
'ref_id']));
 
  786                    $items[$idx] = $item;
 
  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'])) {
 
An exception for terminatinating execution or to throw for unit testing.
error($a_errmsg)
set error message @access public
static _getInstance($a_copy_id)
Get instance of copy wizard options.
static _getAssignedMaterials($a_objective_id)
get assigned materials
static formatPeriod(ilDateTime $start, ilDateTime $end, $a_skip_starting_day=false)
Format a period of two date Shows: 14.
@classDescription Date and time handling
static _getItemsOfContainer($a_ref_id)
Class ilObjectActivation.
getTimingStart()
Get timing start.
setTimingStart($a_start)
Set timing start.
const TIMINGS_DEACTIVATED
setEarliestStart($a_start)
Set earliest start.
validateActivation()
Validate current properties.
getLatestEnd()
Get latest end.
setLatestEnd($a_end)
Set latest end.
enabledVisible()
Get visible status.
static getTimingsAdministrationItems($a_parent_id)
Get (sub) item data for timings administration view (active/inactive)
getEarliestStart()
Get earliest start.
getTimingType()
get timing type
static createDefaultEntry($a_ref_id)
Create db entry with default values.
setTimingType($a_type)
Set timing type.
update($a_ref_id, $a_parent_id=null)
Update db entry.
setSuggestionStart($a_start)
Set suggestion start.
static addListGUIActivationProperty(ilObjectListGUI $a_list_gui, array &$a_item)
Get timing details for list gui.
static getItemsByObjective($a_objective_id)
Get objective items.
static deleteAllEntries($a_ref_id)
Delete all db entries for ref id.
getTimingEnd()
Get timing end.
static cloneDependencies($a_ref_id, $a_target_id, $a_copy_id)
Clone dependencies.
enabledChangeable()
Get changeable status.
static hasChangeableTimings($a_ref_id)
Check if there is any active changeable timing (in subtree)
static getItemsByEvent($a_event_id)
Get session material / event items.
setTimingEnd($a_end)
Set timing end.
toggleChangeable($a_status)
Set changeable status.
static hasTimings($a_ref_id)
Check if there is any active timing (in subtree)
static preloadData(array $a_ref_ids)
Preload data to internal cache.
static processListItems(array $a_ref_ids)
Validate ref ids and add list data.
static getItemsByItemGroup($a_item_group_ref_id)
Get materials of item group.
static addAdditionalSubItemInformation(array &$a_item)
Parse item data for list entries.
getSuggestionStart()
Get suggestion start.
static getTimingsItems($a_container_ref_id)
Get (sub) item data for timings view (no session material, no side blocks)
getSuggestionEnd()
Get suggestion end.
static getItem($a_ref_id)
Get item data.
toggleVisible($a_status)
Set visible status.
setSuggestionEnd($a_end)
Set suggestion end.
static getItems($a_parent_id, $a_with_list_data=true)
Get sub item data.
static getInstanceByRefId($a_ref_id, $stop_on_error=true)
get an instance of an Ilias object by reference id
addCustomProperty( $a_property="", $a_value="", $a_alert=false, $a_newline=false)
add custom property
static _lookupObjId($a_id)
static _lookupType($a_id, $a_reference=false)
lookup object type
static _lookupAppointment($a_obj_id)
lookup appointment
static _getPlanedTimings($a_usr_id, $a_item_id)
static sortArray( $array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
foreach($_POST as $key=> $value) $res