19 declare(strict_types=1);
    66     protected static array 
$tags = [];
   194     public function __construct(
int $context = self::CONTEXT_REPOSITORY)
   199         $this->
access = $DIC[
'ilAccess'];
   200         $this->
user = $DIC[
'ilUser'];
   201         $this->object_dic = ilObjectDIC::dic();
   202         $this->obj_definition = $DIC[
'objDefinition'];
   203         $this->tree = $DIC[
'tree'];
   204         $this->
settings = $DIC[
'ilSetting'];
   205         $this->
http = $DIC->http();
   206         $this->
ui = $DIC->ui();
   207         $this->main_tpl = $DIC[
'tpl'];
   208         $this->rbacsystem = $DIC[
'rbacsystem'];
   209         $this->
ctrl = $DIC[
'ilCtrl'];
   210         $this->
lng = $DIC[
'lng'];
   211         $this->mode = self::IL_LIST_FULL;
   212         $this->path_enabled = 
false;
   214         $this->request_wrapper = $DIC->http()->wrapper()->query();
   229         $this->
lng->loadLanguageModule(
'obj');
   230         $this->
lng->loadLanguageModule(
'rep');
   231         $params = $DIC->http()->request()->getQueryParams();
   232         $this->requested_ref_id = (
int) (
$params[
'ref_id'] ?? null);
   233         $this->requested_cmd = (string) (
$params[
'cmd'] ?? null);
   234         $this->requested_base_class = (string) (
$params[
'baseClass'] ?? null);
   235         $this->clipboard = $DIC
   240         $this->notes_service = $DIC->notes();
   262         $this->static_link_enabled = 
true;
   263         $this->delete_enabled = 
true;
   264         $this->cut_enabled = 
true;
   265         $this->subscribe_enabled = 
true;
   266         $this->link_enabled = 
false;
   267         $this->copy_enabled = 
false;
   268         $this->progress_enabled = 
false;
   269         $this->notice_properties_enabled = 
true;
   270         $this->info_screen_enabled = 
false;
   272         $this->gui_class_name = 
'';                     
   280         $this->properties_enabled = $status;
   290         $this->preconditions_enabled = $status;
   300         $this->notice_properties_enabled = $status;
   310         $this->description_enabled = $status;
   320         $this->search_fragment_enabled = $status;
   330         $this->path_linked = $status;
   335         $this->enabled_relevance = $status;
   345         $this->relevance = $rel;
   355         $this->icons_enabled = $status;
   365         $this->checkboxes_enabled = $status;
   375         $this->expand_enabled = $status;
   385         $this->is_expanded = $status;
   398         $this->position_enabled = 
true;
   399         $this->position_field_index = $field_index;
   405         $this->delete_enabled = $status;
   415         $this->cut_enabled = $status;
   425         $this->copy_enabled = $status;
   435         $this->subscribe_enabled = $status;
   445         $this->link_enabled = $status;
   455         $this->path_enabled = 
