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) {
626 $ilDB = $DIC->database();
628 $result =
$ilDB->queryF(
"SELECT component FROM il_object_def WHERE id = %s", [
"text"], [$obj_type]);
630 if ($rec =
$ilDB->fetchAssoc($result)) {
631 return $rec[
"component"];
643 $ilDB = $DIC->database();
645 $set =
$ilDB->query(
"SELECT * FROM il_object_group");
648 $groups[$gr_rec[
"id"]] = $gr_rec;
653 $recs = $global_cache->lookupGroupedRepObj($parent_obj_type);
656 foreach ((array) $recs as $rec) {
657 if ($rec[
"grp"] !=
"") {
658 $grouped_obj[$rec[
"grp"]][
"pos"] = (
int) $groups[$rec[
"grp"]][
"default_pres_pos"];
659 $grouped_obj[$rec[
"grp"]][
"objs"][] = $rec[
"id"];
661 $grouped_obj[$rec[
"id"]][
"pos"] = (
int) $rec[
"default_pres_pos"];
662 $grouped_obj[$rec[
"id"]][
"objs"][] = $rec[
"id"];
666 $grouped_obj = self::getGroupedPluginObjectTypes($grouped_obj,
"robj");
667 $grouped_obj = self::getGroupedPluginObjectTypes($grouped_obj,
"orguext");
677 return (
bool) ($this->obj_data[$obj_name][
"repository"] ??
false);
685 $types = array_keys($this->obj_data);
688 foreach ($types as $type) {
690 $rbac_types[] = $type;
702 return (
bool) ($this->obj_data[$obj_name][
"workspace"] ??
false);
710 return (
bool) ($this->obj_data[$obj_name][
'administration'] ??
false);
718 if (substr($type, 0, 1) ==
"x" && !$this->
isPlugin($type)) {
730 foreach ($this->obj_data as $k => $v) {
731 if ($v[
"amet"] ??
false) {
732 $amet[] = [
"obj_type" => $k,
"sub_type" =>
""];
736 foreach ($this->sub_types as $type => $sub_types) {
737 foreach ($sub_types as $t) {
739 $amet[] = [
"obj_type" => $type,
"sub_type" => $t[
"sub_type"]];
755 foreach ($this->obj_data as $type => $object_info) {
756 if ($object_info[
'orgunit_permissions']) {
770 foreach ($this->obj_data as $type => $object_info) {
771 if (array_key_exists(
'lti_provider', $object_info) && $object_info[
'lti_provider']) {
791 if ($this->
settings->get(
"obj_add_new_pos_" . $type) > 0) {
792 return (
int) $this->
settings->get(
"obj_add_new_pos_" . $type);
794 return (
int) $this->obj_data[$type][
"default_pos"];
803 foreach ($this->obj_data as $type => $pl_data) {
805 $plugins[$type] = $pl_data;
816 $res = $grp_map = $cnt_grp = [];
820 $type = $rtype[
"name"];
822 if ($type ==
"rolf") {
829 $grp_map[$type_grp][] = $type;
835 $cnt_grp[] = $type_grp;
843 foreach ($cnt_grp as $grp) {
844 $res = array_merge(
$res, $grp_map[$grp]);
848 return array_unique(
$res);
856 return (
bool) ($this->obj_data[$obj_type][
'offline_handling'] ??
false);
877 $plugins = $this->component_repository->getPluginSlotById($slotId)->getActivePlugins();
878 foreach ($plugins as
$plugin) {
879 $pl_id = $plugin->getId();
880 if ($pl_id !=
"" && !isset($this->obj_data[$pl_id])) {
881 $loc = $plugin->getPath() .
"/classes";
885 $this->obj_data[$pl_id] = [
887 "class_name" => $pl->getPluginName(),
896 "allow_copy" => $pl->allowCopy() ?
'1' :
'0',
900 "default_pos" =>
"99992000",
903 'administration' => $isInAdministration ?
'1' :
'0',
905 'export' => $plugin->supportsExport(),
906 'offline_handling' =>
'0',
907 'orgunit_permissions' => $pl->useOrguPermissions() ?
'1' :
'0' 910 $parent_types = $pl->getParentTypes();
911 foreach ($parent_types as $parent_type) {
912 $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)
parses the objects.xml it handles the xml-description of all ilias objects
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
getLTIProviderTypes()
Get object types which offer lti provider support.
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
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.