19 declare(strict_types=1);
67 protected static array
$tags = [];
195 public function __construct(
int $context = self::CONTEXT_REPOSITORY)
200 $this->
access = $DIC[
'ilAccess'];
201 $this->
user = $DIC[
'ilUser'];
202 $this->object_dic = ilObjectDIC::dic();
203 $this->obj_definition = $DIC[
'objDefinition'];
204 $this->tree = $DIC[
'tree'];
205 $this->
settings = $DIC[
'ilSetting'];
206 $this->
http = $DIC->http();
207 $this->
ui = $DIC->ui();
208 $this->main_tpl = $DIC[
'tpl'];
209 $this->rbacsystem = $DIC[
'rbacsystem'];
210 $this->
ctrl = $DIC[
'ilCtrl'];
211 $this->
lng = $DIC[
'lng'];
212 $this->mode = self::IL_LIST_FULL;
213 $this->path_enabled =
false;
215 $this->request_wrapper = $DIC->http()->wrapper()->query();
230 $this->
lng->loadLanguageModule(
'obj');
231 $this->
lng->loadLanguageModule(
'rep');
232 $params = $DIC->http()->request()->getQueryParams();
233 $this->requested_ref_id = (
int) (
$params[
'ref_id'] ?? null);
234 $this->requested_cmd = (string) (
$params[
'cmd'] ?? null);
235 $this->requested_base_class = (string) (
$params[
'baseClass'] ?? null);
236 $this->clipboard = $DIC
241 $this->notes_service = $DIC->notes();
263 $this->static_link_enabled =
true;
264 $this->delete_enabled =
true;
265 $this->cut_enabled =
true;
266 $this->subscribe_enabled =
true;
267 $this->link_enabled =
false;
268 $this->copy_enabled =
false;
269 $this->progress_enabled =
false;
270 $this->notice_properties_enabled =
true;
271 $this->info_screen_enabled =
false;
273 $this->gui_class_name =
'';
281 $this->properties_enabled = $status;
291 $this->preconditions_enabled = $status;
301 $this->notice_properties_enabled = $status;
311 $this->description_enabled = $status;
321 $this->search_fragment_enabled = $status;
331 $this->path_linked = $status;
336 $this->relevance = $rel;
346 $this->icons_enabled = $status;
356 $this->checkboxes_enabled = $status;
366 $this->expand_enabled = $status;
376 $this->is_expanded = $status;
389 $this->position_enabled =
true;
390 $this->position_field_index = $field_index;
396 $this->delete_enabled = $status;
406 $this->cut_enabled = $status;
416 $this->copy_enabled = $status;
426 $this->subscribe_enabled = $status;
436 $this->link_enabled = $status;
446 $this->path_enabled =
$path;
447 $this->path_start_node = $start_node;
458 $this->commands_enabled = $status;
459 $this->std_cmd_only = $std_only;
469 $this->info_screen_enabled = $info_screen;
479 $this->lp_cmd_enabled = $enabled;
484 $this->lp_settings_cmd_enabled = $enabled;
494 $this->sub_item_html[] = $html;
499 $this->progress_enabled = $status;
509 $this->substitutions_enabled = $status;
523 $this->item_detail_links_enabled = $status;
541 $this->item_detail_links = $detail_links;
542 $this->item_detail_links_intro = $intro_txt;
547 if (!count($this->item_detail_links)) {
550 if (strlen($this->item_detail_links_intro)) {
551 $this->tpl->setCurrentBlock(
'item_detail_intro');
552 $this->tpl->setVariable(
'ITEM_DETAIL_INTRO_TXT', $this->item_detail_links_intro);
553 $this->tpl->parseCurrentBlock();
556 foreach ($this->item_detail_links as $info) {
557 $this->tpl->setCurrentBlock(
'item_detail_link');
558 $this->tpl->setVariable(
'ITEM_DETAIL_LINK_TARGET', $info[
'target']);
559 $this->tpl->setVariable(
'ITEM_DETAIL_LINK_DESC', $info[
'desc']);
560 $this->tpl->setVariable(
'ITEM_DETAIL_LINK_HREF', $info[
'link']);
561 $this->tpl->setVariable(
'ITEM_DETAIL_LINK_NAME', $info[
'name']);
562 $this->tpl->parseCurrentBlock();
564 $this->tpl->setCurrentBlock(
'item_detail_links');
565 $this->tpl->parseCurrentBlock();
569 $this->title = $this->
refinery->encode()->htmlSpecialCharsAsEntities()->transform(
584 $this->description = $this->
refinery->encode()->htmlSpecialCharsAsEntities()->transform(
602 $this->search_fragment =
$text;
612 $this->separate_commands = $val;
632 $this->additional_information = $val;
647 $this->details_level = $level;
660 $this->repository_transfer_enabled = $value;
668 $this->restrict_to_goto = $value;
688 $cache_prefix = null;
689 if ($this->context == self::CONTEXT_WORKSPACE || $this->context == self::CONTEXT_WORKSPACE_SHARING) {
690 $cache_prefix =
'wsp';
691 if (!isset($this->ws_access)) {
696 if (isset($this->access_cache[$permission][
'-' . $cmd][$cache_prefix . $ref_id])) {
697 return $this->access_cache[$permission][
'-' . $cmd][$cache_prefix .
$ref_id];
700 if ($this->context == self::CONTEXT_REPOSITORY || $this->context == self::CONTEXT_SEARCH) {
701 $access = $this->
access->checkAccess($permission, $cmd, $ref_id, $type, (
int) $obj_id);
702 if ($this->
access->getPreventCachingLastResult()) {
703 $this->prevent_access_caching =
true;
706 $access = $this->ws_access->
checkAccess($permission, $cmd, $ref_id, $type);
709 $this->access_cache[$permission][
'-' . $cmd][$cache_prefix .
$ref_id] =
$access;
721 string $description =
'' 723 $this->access_cache = [];
726 $this->object_properties = $this->object_dic[
'object_properties_agregator']->getFor($obj_id);
731 $this->adm_commands_included =
false;
732 $this->prevent_access_caching =
false;
735 if ($this->context == self::CONTEXT_REPOSITORY) {
745 $this->condition_target = [
748 'target_type' => $target_type
754 $this->condition_target = [];
759 $this->title_link_disabled = $status;
764 $this->default_command_params =
$params;
774 if ($this->static_link_enabled and !$this->default_command_params) {
776 $command[
'link'] = $link;
777 $command[
'frame'] =
'_top';
780 if ($this->default_command_params) {
782 foreach ($this->default_command_params as $name => $value) {
783 $params[] = $name .
'=' . $value;
787 if (!stristr($command[
'link'],
'?')) {
788 $command[
'link'] .=
'?' .
$params;
790 $command[
'link'] .=
'&' .
$params;
806 if ($this->context == self::CONTEXT_REPOSITORY || $this->context == self::CONTEXT_SEARCH) {
814 $this->
ctrl->setParameterByClass(
'ilrepositorygui',
'ref_id', $this->
getCommandId());
815 $cmd_link = $this->
ctrl->getLinkTargetByClass(
'ilrepositorygui', $cmd);
816 $this->
ctrl->setParameterByClass(
'ilrepositorygui',
'ref_id', $this->requested_ref_id);
820 $this->
ctrl->setParameterByClass($this->gui_class_name,
'ref_id',
'');
821 $this->
ctrl->setParameterByClass($this->gui_class_name,
'wsp_id', $this->ref_id);
822 return $this->
ctrl->getLinkTargetByClass($this->gui_class_name, $cmd);
867 if ($this->context == self::CONTEXT_REPOSITORY) {
873 'property' => $this->
lng->txt(
'status'),
874 'value' => $this->
lng->txt(
'offline')
883 $webdav_lock_backend =
$webdav_dic->locksbackend();
885 if ($lock = $webdav_lock_backend->getLocksOnObjectId($this->obj_id)) {
886 $lock_user =
new ilObjUser($lock->getIliasOwner());
890 'property' => $this->
lng->txt(
'in_use_by'),
891 'value' => $lock_user->getLogin(),
893 './ilias.php?user=' .
894 $lock_user->getId() .
895 '&cmd=showUserProfile&cmdClass=ildashboardgui&baseClass=ilDashboardGUI' 907 string $property =
'',
910 bool $newline =
false 912 $this->cust_prop[] = [
913 'property' => $property,
916 'newline' => $newline
922 if (is_array($this->cust_prop)) {
923 foreach ($this->cust_prop as $property) {
934 if (isset($prop[
'alert']) && $prop[
'alert'] ==
true) {
943 $this->notice_prop = [];
944 if ($infos = $this->ldap_mapping->getInfoStrings($this->obj_id,
true)) {
945 foreach ($infos as $info) {
946 $this->notice_prop[] = [
'value' => $info];
952 public function addCustomCommand(
string $link,
string $lang_var,
string $frame =
'',
string $onclick =
''): void
954 $this->cust_commands[] = [
956 'lang_var' => $lang_var,
958 'onclick' => $onclick
964 ?
Modal $triggeredModal = null
966 $this->cust_commands[] = $button;
967 if ($triggeredModal !== null) {
968 $this->cust_modals[] = $triggeredModal;
974 $this->force_visible_only = $stat;
1008 foreach ($this->commands as $command) {
1009 $permission = $command[
'permission'];
1010 $cmd = $command[
'cmd'];
1011 $lang_var = $command[
'lang_var'] ??
'';
1013 $info_object = null;
1017 $access_granted =
false;
1019 if (isset($command[
'txt'])) {
1020 $txt = $command[
'txt'];
1026 (isset($command[
'enable_anonymous']) && $command[
'enable_anonymous'] ==
'false')
1037 $access_granted =
true;
1042 $info_object = $this->
access->getInfo();
1045 if (!isset($command[
'default'])) {
1046 $command[
'default'] =
'';
1049 'permission' => $permission,
1051 'link' => $cmd_link,
1052 'frame' => $cmd_frame,
1053 'lang_var' => $lang_var,
1055 'granted' => $access_granted,
1056 'access_info' => $info_object,
1057 'img' => $cmd_image,
1058 'default' => $command[
'default']
1062 return $ref_commands;
1079 if ($this->restrict_to_goto) {
1080 $this->default_command = [
1087 !$this->default_command ||
1089 $this->title_link_disabled
1092 $this->tpl->setCurrentBlock(
'item_title');
1093 $this->tpl->setVariable(
'TXT_TITLE', $this->
getTitle());
1095 $this->default_command[
'link'] = $this->
modifyTitleLink($this->default_command[
'link']);
1097 list($this->default_command[
'link'], $this->default_command[
'frame']) =
1098 $this->
modifySAHSlaunch($this->default_command[
'link'], $this->default_command[
'frame']);
1100 if ($this->default_command[
'frame'] !=
'') {
1101 $this->tpl->setCurrentBlock(
'title_linked_frame');
1102 $this->tpl->setVariable(
'TARGET_TITLE_LINKED', $this->default_command[
'frame']);
1103 $this->tpl->parseCurrentBlock();
1110 $this->tpl->setCurrentBlock(
'item_title_linked');
1111 $this->tpl->setVariable(
'TXT_TITLE_LINKED', $this->
getTitle());
1112 $this->tpl->setVariable(
'HREF_TITLE_LINKED', $this->default_command[
'link']);
1115 if ($this->type ===
'file') {
1117 if ($preview->has()) {
1118 $this->tpl->setVariable(
'PREVIEW_GLYPH', $preview->getRenderedTriggerComponents());
1119 $this->tpl->parseCurrentBlock();
1123 $this->tpl->parseCurrentBlock();
1125 if ($this->bold_title ==
true) {
1126 $this->tpl->touchBlock(
'bold_title_start');
1127 $this->tpl->touchBlock(
'bold_title_end');
1133 switch ($this->context) {
1134 case self::CONTEXT_WORKSPACE_SHARING:
1146 $fields_shown =
false;
1147 foreach ($this->substitutions->getParsedSubstitutions($this->ref_id, $this->obj_id) as
$data) {
1148 if (
$data[
'bold']) {
1149 $data[
'name'] =
'<strong>' .
$data[
'name'] .
'</strong>';
1150 $data[
'value'] =
'<strong>' .
$data[
'value'] .
'</strong>';
1152 $this->tpl->touchBlock(
'std_prop');
1153 $this->tpl->setCurrentBlock(
'item_property');
1154 if (
$data[
'show_field']) {
1155 $this->tpl->setVariable(
'TXT_PROP',
$data[
'name']);
1157 $this->tpl->setVariable(
'VAL_PROP',
$data[
'value']);
1158 $this->tpl->parseCurrentBlock();
1160 if (
$data[
'newline']) {
1161 $this->tpl->touchBlock(
'newline_prop');
1163 $fields_shown =
false;
1171 if (!$this->substitutions->isDescriptionEnabled()) {
1176 $this->tpl->setCurrentBlock(
'item_description');
1178 $this->tpl->parseCurrentBlock();
1187 $this->tpl->setCurrentBlock(
'search_fragment');
1188 $this->tpl->setVariable(
'TXT_SEARCH_FRAGMENT', $this->
getSearchFragment() .
' ...');
1189 $this->tpl->parseCurrentBlock();
1200 $this->mode =
$mode;
1218 $this->condition_depth = $depth;
1238 if ($this->context != self::CONTEXT_WORKSPACE && $this->context != self::CONTEXT_WORKSPACE_SHARING) {
1244 'property' => $this->
lng->txt(
'learning_progress'),
1253 if (!$this->
access->checkAccess(
'read',
'', $this->ref_id, $this->type, $this->obj_id)) {
1256 'value' => $this->
lng->txt(
'no_access_item_public'),
1266 if ($this->reference_ref_id) {
1270 $redraw_js =
'il.Object.redrawListItem(' . $note_ref_id .
');';
1276 isset(self::$cnt_notes[$note_obj_id][Note::PRIVATE]) &&
1277 self::$cnt_notes[$note_obj_id][Note::PRIVATE] > 0
1279 isset(self::$cnt_notes[$note_obj_id][Note::PUBLIC]) &&
1280 self::$cnt_notes[$note_obj_id][Note::PUBLIC] > 0
1282 isset(self::$cnt_tags[$note_obj_id]) && self::$cnt_tags[$note_obj_id] > 0
1284 isset(self::$tags[$note_obj_id]) && is_array(self::$tags[$note_obj_id])
1289 $cnt_comments = self::$cnt_notes[$note_obj_id][Note::PUBLIC] ?? 0;
1291 && $cnt_comments > 0) {
1294 'property' => $this->
lng->txt(
'notes_comments'),
1296 '<a href="#" onclick="return ' .
1298 self::$cnt_notes[$note_obj_id][Note::PUBLIC] .
'</a>',
1304 $cnt_notes = self::$cnt_notes[$note_obj_id][Note::PRIVATE] ?? 0;
1305 if ($this->notes_enabled && $cnt_notes > 0) {
1308 'property' => $this->
lng->txt(
'notes'),
1310 '<a href="#" onclick="return ' .
1312 self::$cnt_notes[$note_obj_id][Note::PRIVATE] .
'</a>',
1317 $cnt_tags = self::$cnt_tags[$note_obj_id] ?? 0;
1318 if ($this->tags_enabled && ($cnt_tags > 0 || isset(self::$tags[$note_obj_id]))) {
1320 if ($tags_set->get(
'enable')) {
1324 if (isset(self::$tags[$note_obj_id])) {
1326 foreach (self::$tags[$note_obj_id] as $tag => $is_tag_owner) {
1327 if ($is_tag_owner) {
1328 $tags_tmp[] =
'<a class="ilTag ilTagRelHigh" href="#" onclick="return ' .
1329 $tags_url .
'">' . $tag .
'</a>';
1331 $tags_tmp[] =
'<span class="ilTag ilTagRelMiddle">' . $tag .
'</span>';
1334 $tags_value = implode(
' ', $tags_tmp);
1339 $tags_value =
'<a href="#" onclick="return ' . $tags_url .
'">' .
1340 self::$cnt_tags[$note_obj_id] .
'</a>';
1341 $prop_text = $this->
lng->txt(
'tagging_tags');
1345 'property' => $prop_text,
1346 'value' => $tags_value,
1353 if (!isset($props)) {
1364 if (is_array($props) && count($props) > 0) {
1365 foreach ($props as $prop) {
1367 $this->tpl->touchBlock(
'separator_prop');
1370 if (isset($prop[
'alert']) && $prop[
'alert'] ==
true) {
1371 $this->tpl->touchBlock(
'alert_prop');
1373 $this->tpl->touchBlock(
'std_prop');
1376 if (isset($prop[
'newline']) && $prop[
'newline'] ==
true && $cnt > 1) {
1377 $this->tpl->touchBlock(
'newline_prop');
1382 isset($prop[
'property']) &&
1383 (($prop[
'propertyNameVisible'] ?? null) !==
false) &&
1384 $prop[
'property'] !=
'' 1387 $this->tpl->setCurrentBlock(
'prop_name');
1388 $this->tpl->setVariable(
'TXT_PROP', $prop[
'property']);
1389 $this->tpl->parseCurrentBlock();
1392 $this->tpl->setCurrentBlock(
'item_property');
1394 if (isset($prop[
'link']) && $prop[
'link']) {
1395 $this->tpl->setVariable(
'LINK_PROP', $prop[
'link']);
1396 $this->tpl->setVariable(
'LINK_VAL_PROP', $prop[
'value']);
1398 $this->tpl->setVariable(
'VAL_PROP', $prop[
'value']);
1401 $this->tpl->parseCurrentBlock();
1405 $this->tpl->setCurrentBlock(
'item_properties');
1406 $this->tpl->parseCurrentBlock();
1413 foreach ($this->notice_prop as $property) {
1414 $this->tpl->setCurrentBlock(
'notice_item');
1415 $this->tpl->setVariable(
'NOTICE_ITEM_VALUE', $property[
'value']);
1416 $this->tpl->parseCurrentBlock();
1418 $this->tpl->setCurrentBlock(
'notice_property');
1419 $this->tpl->parseCurrentBlock();
1422 protected function parseConditions(
int $toggle_id, array $conditions,
bool $obligatory =
true): bool
1425 $num_optional_required =
1427 count($conditions) +
1432 $visible_conditions = [];
1433 $passed_optional = 0;
1434 foreach ($conditions as $condition) {
1435 if ($obligatory && !$condition[
'obligatory']) {
1438 if (!$obligatory && $condition[
'obligatory']) {
1442 if ($this->tree->isDeleted($condition[
'trigger_ref_id'])) {
1449 $visible_conditions[] = $condition[
'id'];
1452 if (!$obligatory && $ok) {
1455 if ($passed_optional >= $num_optional_required) {
1461 $missing_cond_exist =
false;
1462 foreach ($conditions as $condition) {
1463 if (!in_array($condition[
'id'], $visible_conditions)) {
1468 $cond_txt = $operator .
' ' . $condition[
'value'];
1471 $class = $this->obj_definition->getClassName($condition[
'trigger_type']);
1472 $location = $this->obj_definition->getLocation($condition[
'trigger_type']);
1476 $missing_cond_exist =
true;
1478 $full_class =
'ilObj' . $class .
'ListGUI';
1479 $item_list_gui =
new $full_class($this->context);
1480 $item_list_gui->setMode(self::IL_LIST_AS_TRIGGER);
1481 $item_list_gui->enablePath(
false);
1482 $item_list_gui->enableIcon(
true);
1483 $item_list_gui->setConditionDepth($this->condition_depth + 1);
1484 $item_list_gui->setParentRefId($this->ref_id);
1485 $item_list_gui->addCustomProperty($this->
lng->txt(
'precondition_required_itemlist'), $cond_txt,
false,
true);
1486 $item_list_gui->enableCommands($this->commands_enabled, $this->std_cmd_only);
1487 $item_list_gui->enableProperties($this->properties_enabled);
1489 $trigger_html = $item_list_gui->getListItemHTML(
1490 $condition[
'trigger_ref_id'],
1491 $condition[
'trigger_obj_id'],
1495 $this->tpl->setCurrentBlock(
'precondition');
1496 if ($trigger_html ==
'') {
1497 $trigger_html = $this->
lng->txt(
'precondition_not_accessible');
1499 $this->tpl->setVariable(
'TXT_CONDITION', trim($cond_txt));
1500 $this->tpl->setVariable(
'TRIGGER_ITEM', $trigger_html);
1501 $this->tpl->parseCurrentBlock();
1504 if ($missing_cond_exist && $obligatory) {
1505 $this->tpl->setCurrentBlock(
'preconditions');
1506 $this->tpl->setVariable(
'CONDITION_TOGGLE_ID',
'_obl_' . $toggle_id);
1507 $this->tpl->setVariable(
'TXT_PRECONDITIONS', $this->
lng->txt(
'preconditions_obligatory_hint'));
1508 $this->tpl->parseCurrentBlock();
1509 } elseif ($missing_cond_exist && !$obligatory) {
1510 $this->tpl->setCurrentBlock(
'preconditions');
1511 $this->tpl->setVariable(
'CONDITION_TOGGLE_ID',
'_opt_' . $toggle_id);
1512 $this->tpl->setVariable(
1513 'TXT_PRECONDITIONS',
1515 $this->
lng->txt(
'preconditions_optional_hint'),
1516 $num_optional_required - $passed_optional
1519 $this->tpl->parseCurrentBlock();
1522 return !$missing_cond_exist;
1531 if ($this->condition_depth > 0) {
1535 if ($this->context == self::CONTEXT_WORKSPACE) {
1539 if (isset($this->condition_target) && is_array($this->condition_target)
1540 && count($this->condition_target) > 0) {
1541 $conditions = ilConditionHandler::_getEffectiveConditionsOfTarget(
1542 (
int) $this->condition_target[
'ref_id'],
1543 (
int) $this->condition_target[
'obj_id'],
1544 $this->condition_target[
'target_type'] ??
'' 1547 $conditions = ilConditionHandler::_getEffectiveConditionsOfTarget($this->ref_id, $this->obj_id);
1550 if (
sizeof($conditions)) {
1551 for ($i = 0; $i < count($conditions); $i++) {
1556 ++self::$js_unique_id;
1558 $all_done_obl = $this->
parseConditions(self::$js_unique_id, $conditions);
1559 $all_done_opt = $this->
parseConditions(self::$js_unique_id, $conditions,
false);
1561 if (!$all_done_obl || !$all_done_opt) {
1562 $this->tpl->setCurrentBlock(
'preconditions_toggle');
1563 $this->tpl->setVariable(
'PRECONDITION_TOGGLE_INTRO', $this->
lng->txt(
'precondition_toggle'));
1564 $this->tpl->setVariable(
'PRECONDITION_TOGGLE_TRIGGER', $this->
lng->txt(
'show'));
1565 $this->tpl->setVariable(
'PRECONDITION_TOGGLE_ID', self::$js_unique_id);
1566 $this->tpl->setVariable(
'TXT_PRECONDITION_SHOW', $this->
lng->txt(
'show'));
1567 $this->tpl->setVariable(
'TXT_PRECONDITION_HIDE', $this->
lng->txt(
'hide'));
1568 $this->tpl->parseCurrentBlock();
1582 string $onclick =
'' 1585 $checksum = md5($href . $text);
1586 if ($href !==
'#' && in_array($checksum, $this->prevent_duplicate_commands)) {
1590 if ($href !==
'#') {
1591 $this->prevent_duplicate_commands[] = $checksum;
1594 if ($cmd ===
'mount_webfolder') {
1595 $onclick =
"triggerWebDAVModal('$href')";
1600 $action = $this->
ui->factory()
1602 ->shy($text, $href);
1604 if ($frame !==
'') {
1605 $action = $this->
ui->factory()->link()->standard($text, $href)->withOpenInNewViewport(
true);
1608 if ($onclick !==
'') {
1609 $action = $action->withAdditionalOnLoadCode(
function (
$id) use ($onclick):
string {
1610 return "$('#$id').click(function(){" . $onclick .
';});';
1616 $this->current_actions[] = $action;
1621 if ($this->std_cmd_only) {
1631 $this->adm_commands_included =
true;
1637 $this->
ctrl->setParameter(
1638 $this->container_obj,
1640 $this->container_obj->getObject()->getRefId()
1642 $this->
ctrl->setParameter($this->container_obj,
'item_ref_id', $this->
getCommandId());
1643 $cmd_link = $this->
ctrl->getLinkTarget($this->container_obj,
'delete');
1645 $this->adm_commands_included =
true;
1653 if ($this->std_cmd_only) {
1660 !$objDefinition->allowLink($this->type)
1670 $this->adm_commands_included =
true;
1677 $this->
ctrl->setParameter(
1678 $this->container_obj,
1680 $this->container_obj->getObject()->getRefId()
1682 $this->
ctrl->setParameter($this->container_obj,
'item_ref_id', $this->
getCommandId());
1683 $cmd_link = $this->
ctrl->getLinkTarget($this->container_obj,
'link');
1685 $this->adm_commands_included =
true;
1690 if ($this->std_cmd_only) {
1701 $this->adm_commands_included =
true;
1709 if ($this->
checkCommandAccess(
'delete',
'', $this->ref_id, $this->type) && $this->container_obj->getObject()) {
1710 $this->
ctrl->setParameter(
1711 $this->container_obj,
1713 $this->container_obj->getObject()->getRefId()
1715 $this->
ctrl->setParameter($this->container_obj,
'item_ref_id', $this->
getCommandId());
1717 if (!$to_repository) {
1718 $cmd_link = $this->
ctrl->getLinkTarget($this->container_obj,
'cut');
1721 $cmd_link = $this->
ctrl->getLinkTarget($this->container_obj,
'cut_for_repository');
1722 $this->
insertCommand($cmd_link, $this->
lng->txt(
'wsp_move_to_repository'));
1725 $this->adm_commands_included =
true;
1731 if ($this->std_cmd_only) {
1736 $this->obj_definition->allowCopy($this->type)) {
1737 if ($this->context != self::CONTEXT_WORKSPACE && $this->context != self::CONTEXT_WORKSPACE_SHARING) {
1738 $this->
ctrl->setParameterByClass(
'ilobjectcopygui',
'source_id', $this->
getCommandId());
1739 $cmd_copy = $this->
ctrl->getLinkTargetByClass([get_class($this->container_obj),
'ilobjectcopygui'],
'initTargetSelection');
1742 $this->
ctrl->setParameter(
1743 $this->container_obj,
1745 $this->container_obj->getObject()->getRefId()
1747 $this->
ctrl->setParameter($this->container_obj,
'item_ref_id', $this->
getCommandId());
1749 if (!$to_repository) {
1750 $cmd_copy = $this->
ctrl->getLinkTarget($this->container_obj,
'copy');
1753 $cmd_copy = $this->
ctrl->getLinkTarget($this->container_obj,
'copy_to_repository');
1754 $this->
insertCommand($cmd_copy, $this->
lng->txt(
'wsp_copy_to_repository'));
1758 $this->adm_commands_included =
true;
1764 if ($this->std_cmd_only) {
1774 $this->clipboard->hasEntries()
1779 $this->adm_commands_included =
true;
1785 if ($this->std_cmd_only
1788 || $this->
settings->get(
'rep_favourites',
'0') !==
'1') {
1796 is_object($this->container_obj) &&
1798 method_exists($this->container_obj,
'getObject') &&
1799 is_object($this->container_obj->getObject())
1801 $this->
ctrl->setParameter(
1802 $this->container_obj,
1804 $this->container_obj->getObject()->getRefId()
1808 $this->
ctrl->setParameter($this->container_obj,
'type', $type);
1809 $this->
ctrl->setParameter($this->container_obj,
'item_ref_id', $this->
getCommandId());
1811 if (!$this->fav_manager->ifIsFavourite($this->user->getId(), $this->
getCommandId())) {
1813 if ($this->
checkCommandAccess(
'read',
'', $this->ref_id, $this->type, $this->obj_id)) {
1814 $cmd_link = $this->
ctrl->getLinkTarget($this->container_obj,
'addToDesk');
1818 $cmd_link = $this->
ctrl->getLinkTarget($this->container_obj,
'removeFromDesk');
1819 $this->
insertCommand($cmd_link, $this->
lng->txt(
'rep_remove_from_favourites'));
1822 $this->
ctrl->clearParameters($this->container_obj);
1828 if ($this->std_cmd_only) {
1833 $this->
lng->txt(
'info_short'),
1844 if ($this->std_cmd_only || $this->
user->isAnonymous()) {
1848 $this->
lng->loadLanguageModule(
'notes');
1849 $this->
lng->loadLanguageModule(
'tagging');
1854 if ($this->reference_ref_id) {
1858 $js_updater = $header_actions
1859 ?
'il.Object.redrawActionHeader();' 1860 :
'il.Object.redrawListItem(' . $note_ref_id .
')';
1862 $comments_enabled = $this->
isCommentsActivated($this->type, $this->ref_id, $this->obj_id, $header_actions);
1863 if ($comments_enabled) {
1866 $this->
lng->txt(
'notes_comments'),
1874 if ($this->notes_enabled) {
1877 $this->
lng->txt(
'notes'),
1885 if ($this->tags_enabled) {
1888 $this->
lng->txt(
'tagging_set_tag'),
1906 $this->std_cmd_only || is_null($this->container_obj) ||
1907 !method_exists($this->container_obj,
'getObject') ||
1908 !is_object($this->container_obj->getObject())
1913 $parent_ref_id = $this->container_obj->getObject()->getRefId();
1914 $parent_type = $this->container_obj->getObject()->getType();
1917 if ($this->reference_ref_id) {
1918 $this->
ctrl->setParameterByClass(
'ilconditionhandlergui',
'ref_id', $this->reference_ref_id);
1925 $this->
ctrl->setParameterByClass(
1926 get_class($this->container_obj),
1930 $time_limit_link = $this->
ctrl->getLinkTargetByClass(
1931 get_class($this->container_obj),
1932 'editAvailabilityPeriod' 1934 $this->
insertCommand($time_limit_link, $this->
lng->txt(
'edit_availability_period'));
1935 $this->
ctrl->clearParameterByClass(
1936 get_class($this->container_obj),
1940 $this->
ctrl->setParameterByClass(
1941 'ilconditionhandlergui',
1945 $this->
ctrl->setParameterByClass(
1946 'ilconditionhandlergui',
1951 $availbility_link = $this->
ctrl->getLinkTargetByClass(
1952 [$this->gui_class_name,
'ilcommonactiondispatchergui',
'ilobjectactivationgui',
'ilconditionhandlergui'],
1959 if ($this->reference_ref_id) {
1960 $this->
ctrl->setParameterByClass(
'ilconditionhandlergui',
'ref_id', $this->ref_id);
1972 foreach ($commands as $command) {
1973 if ($command[
'default'] ===
true) {
1974 $this->default_command = $command[
'granted'] ===
true ? $this->
createDefaultCommand($command) : [];
1981 $this->
ctrl->setParameterByClass($this->gui_class_name,
'ref_id', $this->ref_id);
1983 $this->current_actions = [];
1984 $this->default_command = [];
1985 $this->prevent_duplicate_commands = [];
1988 $valid_header_commands = [
'mount_webfolder'];
1990 foreach ($commands as $command) {
1991 if ($for_header && !in_array($command[
'cmd'], $valid_header_commands)
1992 || $command[
'granted'] ===
false) {
1996 if ($command[
'default'] !==
true) {
1997 if (!$this->std_cmd_only) {
2002 $cmd_link = $command[
'link'];
2003 $txt = ($command[
'lang_var'] ==
'')
2005 : $this->
lng->txt($command[
'lang_var']);
2020 if (is_array($this->cust_commands)) {
2021 foreach ($this->cust_commands as $command) {
2022 if ($command instanceof
Button) {
2023 $this->current_actions[] = $command;
2029 $this->
lng->txt($command[
'lang_var']),
2032 $command[
'cmd'] ??
'',
2046 if (!$this->
isMode(self::IL_LIST_AS_TRIGGER)) {
2048 if ($this->timings_enabled) {
2053 if ($this->delete_enabled) {
2058 if ($this->link_enabled) {
2063 if ($this->cut_enabled) {
2068 if ($this->copy_enabled) {
2073 if ($this->repository_transfer_enabled) {
2079 if ($this->subscribe_enabled) {
2084 if ($this->multi_download_enabled && $for_header) {
2089 if ($this->cut_enabled or $this->link_enabled) {
2096 if (!$this->
isMode(self::IL_LIST_AS_TRIGGER)) {
2112 && $this->object_properties->getPropertyInfoTabVisibility()) {
2118 public function enableComments(
bool $value,
bool $enable_comments_settings =
true): void
2120 if ($this->
settings->get(
'disable_comments')) {
2124 $this->comments_enabled = $value;
2125 $this->comments_settings_enabled = $enable_comments_settings;
2130 if ($this->
settings->get(
'disable_notes')) {
2134 $this->notes_enabled = $value;
2140 if (!$tags_set->get(
'enable')) {
2143 $this->tags_enabled = $value;
2148 string $text = null,
2149 bool $categories =
false,
2150 array $ctrl_path = null,
2151 bool $force_rate_parent =
false 2153 $this->rating_enabled = $value;
2155 if ($this->rating_enabled) {
2156 $this->rating_categories_enabled = $categories;
2157 $this->rating_text =
$text;
2158 $this->rating_ctrl_path = $ctrl_path;
2171 if (!$folder_set->get(
'enable_multi_download')) {
2174 $this->multi_download_enabled = $value;
2179 if ($this->std_cmd_only) {
2200 if ($hasAdminAccess) {
2201 $cmd = ($this->requested_cmd ==
'enableAdministrationPanel')
2203 :
'enableAdministrationPanel';
2205 $cmd = ($this->requested_cmd ==
'enableMultiDownload')
2207 :
'enableMultiDownload';
2210 $this->
insertCommand($cmd_link, $this->
lng->txt(
'download_multiple_objects'));
2217 if (!$this->
getContainerObject()->isActiveAdministrationPanel() || $this->clipboard->hasEntries()) {
2219 in_array($this->type, [
'file',
'fold']) &&
2220 $this->
access->checkAccess(
'read',
'', $ref_id, $this->type)
2222 $this->download_checkbox_state = self::DOWNLOAD_CHECKBOX_ENABLED;
2224 $this->download_checkbox_state = self::DOWNLOAD_CHECKBOX_DISABLED;
2227 $this->download_checkbox_state = self::DOWNLOAD_CHECKBOX_NONE;
2247 if (is_null($tpl)) {
2252 $DIC->notes()->gui()->initJavascript($notes_url);
2260 $tpl->addOnLoadCode(
'il.Object.setRedrawAHUrl("' . $redraw_url .
'");');
2266 $this->sub_obj_type =
$type;
2267 $this->sub_obj_id = (
int) $id;
2273 string $tooltip = null,
2274 string $onclick = null,
2275 string $status_text = null,
2278 $this->header_icons[
$id] = [
2280 'tooltip' => $tooltip,
2281 'onclick' => $onclick,
2282 'status_text' => $status_text,
2289 $this->header_icons[
$id] = $html;
2294 $this->header_icons[
$id] = [
'glyph' => $glyph,
'onclick' => $onclick];
2299 $this->ajax_hash = $hash;
2304 if ($main_tpl == null) {
2308 $htpl =
new ilTemplate(
'tpl.header_action.html',
true,
true,
'components/ILIAS/ILIASObject');
2310 $redraw_js =
'il.Object.redrawActionHeader();';
2313 if ($this->tags_enabled) {
2319 $this->
user->getId()
2321 if (count($tags) > 0) {
2322 $this->
lng->loadLanguageModule(
'tagging');
2324 $f = $this->
ui->factory();
2327 $f->symbol()->glyph()->tag(
'#')
2328 ->withCounter(
$f->counter()->status(count($tags))),
2335 $comments_enabled = $this->
isCommentsActivated($this->type, $this->ref_id, $this->obj_id,
true,
false);
2336 if ($this->notes_enabled || $comments_enabled) {
2337 $type = ($this->sub_obj_type ==
'') ? $this->type : $this->sub_obj_type;
2338 $context = $this->notes_service->data()->context($this->obj_id, $this->sub_obj_id, $type);
2339 $cnt[
$this->obj_id][Note::PUBLIC] = $this->notes_service->domain()->getNrOfCommentsForContext($context);
2340 $cnt[
$this->obj_id][Note::PRIVATE] = $this->notes_service->domain()->getNrOfNotesForContext($context);
2342 $this->notes_enabled &&
2343 isset($cnt[$this->obj_id][Note::PRIVATE]) &&
2344 $cnt[$this->obj_id][Note::PRIVATE] > 0
2346 $f = $this->
ui->factory();
2349 $f->symbol()->glyph()->note(
'#')
2350 ->withCounter(
$f->counter()->status((
int) $cnt[$this->obj_id][Note::PRIVATE])),
2356 $comments_enabled &&
2357 isset($cnt[$this->obj_id][Note::PUBLIC]) &&
2360 $this->
lng->loadLanguageModule(
'notes');
2361 $f = $this->
ui->factory();
2364 $f->symbol()->glyph()->comment(
'#')
2365 ->withCounter(
$f->counter()->status((
int) $cnt[$this->obj_id][Note::PUBLIC])),
2372 if ($this->rating_enabled) {
2374 $rating_gui->enableCategories($this->rating_categories_enabled);
2376 $rating_gui->setObject($this->obj_id, $this->type);
2377 if ($this->rating_text) {
2378 $rating_gui->setYourRatingText($this->rating_text);
2381 $ajax_hash = $this->force_rate_parent
2384 $this->
ctrl->setParameterByClass(
'ilRatingGUI',
'cadh', $ajax_hash);
2385 $this->
ctrl->setParameterByClass(
'ilRatingGUI',
'rnsb',
true);
2386 if ($this->rating_ctrl_path) {
2387 $rating_gui->setCtrlPath($this->rating_ctrl_path);
2388 $ajax_url = $this->
ctrl->getLinkTargetByClass($this->rating_ctrl_path,
'saveRating',
'',
true);
2390 $ajax_url = $this->
ctrl->getLinkTargetByClass(
'ilRatingGUI',
'saveRating',
'',
true);
2392 $main_tpl->
addOnLoadCode(
'il.Object.setRatingUrl("' . $ajax_url .
'");');
2395 $rating_gui->getHTML(
2397 $this->checkCommandAccess(
'read',
'', $this->ref_id, $this->type),
2398 'il.Object.saveRating(%rating%);' 2403 if ($this->header_icons) {
2405 foreach ($this->header_icons as
$id => $attr) {
2408 if (is_array($attr)) {
2409 if (isset($attr[
'glyph']) && $attr[
'glyph']) {
2410 if ($attr[
'onclick']) {
2411 $htpl->setCurrentBlock(
'prop_glyph_oc');
2412 $htpl->setVariable(
'GLYPH_ONCLICK', $attr[
'onclick']);
2413 $htpl->parseCurrentBlock();
2416 $html =
$renderer->render($attr[
'glyph']);
2417 $htpl->setCurrentBlock(
'prop_glyph');
2418 $htpl->setVariable(
'GLYPH', $html);
2419 $htpl->parseCurrentBlock();
2421 if ($attr[
'onclick']) {
2422 $htpl->setCurrentBlock(
'onclick');
2423 $htpl->setVariable(
'PROP_ONCLICK', $attr[
'onclick']);
2424 $htpl->parseCurrentBlock();
2427 if ($attr[
'status_text']) {
2428 $htpl->setCurrentBlock(
'status');
2429 $htpl->setVariable(
'PROP_TXT', $attr[
'status_text']);
2430 $htpl->parseCurrentBlock();
2434 $htpl->setCurrentBlock(
'prop');
2435 if ($attr[
'href'] || $attr[
'onclick']) {
2436 $htpl->setVariable(
'TAG',
'a');
2438 $htpl->setVariable(
'TAG',
'span');
2440 $htpl->setVariable(
'PROP_ID',
$id);
2441 $htpl->setVariable(
'IMG_SRC', $attr[
'img']);
2442 if ($attr[
'href'] !=
'') {
2443 $htpl->setVariable(
'PROP_HREF',
' href="' . $attr[
'href'] .
'" ');
2446 if ($attr[
'tooltip']) {
2447 $htpl->setVariable(
'IMG_ADDITIONAL',
"alt=\"{$attr['tooltip']}\" title=\"{$attr['tooltip']}\"");
2449 $htpl->parseCurrentBlock();
2456 if (
sizeof($chunks)) {
2459 implode(
' ', $chunks) .
' ' 2465 $dropdown_label =
'<span class="hidden-xs">' .
2466 $this->
lng->txt(
'actions') .
2471 $this->
ui->renderer()->render($dropdown)
2474 if ($this->cust_modals !== []) {
2475 $htpl->setVariable(
'TRIGGERED_MODALS', $this->
ui->renderer()->render($this->cust_modals));
2478 return $htpl->get();
2489 $base_class = $this->request_wrapper->retrieve(
'baseClass', $this->
refinery->kindlyTo()->string());
2491 (strtolower($base_class) !=
'ilrepositorygui') &&
2492 is_int(strpos($link,
'baseClass=ilRepositoryGUI'))
2494 if ($this->type !=
'frm') {
2504 if ($this->default_command_params) {
2506 foreach ($this->default_command_params as $name => $value) {
2507 $params[] = $name .
'=' . $value;
2513 if (!stristr($default_link,
'?')) {
2514 $default_link = ($default_link .
'?' .
$params);
2516 $default_link = ($default_link .
'&' .
$params);
2519 return $default_link;
2527 if (strstr($link, ilSAHSPresentationGUI::class) ===
false) {
2528 return [$link, $target];
2532 $om = $sahs_obj->getOpenMode();
2533 $width = $sahs_obj->getWidth();
2534 $height = $sahs_obj->getHeight();
2535 if (($om == 5 || $om == 1) && $width > 0 && $height > 0) {
2538 if ($om !== 0 && !$this->
http->agent()->isMobile()) {
2539 $this->default_command[
'frame'] =
'';
2541 'javascript:void(0); onclick=startSAHS(\'' .
2554 $target = "ilContObj" . $this->ref_id; 2556 return [$link, $target]; 2559 public function insertPath(): void 2561 if ($this->getPathStatus() != false) { 2562 if (!$this->path_gui instanceof \ilPathGUI) { 2563 $path_gui = new \ilPathGUI(); 2565 $path_gui = $this->path_gui; 2568 $path_gui->enableTextOnly(!$this->path_linked); 2569 $path_gui->setUseImages(false); 2571 $start_node = ROOT_FOLDER_ID; 2572 if ($this->path_start_node) { 2573 $start_node = $this->path_start_node; 2576 $this->tpl->setCurrentBlock('path_item
'); 2577 $this->tpl->setVariable('PATH_ITEM
', $path_gui->getPath($start_node, $this->ref_id)); 2578 $this->tpl->parseCurrentBlock(); 2580 $this->tpl->setCurrentBlock('path
'); 2581 $this->tpl->setVariable('TXT_LOCATION
', $this->lng->txt('locator')); 2582 $this->tpl->parseCurrentBlock(); 2586 public function insertProgressInfo(): void 2590 public function insertIconsAndCheckboxes(): void 2593 if ($this->getCheckboxStatus()) { 2594 $this->tpl->setCurrentBlock('check'); 2595 $this->tpl->setVariable('VAL_ID
', $this->getCommandId()); 2596 $this->tpl->setVariable('CHECK_TITLE
', $this->lng->txt('select
') . ' ' . $this->getTitle()); 2597 $this->tpl->parseCurrentBlock(); 2599 } elseif ($this->getDownloadCheckboxState() != self::DOWNLOAD_CHECKBOX_NONE) { 2600 $this->tpl->setCurrentBlock('check_download
'); 2601 $this->tpl->setVariable('CHECK_DOWNLOAD_TITLE
', $this->lng->txt('download
') . ' ' . $this->getTitle()); 2602 if ($this->getDownloadCheckboxState() == self::DOWNLOAD_CHECKBOX_ENABLED) { 2603 $this->tpl->setVariable('VAL_ID
', $this->getCommandId()); 2605 $this->tpl->setVariable('VAL_VISIBILITY
', 'visibility: hidden;
" disabled="disabled'); 2607 $this->tpl->parseCurrentBlock(); 2609 } elseif ($this->getExpandStatus()) { 2610 $this->tpl->setCurrentBlock('expand'); 2612 if ($this->isExpanded()) { 2613 $this->ctrl->setParameter($this->container_obj, 'expand', -1 * $this->obj_id); 2614 // 'view
' added, see #19922 2615 $this->tpl->setVariable('EXP_HREF
', $this->ctrl->getLinkTarget($this->container_obj, 'view
', $this->getUniqueItemId(true))); 2616 $this->ctrl->clearParameters($this->container_obj); 2617 $this->tpl->setVariable('EXP_IMG
', ilUtil::getImagePath('nav/tree_exp.svg
')); 2618 $this->tpl->setVariable('EXP_ALT
', $this->lng->txt('collapse')); 2620 $this->ctrl->setParameter($this->container_obj, 'expand', $this->obj_id); 2621 // 'view
' added, see #19922 2622 $this->tpl->setVariable('EXP_HREF
', $this->ctrl->getLinkTarget($this->container_obj, 'view
', $this->getUniqueItemId(true))); 2623 $this->ctrl->clearParameters($this->container_obj); 2624 $this->tpl->setVariable('EXP_IMG
', ilUtil::getImagePath('nav/tree_col.svg
')); 2625 $this->tpl->setVariable('EXP_ALT
', $this->lng->txt('expand')); 2628 $this->tpl->parseCurrentBlock(); 2632 if ($this->getIconStatus()) { 2634 $this->tpl->touchBlock('i_1
'); 2637 $this->tpl->setCurrentBlock('icon
'); 2638 $this->tpl->setVariable('ALT_ICON
', $this->buildTranslatedType()); 2640 $this->tpl->setVariable( 2642 $this->getTypeIcon() 2644 $this->tpl->parseCurrentBlock(); 2648 $this->tpl->touchBlock('d_
' . $cnt); 2654 public function getTypeIcon(): string 2656 return ilObject::getIconForReference( 2660 $this->getIconImageType() 2664 public function insertSubItems(): void 2666 foreach ($this->sub_item_html as $sub_html) { 2667 $this->tpl->setCurrentBlock('subitem
'); 2668 $this->tpl->setVariable('SUBITEM
', $sub_html); 2669 $this->tpl->parseCurrentBlock(); 2673 public function insertPositionField(): void 2675 if ($this->position_enabled) { 2676 $this->tpl->setCurrentBlock('position
'); 2677 $this->tpl->setVariable('POS_ID
', $this->position_field_index); 2678 $this->tpl->setVariable('POS_VAL
', $this->position_value); 2679 $this->tpl->parseCurrentBlock(); 2687 public function adminCommandsIncluded(): bool 2689 return $this->adm_commands_included; 2692 public function storeAccessCache(): void 2694 if ($this->acache->getLastAccessStatus() == 'miss
' && !$this->prevent_access_caching) { 2695 $this->acache->storeEntry( 2696 $this->user->getId() . ':
' . $this->ref_id, 2697 serialize($this->access_cache), 2706 public function getListItemHTML( 2712 // this variable stores whether any admin commands 2713 // are included in the output 2714 $this->adm_commands_included = false; 2716 // only for performance exploration 2717 $type = ilObject::_lookupType($obj_id); 2719 $this->initItem($ref_id, $obj_id, $type, $title, $description); 2721 if ($this->rating_enabled) { 2722 if (ilRating::hasRatingInListGUI($this->obj_id, $this->type)) { 2723 $may_rate = $this->checkCommandAccess('read
', '', $this->ref_id, $this->type); 2724 $rating = new ilRatingGUI(); 2725 $rating->setObject($this->obj_id, $this->type); 2726 $this->addCustomProperty( 2728 $rating->getListGUIProperty($this->ref_id, $may_rate, $this->ajax_hash, $this->parent_ref_id), 2736 $this->acache = new ilListItemAccessCache(); 2737 $cres = $this->acache->getEntry($this->user->getId() . ':
' . $ref_id); 2738 if ($this->acache->getLastAccessStatus() == 'hit
') { 2739 $this->access_cache = unserialize($cres); 2742 $this->storeAccessCache(); 2746 if (!$this->checkCommandAccess('visible
', '', $ref_id, '', $obj_id)) { 2747 $this->resetCustomData(); 2752 if ($type == 'file
' and ilObjFileAccess::_isFileHidden($title)) { 2753 $this->resetCustomData(); 2758 $this->tpl = new ilTemplate( 2759 static::$tpl_file_name, 2762 static::$tpl_component, 2768 if ($this->getCommandsStatus()) { 2769 if (!$this->getSeparateCommands()) { 2770 $dropdown = $this->getCommandsDropdown($title); 2771 $this->tpl->setVariable( 2772 'COMMAND_SELECTION_LIST
', 2773 $this->ctrl->isAsynch() 2774 ? $this->ui->renderer()->renderAsync($dropdown) 2775 : $this->ui->renderer()->render($dropdown) 2780 if ($this->getProgressInfoStatus()) { 2781 $this->insertProgressInfo(); 2784 // insert title and describtion 2785 $this->insertTitle(); 2786 if (!$this->isMode(self::IL_LIST_AS_TRIGGER)) { 2787 if ($this->getDescriptionStatus()) { 2788 $this->insertDescription(); 2792 if ($this->getSearchFragmentStatus()) { 2793 $this->insertSearchFragment(); 2797 if ($this->getPropertiesStatus()) { 2798 $this->insertProperties(); 2801 // notice properties 2802 if ($this->getNoticePropertiesStatus()) { 2803 $this->insertNoticeProperties(); 2807 if ($this->getPreconditionsStatus()) { 2808 $this->insertPreconditions(); 2812 $this->insertPath(); 2814 if ($this->getItemDetailLinkStatus()) { 2815 $this->insertItemDetailLinks(); 2818 // icons and checkboxes 2819 $this->insertIconsAndCheckboxes(); 2821 // input field for position 2822 $this->insertPositionField(); 2825 $this->insertSubItems(); 2827 $this->resetCustomData(); 2829 $this->tpl->setVariable('DIV_CLASS
', 'ilContainerListItemOuter
'); 2830 $this->tpl->setVariable( 2832 'data-list-item-
id=
"' . $this->getUniqueItemId(true) . '" id =
"' . $this->getUniqueItemId(true) . '"' 2834 $this->tpl->setVariable('ADDITIONAL
', $this->getAdditionalInformation()); 2836 if (is_object($this->getContainerObject())) { 2837 // #11554 - make sure that internal ids are reset 2838 $this->ctrl->setParameter($this->getContainerObject(), 'item_ref_id
', ''); 2841 // if file upload is enabled the content is wrapped by a UI dropzone. 2842 $content = $this->tpl->get(); 2843 $file_upload_dropzone = new ilObjFileUploadDropzone($this->ref_id, $content); 2844 if ($this->context === self::CONTEXT_REPOSITORY 2845 && ($this->requested_cmd === "view" || $this->requested_cmd === "" || $this->requested_cmd === "render") 2846 && $file_upload_dropzone->isUploadAllowed($this->type) 2847 && !(new ModeSessionRepository())->isAdminMode() 2849 return $file_upload_dropzone->getDropzoneHtml(); 2858 protected function resetCustomData(): void 2861 $this->cust_prop = []; 2862 $this->cust_commands = []; 2863 $this->cust_modals = []; 2864 $this->sub_item_html = []; 2865 $this->position_enabled = false; 2871 public function setParentRefId(int $ref_id): void 2873 $this->parent_ref_id = $ref_id; 2882 public function getUniqueItemId(bool $as_div = false): string 2884 // use correct id for references 2885 $id_ref = $this->ref_id; 2886 if ($this->reference_ref_id > 0) { 2887 $id_ref = $this->reference_ref_id; 2890 // add unique identifier for preconditions (objects can appear twice in same container) 2891 if ($this->condition_depth) { 2892 $id_ref .= '_pc
' . $this->condition_depth; 2896 $id_ref .= '_pref_
' . $this->parent_ref_id; 2901 // action menu [yellow] toggle 2902 return 'lg_div_
' . $id_ref; 2909 public function getCommandsHTML(string $title = ''): string 2911 return $this->ui->renderer()->render($this->getCommandsDropdown($title, false)); 2914 private function getCommandsDropdown(string $title, bool $for_header = false): StandardDropdown 2916 $this->populateCommands($for_header); 2917 return $this->ui->factory() 2919 ->standard($this->current_actions) 2920 ->withAriaLabel(sprintf( 2921 $this->lng->txt('actions_for
'), 2922 htmlspecialchars(addslashes($title)) 2929 public function isSideBlock(): bool 2934 public function setBoldTitle(bool $bold_title): void 2936 $this->bold_title = $bold_title; 2939 public function isTitleBold(): bool 2941 return $this->bold_title; 2944 public static function preloadCommonProperties(array $obj_ids, int $context): void 2947 $lng = $DIC->language(); 2948 $ilSetting = $DIC->settings(); 2949 $ilUser = $DIC->user(); 2950 $notes_manager = $DIC->notes()->internal()->domain()->notes(); 2952 if ($context == self::CONTEXT_REPOSITORY) { 2953 $active_notes = !$ilSetting->get('disable_notes
'); 2954 $active_comments = !$ilSetting->get('disable_comments
'); 2956 if ($active_comments) { 2957 // needed for action 2958 self::$comments_activation = $DIC->notes() 2961 ->notes()->commentsActiveMultiple($obj_ids); 2964 // properties are optional 2965 if ($ilSetting->get('comments_tagging_in_lists
')) { 2966 if ($active_notes || $active_comments) { 2967 // @todo: should be refactored, see comment in notes db repo 2968 self::$cnt_notes = $notes_manager->countNotesAndCommentsMultipleObjects( 2973 $lng->loadLanguageModule('notes
'); 2976 $tags_set = new ilSetting('tags
'); 2977 if ($tags_set->get('enable
')) { 2978 $all_users = (bool) $tags_set->get('enable_all_users
'); 2980 if (!$ilSetting->get('comments_tagging_in_lists_tags
')) { 2981 self::$cnt_tags = ilTagging::_countTags($obj_ids, $all_users); 2983 $tag_user_id = null; 2985 $tag_user_id = $ilUser->getId(); 2987 self::$tags = ilTagging::_getListTagsForObjects($obj_ids, $tag_user_id); 2990 $lng->loadLanguageModule('tagging
'); 2994 $lng->loadLanguageModule('rating
'); 2997 self::$preload_done = true; 3003 protected function isCommentsActivated( 3007 bool $header_actions, 3008 bool $check_write_access = true 3010 if ($this->comments_enabled) { 3011 if (!$this->comments_settings_enabled) { 3014 if ($check_write_access && $this->checkCommandAccess('write
', '', $ref_id, $type)) { 3017 // fallback to single object check if no preloaded data 3018 // only the repository does preloadCommonProperties() yet 3019 if (!$header_actions && self::$preload_done) { 3020 if (isset(self::$comments_activation[$obj_id]) && 3021 self::$comments_activation[$obj_id]) { 3024 } elseif ($this->notes_service->domain()->commentsActive($obj_id)) { 3034 public function enableTimings(bool $status): void 3036 $this->timings_enabled = $status; 3042 public function getAsListItem( 3051 // even b tag produced bugs, see #32304 3052 $description = $this->refinery->encode()->htmlSpecialCharsAsEntities()->transform( 3064 $this->enableCommands(true); 3067 $this->populateCommands(false); 3069 $dropdown = $this->getCommandsDropdown($title); 3070 $def_command = $this->getDefaultCommand(); 3072 if ($def_command['link'] ?? false) { 3073 list($def_command['link'], $def_command['frame
']) = 3074 $this->modifySAHSlaunch($def_command['link'], $def_command['frame
']); 3075 $new_viewport = !in_array($def_command['frame
'], ['', '_top
', '_self
', '_parent
'], true); 3076 $link = $this->ui->factory() 3078 ->standard($this->getTitle(), $def_command['link']) 3079 ->withOpenInNewViewport($new_viewport); 3080 $list_item = $ui->factory()->item()->standard($link); 3082 $list_item = $ui->factory()->item()->standard($this->getTitle()); 3085 if ($description != '') { 3086 $list_item = $list_item->withDescription($description); 3088 $list_item = $list_item->withActions($dropdown)->withLeadIcon( 3089 $this->ui->factory()->symbol()->icon()->custom( 3090 $this->getTypeIcon(), 3091 $this->buildTranslatedType(), 3098 $this->enableComments(true); 3099 $this->enableNotes(true); 3100 $this->enableTags(true); 3101 $this->enableRating(true); 3103 foreach ($this->determineProperties() as $p) { 3104 //if ($p['property'] !== $this->lng->txt('learning_progress
')) { 3105 $l[(string) $p['property']] = (string) $p['value
']; 3108 if (count($l) > 0) { 3109 $list_item = $list_item->withProperties($l); 3118 public function getAsCard( 3124 ): ?RepositoryObject { 3127 $title = $this->refinery->encode()->htmlSpecialCharsAsEntities()->transform($title); 3128 // even b tag produced bugs, see #32304 3129 $description = $this->refinery->encode()->htmlSpecialCharsAsEntities()->transform( 3141 $user = $this->user; 3142 $access = $this->access; 3144 $this->enableCommands(true); 3147 if ($description !== '') { 3148 $sections[] = $ui->factory()->legacy('<div
class=
"il-multi-line-cap-3">
' . $description . '</div>
'); 3151 $this->populateCommands(false); 3153 $def_command = $this->getDefaultCommand(); 3155 $dropdown = $this->getCommandsDropdown($title); 3157 // workaround for #26205 3158 // we should get rid of _top links completely and gifure our how 3159 // to manage scorm links better 3160 $def_cmd_frame = ($def_command['frame
'] ?? ''); 3161 if ($def_cmd_frame === '_top
') { 3162 $def_cmd_frame = ''; 3164 $def_cmd_link = ($def_command['link'] ?? ''); 3166 // workaround for scorm 3167 list($modified_link, $def_cmd_frame) = 3168 $this->modifySAHSlaunch($def_cmd_link, $def_cmd_frame); 3170 $image = $this->getTileImage(); 3172 if ($def_cmd_link != '') { // #24256 3173 if ($def_cmd_frame !== '' && ($modified_link === $def_cmd_link)) { 3174 $signal = (new SignalGenerator())->create(); 3175 $this->main_tpl->addOnLoadCode( 3176 "$(document).on('{$signal->getId()}
', function(event, signalData) {" 3177 . ' window.open(
"' . str_replace( 3181 ) . '",
"' . $def_cmd_frame . '");
' 3185 $image = $image->withAction($signal); 3188 $ui->factory()->button()->shy($title, '')->appendOnClick($signal); 3189 $title = $ui->renderer()->render($button); 3191 $image = $image->withAction($modified_link); 3195 if ($type == 'sess
') { 3197 $title = ':
' . $title; 3199 $app_info = ilSessionAppointment::_lookupAppointment($obj_id); 3200 $title = ilSessionAppointment::_appointmentToString( 3203 (bool) $app_info['fullday
'] 3207 $icon = $this->ui->factory()->symbol()->icon()->custom( 3208 $this->getTypeIcon(), 3209 $this->buildTranslatedType(), 3213 // card title action 3214 $card_title_action = ''; 3215 if ($def_cmd_link != '' && ($def_cmd_frame == '' || $modified_link != $def_cmd_link)) { // #24256 3216 $card_title_action = $modified_link; 3217 } elseif ($def_cmd_link == '' && 3218 $this->getInfoScreenStatus() && 3219 $access->checkAccessOfUser( 3225 $card_title_action = ilLink::_getLink($ref_id); 3226 if ($image->getAction() == '') { 3227 $image = $image->withAction($card_title_action); 3231 $card = $ui->factory()->card()->repositoryObject( 3232 $title . '<span data-list-item-
id=
"' . $this->getUniqueItemId(true) . '"></span>
', 3240 if ($card_title_action != '') { 3241 $card = $card->withTitleAction($card_title_action); 3245 foreach ($this->determineProperties() as $p) { 3246 if (isset($p['alert
']) && $p['alert
'] == true 3247 && isset($p['property']) && $p['property'] !== $this->lng->txt('learning_progress
')) { 3248 $l[(string) $p['property']] = (string) $p['value
']; 3251 if (count($l) > 0) { 3252 $prop_list = $ui->factory()->listing()->descriptive($l); 3253 $sections[] = $prop_list; 3255 if (count($sections) > 0) { 3256 $card = $card->withSections($sections); 3259 $lp = ilLPStatus::getListGUIStatus($obj_id, false); 3260 if (is_array($lp) && array_key_exists('status
', $lp)) { 3261 $percentage = (int) ilLPStatus::_lookupPercentage($obj_id, $this->user->getId()); 3262 if ($lp['status
'] == ilLPStatus::LP_STATUS_COMPLETED_NUM) { 3266 $card = $card->withProgress( 3270 ->mini(100, $percentage) 3277 public function checkInfoPageOnAsynchronousRendering(): bool 3282 private function getTileImage(): Image 3284 return $this->object_properties->getPropertyTileImage() 3285 ->getTileImage()->getImage($this->ui->factory()->image()); 3291 public function insertLPCommand(): void 3293 if ($this->std_cmd_only || !$this->lp_cmd_enabled) { 3296 $relevant = ilLPStatus::hasListGUIStatus($this->obj_id); 3298 $cmd_link = $this->getCommandLink('learningProgress
'); 3299 $this->insertCommand( 3301 $this->lng->txt('learning_progress
') 3309 private function insertLPSettingsCommand(): void 3311 if (!$this->lp_settings_cmd_enabled 3312 || !ilObjUserTracking::_enabledLearningProgress() 3313 || ilObjectLP::getTypeClass($this->type) === '' 3314 || ! $this->checkCommandAccess('edit_learning_progress
', '', $this->ref_id, $this->type) 3320 $this->ctrl->setParameterByClass(ilLearningProgressGUI::class, 'ref_id
', $this->ref_id); 3321 switch ($this->type) { 3323 switch (ilObjSAHSLearningModule::_lookupSubType($this->obj_id)) { 3325 $scorm_class = ilObjSCORM2004LearningModuleGUI::class; 3328 $scorm_class = ilObjSCORMLearningModuleGUI::class; 3335 $cmd_link = $this->ctrl->getLinkTargetByClass([ 3336 ilSAHSEditGUI::class, 3338 ilLearningProgressGUI::class, 3339 ilLPListOfSettingsGUI::class 3344 $cmd_link = $this->ctrl->getLinkTargetByClass([ 3345 ilLMEditorGUI::class, 3346 ilObjLearningModuleGUI::class, 3347 ilLearningProgressGUI::class, 3348 ilLPListOfSettingsGUI::class 3353 $cmd_link = $this->ctrl->getLinkTargetByClass([ 3354 ilObjLearningSequenceGUI::class, 3355 ilLearningProgressGUI::class, 3356 ilLPListOfSettingsGUI::class 3369 $gui_class = 'ilObj
' . $this->obj_definition->getClassName($this->type) . 'GUI
'; 3370 $cmd_link = $this->ctrl->getLinkTargetByClass([ 3371 ilRepositoryGUI::class, 3373 ilLearningProgressGUI::class, 3374 ilLPListOfSettingsGUI::class 3386 $this->ctrl->setParameterByClass('ilrepositorygui
', 'ref_id
', $this->requested_ref_id); 3387 if ($cmd_link !== '') { 3388 $this->insertCommand( 3390 $this->lng->txt('listaction_learning_progress_settings
') 3395 private function buildTranslatedType(): string 3397 if ($this->obj_definition->isPlugin($this->getIconImageType())) { 3398 return ilObjectPlugin::lookupTxtById($this->getIconImageType(), 'obj_
' . $this->getIconImageType()); 3401 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)
const CONTEXT_WORKSPACE_SHARING
setHeaderSubObject(?string $type, ?int $id)
parseConditions(int $toggle_id, array $conditions, bool $obligatory=true)
insertSearchFragment()
Insert highlighted search fragment.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
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)
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
Interface Observer Contains several chained tasks and infos about them.
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 translateOperator(int $a_obj_id, string $a_operator, string $value='')
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)
enableMultiDownload(bool $value)
Toggles whether multiple objects can be downloaded at once or not.
small()
description: > This can be used, when space is very scarce and the label cannot be displayed ...
setDetailsLevel(int $level)
Details level Currently used in Search which shows only limited properties of forums Currently used f...
commandsNeedToBeHidden(bool $for_header)
Fix bug #12417: We hide the action menu when we are in the public area.
ILIAS Notes Service $notes_service
ilFavouritesManager $fav_manager
enableSubscribe(bool $status)
bool $search_fragments_enabled
ilWorkspaceAccessHandler $ws_access
getCommandsDropdown(string $title, bool $for_header=false)
addCustomCommandButton(Button $button, ?Modal $triggeredModal=null)
enableLinkedPath(bool $status)
ilGlobalTemplateInterface $main_tpl
bool $lp_settings_cmd_enabled
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.
collapse()
description: > Example for rendering a collapse glyph.
enableNoticeProperties(bool $status)
Provides fluid interface to RBAC services.
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='')
enableLPSettingsCommand(bool $enabled)
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()
static getImagePath(string $image_name, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory)
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)
populateCommands(bool $for_header)
insert all commands into html code
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
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
static getListNotesJSCall(string $a_hash, string $a_update_code=null)
Get list notes js call.
ilAdvancedMDSubstitution $substitutions
expand()
description: > Example for rendering an expand glyph.
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
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
string $additional_information
__construct(Container $dic, ilPlugin $plugin)
setSeparateCommands(bool $val)
bool $info_screen_enabled
bool $title_link_disabled
link(string $caption, string $href, bool $new_viewport=false)
enableCheckbox(bool $status)
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
catch(InvalidArgumentException) if(!ilDAVActivationChecker::_isActive()) $webdav_dic
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...
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
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)