/**
  * Get pages for list.
  */
 function getGroups()
 {
     global $lng;
     $data = array();
     $subitems = ilObjRepositorySettings::getNewItemGroupSubItems();
     if ($subitems[0]) {
         ilUtil::sendInfo(sprintf($lng->txt("rep_new_item_group_unassigned_subitems"), sizeof($subitems[0])));
         unset($subitems[0]);
     }
     foreach (ilObjRepositorySettings::getNewItemGroups() as $item) {
         $data[] = array("id" => $item["id"], "pos" => $item["pos"], "title" => $item["title"], "type" => $item["type"], "subitems" => sizeof($subitems[$item["id"]]));
     }
     $data = ilUtil::sortArray($data, "pos", "asc", true);
     $this->setData($data);
 }
 protected function saveNewItemGroupOrder()
 {
     global $ilSetting;
     if (is_array($_POST["grp_order"])) {
         include_once "Services/Repository/classes/class.ilObjRepositorySettings.php";
         ilObjRepositorySettings::updateNewItemGroupOrder($_POST["grp_order"]);
         $grp_pos_map = array();
         include_once "Services/Repository/classes/class.ilObjRepositorySettings.php";
         foreach (ilObjRepositorySettings::getNewItemGroups() as $item) {
             $grp_pos_map[$item["id"]] = str_pad($item["pos"], 4, "0", STR_PAD_LEFT);
         }
         // update order of assigned objects
         foreach (ilObjRepositorySettings::getNewItemGroupSubItems() as $grp_id => $subitems) {
             // unassigned objects will always be last
             if ($grp_id) {
                 foreach ($subitems as $obj_type) {
                     $old_pos = $ilSetting->get("obj_add_new_pos_" . $obj_type);
                     if (strlen($old_pos) == 8) {
                         $new_pos = $grp_pos_map[$grp_id] . substr($old_pos, 4);
                         $ilSetting->set("obj_add_new_pos_" . $obj_type, $new_pos);
                     }
                 }
             }
         }
         ilUtil::sendSuccess($this->lng->txt("settings_saved"), true);
     }
     $this->ctrl->redirect($this, "listNewItemGroups");
 }
 /**
  * Parse creatable sub objects for repository incl. grouping
  * 
  * @return bool
  */
 protected function parseRepository()
 {
     global $objDefinition, $lng, $ilAccess;
     $this->sub_objects = array();
     if (!is_array($this->disabled_object_types)) {
         $this->disabled_object_types = array();
     }
     $this->disabled_object_types[] = "rolf";
     $parent_type = ilObject::_lookupType($this->parent_ref_id, true);
     $subtypes = $objDefinition->getCreatableSubObjects($parent_type, $this->mode);
     if (count($subtypes) > 0) {
         // grouping of object types
         $grp_map = $pos_group_map = array();
         include_once "Services/Repository/classes/class.ilObjRepositorySettings.php";
         $groups = ilObjRepositorySettings::getNewItemGroups();
         // no groups => use default
         if (!$groups) {
             $default = ilObjRepositorySettings::getDefaultNewItemGrouping();
             $groups = $default["groups"];
             $grp_map = $default["items"];
             // reset positions (9999 = "other"/unassigned)
             $pos = 0;
             foreach ($subtypes as $item_type => $item) {
                 // see ilObjectDefinition
                 if (substr($item_type, 0, 1) == "x") {
                     $subtypes[$item_type]["pos"] = "99992000";
                 } else {
                     $subtypes[$item_type]["pos"] = "9999" . str_pad(++$pos, 4, "0", STR_PAD_LEFT);
                 }
             }
             // assign default positions
             foreach ($default["sort"] as $item_type => $pos) {
                 if (array_key_exists($item_type, $subtypes)) {
                     $subtypes[$item_type]["pos"] = $pos;
                 }
             }
             // sort by default positions
             $subtypes = ilUtil::sortArray($subtypes, "pos", "asc", true, true);
         } else {
             foreach (ilObjRepositorySettings::getNewItemGroupSubItems() as $grp_id => $subitems) {
                 foreach ($subitems as $subitem) {
                     $grp_map[$subitem] = $grp_id;
                 }
             }
         }
         $group_separators = array();
         $pos_group_map[0] = $lng->txt("rep_new_item_group_other");
         $old_grp_ids = array();
         foreach ($groups as $item) {
             if ($item["type"] == ilObjRepositorySettings::NEW_ITEM_GROUP_TYPE_GROUP) {
                 $pos_group_map[$item["id"]] = $item["title"];
             } else {
                 if (sizeof($old_grp_ids)) {
                     $group_separators[$item["id"]] = $old_grp_ids;
                 }
             }
             $old_grp_ids[] = $item["id"];
         }
         $current_grp = null;
         foreach ($subtypes as $type => $subitem) {
             if (!in_array($type, $this->disabled_object_types)) {
                 // #9950
                 if ($ilAccess->checkAccess("create_" . $type, "", $this->parent_ref_id, $parent_type)) {
                     // if only assigned - do not add groups
                     if (sizeof($pos_group_map) > 1) {
                         $obj_grp_id = (int) $grp_map[$type];
                         if ($obj_grp_id !== $current_grp) {
                             // add seperator after last group?
                             $sdone = false;
                             foreach ($group_separators as $idx => $spath) {
                                 // #11986 - all separators up to next group
                                 if ($current_grp && !in_array($obj_grp_id, $spath)) {
                                     // 1 only separator between groups
                                     if (!$sdone) {
                                         $this->sub_objects[] = array("type" => "column_separator");
                                         $sdone = true;
                                     }
                                     unset($group_separators[$idx]);
                                 }
                             }
                             $title = $pos_group_map[$obj_grp_id];
                             $this->sub_objects[] = array("type" => "group", "title" => $title);
                             $current_grp = $obj_grp_id;
                         }
                     }
                     if ($subitem["plugin"]) {
                         include_once "./Services/Component/classes/class.ilPlugin.php";
                         $title = ilPlugin::lookupTxt("rep_robj", $type, "obj_" . $type);
                     } else {
                         // #13088
                         $title = $lng->txt("obj_" . $type);
                     }
                     $this->sub_objects[] = array("type" => "object", "value" => $type, "title" => $title);
                 }
             }
         }
     }
     return (bool) sizeof($this->sub_objects);
 }