$path;
   456         $this->path_start_node = $start_node;
   467         $this->commands_enabled = $status;
   468         $this->std_cmd_only = $std_only;
   478         $this->info_screen_enabled = $info_screen;
   498         $this->sub_item_html[] = $html;
   503         $this->progress_enabled = $status;
   513         $this->substitutions_enabled = $status;
   527         $this->item_detail_links_enabled = $status;
   545         $this->item_detail_links = $detail_links;
   546         $this->item_detail_links_intro = $intro_txt;
   551         if (!count($this->item_detail_links)) {
   554         if (strlen($this->item_detail_links_intro)) {
   555             $this->tpl->setCurrentBlock(
'item_detail_intro');
   556             $this->tpl->setVariable(
'ITEM_DETAIL_INTRO_TXT', $this->item_detail_links_intro);
   557             $this->tpl->parseCurrentBlock();
   560         foreach ($this->item_detail_links as $info) {
   561             $this->tpl->setCurrentBlock(
'item_detail_link');
   562             $this->tpl->setVariable(
'ITEM_DETAIL_LINK_TARGET', $info[
'target']);
   563             $this->tpl->setVariable(
'ITEM_DETAIL_LINK_DESC', $info[
'desc']);
   564             $this->tpl->setVariable(
'ITEM_DETAIL_LINK_HREF', $info[
'link']);
   565             $this->tpl->setVariable(
'ITEM_DETAIL_LINK_NAME', $info[
'name']);
   566             $this->tpl->parseCurrentBlock();
   568         $this->tpl->setCurrentBlock(
'item_detail_links');
   569         $this->tpl->parseCurrentBlock();
   573         $this->title = strip_tags(
   589         $this->description = strip_tags(
   608         $this->search_fragment = $text;
   618         $this->separate_commands = $val;
   638         $this->additional_information = $val;
   653         $this->details_level = $level;
   666         $this->repository_transfer_enabled = $value;
   674         $this->restrict_to_goto = $value;
   694         $cache_prefix = null;
   695         if ($this->context == self::CONTEXT_WORKSPACE || $this->context == self::CONTEXT_WORKSPACE_SHARING) {
   696             $cache_prefix = 
'wsp';
   697             if (!isset($this->ws_access)) {
   702         if (isset($this->access_cache[$permission][
'-' . $cmd][$cache_prefix . $ref_id])) {
   703             return $this->access_cache[$permission][
'-' . $cmd][$cache_prefix . 
$ref_id];
   706         if ($this->context == self::CONTEXT_REPOSITORY || $this->context == self::CONTEXT_SEARCH) {
   707             $access = $this->
access->checkAccess($permission, $cmd, $ref_id, $type, (
int) $obj_id);
   708             if ($this->
access->getPreventCachingLastResult()) {
   709                 $this->prevent_access_caching = 
true;
   712             $access = $this->ws_access->
checkAccess($permission, $cmd, $ref_id, $type);
   715         $this->access_cache[$permission][
'-' . $cmd][$cache_prefix . 
$ref_id] = 
$access;
   727         string $description = 
''   729         $this->access_cache = [];
   732         $this->object_properties = $this->object_dic[
'object_properties_agregator']->getFor($obj_id);
   737         $this->current_selection_list->setAriaListTitle(
   739                 $this->
lng->txt(
'actions_for'),
   740                 htmlspecialchars(addslashes($this->
getTitle()))
   745         $this->adm_commands_included = 
false;
   746         $this->prevent_access_caching = 
false;
   749         if ($this->context == self::CONTEXT_REPOSITORY) {
   759         $this->condition_target = [
   762             'target_type' => $target_type
   768         $this->condition_target = [];
   773         $this->title_link_disabled = $status;
   778         $this->default_command_params = 
$params;
   788         if ($this->static_link_enabled && !$this->default_command_params) {
   790                 $command[
'link'] = $link;
   791                 $command[
'frame'] = 
'_top';
   794         if ($this->default_command_params) {
   796             foreach ($this->default_command_params as $name => $value) {
   797                 $params[] = $name . 
'=' . $value;
   801             if (!stristr($command[
'link'], 
'?')) {
   802                 $command[
'link'] .= 
'?' . 
$params;
   804                 $command[
'link'] .= 
'&' . 
$params;
   820         if ($this->context == self::CONTEXT_REPOSITORY || $this->context == self::CONTEXT_SEARCH) {
   828             $this->
ctrl->setParameterByClass(
'ilrepositorygui', 
'ref_id', $this->
getCommandId());
   829             $cmd_link = $this->
ctrl->getLinkTargetByClass(
'ilrepositorygui', $cmd);
   830             $this->
ctrl->setParameterByClass(
'ilrepositorygui', 
'ref_id', $this->requested_ref_id);
   834         $this->
ctrl->setParameterByClass($this->gui_class_name, 
'ref_id', 
'');
   835         $this->
ctrl->setParameterByClass($this->gui_class_name, 
'wsp_id', $this->ref_id);
   836         return $this->
ctrl->getLinkTargetByClass($this->gui_class_name, $cmd);
   881         if ($this->context == self::CONTEXT_REPOSITORY) {
   887                         'property' => $this->
lng->txt(
'status'),
   888                         'value' => $this->
lng->txt(
'offline')
   897                 $webdav_lock_backend = 
$webdav_dic->locksbackend();
   899                     if ($lock = $webdav_lock_backend->getLocksOnObjectId($this->obj_id)) {
   900                         $lock_user = 
new ilObjUser($lock->getIliasOwner());
   904                             'property' => $this->
lng->txt(
'in_use_by'),
   905                             'value' => $lock_user->getLogin(),
   907                                 './ilias.php?user=' .
   908                                 $lock_user->getId() .
   909                                 '&cmd=showUserProfile&cmdClass=ildashboardgui&baseClass=ilDashboardGUI'   921         string $property = 
'',
   924         bool $newline = 
false   926         $this->cust_prop[] = [
   927             'property' => $property,
   930             'newline' => $newline
   936         if (is_array($this->cust_prop)) {
   937             foreach ($this->cust_prop as $property) {
   948             if (isset($prop[
'alert']) && $prop[
'alert'] == 
true) {
   957         $this->notice_prop = [];
   958         if ($infos = $this->ldap_mapping->getInfoStrings($this->obj_id, 
true)) {
   959             foreach ($infos as $info) {
   960                 $this->notice_prop[] = [
'value' => $info];
   966     public function addCustomCommand(
string $link, 
string $lang_var, 
string $frame = 
'', 
string $onclick = 
''): void
   968         $this->cust_commands[] = [
   970             'lang_var' => $lang_var,
   972             'onclick' => $onclick
   978         ?
Modal $triggeredModal = null
   980         $this->cust_commands[] = $button;
   981         if ($triggeredModal !== null) {
   982             $this->cust_modals[] = $triggeredModal;
   988         $this->force_visible_only = $stat;
  1022         foreach ($this->commands as $command) {
  1023             $permission = $command[
'permission'];
  1024             $cmd = $command[
'cmd'];
  1025             $lang_var = $command[
'lang_var'] ?? 
'';
  1027             $info_object = null;
  1031             $access_granted = 
false;
  1033             if (isset($command[
'txt'])) {
  1034                 $txt = $command[
'txt'];
  1040                 (isset($command[
'enable_anonymous']) && $command[
'enable_anonymous'] == 
'false')
  1051                 $access_granted = 
true;
  1056                 $info_object = $this->
access->getInfo();
  1059             if (!isset($command[
'default'])) {
  1060                 $command[
'default'] = 
'';
  1063                 'permission' => $permission,
  1065                 'link' => $cmd_link,
  1066                 'frame' => $cmd_frame,
  1067                 'lang_var' => $lang_var,
  1069                 'granted' => $access_granted,
  1070                 'access_info' => $info_object,
  1071                 'img' => $cmd_image,
  1072                 'default' => $command[
'default']
  1076         return $ref_commands;
  1093         if ($this->restrict_to_goto) {
  1094             $this->default_command = [
  1100         if ($this->default_command === []
  1102             || $this->title_link_disabled
  1105             $this->tpl->setCurrentBlock(
'item_title');
  1106             $this->tpl->setVariable(
'TXT_TITLE', $this->
getTitle());
  1108             $this->default_command[
'link'] = $this->
modifyTitleLink($this->default_command[
'link']);
  1110             list($this->default_command[
'link'], $this->default_command[
'frame']) =
  1111                 $this->
modifySAHSlaunch($this->default_command[
'link'], $this->default_command[
'frame']);
  1113             if ($this->default_command[
'frame'] != 
'') {
  1114                 $this->tpl->setCurrentBlock(
'title_linked_frame');
  1115                 $this->tpl->setVariable(
'TARGET_TITLE_LINKED', $this->default_command[
'frame']);
  1116                 $this->tpl->parseCurrentBlock();
  1123             $this->tpl->setCurrentBlock(
'item_title_linked');
  1124             $this->tpl->setVariable(
'TXT_TITLE_LINKED', $this->
getTitle());
  1125             $this->tpl->setVariable(
'HREF_TITLE_LINKED', $this->default_command[
'link']);
  1128             if ($this->type === 
'file') {
  1130                 if ($preview->has()) {
  1131                     $this->tpl->setVariable(
'PREVIEW_GLYPH', $preview->getRenderedTriggerComponents());
  1132                     $this->tpl->parseCurrentBlock();
  1136         $this->tpl->parseCurrentBlock();
  1138         if ($this->bold_title == 
true) {
  1139             $this->tpl->touchBlock(
'bold_title_start');
  1140             $this->tpl->touchBlock(
'bold_title_end');
  1146         switch ($this->context) {
  1147             case self::CONTEXT_WORKSPACE_SHARING:
  1159         $fields_shown = 
false;
  1160         foreach ($this->substitutions->getParsedSubstitutions($this->ref_id, $this->obj_id) as 
$data) {
  1161             if (
$data[
'bold']) {
  1162                 $data[
'name'] = 
'<strong>' . 
$data[
'name'] . 
'</strong>';
  1163                 $data[
'value'] = 
'<strong>' . 
$data[
'value'] . 
'</strong>';
  1165             $this->tpl->touchBlock(
'std_prop');
  1166             $this->tpl->setCurrentBlock(
'item_property');
  1167             if (
$data[
'show_field']) {
  1168                 $this->tpl->setVariable(
'TXT_PROP', 
$data[
'name']);
  1170             $this->tpl->setVariable(
'VAL_PROP', 
$data[
'value']);
  1171             $this->tpl->parseCurrentBlock();
  1173             if (
$data[
'newline']) {
  1174                 $this->tpl->touchBlock(
'newline_prop');
  1176             $fields_shown = 
false;
  1184             if (!$this->substitutions->isDescriptionEnabled()) {
  1192         $d = strip_tags(
$d);
  1193         $this->tpl->setCurrentBlock(
'item_description');
  1194         $this->tpl->setVariable(
'TXT_DESC', 
$d);
  1195         $this->tpl->parseCurrentBlock();
  1204             $this->tpl->setCurrentBlock(
'search_fragment');
  1205             $this->tpl->setVariable(
'TXT_SEARCH_FRAGMENT', $this->
getSearchFragment() . 
' ...');
  1206             $this->tpl->parseCurrentBlock();
  1219         $this->tpl->setCurrentBlock(
'relevance');
  1220         $this->tpl->setVariable(
'REL_PBAR', $pbar->render());
  1221         $this->tpl->parseCurrentBlock();
  1231         $this->mode = 
$mode;
  1249         $this->condition_depth = $depth;
  1269         if ($this->context != self::CONTEXT_WORKSPACE && $this->context != self::CONTEXT_WORKSPACE_SHARING) {
  1275                     'property' => $this->
lng->txt(
'learning_progress'),
  1284                 if (!$this->
access->checkAccess(
'read', 
'', $this->ref_id, $this->type, $this->obj_id)) {
  1287                         'value' => $this->
lng->txt(
'no_access_item_public'),
  1297         if ($this->reference_ref_id) {
  1301         $redraw_js = 
'il.Object.redrawListItem(' . $note_ref_id . 
');';
  1307                     isset(self::$cnt_notes[$note_obj_id][Note::PRIVATE]) &&
  1308                     self::$cnt_notes[$note_obj_id][Note::PRIVATE] > 0
  1310                     isset(self::$cnt_notes[$note_obj_id][Note::PUBLIC]) &&
  1311                     self::$cnt_notes[$note_obj_id][Note::PUBLIC] > 0
  1313                     isset(self::$cnt_tags[$note_obj_id]) && self::$cnt_tags[$note_obj_id] > 0
  1315                     isset(self::$tags[$note_obj_id]) && is_array(self::$tags[$note_obj_id])
  1320             $cnt_comments = self::$cnt_notes[$note_obj_id][Note::PUBLIC] ?? 0;
  1322                 && $cnt_comments > 0) {
  1325                     'property' => $this->
lng->txt(
'notes_comments'),
  1327                         '<a href="#" onclick="return ' .
  1329                         self::$cnt_notes[$note_obj_id][Note::PUBLIC] . 
'</a>',
  1335             $cnt_notes = self::$cnt_notes[$note_obj_id][Note::PRIVATE] ?? 0;
  1336             if ($this->notes_enabled && $cnt_notes > 0) {
  1339                     'property' => $this->
lng->txt(
'notes'),
  1341                         '<a href="#" onclick="return ' .
  1343                         self::$cnt_notes[$note_obj_id][Note::PRIVATE] . 
'</a>',
  1348             $cnt_tags = self::$cnt_tags[$note_obj_id] ?? 0;
  1349             if ($this->tags_enabled && ($cnt_tags > 0 || isset(self::$tags[$note_obj_id]))) {
  1351                 if ($tags_set->get(
'enable')) {
  1355                     if (isset(self::$tags[$note_obj_id])) {
  1357                         foreach (self::$tags[$note_obj_id] as $tag => $is_tag_owner) {
  1358                             if ($is_tag_owner) {
  1359                                 $tags_tmp[] = 
'<a class="ilTag ilTagRelHigh" href="#" onclick="return ' .
  1360                                     $tags_url . 
'">' . $tag . 
'</a>';
  1362                                 $tags_tmp[] = 
'<span class="ilTag ilTagRelMiddle">' . $tag . 
'</span>';
  1365                         $tags_value = implode(
' ', $tags_tmp);
  1370                         $tags_value = 
'<a href="#" onclick="return ' . $tags_url . 
'>' .
  1371                             self::$cnt_tags[$note_obj_id] . 
'</a>';
  1372                         $prop_text = $this->
lng->txt(
'tagging_tags');
  1376                         'property' => $prop_text,
  1377                         'value' => $tags_value,
  1384         if (!isset($props)) {
  1395         if (is_array($props) && count($props) > 0) {
  1396             foreach ($props as $prop) {
  1398                     $this->tpl->touchBlock(
'separator_prop');
  1401                 if (isset($prop[
'alert']) && $prop[
'alert'] == 
true) {
  1402                     $this->tpl->touchBlock(
'alert_prop');
  1404                     $this->tpl->touchBlock(
'std_prop');
  1407                 if (isset($prop[
'newline']) && $prop[
'newline'] == 
true && $cnt > 1) {
  1408                     $this->tpl->touchBlock(
'newline_prop');
  1413                     isset($prop[
'property']) &&
  1414                     (($prop[
'propertyNameVisible'] ?? null) !== 
false) &&
  1415                     $prop[
'property'] != 
''  1418                     $this->tpl->setCurrentBlock(
'prop_name');
  1419                     $this->tpl->setVariable(
'TXT_PROP', $prop[
'property']);
  1420                     $this->tpl->parseCurrentBlock();
  1423                 $this->tpl->setCurrentBlock(
'item_property');
  1425                 if (isset($prop[
'link']) && $prop[
'link']) {
  1426                     $this->tpl->setVariable(
'LINK_PROP', $prop[
'link']);
  1427                     $this->tpl->setVariable(
'LINK_VAL_PROP', $prop[
'value']);
  1429                     $this->tpl->setVariable(
'VAL_PROP', $prop[
'value']);
  1432                 $this->tpl->parseCurrentBlock();
  1436             $this->tpl->setCurrentBlock(
'item_properties');
  1437             $this->tpl->parseCurrentBlock();
  1444         foreach ($this->notice_prop as $property) {
  1445             $this->tpl->setCurrentBlock(
'notice_item');
  1446             $this->tpl->setVariable(
'NOTICE_ITEM_VALUE', $property[
'value']);
  1447             $this->tpl->parseCurrentBlock();
  1449         $this->tpl->setCurrentBlock(
'notice_property');
  1450         $this->tpl->parseCurrentBlock();
  1453     protected function parseConditions(
int $toggle_id, array $conditions, 
bool $obligatory = 
true): bool
  1456         $num_optional_required =
  1458             count($conditions) +
  1463         $visible_conditions = [];
  1464         $passed_optional = 0;
  1465         foreach ($conditions as $condition) {
  1466             if ($obligatory && !$condition[
'obligatory']) {
  1469             if (!$obligatory && $condition[
'obligatory']) {
  1473             if ($this->tree->isDeleted($condition[
'trigger_ref_id'])) {
  1480                 $visible_conditions[] = $condition[
'id'];
  1483             if (!$obligatory && $ok) {
  1486                 if ($passed_optional >= $num_optional_required) {
  1492         $missing_cond_exist = 
false;
  1493         foreach ($conditions as $condition) {
  1494             if (!in_array($condition[
'id'], $visible_conditions)) {
  1499             $cond_txt = $operator . 
' ' . $condition[
'value'];
  1502             $class = $this->obj_definition->getClassName($condition[
'trigger_type']);
  1503             $location = $this->obj_definition->getLocation($condition[
'trigger_type']);
  1507             $missing_cond_exist = 
true;
  1509             $full_class = 
'ilObj' . $class . 
'ListGUI';
  1510             $item_list_gui = 
new $full_class($this->context);
  1511             $item_list_gui->setMode(self::IL_LIST_AS_TRIGGER);
  1512             $item_list_gui->enablePath(
false);
  1513             $item_list_gui->enableIcon(
true);
  1514             $item_list_gui->setConditionDepth($this->condition_depth + 1);
  1515             $item_list_gui->setParentRefId($this->ref_id);
  1516             $item_list_gui->addCustomProperty($this->
lng->txt(
'precondition_required_itemlist'), $cond_txt, 
false, 
true);
  1517             $item_list_gui->enableCommands($this->commands_enabled, $this->std_cmd_only);
  1518             $item_list_gui->enableProperties($this->properties_enabled);
  1520             $trigger_html = $item_list_gui->getListItemHTML(
  1521                 $condition[
'trigger_ref_id'],
  1522                 $condition[
'trigger_obj_id'],
  1526             $this->tpl->setCurrentBlock(
'precondition');
  1527             if ($trigger_html == 
'') {
  1528                 $trigger_html = $this->
lng->txt(
'precondition_not_accessible');
  1530             $this->tpl->setVariable(
'TXT_CONDITION', trim($cond_txt));
  1531             $this->tpl->setVariable(
'TRIGGER_ITEM', $trigger_html);
  1532             $this->tpl->parseCurrentBlock();
  1535         if ($missing_cond_exist && $obligatory) {
  1536             $this->tpl->setCurrentBlock(
'preconditions');
  1537             $this->tpl->setVariable(
'CONDITION_TOGGLE_ID', 
'_obl_' . $toggle_id);
  1538             $this->tpl->setVariable(
'TXT_PRECONDITIONS', $this->
lng->txt(
'preconditions_obligatory_hint'));
  1539             $this->tpl->parseCurrentBlock();
  1540         } elseif ($missing_cond_exist && !$obligatory) {
  1541             $this->tpl->setCurrentBlock(
'preconditions');
  1542             $this->tpl->setVariable(
'CONDITION_TOGGLE_ID', 
'_opt_' . $toggle_id);
  1543             $this->tpl->setVariable(
  1544                 'TXT_PRECONDITIONS',
  1546                     $this->
lng->txt(
'preconditions_optional_hint'),
  1547                     $num_optional_required - $passed_optional
  1550             $this->tpl->parseCurrentBlock();
  1553         return !$missing_cond_exist;
  1562         if ($this->condition_depth > 0) {
  1566         if ($this->context == self::CONTEXT_WORKSPACE) {
  1570         if (isset($this->condition_target) && is_array($this->condition_target)
  1571             && count($this->condition_target) > 0) {
  1572             $conditions = ilConditionHandler::_getEffectiveConditionsOfTarget(
  1573                 (
int) $this->condition_target[
'ref_id'],
  1574                 (
int) $this->condition_target[
'obj_id'],
  1575                 $this->condition_target[
'target_type'] ?? 
''  1578             $conditions = ilConditionHandler::_getEffectiveConditionsOfTarget($this->ref_id, $this->obj_id);
  1581         if (
sizeof($conditions)) {
  1582             for ($i = 0; $i < count($conditions); $i++) {
  1587             ++self::$js_unique_id;
  1589             $all_done_obl = $this->
parseConditions(self::$js_unique_id, $conditions);
  1590             $all_done_opt = $this->
parseConditions(self::$js_unique_id, $conditions, 
false);
  1592             if (!$all_done_obl || !$all_done_opt) {
  1593                 $this->tpl->setCurrentBlock(
'preconditions_toggle');
  1594                 $this->tpl->setVariable(
'PRECONDITION_TOGGLE_INTRO', $this->
lng->txt(
'precondition_toggle'));
  1595                 $this->tpl->setVariable(
'PRECONDITION_TOGGLE_TRIGGER', $this->
lng->txt(
'show'));
  1596                 $this->tpl->setVariable(
'PRECONDITION_TOGGLE_ID', self::$js_unique_id);
  1597                 $this->tpl->setVariable(
'TXT_PRECONDITION_SHOW', $this->
lng->txt(
'show'));
  1598                 $this->tpl->setVariable(
'TXT_PRECONDITION_HIDE', $this->
lng->txt(
'hide'));
  1599                 $this->tpl->parseCurrentBlock();
  1613         string $onclick = 
''  1616         $checksum = md5($href . $text);
  1617         if ($href == 
'#' || !in_array($checksum, $this->prevent_duplicate_commands)) {
  1619                 $this->prevent_duplicate_commands[] = $checksum;
  1622             $prevent_background_click = 
false;
  1623             if ($cmd == 
'mount_webfolder') {
  1624                 $onclick = 
"triggerWebDAVModal('$href')";
  1629             $this->current_selection_list->addItem(
  1637                 $prevent_background_click,
  1645         if ($this->std_cmd_only) {
  1655                 $this->adm_commands_included = 
true;
  1661             $this->
ctrl->setParameter(
  1662                 $this->container_obj,
  1664                 $this->container_obj->getObject()->getRefId()
  1666             $this->
ctrl->setParameter($this->container_obj, 
'item_ref_id', $this->
getCommandId());
  1667             $cmd_link = $this->
ctrl->getLinkTarget($this->container_obj, 
'delete');
  1669             $this->adm_commands_included = 
true;
  1677         if ($this->std_cmd_only) {
  1684             !$objDefinition->allowLink($this->type)
  1694             $this->adm_commands_included = 
true;
  1701         $this->
ctrl->setParameter(
  1702             $this->container_obj,
  1704             $this->container_obj->getObject()->getRefId()
  1706         $this->
ctrl->setParameter($this->container_obj, 
'item_ref_id', $this->
getCommandId());
  1707         $cmd_link = $this->
ctrl->getLinkTarget($this->container_obj, 
'link');
  1709         $this->adm_commands_included = 
true;
  1714         if ($this->std_cmd_only) {
  1725                 $this->adm_commands_included = 
true;
  1733         if ($this->
checkCommandAccess(
'delete', 
'', $this->ref_id, $this->type) && $this->container_obj->getObject()) {
  1734             $this->
ctrl->setParameter(
  1735                 $this->container_obj,
  1737                 $this->container_obj->getObject()->getRefId()
  1739             $this->
ctrl->setParameter($this->container_obj, 
'item_ref_id', $this->
getCommandId());
  1741             if (!$to_repository) {
  1742                 $cmd_link = $this->
ctrl->getLinkTarget($this->container_obj, 
'cut');
  1745                 $cmd_link = $this->
ctrl->getLinkTarget($this->container_obj, 
'cut_for_repository');
  1746                 $this->
insertCommand($cmd_link, $this->
lng->txt(
'wsp_move_to_repository'));
  1749             $this->adm_commands_included = 
true;
  1755         if ($this->std_cmd_only) {
  1760             $this->obj_definition->allowCopy($this->type)) {
  1761             if ($this->context != self::CONTEXT_WORKSPACE && $this->context != self::CONTEXT_WORKSPACE_SHARING) {
  1762                 $this->
ctrl->setParameterByClass(
'ilobjectcopygui', 
'source_id', $this->
getCommandId());
  1763                 $cmd_copy = $this->
ctrl->getLinkTargetByClass(
'ilobjectcopygui', 
'initTargetSelection');
  1766                 $this->
ctrl->setParameter(
  1767                     $this->container_obj,
  1769                     $this->container_obj->getObject()->getRefId()
  1771                 $this->
ctrl->setParameter($this->container_obj, 
'item_ref_id', $this->
getCommandId());
  1773                 if (!$to_repository) {
  1774                     $cmd_copy = $this->
ctrl->getLinkTarget($this->container_obj, 
'copy');
  1777                     $cmd_copy = $this->
ctrl->getLinkTarget($this->container_obj, 
'copy_to_repository');
  1778                     $this->
insertCommand($cmd_copy, $this->
lng->txt(
'wsp_copy_to_repository'));
  1782             $this->adm_commands_included = 
true;
  1788         if ($this->std_cmd_only) {
  1798             $this->clipboard->hasEntries()
  1803             $this->adm_commands_included = 
true;
  1809         if ($this->std_cmd_only
  1812             || $this->
settings->get(
'rep_favourites', 
'0') !== 
'1') {
  1820             is_object($this->container_obj) &&
  1822             method_exists($this->container_obj, 
'getObject') &&
  1823             is_object($this->container_obj->getObject())
  1825             $this->
ctrl->setParameter(
  1826                 $this->container_obj,
  1828                 $this->container_obj->getObject()->getRefId()
  1832             $this->
ctrl->setParameter($this->container_obj, 
'type', $type);
  1833             $this->
ctrl->setParameter($this->container_obj, 
'item_ref_id', $this->
getCommandId());
  1835             if (!$this->fav_manager->ifIsFavourite($this->user->getId(), $this->
getCommandId())) {
  1837                 if ($this->
checkCommandAccess(
'read', 
'', $this->ref_id, $this->type, $this->obj_id)) {
  1838                     $cmd_link = $this->
ctrl->getLinkTarget($this->container_obj, 
'addToDesk');
  1842                 $cmd_link = $this->
ctrl->getLinkTarget($this->container_obj, 
'removeFromDesk');
  1843                 $this->
insertCommand($cmd_link, $this->
lng->txt(
'rep_remove_from_favourites'));
  1846             $this->
ctrl->clearParameters($this->container_obj);
  1852         if ($this->std_cmd_only) {
  1857             $this->
lng->txt(
'info_short'),
  1868         if ($this->std_cmd_only || $this->
user->isAnonymous()) {
  1872         $this->
lng->loadLanguageModule(
'notes');
  1873         $this->
lng->loadLanguageModule(
'tagging');
  1878         if ($this->reference_ref_id) {
  1882         $js_updater = $header_actions
  1883             ? 
'il.Object.redrawActionHeader();'  1884             : 
'il.Object.redrawListItem(' . $note_ref_id . 
')';
  1886         $comments_enabled = $this->
isCommentsActivated($this->type, $this->ref_id, $this->obj_id, $header_actions);
  1887         if ($comments_enabled) {
  1890                 $this->
lng->txt(
'notes_comments'),
  1898         if ($this->notes_enabled) {
  1901                 $this->
lng->txt(
'notes'),
  1909         if ($this->tags_enabled) {
  1912                 $this->
lng->txt(
'tagging_set_tag'),
  1930             $this->std_cmd_only || is_null($this->container_obj) ||
  1931             !method_exists($this->container_obj, 
'getObject') ||
  1932             !is_object($this->container_obj->getObject())
  1937         $parent_ref_id = $this->container_obj->getObject()->getRefId();
  1938         $parent_type = $this->container_obj->getObject()->getType();
  1941         if ($this->reference_ref_id) {
  1942             $this->
ctrl->setParameterByClass(
'ilconditionhandlergui', 
'ref_id', $this->reference_ref_id);
  1949             $this->
ctrl->setParameterByClass(
  1950                 get_class($this->container_obj),
  1954             $time_limit_link = $this->
ctrl->getLinkTargetByClass(
  1955                 get_class($this->container_obj),
  1956                 'editAvailabilityPeriod'  1958             $this->
insertCommand($time_limit_link, $this->
lng->txt(
'edit_availability_period'));
  1959             $this->
ctrl->clearParameterByClass(
  1960                 get_class($this->container_obj),
  1964             $this->
ctrl->setParameterByClass(
  1965                 'ilconditionhandlergui',
  1969             $this->
ctrl->setParameterByClass(
  1970                 'ilconditionhandlergui',
  1975             $availbility_link = $this->
ctrl->getLinkTargetByClass(
  1976                 [$this->gui_class_name, 
'ilcommonactiondispatchergui', 
'ilobjectactivationgui', 
'ilconditionhandlergui'],
  1983         if ($this->reference_ref_id) {
  1984             $this->
ctrl->setParameterByClass(
'ilconditionhandlergui', 
'ref_id', $this->ref_id);
  1992         bool $use_async = 
false,
  1993         bool $get_async_commands = 
false,
  1994         string $async_url = 
'',
  1995         bool $header_actions = 
false  1998         if ($use_async && !$get_async_commands) {
  1999             foreach ($commands as $command) {
  2000                 if ($command[
'default'] === 
true) {
  2001                     $this->default_command = $command[
'granted'] === 
true ? $this->
createDefaultCommand($command) : [];
  2009             $get_async_commands,
  2015         $this->current_selection_list->setAsynch($use_async && !$get_async_commands);
  2016         $this->current_selection_list->setAsynchUrl($async_url);
  2017         if ($header_actions) {
  2018             $this->current_selection_list->setListTitle(
  2019                 '<span class="hidden-xs">' .
  2020                 $this->
lng->txt(
'actions') .
  2024             $this->current_selection_list->setListTitle(
'');
  2026         $this->current_selection_list->setId(
'act_' . $this->
getUniqueItemId());
  2027         $this->current_selection_list->setSelectionHeaderClass(
'');
  2028         $this->current_selection_list->setItemLinkClass(
'');
  2029         $this->current_selection_list->setLinksMode(
'il_ContainerItemCommand2');
  2031         $this->current_selection_list->setUseImages(
false);
  2032         $this->current_selection_list->setAdditionalToggleElement(
  2034             'ilContainerListItemOuterHighlight'  2037         if ($use_async && !$get_async_commands) {
  2038             return $this->current_selection_list->getHTML();
  2041         $this->
ctrl->setParameterByClass($this->gui_class_name, 
'ref_id', $this->ref_id);
  2043         $this->default_command = [];
  2044         $this->prevent_duplicate_commands = [];
  2047         $valid_header_commands = [
'mount_webfolder'];
  2050         foreach ($commands as $command) {
  2051             if ($header_actions && !in_array($command[
'cmd'], $valid_header_commands)
  2052                 || $command[
'granted'] === 
false) {
  2056             if ($command[
'default'] === 
true) {
  2065             $cmd_link = $command[
'link'];
  2066             $txt = ($command[
'lang_var'] == 
'')
  2068                 : $this->
lng->txt($command[
'lang_var']);
  2079         if (is_array($this->cust_commands)) {
  2080             foreach ($this->cust_commands as $command) {
  2081                 if ($command instanceof 
Button) {
  2082                     $this->current_selection_list->addComponent($command);
  2088                     $this->
lng->txt($command[
'lang_var']),
  2091                     $command[
'cmd'] ?? 
'',
  2105         if (!$this->
isMode(self::IL_LIST_AS_TRIGGER)) {
  2107             if ($this->delete_enabled) {
  2112             if ($this->link_enabled) {
  2117             if ($this->cut_enabled) {
  2122             if ($this->copy_enabled) {
  2127             if ($this->repository_transfer_enabled) {
  2132             if ($this->timings_enabled) {
  2137             if ($this->subscribe_enabled) {
  2142             if ($this->multi_download_enabled && $header_actions) {
  2147             if ($this->cut_enabled or $this->link_enabled) {
  2154         if (!$this->
isMode(self::IL_LIST_AS_TRIGGER)) {
  2158         if (!$header_actions) {
  2159             $this->
ctrl->clearParametersByClass($this->gui_class_name);
  2162         if ($use_async && $get_async_commands) {
  2163             return $this->current_selection_list->getHTML(
true);
  2166         return $this->current_selection_list->getHTML();
  2177         bool $get_async_commands,
  2178         bool $header_actions
  2180         return $use_async && !$get_async_commands && !$header_actions
  2182             && $this->object_properties->getPropertyInfoTabVisibility();
  2185     public function enableComments(
bool $value, 
bool $enable_comments_settings = 
true): void
  2187         if ($this->
settings->get(
'disable_comments')) {
  2191         $this->comments_enabled = $value;
  2192         $this->comments_settings_enabled = $enable_comments_settings;
  2197         if ($this->
settings->get(
'disable_notes')) {
  2201         $this->notes_enabled = $value;
  2207         if (!$tags_set->get(
'enable')) {
  2210         $this->tags_enabled = $value;
  2215         string $text = null,
  2216         bool $categories = 
false,
  2217         array $ctrl_path = null,
  2218         bool $force_rate_parent = 
false  2220         $this->rating_enabled = $value;
  2222         if ($this->rating_enabled) {
  2223             $this->rating_categories_enabled = $categories;
  2224             $this->rating_text = $text;
  2225             $this->rating_ctrl_path = $ctrl_path;
  2238         if (!$folder_set->get(
'enable_multi_download')) {
  2241         $this->multi_download_enabled = $value;
  2246         if ($this->std_cmd_only) {
  2262             $user_id = $this->
user->getId();
  2267             if ($hasAdminAccess) {
  2268                 $cmd = ($this->requested_cmd == 
'enableAdministrationPanel')
  2270                     : 
'enableAdministrationPanel';
  2272                 $cmd = ($this->requested_cmd == 
'enableMultiDownload')
  2274                     : 
'enableMultiDownload';
  2277             $this->
insertCommand($cmd_link, $this->
lng->txt(
'download_multiple_objects'));
  2284         if (!$this->
getContainerObject()->isActiveAdministrationPanel() || $this->clipboard->hasEntries()) {
  2286                 in_array($this->type, [
'file', 
'fold']) &&
  2287                 $this->
access->checkAccess(
'read', 
'', $ref_id, $this->type)
  2289                 $this->download_checkbox_state = self::DOWNLOAD_CHECKBOX_ENABLED;
  2291                 $this->download_checkbox_state = self::DOWNLOAD_CHECKBOX_DISABLED;
  2294             $this->download_checkbox_state = self::DOWNLOAD_CHECKBOX_NONE;
  2314         if (is_null($tpl)) {
  2319         $DIC->notes()->gui()->initJavascript($notes_url);
  2327             $tpl->addOnLoadCode(
'il.Object.setRedrawAHUrl("' . $redraw_url . 
'");');
  2333         $this->sub_obj_type = 
$type;
  2334         $this->sub_obj_id = (
int) $id;
  2340         string $tooltip = null,
  2341         string $onclick = null,
  2342         string $status_text = null,
  2345         $this->header_icons[
$id] = [
  2347             'tooltip' => $tooltip,
  2348             'onclick' => $onclick,
  2349             'status_text' => $status_text,
  2356         $this->header_icons[
$id] = $html;
  2361         $this->header_icons[
$id] = [
'glyph' => $glyph, 
'onclick' => $onclick];
  2366         $this->ajax_hash = $hash;
  2371         if ($main_tpl == null) {
  2375         $htpl = 
new ilTemplate(
'tpl.header_action.html', 
true, 
true, 
'Services/Repository');
  2377         $redraw_js = 
'il.Object.redrawActionHeader();';
  2380         if ($this->tags_enabled) {
  2386                 $this->
user->getId()
  2388             if (count($tags) > 0) {
  2389                 $this->
lng->loadLanguageModule(
'tagging');
  2391                 $f = $this->
ui->factory();
  2394                     $f->symbol()->glyph()->tag(
'#')
  2395                       ->withCounter(
$f->counter()->status(count($tags))),
  2402         $comments_enabled = $this->
isCommentsActivated($this->type, $this->ref_id, $this->obj_id, 
true, 
false);
  2403         if ($this->notes_enabled || $comments_enabled) {
  2404             $type = ($this->sub_obj_type == 
'') ? $this->type : $this->sub_obj_type;
  2405             $context = $this->notes_service->data()->context($this->obj_id, $this->sub_obj_id, $type);
  2406             $cnt[
$this->obj_id][Note::PUBLIC] = $this->notes_service->domain()->getNrOfCommentsForContext($context);
  2407             $cnt[
$this->obj_id][Note::PRIVATE] = $this->notes_service->domain()->getNrOfNotesForContext($context);
  2409                 $this->notes_enabled &&
  2410                 isset($cnt[$this->obj_id][Note::PRIVATE]) &&
  2411                 $cnt[$this->obj_id][Note::PRIVATE] > 0
  2413                 $f = $this->
ui->factory();
  2416                     $f->symbol()->glyph()->note(
'#')
  2417                       ->withCounter(
$f->counter()->status((
int) $cnt[$this->obj_id][Note::PRIVATE])),
  2423                 $comments_enabled &&
  2424                 isset($cnt[$this->obj_id][Note::PUBLIC]) &&
  2427                 $this->
lng->loadLanguageModule(
'notes');
  2428                 $f = $this->
ui->factory();
  2431                     $f->symbol()->glyph()->comment(
'#')
  2432                       ->withCounter(
$f->counter()->status((
int) $cnt[$this->obj_id][Note::PUBLIC])),
  2439         if ($this->rating_enabled) {
  2441             $rating_gui->enableCategories($this->rating_categories_enabled);
  2443             $rating_gui->setObject($this->obj_id, $this->type);
  2444             if ($this->rating_text) {
  2445                 $rating_gui->setYourRatingText($this->rating_text);
  2448             $ajax_hash = $this->force_rate_parent
  2451             $this->
ctrl->setParameterByClass(
'ilRatingGUI', 
'cadh', $ajax_hash);
  2452             $this->
ctrl->setParameterByClass(
'ilRatingGUI', 
'rnsb', 
true);
  2453             if ($this->rating_ctrl_path) {
  2454                 $rating_gui->setCtrlPath($this->rating_ctrl_path);
  2455                 $ajax_url = $this->
ctrl->getLinkTargetByClass($this->rating_ctrl_path, 
'saveRating', 
'', 
true);
  2457                 $ajax_url = $this->
ctrl->getLinkTargetByClass(
'ilRatingGUI', 
'saveRating', 
'', 
true);
  2459             $main_tpl->
addOnLoadCode(
'il.Object.setRatingUrl("' . $ajax_url . 
'");');
  2462                 $rating_gui->getHTML(
  2464                     $this->checkCommandAccess(
'read', 
'', $this->ref_id, $this->type),
  2465                     'il.Object.saveRating(%rating%);'  2470         if ($this->header_icons) {
  2472             foreach ($this->header_icons as 
$id => $attr) {
  2475                 if (is_array($attr)) {
  2476                     if (isset($attr[
'glyph']) && $attr[
'glyph']) {
  2477                         if ($attr[
'onclick']) {
  2478                             $htpl->setCurrentBlock(
'prop_glyph_oc');
  2479                             $htpl->setVariable(
'GLYPH_ONCLICK', $attr[
'onclick']);
  2480                             $htpl->parseCurrentBlock();
  2482                         $renderer = $this->
ui->renderer();
  2483                         $html = $renderer->render($attr[
'glyph']);
  2484                         $htpl->setCurrentBlock(
'prop_glyph');
  2485                         $htpl->setVariable(
'GLYPH', $html);
  2486                         $htpl->parseCurrentBlock();
  2488                         if ($attr[
'onclick']) {
  2489                             $htpl->setCurrentBlock(
'onclick');
  2490                             $htpl->setVariable(
'PROP_ONCLICK', $attr[
'onclick']);
  2491                             $htpl->parseCurrentBlock();
  2494                         if ($attr[
'status_text']) {
  2495                             $htpl->setCurrentBlock(
'status');
  2496                             $htpl->setVariable(
'PROP_TXT', $attr[
'status_text']);
  2497                             $htpl->parseCurrentBlock();
  2501                         $htpl->setCurrentBlock(
'prop');
  2502                         if ($attr[
'href'] || $attr[
'onclick']) {
  2503                             $htpl->setVariable(
'TAG', 
'a');
  2505                             $htpl->setVariable(
'TAG', 
'span');
  2507                         $htpl->setVariable(
'PROP_ID', 
$id);
  2508                         $htpl->setVariable(
'IMG', 
ilUtil::img($attr[
'img'], $attr[
'tooltip']));
  2509                         if ($attr[
'href'] != 
'') {
  2510                             $htpl->setVariable(
'PROP_HREF', 
' href="' . $attr[
'href'] . 
'" ');
  2512                         $htpl->parseCurrentBlock();
  2514                         if ($attr[
'tooltip']) {
  2523             if (
sizeof($chunks)) {
  2526                     implode(
'   ', $chunks) . 
'   '  2537         if ($this->cust_modals !== []) {
  2538             $htpl->setVariable(
'TRIGGERED_MODALS', $this->
ui->renderer()->render($this->cust_modals));
  2541         return $htpl->get();
  2552         $base_class = $this->request_wrapper->retrieve(
'baseClass', $this->
refinery->kindlyTo()->string());
  2554             (strtolower($base_class) != 
'ilrepositorygui') &&
  2555             is_int(strpos($link, 
'baseClass=ilRepositoryGUI'))
  2557             if ($this->type != 
'frm') {
  2567         if ($this->default_command_params) {
  2569             foreach ($this->default_command_params as $name => $value) {
  2570                 $params[] = $name . 
'=' . $value;
  2576             if (!stristr($default_link, 
'?')) {
  2577                 $default_link = ($default_link . 
'?' . 
$params);
  2579                 $default_link = ($default_link . 
'&' . 
$params);
  2582         return $default_link;
  2590         if (strstr($link, ilSAHSPresentationGUI::class) === 
false) {
  2591             return [$link, $target];
  2595         $om = $sahs_obj->getOpenMode();
  2596         $width = $sahs_obj->getWidth();
  2597         $height = $sahs_obj->getHeight();
  2598         if (($om == 5 || $om == 1) && $width > 0 && $height > 0) {
  2601         if ($om !== 0 && !$this->
http->agent()->isMobile()) {
  2602             $this->default_command[
'frame'] = 
'';
  2604                 'javascript:void(0); onclick=startSAHS(\'' .
  2617             $target = "ilContObj" . $this->ref_id;  2619         return [$link, $target];  2622     public function insertPath(): void  2624         if ($this->getPathStatus() != false) {  2625             if (!$this->path_gui instanceof \ilPathGUI) {  2626                 $path_gui = new \ilPathGUI();  2628                 $path_gui = $this->path_gui;  2631             $path_gui->enableTextOnly(!$this->path_linked);  2632             $path_gui->setUseImages(false);  2634             $start_node = ROOT_FOLDER_ID;  2635             if ($this->path_start_node) {  2636                 $start_node = $this->path_start_node;  2639             $this->tpl->setCurrentBlock('path_item
');  2640             $this->tpl->setVariable('PATH_ITEM
', $path_gui->getPath($start_node, $this->ref_id));  2641             $this->tpl->parseCurrentBlock();  2643             $this->tpl->setCurrentBlock('path
');  2644             $this->tpl->setVariable('TXT_LOCATION
', $this->lng->txt('locator'));  2645             $this->tpl->parseCurrentBlock();  2649     public function insertProgressInfo(): void  2653     public function insertIconsAndCheckboxes(): void  2656         if ($this->getCheckboxStatus()) {  2657             $this->tpl->setCurrentBlock('check
');  2658             $this->tpl->setVariable('VAL_ID
', $this->getCommandId());  2659             $this->tpl->setVariable('CHECK_TITLE
', $this->lng->txt('select
') . ' ' . $this->getTitle());  2660             $this->tpl->parseCurrentBlock();  2662         } elseif ($this->getDownloadCheckboxState() != self::DOWNLOAD_CHECKBOX_NONE) {  2663             $this->tpl->setCurrentBlock('check_download
');  2664             $this->tpl->setVariable('CHECK_DOWNLOAD_TITLE
', $this->lng->txt('download
') . ' ' . $this->getTitle());  2665             if ($this->getDownloadCheckboxState() == self::DOWNLOAD_CHECKBOX_ENABLED) {  2666                 $this->tpl->setVariable('VAL_ID
', $this->getCommandId());  2668                 $this->tpl->setVariable('VAL_VISIBILITY
', 'visibility: hidden;
" disabled="disabled');  2670             $this->tpl->parseCurrentBlock();  2672         } elseif ($this->getExpandStatus()) {  2673             $this->tpl->setCurrentBlock('expand');  2675             if ($this->isExpanded()) {  2676                 $this->ctrl->setParameter($this->container_obj, 'expand', -1 * $this->obj_id);  2677                 // 'view
' added, see #19922  2678                 $this->tpl->setVariable('EXP_HREF
', $this->ctrl->getLinkTarget($this->container_obj, 'view
', $this->getUniqueItemId(true)));  2679                 $this->ctrl->clearParameters($this->container_obj);  2680                 $this->tpl->setVariable('EXP_IMG
', ilUtil::getImagePath('nav/tree_exp.svg
'));  2681                 $this->tpl->setVariable('EXP_ALT
', $this->lng->txt('collapse'));  2683                 $this->ctrl->setParameter($this->container_obj, 'expand', $this->obj_id);  2684                 // 'view
' added, see #19922  2685                 $this->tpl->setVariable('EXP_HREF
', $this->ctrl->getLinkTarget($this->container_obj, 'view
', $this->getUniqueItemId(true)));  2686                 $this->ctrl->clearParameters($this->container_obj);  2687                 $this->tpl->setVariable('EXP_IMG
', ilUtil::getImagePath('nav/tree_col.svg
'));  2688                 $this->tpl->setVariable('EXP_ALT
', $this->lng->txt('expand'));  2691             $this->tpl->parseCurrentBlock();  2695         if ($this->getIconStatus()) {  2697                 $this->tpl->touchBlock('i_1
');  2700             $this->tpl->setCurrentBlock('icon
');  2701             $this->tpl->setVariable('ALT_ICON
', $this->buildTranslatedType());  2703             $this->tpl->setVariable(  2705                 $this->getTypeIcon()  2707             $this->tpl->parseCurrentBlock();  2711         $this->tpl->touchBlock('d_
' . $cnt);  2717     public function getTypeIcon(): string  2719         return ilObject::getIconForReference(  2723             $this->getIconImageType()  2727     public function insertSubItems(): void  2729         foreach ($this->sub_item_html as $sub_html) {  2730             $this->tpl->setCurrentBlock('subitem
');  2731             $this->tpl->setVariable('SUBITEM
', $sub_html);  2732             $this->tpl->parseCurrentBlock();  2736     public function insertPositionField(): void  2738         if ($this->position_enabled) {  2739             $this->tpl->setCurrentBlock('position
');  2740             $this->tpl->setVariable('POS_ID
', $this->position_field_index);  2741             $this->tpl->setVariable('POS_VAL
', $this->position_value);  2742             $this->tpl->parseCurrentBlock();  2750     public function adminCommandsIncluded(): bool  2752         return $this->adm_commands_included;  2755     public function storeAccessCache(): void  2757         if ($this->acache->getLastAccessStatus() == 'miss
' && !$this->prevent_access_caching) {  2758             $this->acache->storeEntry(  2759                 $this->user->getId() . ':
' . $this->ref_id,  2760                 serialize($this->access_cache),  2769     public function getListItemHTML(  2773         string $description,  2774         bool $use_async = false,  2775         bool $get_async_commands = false,  2776         string $async_url = ''  2778         // this variable stores whether any admin commands  2779         // are included in the output  2780         $this->adm_commands_included = false;  2782         // only for performance exploration  2783         $type = ilObject::_lookupType($obj_id);  2785         $this->initItem($ref_id, $obj_id, $type, $title, $description);  2787         if ($use_async && $get_async_commands) {  2788             return $this->insertCommands(true, true);  2791         if ($this->rating_enabled) {  2792             if (ilRating::hasRatingInListGUI($this->obj_id, $this->type)) {  2793                 $may_rate = $this->checkCommandAccess('read
', '', $this->ref_id, $this->type);  2794                 $rating = new ilRatingGUI();  2795                 $rating->setObject($this->obj_id, $this->type);  2796                 $this->addCustomProperty(  2798                     $rating->getListGUIProperty($this->ref_id, $may_rate, $this->ajax_hash, $this->parent_ref_id),  2806         $this->acache = new ilListItemAccessCache();  2807         $cres = $this->acache->getEntry($this->user->getId() . ':
' . $ref_id);  2808         if ($this->acache->getLastAccessStatus() == 'hit
') {  2809             $this->access_cache = unserialize($cres);  2812             $this->storeAccessCache();  2816         if (!$this->checkCommandAccess('visible
', '', $ref_id, '', $obj_id)) {  2817             $this->resetCustomData();  2822         if ($type == 'file
' and ilObjFileAccess::_isFileHidden($title)) {  2823             $this->resetCustomData();  2828         $this->tpl = new ilTemplate(  2829             static::$tpl_file_name,  2832             static::$tpl_component,  2838         if ($this->getCommandsStatus()) {  2839             if (!$this->getSeparateCommands()) {  2840                 $this->tpl->setVariable(  2841                     'COMMAND_SELECTION_LIST
',  2842                     $this->insertCommands($use_async, $get_async_commands, $async_url)  2847         if ($this->getProgressInfoStatus()) {  2848             $this->insertProgressInfo();  2851         // insert title and describtion  2852         $this->insertTitle();  2853         if (!$this->isMode(self::IL_LIST_AS_TRIGGER)) {  2854             if ($this->getDescriptionStatus()) {  2855                 $this->insertDescription();  2859         if ($this->getSearchFragmentStatus()) {  2860             $this->insertSearchFragment();  2862         if ($this->enabledRelevance()) {  2863             $this->insertRelevance();  2867         if ($this->getPropertiesStatus()) {  2868             $this->insertProperties();  2871         // notice properties  2872         if ($this->getNoticePropertiesStatus()) {  2873             $this->insertNoticeProperties();  2877         if ($this->getPreconditionsStatus()) {  2878             $this->insertPreconditions();  2882         $this->insertPath();  2884         if ($this->getItemDetailLinkStatus()) {  2885             $this->insertItemDetailLinks();  2888         // icons and checkboxes  2889         $this->insertIconsAndCheckboxes();  2891         // input field for position  2892         $this->insertPositionField();  2895         $this->insertSubItems();  2897         $this->resetCustomData();  2899         $this->tpl->setVariable('DIV_CLASS
', 'ilContainerListItemOuter
');  2900         $this->tpl->setVariable(  2902             'data-list-item-
id=
"' . $this->getUniqueItemId(true) . '" id = 
"' . $this->getUniqueItemId(true) . '"'  2904         $this->tpl->setVariable('ADDITIONAL
', $this->getAdditionalInformation());  2906         if (is_object($this->getContainerObject())) {  2907             // #11554 - make sure that internal ids are reset  2908             $this->ctrl->setParameter($this->getContainerObject(), 'item_ref_id
', '');  2911         // if file upload is enabled the content is wrapped by a UI dropzone.  2912         $content = $this->tpl->get();  2913         $file_upload_dropzone = new ilObjFileUploadDropzone($this->ref_id, $content);  2914         if ($this->context === self::CONTEXT_REPOSITORY  2915             && ($this->requested_cmd === "view" || $this->requested_cmd === "" || $this->requested_cmd === "render")  2916             && $file_upload_dropzone->isUploadAllowed($this->type)  2917              && !(new ModeSessionRepository())->isAdminMode()  2919             return $file_upload_dropzone->getDropzoneHtml();  2928     protected function resetCustomData(): void  2931         $this->cust_prop = [];  2932         $this->cust_commands = [];  2933         $this->cust_modals = [];  2934         $this->sub_item_html = [];  2935         $this->position_enabled = false;  2941     public function setParentRefId(int $ref_id): void  2943         $this->parent_ref_id = $ref_id;  2952     public function getUniqueItemId(bool $as_div = false): string  2954         // use correct id for references  2955         $id_ref = $this->ref_id;  2956         if ($this->reference_ref_id > 0) {  2957             $id_ref = $this->reference_ref_id;  2960         // add unique identifier for preconditions (objects can appear twice in same container)  2961         if ($this->condition_depth) {  2962             $id_ref .= '_pc
' . $this->condition_depth;  2966         $id_ref .= '_pref_
' . $this->parent_ref_id;  2971             // action menu [yellow] toggle  2972             return 'lg_div_
' . $id_ref;  2979     public function getCommandsHTML(): string  2981         return $this->insertCommands();  2987     public function isSideBlock(): bool  2992     public function setBoldTitle(bool $bold_title): void  2994         $this->bold_title = $bold_title;  2997     public function isTitleBold(): bool  2999         return $this->bold_title;  3002     public static function preloadCommonProperties(array $obj_ids, int $context): void  3005         $lng = $DIC->language();  3006         $ilSetting = $DIC->settings();  3007         $ilUser = $DIC->user();  3008         $notes_manager = $DIC->notes()->internal()->domain()->notes();  3010         if ($context == self::CONTEXT_REPOSITORY) {  3011             $active_notes = !$ilSetting->get('disable_notes
');  3012             $active_comments = !$ilSetting->get('disable_comments
');  3014             if ($active_comments) {  3015                 // needed for action  3016                 self::$comments_activation = $DIC->notes()  3019                     ->notes()->commentsActiveMultiple($obj_ids);  3022             // properties are optional  3023             if ($ilSetting->get('comments_tagging_in_lists
')) {  3024                 if ($active_notes || $active_comments) {  3025                     // @todo: should be refactored, see comment in notes db repo  3026                     self::$cnt_notes = $notes_manager->countNotesAndCommentsMultipleObjects(  3031                     $lng->loadLanguageModule('notes
');  3034                 $tags_set = new ilSetting('tags
');  3035                 if ($tags_set->get('enable
')) {  3036                     $all_users = (bool) $tags_set->get('enable_all_users
');  3038                     if (!$ilSetting->get('comments_tagging_in_lists_tags
')) {  3039                         self::$cnt_tags = ilTagging::_countTags($obj_ids, $all_users);  3041                         $tag_user_id = null;  3043                             $tag_user_id = $ilUser->getId();  3045                         self::$tags = ilTagging::_getListTagsForObjects($obj_ids, $tag_user_id);  3048                     $lng->loadLanguageModule('tagging
');  3052             $lng->loadLanguageModule('rating
');  3055         self::$preload_done = true;  3061     protected function isCommentsActivated(  3065         bool $header_actions,  3066         bool $check_write_access = true  3068         if ($this->comments_enabled) {  3069             if (!$this->comments_settings_enabled) {  3072             if ($check_write_access && $this->checkCommandAccess('write
', '', $ref_id, $type)) {  3075             // fallback to single object check if no preloaded data  3076             // only the repository does preloadCommonProperties() yet  3077             if (!$header_actions && self::$preload_done) {  3078                 if (isset(self::$comments_activation[$obj_id]) &&  3079                     self::$comments_activation[$obj_id]) {  3082             } elseif ($this->notes_service->domain()->commentsActive($obj_id)) {  3092     public function enableTimings(bool $status): void  3094         $this->timings_enabled = $status;  3100     public function getAsListItem(  3109         // even b tag produced bugs, see #32304  3110         $description = strip_tags($description);  3120         $this->enableCommands(true);  3123         $this->insertCommands();  3125         foreach ($this->current_selection_list->getItems() as $action_item) {  3126             $action = $ui->factory()  3128                 ->shy($action_item['title
'], $action_item['link']);  3130             if ($action_item['onclick
'] !== null && $action_item['onclick
'] !== '') {  3131                 $action = $action->withAdditionalOnLoadCode(function ($id) use ($action_item): string {  3132                     return "$('#
$id').click(function(){" . $action_item['onclick
'] . ';});
';  3136             $actions[] = $action;  3139         $dropdown = $ui->factory()  3141             ->standard($actions)  3142             ->withAriaLabel(sprintf(  3143                 $this->lng->txt('actions_for
'),  3144                 htmlspecialchars(addslashes($title))  3147         $def_command = $this->getDefaultCommand();  3149         if ($def_command['link'] ?? false) {  3150             list($def_command['link'], $def_command['frame
']) =  3151                 $this->modifySAHSlaunch($def_command['link'], $def_command['frame
']);  3152             $new_viewport = !in_array($def_command['frame
'], ['', '_top
', '_self
', '_parent
'], true);  3153             $link = $this->ui->factory()  3155                              ->standard($this->getTitle(), $def_command['link'])  3156                              ->withOpenInNewViewport($new_viewport);  3157             $list_item = $ui->factory()->item()->standard($link);  3159             $list_item = $ui->factory()->item()->standard($this->getTitle());  3162         if ($description != '') {  3163             $list_item = $list_item->withDescription($description);  3165         $list_item = $list_item->withActions($dropdown)->withLeadIcon(  3166             $this->ui->factory()->symbol()->icon()->custom(  3167                 $this->getTypeIcon(),  3168                 $this->buildTranslatedType(),  3175         $this->enableComments(true);  3176         $this->enableNotes(true);  3177         $this->enableTags(true);  3178         $this->enableRating(true);  3180         foreach ($this->determineProperties() as $p) {  3181             //if ($p['property'] !== $this->lng->txt('learning_progress
')) {  3182             $l[(string) $p['property']] = (string) $p['value
'];  3185         if (count($l) > 0) {  3186             $list_item = $list_item->withProperties($l);  3195     public function getAsCard(  3201     ): ?RepositoryObject {  3204         $title = htmlspecialchars($title);  3205         // even b tag produced bugs, see #32304  3206         $description = strip_tags($description);  3216         $user = $this->user;  3217         $access = $this->access;  3219         $this->enableCommands(true);  3223         // description, @todo: move to new ks element  3224         if ($description != '') {  3225             $sections[] = $ui->factory()->legacy('<div 
class=
"il-multi-line-cap-3">
' . $description . '</div>
');  3228         $this->insertCommands();  3231         foreach ($this->current_selection_list->getItems() as $item) {  3232             if (!isset($item['onclick
']) || $item['onclick
'] == '') {  3234                     $ui->factory()->button()->shy($item['title
'], $item['link']);  3237                     $ui->factory()->button()->shy($item['title
'], '')->withAdditionalOnLoadCode(function ($id) use ($item): string {  3239                             "$('#
$id').click(function(e) { " . $item['onclick
'] . '});
';  3244         $def_command = $this->getDefaultCommand();  3246         $dropdown = $ui->factory()->dropdown()->standard($actions)  3247             ->withAriaLabel(sprintf(  3248                 $this->lng->txt('actions_for
'),  3252         // workaround for #26205  3253         // we should get rid of _top links completely and gifure our how  3254         // to manage scorm links better  3255         $def_cmd_frame = ($def_command['frame
'] ?? '');  3256         if ($def_cmd_frame === '_top
') {  3257             $def_cmd_frame = '';  3259         $def_cmd_link = ($def_command['link'] ?? '');  3261         // workaround for scorm  3262         list($modified_link, $def_cmd_frame) =  3263             $this->modifySAHSlaunch($def_cmd_link, $def_cmd_frame);  3265         $image = $this->getTileImage();  3267         if ($def_cmd_link != '') {    // #24256  3268             if ($def_cmd_frame !== '' && ($modified_link === $def_cmd_link)) {  3269                 $signal = (new SignalGenerator())->create();  3270                 $this->main_tpl->addOnLoadCode(  3271                     "$(document).on('{$signal->getId()}
', function(event, signalData) {"  3272                         . ' window.open(
"' . str_replace(  3276                         ) . '", 
"' . $def_cmd_frame . '");
'  3280                 $image = $image->withAction($signal);  3283                     $ui->factory()->button()->shy($title, '')->appendOnClick($signal);  3284                 $title = $ui->renderer()->render($button);  3286                 $image = $image->withAction($modified_link);  3290         if ($type == 'sess
') {  3292                 $title = ': 
' . $title;  3294             $app_info = ilSessionAppointment::_lookupAppointment($obj_id);  3295             $title = ilSessionAppointment::_appointmentToString(  3298                 (bool) $app_info['fullday
']  3302         $icon = $this->ui->factory()->symbol()->icon()->custom(  3303             $this->getTypeIcon(),  3304             $this->buildTranslatedType(),  3308         // card title action  3309         $card_title_action = '';  3310         if ($def_cmd_link != '' && ($def_cmd_frame == '' || $modified_link != $def_cmd_link)) {    // #24256  3311             $card_title_action = $modified_link;  3312         } elseif ($def_cmd_link == '' &&  3313             $this->getInfoScreenStatus() &&  3314             $access->checkAccessOfUser(  3320             $card_title_action = ilLink::_getLink($ref_id);  3321             if ($image->getAction() == '') {  3322                 $image = $image->withAction($card_title_action);  3326         $card = $ui->factory()->card()->repositoryObject(  3327             $title . '<span data-list-item-
id=
"' . $this->getUniqueItemId(true) . '"></span>
',  3335         if ($card_title_action != '') {  3336             $card = $card->withTitleAction($card_title_action);  3340         foreach ($this->determineProperties() as $p) {  3341             if (isset($p['alert
']) && $p['alert
'] == true  3342                 && isset($p['property']) && $p['property'] !== $this->lng->txt('learning_progress
')) {  3343                 $l[(string) $p['property']] = (string) $p['value
'];  3346         if (count($l) > 0) {  3347             $prop_list = $ui->factory()->listing()->descriptive($l);  3348             $sections[] = $prop_list;  3350         if (count($sections) > 0) {  3351             $card = $card->withSections($sections);  3354         $lp = ilLPStatus::getListGUIStatus($obj_id, false);  3355         if (is_array($lp) && array_key_exists('status
', $lp)) {  3356             $percentage = (int) ilLPStatus::_lookupPercentage($obj_id, $this->user->getId());  3357             if ($lp['status
'] == ilLPStatus::LP_STATUS_COMPLETED_NUM) {  3361             $card = $card->withProgress(  3365                    ->mini(100, $percentage)  3372     public function checkInfoPageOnAsynchronousRendering(): bool  3377     private function getTileImage(): Image  3379         return $this->object_properties->getPropertyTileImage()  3380             ->getTileImage()->getImage($this->ui->factory()->image());  3386     public function insertLPCommand(): void  3388         if ($this->std_cmd_only || !$this->lp_cmd_enabled) {  3391         $relevant = ilLPStatus::hasListGUIStatus($this->obj_id);  3393             $cmd_link = $this->getCommandLink('learningProgress
');  3394             $this->insertCommand(  3396                 $this->lng->txt('learning_progress
')  3404     private function insertLPSettingsCommand(): void  3406         if (!ilObjUserTracking::_enabledLearningProgress()  3407             || ilObjectLP::getTypeClass($this->type) === ''  3408             || ! $this->checkCommandAccess('edit_learning_progress
', '', $this->ref_id, $this->type)  3414         $this->ctrl->setParameterByClass(ilLearningProgressGUI::class, 'ref_id
', $this->ref_id);  3415         switch ($this->type) {  3417                 switch (ilObjSAHSLearningModule::_lookupSubType($this->obj_id)) {  3419                         $scorm_class = ilObjSCORM2004LearningModuleGUI::class;  3422                         $scorm_class = ilObjSCORMLearningModuleGUI::class;  3429                 $cmd_link = $this->ctrl->getLinkTargetByClass([  3430                     ilSAHSEditGUI::class,  3432                     ilLearningProgressGUI::class,  3433                     ilLPListOfSettingsGUI::class  3438                 $cmd_link = $this->ctrl->getLinkTargetByClass([  3439                     ilLMEditorGUI::class,  3440                     ilObjLearningModuleGUI::class,  3441                     ilLearningProgressGUI::class,  3442                     ilLPListOfSettingsGUI::class  3447                 $cmd_link = $this->ctrl->getLinkTargetByClass([  3448                     ilObjLearningSequenceGUI::class,  3449                     ilLearningProgressGUI::class,  3450                     ilLPListOfSettingsGUI::class  3462                 $gui_class = 'ilObj
' . $this->obj_definition->getClassName($this->type) . 'GUI
';  3463                 $cmd_link = $this->ctrl->getLinkTargetByClass([  3464                         ilRepositoryGUI::class,  3466                         ilLearningProgressGUI::class,  3467                         ilLPListOfSettingsGUI::class  3479         $this->ctrl->setParameterByClass('ilrepositorygui
', 'ref_id
', $this->requested_ref_id);  3480         if ($cmd_link !== '') {  3481             $this->insertCommand(  3483                 $this->lng->txt('listaction_learning_progress_settings
')  3488     private function buildTranslatedType(): string  3490         if ($this->obj_definition->isPlugin($this->getIconImageType())) {  3491             return ilObjectPlugin::lookupTxtById($this->getIconImageType(), 'obj_
' . $this->getIconImageType());  3494         return $this->lng->txt('obj_
' . $this->getIconImageType()); getCommands()
get all current commands for a specific ref id (in the permission context of the current user) ...
 
This describes commonalities between the different modals. 
 
static removeSubObjFromAjaxHash(string $hash)
 
Creates a path for a start and endnode. 
 
const CONTEXT_WORKSPACE_SHARING
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
setHeaderSubObject(?string $type, ?int $id)
 
parseConditions(int $toggle_id, array $conditions, bool $obligatory=true)
 
insertSearchFragment()
Insert highlighted search fragment. 
 
setConditionTarget(int $ref_id, int $obj_id, string $target_type)
 
getDescription()
getDescription overwritten in class.ilObjLinkResourceList.php 
 
static appendUrlParameterString(string $a_url, string $a_par, bool $xml_style=false)
 
static string $tpl_component
 
insertMultiDownloadCommand()
 
ilListItemAccessCache $acache
 
modifySAHSlaunch(string $link, string $target)
workaround: SAHS in new javavasript-created window or iframe 
 
bool $multi_download_enabled
 
static maybeRenderWebDAVModalInGlobalTpl()
 
ilObjectProperties $object_properties
 
string $requested_base_class
 
setParentRefId(int $ref_id)
Set current parent ref id to enable unique js-ids (sessions, etc.) 
 
setMode(string $mode)
set output mode 
 
enableCommands(bool $status, bool $std_only=false)
 
setAdditionalInformation(?string $val)
 
setContainerObject(object $container_obj)
 
bool $notice_properties_enabled
 
setSearchFragment(string $text)
 
getUniqueItemId(bool $as_div=false)
Get unique item identifier (for js-actions) 
 
initItem(int $ref_id, int $obj_id, string $type, string $title='', string $description='')
initialize new item (is called by getItemHTML()) 
 
$location
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
bool $static_link_enabled
 
if(! $DIC->user() ->getId()||!ilLTIConsumerAccess::hasCustomProviderCreationAccess()) $params
 
static getListTagsJSCall(string $a_hash, string $a_update_code=null)
 
const DOWNLOAD_CHECKBOX_NONE
 
addHeaderIcon(string $id, string $img, string $tooltip=null, string $onclick=null, string $status_text=null, string $href=null)
 
insertPreconditions()
insert all missing preconditions 
 
Class ChatMainBarProvider . 
 
setDescription(string $description)
 
static prepareJsLinks(string $redraw_url, string $notes_url, string $tags_url, ilGlobalTemplateInterface $tpl=null)
Insert js/ajax links into template. 
 
checkAccess(string $a_permission, string $a_cmd, int $a_ref_id, string $a_type="", ?int $a_obj_id=null, ?int $a_tree_id=null)
check access for an object (provide $a_type and $a_obj_id if available for better performance) ...
 
static getImagePath(string $img, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory) 
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
checkCommandAccess(string $permission, string $cmd, int $ref_id, string $type, ?int $obj_id=null)
 
getCommandFrame(string $cmd)
Get command target frame. 
 
static getGotoLink(int $a_node_id, int $a_obj_id, string $a_additional="")
 
appendRepositoryFrameParameter(string $link)
workaround: all links into the repository (from outside) must tell repository to set up the frameset ...
 
bool $search_fragment_enabled
 
getAdditionalInformation()
 
enableExpand(bool $status)
 
enableDelete(bool $status)
 
insertCopyCommand(bool $to_repository=false)
 
const DOWNLOAD_CHECKBOX_ENABLED
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
bool $preconditions_enabled
 
getItemDetailLinkStatus()
get item detail link status 
 
setPositionInputField(string $field_index, string $position_value)
 
insertCommands(bool $use_async=false, bool $get_async_commands=false, string $async_url='', bool $header_actions=false)
insert all commands into html code 
 
enableMultiDownload(bool $value)
Toggles whether multiple objects can be downloaded at once or not. 
 
setDetailsLevel(int $level)
Details level Currently used in Search which shows only limited properties of forums Currently used f...
 
ILIAS Notes Service $notes_service
 
ilFavouritesManager $fav_manager
 
enableSubscribe(bool $status)
 
bool $search_fragments_enabled
 
ilWorkspaceAccessHandler $ws_access
 
ilAdvancedSelectionListGUI $current_selection_list
 
addCustomCommandButton(Button $button, ?Modal $triggeredModal=null)
 
enableLinkedPath(bool $status)
 
ilGlobalTemplateInterface $main_tpl
 
static img(string $a_src, ?string $a_alt=null, $a_width="", $a_height="", $a_border=0, $a_id="", $a_class="")
Build img tag. 
 
Manages favourites, currently the interface for other components, needs discussion. 
 
int $download_checkbox_state
 
array $prevent_duplicate_commands
 
bool $adm_commands_included
 
bool $item_detail_links_enabled
 
enableInfoScreen(bool $info_screen)
 
static _lookupObjId(int $ref_id)
 
static lookupOfflineStatus(int $obj_id)
Lookup offline status using objectDataCache. 
 
static string $tpl_file_name
 
enableRating(bool $value, string $text=null, bool $categories=false, array $ctrl_path=null, bool $force_rate_parent=false)
 
enablePreconditions(bool $status)
 
enableSearchFragments(bool $status)
 
enableProperties(bool $status)
 
static _getInstance()
Get singleton instance of this class. 
 
parses the objects.xml it handles the xml-description of all ilias objects 
 
enableNoticeProperties(bool $status)
 
Provides fluid interface to RBAC services. 
 
const ALLOWED_TAGS_IN_TITLE_AND_DESCRIPTION
 
getHeaderAction(ilGlobalTemplateInterface $main_tpl=null)
 
static http()
Fetches the global http state from ILIAS. 
 
static _getCommands()
get commands 
 
getProperties()
Get item properties. 
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
createDefaultCommand(array $command)
Get default command link Overwritten for e.g categories,courses => they return a goto link If search ...
 
enablePath(bool $path, int $start_node=0, \ilPathGUI $path_gui=null)
 
static _checkCondition(array $condition, int $a_usr_id=0)
checks wether a single condition is fulfilled every trigger object type must implement a static metho...
 
enableComments(bool $value, bool $enable_comments_settings=true)
 
static _lookupTitle(int $obj_id)
 
getCommandId()
get command id Normally the ref id. 
 
const CONTEXT_PERSONAL_DESKTOP
 
restrictToGoto(bool $value)
Restrict all actions/links to goto. 
 
setExpanded(bool $status)
 
string $item_detail_links_intro
 
static calculateEffectiveRequiredTriggers(int $a_target_ref_id, int $a_target_obj_id, string $a_target_obj_type='')
 
getDownloadCheckboxState()
 
static _getStaticLink(?int $a_ref_id, string $a_type='', bool $a_fallback_goto=true, string $append="")
 
setDefaultCommandParameters(array $params)
 
getCommandImage(string $cmd)
Get command icon image. 
 
enableProgressInfo(bool $status)
 
insertInfoScreenCommand()
 
array $default_command_params
 
bool $substitutions_enabled
 
Manages items in repository clipboard. 
 
getSearchFragmentStatus()
 
isMode(string $mode)
check current output mode 
 
setConditionDepth(int $depth)
set depth for precondition output (stops at level 5) 
 
getIconImageType()
Returns the icon image type. 
 
disableTitleLink(bool $status)
 
addOnLoadCode(string $a_code, int $a_batch=2)
Add on load code. 
 
addSubItemHTML(string $html)
Add HTML for sub item (used for sessions) 
 
bool $repository_transfer_enabled
 
isCommentsActivated(string $type, int $ref_id, int $obj_id, bool $header_actions, bool $check_write_access=true)
Check comments status against comments settings and context. 
 
addCustomCommand(string $link, string $lang_var, string $frame='', string $onclick='')
 
static getListGUIStatus(int $a_obj_id, bool $a_image_only=true)
 
insertLPSettingsCommand()
 
enableLearningProgress(bool $enabled)
 
getCustomProperties(array $prop)
 
insertLPCommand()
insert learning progress command 
 
static getTagsForUserAndObject(int $a_obj_id, string $a_obj_type, int $a_sub_obj_id, string $a_sub_obj_type, int $a_user_id)
 
bool $comments_settings_enabled
 
ILIAS Refinery Factory $refinery
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
checkInfoPageOnAsynchronousRendering()
 
insertCutCommand(bool $to_repository=false)
 
static initJavascript(string $a_ajax_url, ilGlobalTemplateInterface $a_main_tpl=null)
 
getTitle()
getTitle overwritten in class.ilObjLinkResourceList.php 
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
static bool $preload_done
 
static buildAjaxHash(int $node_type, ?int $node_id, string $obj_type, int $obj_id, string $sub_type=null, int $sub_id=null, int $news_id=0)
Build ajax hash. 
 
addHeaderGlyph(string $id, ILIAS\UI\Component\Symbol\Glyph\Glyph $glyph, $onclick=null)
 
bool $description_enabled
 
commandsNeedToBeHidden(bool $use_async, bool $get_async_commands, bool $header_actions)
Fix bug #12417: We hide the action menu when we are in the public area. 
 
static getListNotesJSCall(string $a_hash, string $a_update_code=null)
Get list notes js call. 
 
ilAdvancedMDSubstitution $substitutions
 
enableRelevance(bool $status)
 
enableSubstitutions(bool $status)
 
getNoticePropertiesStatus()
 
bool $prevent_access_caching
 
insertTimingsCommand()
ks, 23 OCT 2023: This function is badly named and it already was before the changes made today...
 
string $position_field_index
 
string $additional_information
 
setSeparateCommands(bool $val)
 
bool $info_screen_enabled
 
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins 
 
bool $title_link_disabled
 
link(string $caption, string $href, bool $new_viewport=false)
 
enableCheckbox(bool $status)
 
static translateOperator(int $a_obj_id, string $a_operator)
 
Class ilContainerGUI This is a base GUI class for all container objects in ILIAS: root folder...
 
setItemDetailLinks(array $detail_links, string $intro_txt='')
set items detail links 
 
getCommandLink(string $cmd)
Get command link url. 
 
bool $rating_categories_enabled
 
ILIAS HTTP Wrapper RequestWrapper $request_wrapper
 
static getEffectiveOptionalConditionsOfTarget(int $a_target_ref_id, int $a_target_obj_id, string $a_obj_type='')
 
ClipboardManager $clipboard
 
ilObjectDefinition $obj_definition
 
insertCommand(string $href, string $text, string $frame='', string $img='', string $cmd='', string $onclick='')
insert command button 
 
enableItemDetailLinks(bool $status)
enable item detail links E.g Direct links to chapters or pages 
 
getUriToMountInstructionModalByRef(int $a_ref_id)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
static getListCommentsJSCall(string $a_hash, string $a_update_code=null)
Get list comments js call. 
 
insertCommonSocialCommands(bool $header_actions=false)
Insert common social commands (comments, notes, tagging) 
 
static _lookupType(int $id, bool $reference=false)
 
enableDescription(bool $status)
 
static array $comments_activation
 
addHeaderIconHTML(string $id, string $html)
 
forceVisibleOnly(bool $stat)
 
enableDownloadCheckbox(int $ref_id)
 
setAjaxHash(string $hash)
 
enableRepositoryTransfer(bool $value)
Enable copy/move to repository (from personal workspace) 
 
ilLDAPRoleGroupMapping $ldap_mapping
 
catch(InvalidArgumentException $e) if(!ilDAVActivationChecker::_isActive()) $webdav_dic
 
Class ilObjSCORMLearningModule. 
 
const DOWNLOAD_CHECKBOX_DISABLED
 
modifyTitleLink(string $default_link)
 
addCustomProperty(string $property='', string $value='', bool $alert=false, bool $newline=false)
 
static sortArray(array $array, string $a_array_sortby_key, string $a_array_sortorder="asc", bool $a_numeric=false, bool $a_keep_keys=false)