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);
522 $this->parent_tag_name = $attribs[
"name"];
525 $this->current_tag =
"property";
526 $this->current_tag_name = $attribs[
"name"];
538 $this->current_tag =
'';
539 $this->current_tag_name =
'';
559 return (
bool) ($this->obj_data[$obj_name][
"system"] ??
false);
567 return (
bool) ($this->obj_data[$obj_name][
"sideblock"] ??
false);
572 $side_block_types = [];
573 foreach (array_keys($this->obj_data) as $type) {
575 $filter_repository_types &&
581 $side_block_types[] = $type;
584 return $side_block_types;
598 $ilDB = $DIC->database();
601 "SELECT id, class_name, component, location, checkbox, inherit, translate, devmode, allow_link," . PHP_EOL
602 .
"allow_copy, rbac, `system`, sideblock, default_pos, grp, default_pres_pos, `export`, repository," . PHP_EOL
603 .
"workspace, administration, amet, orgunit_permissions, lti_provider, offline_handling" . PHP_EOL
604 .
"FROM il_object_def" . PHP_EOL
605 .
"WHERE component = %s" . PHP_EOL
607 $result =
$ilDB->queryF($sql, [
"text"], [$component_type .
"/" . $component_name]);
610 while ($rec =
$ilDB->fetchAssoc($result)) {
611 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
getCreatableSubObjects(string $obj_type, int $context=self::MODE_REPOSITORY, ?int $parent_ref_id=null)
stopInheritance(string $obj_name)
Does object permits stopping inheritance?
getAllRepositoryTypes(bool $incl_adm=false)
get all RBAC object types
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)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
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.