/**
  * Render item group
  *
  * @param
  * @return
  */
 function renderItemGroup($a_tpl, $a_itgr)
 {
     global $ilAccess, $lng;
     $perm_ok = $ilAccess->checkAccess("read", "", $a_itgr['ref_id']);
     include_once './Services/Container/classes/class.ilContainerSorting.php';
     include_once './Services/Object/classes/class.ilObjectActivation.php';
     $items = ilObjectActivation::getItemsByItemGroup($a_itgr['ref_id']);
     $items = ilContainerSorting::_getInstance($this->getContainerObject()->getId())->sortSubItems('itgr', $a_itgr['obj_id'], $items);
     // if no permissoin is given, set the items to "rendered" but
     // do not display the whole block
     if (!$perm_ok) {
         foreach ($items as $item) {
             $this->rendered_items[$item["child"]] = true;
         }
         return;
     }
     $item_list_gui = $this->getItemGUI($a_itgr);
     $item_list_gui->enableNotes(false);
     $item_list_gui->enableTags(false);
     $item_list_gui->enableComments(false);
     $item_list_gui->enableTimings(false);
     $item_list_gui->getListItemHTML($a_itgr["ref_id"], $a_itgr["obj_id"], $a_itgr["title"], $a_itgr["description"]);
     $commands_html = $item_list_gui->getCommandsHTML();
     $this->addSeparatorRow($a_tpl);
     $a_tpl->setVariable("CB_ID", ' id="bl_cntr_' . $this->bl_cnt . '"');
     if ($this->getContainerGUI()->isActiveAdministrationPanel() && !$_SESSION["clipboard"]) {
         $a_tpl->setCurrentBlock("select_all_row");
         $a_tpl->setVariable("CHECKBOXNAME", "bl_cb_" . $this->bl_cnt);
         $a_tpl->setVariable("SEL_ALL_PARENT", "bl_cntr_" . $this->bl_cnt);
         $a_tpl->setVariable("SEL_ALL_PARENT", "bl_cntr_" . $this->bl_cnt);
         $a_tpl->setVariable("TXT_SELECT_ALL", $lng->txt("select_all"));
         $a_tpl->parseCurrentBlock();
         $this->bl_cnt++;
     }
     $a_tpl->setCurrentBlock("container_header_row");
     $a_tpl->setVariable("BLOCK_HEADER_CONTENT", $a_itgr["title"]);
     $a_tpl->setVariable("CHR_COMMANDS", $commands_html);
     $a_tpl->parseCurrentBlock();
     $a_tpl->touchBlock("container_row");
     $this->resetRowType();
     // render item group sub items
     $position = 1;
     foreach ($items as $item) {
         $html2 = $this->renderItem($item, $position++, false, "[itgr][" . $a_itgr['obj_id'] . "]");
         if ($html2 != "") {
             $this->addStandardRow($a_tpl, $html2, $item["child"]);
             $this->rendered_items[$item["child"]] = true;
         }
     }
     // finish block
     $a_tpl->setCurrentBlock("container_block");
     $a_tpl->parseCurrentBlock();
 }
 /**
  * Render item group
  *
  * @param
  * @return
  */
 function renderItemGroup($a_itgr)
 {
     global $ilAccess, $lng;
     $perm_ok = $ilAccess->checkAccess("read", "", $a_itgr['ref_id']);
     include_once './Services/Container/classes/class.ilContainerSorting.php';
     include_once './Services/Object/classes/class.ilObjectActivation.php';
     $items = ilObjectActivation::getItemsByItemGroup($a_itgr['ref_id']);
     // if no permission is given, set the items to "rendered" but
     // do not display the whole block
     if (!$perm_ok) {
         foreach ($items as $item) {
             $this->renderer->hideItem($item["child"]);
         }
         return;
     }
     $item_list_gui = $this->getItemGUI($a_itgr);
     $item_list_gui->enableNotes(false);
     $item_list_gui->enableTags(false);
     $item_list_gui->enableComments(false);
     $item_list_gui->enableTimings(false);
     $item_list_gui->getListItemHTML($a_itgr["ref_id"], $a_itgr["obj_id"], $a_itgr["title"], $a_itgr["description"]);
     $commands_html = $item_list_gui->getCommandsHTML();
     $this->renderer->addCustomBlock($a_itgr["ref_id"], $a_itgr["title"], $commands_html);
     // render item group sub items
     $items = ilContainerSorting::_getInstance($this->getContainerObject()->getId())->sortSubItems('itgr', $a_itgr['obj_id'], $items);
     $position = 1;
     foreach ($items as $item) {
         $html2 = $this->renderItem($item, $position++, false, "[itgr][" . $a_itgr['obj_id'] . "]");
         if ($html2 != "") {
             // :TODO: show it multiple times?
             $this->renderer->addItemToBlock($a_itgr["ref_id"], $item["type"], $item["child"], $html2, true);
         }
     }
 }
 /**
  * Sort childs
  *
  * @param array $a_childs array of child nodes
  * @param mixed $a_parent_node parent node
  *
  * @return array array of childs nodes
  */
 function sortChilds($a_childs, $a_parent_node_id)
 {
     global $objDefinition;
     $parent_obj_id = ilObject::_lookupObjId($a_parent_node_id);
     if ($parent_obj_id > 0) {
         $parent_type = ilObject::_lookupType($parent_obj_id);
     } else {
         $parent_type = "dummy";
         $this->type_grps["dummy"] = array("root" => "dummy");
     }
     if (empty($this->type_grps[$parent_type])) {
         $this->type_grps[$parent_type] = $objDefinition->getGroupedRepositoryObjectTypes($parent_type);
     }
     // #14465 - item groups
     include_once './Services/Object/classes/class.ilObjectActivation.php';
     $group = array();
     foreach ($a_childs as $child) {
         // item group: get childs
         if ($child["type"] == "itgr") {
             $g = $child["child"];
             $items = ilObjectActivation::getItemsByItemGroup($g);
             if ($items) {
                 // add item group ref id to item group block
                 $this->type_grps[$parent_type]["itgr"]["ref_ids"][] = $g;
                 foreach ($items as $item) {
                     $group[$g][] = $item;
                 }
             }
         } else {
             $g = $objDefinition->getGroupOfObj($child["type"]);
             if ($g == "") {
                 $g = $child["type"];
             }
             $group[$g][] = $child;
         }
     }
     // custom block sorting?
     include_once "./Services/Container/classes/class.ilContainerSorting.php";
     $sort = ilContainerSorting::_getInstance($parent_obj_id);
     $block_pos = $sort->getBlockPositions();
     if (sizeof($block_pos)) {
         $tmp = $this->type_grps[$parent_type];
         $this->type_grps[$parent_type] = array();
         foreach ($block_pos as $block_type) {
             // type group
             if (!is_numeric($block_type) && array_key_exists($block_type, $tmp)) {
                 $this->type_grps[$parent_type][$block_type] = $tmp[$block_type];
                 unset($tmp[$block_type]);
             } else {
                 // using item group ref id directly
                 $this->type_grps[$parent_type][$block_type] = array();
             }
         }
         // append missing
         if (sizeof($tmp)) {
             foreach ($tmp as $block_type => $grp) {
                 $this->type_grps[$parent_type][$block_type] = $grp;
             }
         }
         unset($tmp);
     }
     $childs = array();
     $done = array();
     foreach ($this->type_grps[$parent_type] as $t => $g) {
         // type group
         if (is_array($group[$t])) {
             // do we have to sort this group??
             include_once "./Services/Container/classes/class.ilContainer.php";
             include_once "./Services/Container/classes/class.ilContainerSorting.php";
             $sort = ilContainerSorting::_getInstance($parent_obj_id);
             $group = $sort->sortItems($group);
             // need extra session sorting here
             if ($t == "sess") {
             }
             foreach ($group[$t] as $k => $item) {
                 if (!in_array($item["child"], $done)) {
                     $childs[] = $item;
                     $done[] = $item["child"];
                 }
             }
         } else {
             if ($t == "itgr" && is_array($g["ref_ids"])) {
                 foreach ($g["ref_ids"] as $ref_id) {
                     if (isset($group[$ref_id])) {
                         foreach ($group[$ref_id] as $k => $item) {
                             if (!in_array($item["child"], $done)) {
                                 $childs[] = $item;
                                 $done[] = $item["child"];
                             }
                         }
                     }
                 }
             }
         }
     }
     return $childs;
 }