19 declare(strict_types=1);
    49         $this->component_repository = $DIC[
"component.repository"];
    60         foreach ($global_cache->getIlObjectDef() as $rec) {
    61             $this->obj_data[$rec[
"id"]] = [
    63                 "class_name" => $rec[
"class_name"],
    64                 "location" => $rec[
"location"],
    65                 "checkbox" => $rec[
"checkbox"],
    66                 "inherit" => $rec[
"inherit"],
    67                 "component" => $rec[
"component"],
    68                 "translate" => $rec[
"translate"],
    69                 "devmode" => $rec[
"devmode"],
    70                 "allow_link" => $rec[
"allow_link"],
    71                 "allow_copy" => $rec[
"allow_copy"],
    72                 "rbac" => $rec[
"rbac"],
    73                 "group" => $rec[
"grp"],
    74                 "system" => $rec[
"system"],
    75                 "default_pos" => 
"9999" . str_pad((
string) $rec[
"default_pos"], 4, 
"0", STR_PAD_LEFT), 
    76                 "sideblock" => $rec[
"sideblock"],
    77                 'export' => $rec[
'export'],
    78                 'repository' => $rec[
'repository'],
    79                 'workspace' => $rec[
'workspace'],
    80                 'administration' => $rec[
'administration'],
    81                 'amet' => $rec[
'amet'],
    82                 'orgunit_permissions' => $rec[
'orgunit_permissions'],
    83                 'lti_provider' => $rec[
'lti_provider'],
    84                 'offline_handling' => $rec[
'offline_handling']
    86             $this->obj_data[$rec[
"id"]][
"subobjects"] = [];
    88             $defIds[] = $rec[
"id"];
    91         $subobj = $global_cache->lookupSubObjForParent($defIds);
    93         foreach ($subobj as $rec2) {
    98             $this->obj_data[$rec2[
"parent"]][
"subobjects"][$rec2[
"subobj"]] = [
    99                 "name" => $rec2[
"subobj"],
   101                 "lng" => $rec2[
"subobj"]
   105         $this->obj_group = $global_cache->getIlObjectGroup();
   107         $this->sub_types = $global_cache->getIlObjectSubType();
   114         $component_repository = $DIC[
"component.repository"];
   115         $plugins = $component_repository->
getPluginSlotById($slotId)->getActivePlugins();
   116         foreach ($plugins as 
$plugin) {
   117             $pl_id = $plugin->getId();
   118             if (!isset($grouped_obj[$pl_id])) {
   119                 $grouped_obj[$pl_id] = [
   121                     "objs" => [0 => $pl_id]
   130         return $this->obj_data[$obj_name][
"class_name"] ?? 
'';
   135         return $this->obj_data[$obj_name][
"location"] ?? 
'';
   143         return $this->obj_group[
$id];
   151         return $this->obj_data[$obj_name][
"group"] ?? null;
   159         return (
bool) ($this->obj_data[$obj_name][
"checkbox"] ?? 
false);
   168         $ilDB = $DIC->database();
   170         if ($obj_name == 
"root") {
   171             if (!isset($this->root_trans_type)) {
   173                     "SELECT count(obj_id) cnt" . PHP_EOL
   174                     . 
"FROM object_translation" . PHP_EOL
   177                 $set = 
$ilDB->query($sql);
   179                 if ($rec[
"cnt"] > 0) {
   180                     $this->root_trans_type = 
"db";
   182                     $this->root_trans_type = $this->obj_data[$obj_name][
"translate"];
   188         if (isset($this->obj_data[$obj_name])) {
   189             return $this->obj_data[$obj_name][
"translate"];
   200         return (
bool) $this->obj_data[$obj_name][
"inherit"];
   208         return (
bool) ($this->obj_data[$obj_name][
"devmode"] ?? 
false);
   218         $types = array_keys($this->obj_data);
   221         foreach ($types as $type) {
   223                 $dev_types[] = $type;
   236         return (
bool) ($this->obj_data[$obj_name][
"rbac"] ?? 
false);
   245         return isset($this->obj_data[$obj_name][
"plugin"]);
   253         return (substr($str, 0, 1) == 
"x");
   261         if (!$this->component_repository->hasPluginId($type)) {
   264         $plugin_slot = $this->component_repository->getPluginById($type)->getPluginSlot();
   265         return $plugin_slot->getId() === 
"robj" || $plugin_slot->getId() === 
"orguext";
   270         $types = array_keys($this->obj_data);
   273         foreach ($types as $type) {
   275                 $rbac_types[] = $type;
   287         return array_keys($this->obj_data);
   295         return (
bool) $this->obj_data[$obj_name][
"allow_link"];
   303         return (
bool) $this->obj_data[$obj_name][
"allow_copy"];
   308         return (
bool) $this->obj_data[$obj_name][
'export'];
   332         if ($subobjects = ($this->obj_data[$obj_type][
"subobjects"] ?? 
false)) {
   337             foreach ($subobjects as 
$data => $sub) {
   338                 if (!isset($sub[
"module"]) || $sub[
"module"] != 
"n") {
   343                         $pos = (
int) $this->obj_data[
$data][
"default_pos"];
   347                         $subs[
$data][
"pos"] = $pos;
   368         bool $include_source_obj = 
true,
   369         bool $add_admin_objects = 
false   373         $recursive_subs = [];
   377         $to_do = [$obj_type];
   385         while (count($to_do) > 0) {
   386             $type = array_pop($to_do);
   390             if ($type == 
'recf') {
   395             if (!$add_admin_objects and $type == 
'adm') {
   400             foreach ($subs as $subtype => 
$data) {
   405                 if ($subtype == 
'rolt') {
   408                 if (!$add_admin_objects and $subtype == 
'adm') {
   412                 $recursive_subs[$subtype] = 
$data;
   413                 if (!in_array($subtype, $done) && !in_array($subtype, $to_do)) {
   419         if ($include_source_obj) {
   420             if (!isset($recursive_subs[$obj_type])) {
   421                 $recursive_subs[$obj_type][
'name'] = $obj_type;
   422                 $recursive_subs[$obj_type][
'lng'] = $obj_type;
   423                 $recursive_subs[$obj_type][
'max'] = 0;
   424                 $recursive_subs[$obj_type][
'pos'] = -1;
   438         foreach ($this->obj_data[$obj_type][
"subobjects"] as $key => $value) {
   456         int $context = self::MODE_REPOSITORY,
   457         int $parent_ref_id = null
   462         unset($sub_objects[
"rolf"]);
   464         $sub_types = array_keys($sub_objects);
   467         foreach ($sub_types as $type) {
   469                 unset($sub_objects[$type]);
   472                 unset($sub_objects[$type]);
   475                 unset($sub_objects[$type]);
   478                 unset($sub_objects[$type]);
   482         if ($obj_type == 
"prg") {
   496         if (is_array($this->obj_data[$obj_type][
"subobjects"])) {
   497             $data = array_keys($this->obj_data[$obj_type][
"subobjects"]);
   498             $string = 
"'" . implode(
"','", 
$data) . 
"'";
   509         return (
bool) ($this->obj_data[$obj_name][
'subobjects'] ?? 
false);
   514         xml_set_object($xml_parser, $this);
   515         xml_set_element_handler($xml_parser, 
'handlerBeginTag', 
'handlerEndTag');
   516         xml_set_character_data_handler($xml_parser, 
'handlerCharacterData');
   523                 $this->parent_tag_name = $attribs[
"name"];
   526                 $this->current_tag = 
"property";
   527                 $this->current_tag_name = $attribs[
"name"];
   539         $this->current_tag = 
'';
   540         $this->current_tag_name = 
'';
   560         return (
bool) ($this->obj_data[$obj_name][
"system"] ?? 
false);
   568         return (
bool) ($this->obj_data[$obj_name][
"sideblock"] ?? 
false);
   573         $side_block_types = [];
   574         foreach (array_keys($this->obj_data) as $type) {
   576                 $filter_repository_types &&
   582                 $side_block_types[] = $type;
   585         return $side_block_types;
   599         $ilDB = $DIC->database();
   602             "SELECT id, class_name, component, location, checkbox, inherit, translate, devmode, allow_link," . PHP_EOL
   603             . 
"allow_copy, rbac, `system`, sideblock, default_pos, grp, default_pres_pos, `export`, repository," . PHP_EOL
   604             . 
"workspace, administration, amet, orgunit_permissions, lti_provider, offline_handling" . PHP_EOL
   605             . 
"FROM il_object_def" . PHP_EOL
   606             . 
"WHERE component = %s" . PHP_EOL
   608         $result = 
$ilDB->queryF($sql, [
"text"], [$component_type . 
"/" . $component_name]);
   611         while ($rec = 
$ilDB->fetchAssoc($result)) {
   612             if ($rec[
"system"] != 1) {
   625         $ilDB = $DIC->database();
   627         $result = 
$ilDB->queryF(
"SELECT component FROM il_object_def WHERE id = %s", [
"text"], [$obj_type]);
   629         if ($rec = 
$ilDB->fetchAssoc($result)) {
   630             return $rec[
"component"];
   642         $ilDB = $DIC->database();
   644         $set = 
$ilDB->query(
"SELECT * FROM il_object_group");
   647             $groups[$gr_rec[
"id"]] = $gr_rec;
   652         $recs = $global_cache->lookupGroupedRepObj($parent_obj_type);
   655         foreach ((array) $recs as $rec) {
   656             if ($rec[
"grp"] != 
"") {
   657                 $grouped_obj[$rec[
"grp"]][
"pos"] = (
int) $groups[$rec[
"grp"]][
"default_pres_pos"];
   658                 $grouped_obj[$rec[
"grp"]][
"objs"][] = $rec[
"id"];
   660                 $grouped_obj[$rec[
"id"]][
"pos"] = (
int) $rec[
"default_pres_pos"];
   661                 $grouped_obj[$rec[
"id"]][
"objs"][] = $rec[
"id"];
   665         $grouped_obj = self::getGroupedPluginObjectTypes($grouped_obj, 
"robj");
   666         $grouped_obj = self::getGroupedPluginObjectTypes($grouped_obj, 
"orguext");
   676         return (
bool) ($this->obj_data[$obj_name][
"repository"] ?? 
false);
   684         $types = array_keys($this->obj_data);
   687         foreach ($types as $type) {
   689                 $rbac_types[] = $type;
   701         return (
bool) ($this->obj_data[$obj_name][
"workspace"] ?? 
false);
   709         return (
bool) ($this->obj_data[$obj_name][
'administration'] ?? 
false);
   717         if (substr($type, 0, 1) == 
"x" && !$this->
isPlugin($type)) {
   729         foreach ($this->obj_data as $k => $v) {
   730             if ($v[
"amet"] ?? 
false) {
   731                 $amet[] = [
"obj_type" => $k, 
"sub_type" => 
""];
   735         foreach ($this->sub_types as $type => $sub_types) {
   736             foreach ($sub_types as $t) {
   738                     $amet[] = [
"obj_type" => $type, 
"sub_type" => $t[
"sub_type"]];
   754         foreach ($this->obj_data as $type => $object_info) {
   755             if ($object_info[
'orgunit_permissions']) {
   769         foreach ($this->obj_data as $type => $object_info) {
   770             if (array_key_exists(
'lti_provider', $object_info) && $object_info[
'lti_provider']) {
   790         if ($this->
settings->get(
"obj_add_new_pos_" . $type) > 0) {
   791             return (
int) $this->
settings->get(
"obj_add_new_pos_" . $type);
   793         return (
int) $this->obj_data[$type][
"default_pos"];
   802         foreach ($this->obj_data as $type => $pl_data) {
   804                 $plugins[$type] = $pl_data;
   815         $res = $grp_map = $cnt_grp = [];
   819             $type = $rtype[
"name"];
   821             if ($type == 
"rolf") {
   828                 $grp_map[$type_grp][] = $type;
   834                     $cnt_grp[] = $type_grp;
   842         foreach ($cnt_grp as $grp) {
   843             $res = array_merge(
$res, $grp_map[$grp]);
   847         return array_unique(
$res);
   855         return (
bool) ($this->obj_data[$obj_type][
'offline_handling'] ?? 
false);
   876         $plugins = $this->component_repository->getPluginSlotById($slotId)->getActivePlugins();
   877         foreach ($plugins as 
$plugin) {
   878             $pl_id = $plugin->getId();
   879             if ($pl_id != 
"" && !isset($this->obj_data[$pl_id])) {
   880                 $loc = $plugin->getPath() . 
"/classes";
   884                 $this->obj_data[$pl_id] = [
   886                     "class_name" => $pl->getPluginName(),
   895                     "allow_copy" => $pl->allowCopy() ? 
'1' : 
'0',
   899                     "default_pos" => 
"99992000", 
   902                     'administration' => $isInAdministration ? 
'1' : 
'0',
   904                     'export' => $plugin->supportsExport(),
   905                     'offline_handling' => 
'0',
   906                     'orgunit_permissions' => $pl->useOrguPermissions() ? 
'1' : 
'0'   909                 $parent_types = $pl->getParentTypes();
   910                 foreach ($parent_types as $parent_type) {
   911                     $this->obj_data[$parent_type][
"subobjects"][$pl_id] = [
 getSubObjects(string $obj_type, bool $filter=true)
get all sub objects by type 
 
static getComponentForType(string $obj_type)
Get component for object type. 
 
Readable part of repository interface to ilComponentDataDB. 
 
static getGroupedPluginObjectTypes(array $grouped_obj, string $slotId)
 
getSubobjectsToFilter(string $obj_type="adm")
get all subjects except (rolf) of the adm object This is necessary for filtering these objects in rol...
 
isSystemObject(string $obj_name)
checks if object type is a system object 
 
isActivePluginType(string $type)
Returns true if the given type is an active type of repositoryObject or Organisation Unit Extension p...
 
isAdministrationObject(string $obj_name)
Check if administration object. 
 
readDefinitionData()
Read object definition data. 
 
isOrgUnitPermissionType(string $obj_type)
Check if object type offers org unit position support. 
 
allowLink(string $obj_name)
checks if linking of an object type is allowed 
 
getAdvancedMetaDataTypes()
Get advanced meta data objects. 
 
isContainer(string $obj_name)
Check if object type is container ('crs','fold','grp' ...) 
 
getPositionByType(string $type)
Get Position By Object Type. 
 
getOrgUnitPermissionTypes()
Get object type with org unit position permission support. 
 
getGroupOfObj(string $obj_name)
Get Group of object type. 
 
isRBACObject(string $obj_name)
get RBAC status by type returns true if object type is a RBAC object type 
 
static getCreatableSubObjects(array $subobjects, $ref_id)
Filter the list of possible subobjects for the objects that actually could be created on a concrete n...
 
allowExport(string $obj_name)
 
getSideBlockTypes(bool $filter_repository_types=true)
 
allowCopy(string $obj_name)
checks if copying of an object type is allowed 
 
stopInheritance(string $obj_name)
Does object permits stopping inheritance? 
 
getAllRepositoryTypes(bool $incl_adm=false)
get all RBAC object types 
 
getCreatableSubObjects(string $obj_type, int $context=self::MODE_REPOSITORY, int $parent_ref_id=null)
 
isAllowedInWorkspace(string $obj_name)
checks if object type can be used in workspace context 
 
hasCheckbox(string $obj_name)
should the object get a checkbox (needed for 'cut','copy' ...) 
 
ilComponentRepository $component_repository
 
handlerCharacterData($xml_parser, string $data)
 
getDevMode(string $obj_name)
get dev mode status by type 
 
handlerEndTag($xml_parser, string $name)
 
isAllowedInRepository(string $obj_name)
checks if object type can be used in repository context 
 
const MODE_ADMINISTRATION
 
getPluginSlotById(string $id)
Get pluginslot by id. 
 
isPluginTypeName(string $str)
Check if given type is a plugin type name (starts with an "x") 
 
handlerBeginTag($xml_parser, string $name, array $attribs)
 
getClassName(string $obj_name)
 
isSideBlock(string $obj_name)
Check, whether object type is a side block. 
 
supportsOfflineHandling(string $obj_type)
check whether obj_type supports centralised offline handling 
 
getSubObjectsRecursively(string $obj_type, bool $include_source_obj=true, bool $add_admin_objects=false)
Get all sub objects by type. 
 
getTranslationType(string $obj_name)
get translation type (sys, db or null) 
 
isInactivePlugin(string $type)
Check whether type belongs to inactive plugin. 
 
static getPluginObjectByType(string $type)
Return either a repoObject plugin or a orgunit extension plugin or null if the type is not a plugin...
 
getAllObjects()
get all object types 
 
static getGroupedRepositoryObjectTypes($parent_obj_type)
 
parsePluginData(string $slotId, bool $isInAdministration)
loads a single plugin definition into the object definition 
 
getSubObjectsAsString(string $obj_type)
get a string of all sub objects by type 
 
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins 
 
getLTIProviderTypes()
Get object types which offer lti provider support. 
 
getGroup(string $id)
Get Group information. 
 
hasLocalRoles(string $obj_type)
Check whether the creation of local roles is allowed Currently disabled for type "root" and "adm"...
 
isPlugin(string $obj_name)
get RBAC status by type returns true if object type is an (activated) plugin type ...
 
getLocation(string $obj_name)
 
static getRepositoryObjectTypesForComponent(string $component_type, string $component_name)
Get all repository object types of component. 
 
readPluginData()
Loads the different plugins into the object definition. 
 
getExplorerContainerTypes()
Get all object types which are defined as container in an explorer context. 
 
getDevModeAll()
get all object types in dev mode 
 
__filterObjects(array &$sub_objects)
 
static sortArray(array $array, string $a_array_sortby_key, string $a_array_sortorder="asc", bool $a_numeric=false, bool $a_keep_keys=false)
 
getPlugins()
Get plugin object info.