ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilObjectListGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4define ("IL_LIST_AS_TRIGGER", "trigger");
5define ("IL_LIST_FULL", "full");
6
7
24{
25 const DETAILS_MINIMAL = 10;
26 const DETAILS_SEARCH = 20 ;
27 const DETAILS_ALL = 30;
28
31 const CONTEXT_SHOP = 3;
34 const CONTEXT_SEARCH = 6;
35
39
40 var $ctrl;
46 var $cust_prop = array();
47 var $cust_commands = array();
50 var $std_cmd_only = false;
51 var $sub_item_html = array();
54
55 protected $obj_id;
56 protected $ref_id;
57 protected $type;
58 protected $sub_obj_id;
59 protected $sub_obj_type;
60
61 protected $substitutions = null;
62 protected $substitutions_enabled = false;
63
64 protected $icons_enabled = false;
65 protected $checkboxes_enabled = false;
66 protected $position_enabled = false;
67 protected $progress_enabled = false;
68 protected $item_detail_links_enabled = false;
69 protected $item_detail_links = array();
71
72 protected $search_fragments_enabled = false;
73 protected $search_fragment = '';
74 protected $path_linked = false;
75
76 protected $enabled_relevance = false;
77 protected $relevance = 0;
78
79 protected $expand_enabled = false;
80 protected $is_expanded = true;
81 protected $bold_title = false;
82
83 protected $copy_enabled = true;
84
86
87 protected $reference_ref_id = false;
88 protected $separate_commands = false;
89 protected $search_fragment_enabled = false;
90 protected $additional_information = false;
91 protected $static_link_enabled = false;
92
94 protected $shared = false;
95 protected $restrict_to_goto = false;
96
97 protected $comments_enabled = false;
98 protected $comments_settings_enabled = false;
99 protected $notes_enabled = false;
100 protected $tags_enabled = false;
101
102 protected $rating_enabled = false;
103 protected $rating_categories_enabled = false;
104 protected $rating_text = false;
105 protected $rating_ctrl_path = false;
106
107 protected $timings_enabled = true;
108 protected $force_visible_only = false;
109 protected $prevent_duplicate_commands = array();
110 protected $parent_ref_id;
111
112 static protected $cnt_notes = array();
113 static protected $cnt_tags = array();
114 static protected $tags = array();
115 static protected $comments_activation = array();
116 static protected $preload_done = false;
117
118 protected $title_link = '';
119 protected $title_link_disabled = false;
120
121 static protected $js_unique_id = 0;
122
123
124 static protected $tpl_file_name = "tpl.container_list_item.html";
125 static protected $tpl_component = "Services/Container";
126
132 {
133 global $rbacsystem, $ilCtrl, $lng, $ilias;
134
135 $this->rbacsystem = $rbacsystem;
136 $this->ilias = $ilias;
137 $this->ctrl = $ilCtrl;
138 $this->lng = $lng;
139 $this->mode = IL_LIST_FULL;
140 $this->path_enabled = false;
141
142 $this->enableComments(false);
143 $this->enableNotes(false);
144 $this->enableTags(false);
145
146 // unique js-ids
147 $this->setParentRefId((int) $_REQUEST["ref_id"]);
148
149//echo "list";
150 $this->init();
151
152 include_once('Services/LDAP/classes/class.ilLDAPRoleGroupMapping.php');
153 $this->ldap_mapping = ilLDAPRoleGroupMapping::_getInstance();
154
155 $lng->loadLanguageModule("obj");
156 }
157
158
165 function setContainerObject($container_obj)
166 {
167 $this->container_obj = $container_obj;
168 }
169
177 public function getContainerObject()
178 {
179 return $this->container_obj;
180 }
181
182
188 function init()
189 {
190 // Create static links for default command (linked title) or not
191 $this->static_link_enabled = true;
192 $this->delete_enabled = true;
193 $this->cut_enabled = true;
194 $this->subscribe_enabled = true;
195 $this->link_enabled = false;
196 $this->copy_enabled = false;
197 $this->payment_enabled = false;
198 $this->progress_enabled = false;
199 $this->notice_properties_enabled = true;
200 $this->info_screen_enabled = false;
201 $this->type = ""; // "cat", "course", ...
202 $this->gui_class_name = ""; // "ilobjcategorygui", "ilobjcoursegui", ...
203
204 // general commands array, e.g.
205 include_once('./Services/Object/classes/class.ilObjectAccess.php');
206 $this->commands = ilObjectAccess::_getCommands();
207 }
208
209 // Single get set methods
216 function enableProperties($a_status)
217 {
218 $this->properties_enabled = $a_status;
219
220 return;
221 }
229 {
231 }
238 function enablePreconditions($a_status)
239 {
240 $this->preconditions_enabled = $a_status;
241
242 return;
243 }
244
246 {
248 }
249
256 function enableNoticeProperties($a_status)
257 {
258 $this->notice_properties_enabled = $a_status;
259
260 return;
261 }
269 {
271 }
278 function enableDescription($a_status)
279 {
280 $this->description_enabled = $a_status;
281
282 return;
283 }
291 {
293 }
294
302 {
304 }
305
312 function enableSearchFragments($a_status)
313 {
314 $this->search_fragment_enabled = $a_status;
315
316 return;
317 }
318
324 public function enableLinkedPath($a_status)
325 {
326 $this->path_linked = $a_status;
327 }
328
333 public function enabledRelevance()
334 {
336 }
337
342 public function enableRelevance($a_status)
343 {
344 $this->enabled_relevance = $a_status;
345 }
346
352 public function setRelevance($a_rel)
353 {
354 $this->relevance = $a_rel;
355 }
356
362 public function getRelevance()
363 {
364 return $this->relevance;
365 }
366
372 function enableIcon($a_status)
373 {
374 $this->icons_enabled = $a_status;
375 }
376
382 function getIconStatus()
383 {
385 }
386
392 function enableCheckbox($a_status)
393 {
394 $this->checkboxes_enabled = $a_status;
395 }
396
403 {
405 }
406
412 function enableExpand($a_status)
413 {
414 $this->expand_enabled = $a_status;
415 }
416
423 {
425 }
426
427 function setExpanded($a_status)
428 {
429 $this->is_expanded = $a_status;
430 }
431
432 function isExpanded()
433 {
434 return $this->is_expanded;
435 }
442 function setPositionInputField($a_field_index, $a_position_value)
443 {
444 $this->position_enabled = true;
445 $this->position_field_index = $a_field_index;
446 $this->position_value = $a_position_value;
447 }
448
455 function enableDelete($a_status)
456 {
457 $this->delete_enabled = $a_status;
458
459 return;
460 }
468 {
469 return $this->delete_enabled;
470 }
471
478 function enableCut($a_status)
479 {
480 $this->cut_enabled = $a_status;
481
482 return;
483 }
489 function getCutStatus()
490 {
491 return $this->cut_enabled;
492 }
493
500 function enableCopy($a_status)
501 {
502 $this->copy_enabled = $a_status;
503
504 return;
505 }
511 function getCopyStatus()
512 {
513 return $this->copy_enabled;
514 }
515
522 function enableSubscribe($a_status)
523 {
524 $this->subscribe_enabled = $a_status;
525
526 return;
527 }
534 {
535 return $this->subscribe_enabled;
536 }
543 function enablePayment($a_status)
544 {
545 $this->payment_enabled = $a_status;
546
547 return;
548 }
555 {
556 return $this->payment_enabled;
557 }
564 function enableLink($a_status)
565 {
566 $this->link_enabled = $a_status;
567
568 return;
569 }
575 function getLinkStatus()
576 {
577 return $this->link_enabled;
578 }
579
587 function enablePath($a_path, $a_start_node = null)
588 {
589 $this->path_enabled = $a_path;
590 $this->path_start_node = (int)$a_start_node;
591 }
592
598 function getPathStatus()
599 {
600 return $this->path_enabled;
601 }
602
609 function enableCommands($a_status, $a_std_only = false)
610 {
611 $this->commands_enabled = $a_status;
612 $this->std_cmd_only = $a_std_only;
613 }
620 {
622 }
623
630 function enableInfoScreen($a_info_screen)
631 {
632 $this->info_screen_enabled = $a_info_screen;
633 }
634
640 function addSubItemHTML($a_html)
641 {
642 $this->sub_item_html[] = $a_html;
643 }
644
651 {
653 }
654
662 public function enableProgressInfo($a_status)
663 {
664 $this->progress_enabled = $a_status;
665 }
666
674 public function getProgressInfoStatus()
675 {
677 }
678
686 public function enableSubstitutions($a_status)
687 {
688 $this->substitutions_enabled = $a_status;
689 }
690
697 public function getSubstitutionStatus()
698 {
700 }
701
710 public function enableItemDetailLinks($a_status)
711 {
712 $this->item_detail_links_enabled = $a_status;
713 }
714
721 public function getItemDetailLinkStatus()
722 {
724 }
725
733 public function setItemDetailLinks($a_detail_links,$a_intro_txt = '')
734 {
735 $this->item_detail_links = $a_detail_links;
736 $this->item_detail_links_intro = $a_intro_txt;
737 }
738
746 public function insertItemDetailLinks()
747 {
748 if(!count($this->item_detail_links))
749 {
750 return true;
751 }
752 if(strlen($this->item_detail_links_intro))
753 {
754 $this->tpl->setCurrentBlock('item_detail_intro');
755 $this->tpl->setVariable('ITEM_DETAIL_INTRO_TXT',$this->item_detail_links_intro);
756 $this->tpl->parseCurrentBlock();
757 }
758
759 foreach($this->item_detail_links as $info)
760 {
761 $this->tpl->setCurrentBlock('item_detail_link');
762 $this->tpl->setVariable('ITEM_DETAIL_LINK_TARGET',$info['target']);
763 $this->tpl->setVariable('ITEM_DETAIL_LINK_DESC',$info['desc']);
764 $this->tpl->setVariable('ITEM_DETAIL_LINK_HREF',$info['link']);
765 $this->tpl->setVariable('ITEM_DETAIL_LINK_NAME',$info['name']);
766 $this->tpl->parseCurrentBlock();
767 }
768 $this->tpl->setCurrentBlock('item_detail_links');
769 $this->tpl->parseCurrentBlock();
770 }
771
772
773
778 function setTitle($a_title)
779 {
780 $this->title = $a_title;
781 }
782
788 function getTitle()
789 {
790 return $this->title;
791 }
792
797 function setDescription($a_description)
798 {
799 $this->description = $a_description;
800 }
801
807 function getDescription()
808 {
809 return $this->description;
810 }
811
817 public function setSearchFragment($a_text)
818 {
819 $this->search_fragment = $a_text;
820 }
821
826 public function getSearchFragment()
827 {
829 }
830
836 function setSeparateCommands($a_val)
837 {
838 $this->separate_commands = $a_val;
839 }
840
847 {
849 }
859 public function getCommandId()
860 {
861 return $this->ref_id;
862 }
863
870 {
871 $this->additional_information = $a_val;
872 }
873
880 {
882 }
883
891 public function setDetailsLevel($a_level)
892 {
893 $this->details_level = $a_level;
894 }
895
900 public function getDetailsLevel()
901 {
903 }
904
910 public function enableRepositoryTransfer($a_value)
911 {
912 $this->repository_transfer_enabled = (bool)$a_value;
913 }
914
920 public function restrictToGoto($a_value)
921 {
922 $this->restrict_to_goto = (bool)$a_value;
923 }
924
930 public function checkCommandAccess($a_permission,$a_cmd,$a_ref_id,$a_type,$a_obj_id="")
931 {
932 global $ilAccess;
933
934 // e.g: subitems should not be readable since their parent sesssion is readonly.
935 if($a_permission != 'visible' and $this->isVisibleOnlyForced())
936 {
937 return false;
938 }
939
940 $cache_prefix = null;
941 if($this->context == self::CONTEXT_WORKSPACE || $this->context == self::CONTEXT_WORKSPACE_SHARING)
942 {
943 $cache_prefix = "wsp";
944 if(!$this->ws_access)
945 {
946 include_once "Services/PersonalWorkspace/classes/class.ilWorkspaceAccessHandler.php";
947 $this->ws_access = new ilWorkspaceAccessHandler();
948 }
949 }
950
951 if (isset($this->access_cache[$a_permission]["-".$a_cmd][$cache_prefix.$a_ref_id]))
952 {
953 return $this->access_cache[$a_permission]["-".$a_cmd][$cache_prefix.$a_ref_id];
954 }
955
956 if($this->context == self::CONTEXT_REPOSITORY || $this->context == self::CONTEXT_SHOP)
957 {
958 $access = $ilAccess->checkAccess($a_permission,$a_cmd,$a_ref_id,$a_type,$a_obj_id);
959 if ($ilAccess->getPreventCachingLastResult())
960 {
961 $this->prevent_access_caching = true;
962 }
963 }
964 else
965 {
966 $access = $this->ws_access->checkAccess($a_permission,$a_cmd,$a_ref_id,$a_type);
967 }
968
969 $this->access_cache[$a_permission]["-".$a_cmd][$cache_prefix.$a_ref_id] = $access;
970 return $access;
971 }
972
982 function initItem($a_ref_id, $a_obj_id, $a_title = "", $a_description = "", $a_context = self::CONTEXT_REPOSITORY)
983 {
984 $this->offline_mode = false;
985 include_once('Modules/ScormAicc/classes/class.ilObjSAHSLearningModuleAccess.php');
986 if ($this->type == "sahs") {
987 $this->offline_mode = ilObjSAHSLearningModuleAccess::_lookupUserIsOfflineMode($a_obj_id);
988 }
989 $this->access_cache = array();
990 $this->ref_id = $a_ref_id;
991 $this->obj_id = $a_obj_id;
992 $this->context = $a_context;
993 $this->setTitle($a_title);
994 $this->setDescription($a_description);
995 #$this->description = $a_description;
996
997 // checks, whether any admin commands are included in the output
998 $this->adm_commands_included = false;
999 $this->prevent_access_caching = false;
1000
1001 }
1002
1003 public function setConditionTarget($a_ref_id, $a_obj_id, $a_target_type)
1004 {
1005 $this->condition_target = array(
1006 'ref_id' => $a_ref_id,
1007 'obj_id' => $a_obj_id,
1008 'target_type' => $a_target_type
1009 );
1010 }
1011
1012 public function resetConditionTarget()
1013 {
1014 $this->condition_target = array();
1015 }
1016
1017 public function disableTitleLink($a_status)
1018 {
1019 $this->title_link_disabled = $a_status;
1020 }
1021 // end-patch lok
1022
1023 public function setDefaultCommandParameters(array $a_params)
1024 {
1025 $this->default_command_params = $a_params;
1026 }
1027
1037 public function createDefaultCommand($command)
1038 {
1039 // begin-patch lok
1040 if($this->static_link_enabled and !$this->default_command_params)
1041 {
1042 include_once('./Services/Link/classes/class.ilLink.php');
1043 if($link = ilLink::_getStaticLink($this->ref_id,$this->type,false))
1044 {
1045 $command['link'] = $link;
1046 $command['frame'] = '_top';
1047 }
1048 }
1049 if($this->default_command_params)
1050 {
1051 $params = array();
1052 foreach($this->default_command_params as $name => $value)
1053 {
1054 $params[] = $name.'='.$value;
1055 }
1056 $params = implode('&', $params);
1057
1058 // #12370
1059 if(!stristr($command['link'], '?'))
1060 {
1061 $command['link'] .= '?'.$params;
1062 }
1063 else
1064 {
1065 $command['link'] .= '&'.$params;
1066 }
1067 }
1068 return $command;
1069 }
1070
1083 function getCommandLink($a_cmd)
1084 {
1085 if($this->context == self::CONTEXT_REPOSITORY || $this->context == self::CONTEXT_SHOP)
1086 {
1087 // BEGIN WebDAV Get mount webfolder link.
1088 require_once ('Services/WebDAV/classes/class.ilDAVActivationChecker.php');
1089 if ($a_cmd == 'mount_webfolder' && ilDAVActivationChecker::_isActive())
1090 {
1091 require_once ('Services/WebDAV/classes/class.ilDAVServer.php');
1092 $davServer = ilDAVServer::getInstance();
1093
1094 // XXX: The following is a very dirty, ugly trick.
1095 // To mount URI needs to be put into two attributes:
1096 // href and folder. This hack returns both attributes
1097 // like this: http://...mount_uri..." folder="http://...folder_uri...
1098 return $davServer->getMountURI($this->ref_id).
1099 '" folder="'.$davServer->getFolderURI($this->ref_id);
1100 }
1101 // END WebDAV Get mount webfolder link.
1102
1103 $this->ctrl->setParameterByClass("ilrepositorygui", "ref_id", $this->getCommandId());
1104 $cmd_link = $this->ctrl->getLinkTargetByClass("ilrepositorygui", $a_cmd);
1105 $this->ctrl->setParameterByClass("ilrepositorygui", "ref_id", $_GET["ref_id"]);
1106 return $cmd_link;
1107
1108 /* separate method for this line
1109 $cmd_link = $this->ctrl->getLinkTargetByClass($this->gui_class_name,
1110 $a_cmd);
1111 return $cmd_link;
1112 */
1113 }
1114 else
1115 {
1116 $this->ctrl->setParameterByClass($this->gui_class_name, "ref_id", "");
1117 $this->ctrl->setParameterByClass($this->gui_class_name, "wsp_id", $this->ref_id);
1118 return $this->ctrl->getLinkTargetByClass($this->gui_class_name, $a_cmd);
1119 }
1120 }
1121
1122
1132 function getCommandFrame($a_cmd)
1133 {
1134 // BEGIN WebDAV Get mount webfolder link.
1135 require_once ('Services/WebDAV/classes/class.ilDAVActivationChecker.php');
1136 if ($a_cmd == 'mount_webfolder' && ilDAVActivationChecker::_isActive())
1137 {
1138 return '_blank';
1139 }
1140 // begin-patch fm
1141 if($a_cmd == 'fileManagerLaunch')
1142 {
1143 return '_blank';
1144 }
1145 // end-patch fm
1146 return "";
1147 }
1148
1158 function getCommandImage($a_cmd)
1159 {
1160 return "";
1161 }
1162
1174 public function getProperties($a_item = '')
1175 {
1176 global $objDefinition;
1177
1178 $props = array();
1179 // please list alert properties first
1180 // example (use $lng->txt instead of "Status"/"Offline" strings):
1181 // $props[] = array("alert" => true, "property" => "Status", "value" => "Offline");
1182 // $props[] = array("alert" => false, "property" => ..., "value" => ...);
1183 // ...
1184
1185 // #8280: WebDav is only supported in repository
1186 if($this->context == self::CONTEXT_REPOSITORY)
1187 {
1188 // BEGIN WebDAV Display locking information
1189 require_once ('Services/WebDAV/classes/class.ilDAVActivationChecker.php');
1191 {
1192 require_once ('Services/WebDAV/classes/class.ilDAVServer.php');
1193 global $ilias, $lng;
1194
1195 // Show lock info
1196 require_once('Services/WebDAV/classes/class.ilDAVLocks.php');
1197 $davLocks = new ilDAVLocks();
1198 if ($ilias->account->getId() != ANONYMOUS_USER_ID)
1199 {
1200 $locks =& $davLocks->getLocksOnObjectObj($this->obj_id);
1201 if (count($locks) > 0)
1202 {
1203 $lockUser = new ilObjUser($locks[0]['ilias_owner']);
1204
1205 $props[] = array(
1206 "alert" => false,
1207 "property" => $lng->txt("in_use_by"),
1208 "value" => $lockUser->getLogin(),
1209 "link" => "./ilias.php?user=".$locks[0]['ilias_owner'].'&cmd=showUserProfile&cmdClass=ilpersonaldesktopgui&cmdNode=1&baseClass=ilPersonalDesktopGUI',
1210 );
1211 }
1212 }
1213 // END WebDAV Display locking information
1214
1215 if($this->getDetailsLevel() == self::DETAILS_SEARCH)
1216 {
1217 return $props;
1218 }
1219
1220 // BEGIN WebDAV Display warning for invisible Unix files and files with special characters
1221 if (preg_match('/^(\\.|\\.\\.)$/', $this->title))
1222 {
1223 $props[] = array("alert" => false, "property" => $lng->txt("filename_interoperability"),
1224 "value" => $lng->txt("filename_special_filename"),
1225 'propertyNameVisible' => false);
1226 }
1227 else if (preg_match('/^\\./', $this->title))
1228 {
1229 $props[] = array("alert" => false, "property" => $lng->txt("filename_visibility"),
1230 "value" => $lng->txt("filename_hidden_unix_file"),
1231 'propertyNameVisible' => false);
1232 }
1233 else if (preg_match('/~$/', $this->title))
1234 {
1235 $props[] = array("alert" => false, "property" => $lng->txt("filename_visibility"),
1236 "value" => $lng->txt("filename_hidden_backup_file"),
1237 'propertyNameVisible' => false);
1238 }
1239 else if (preg_match('/[\\/]/', $this->title))
1240 {
1241 $props[] = array("alert" => false, "property" => $lng->txt("filename_interoperability"),
1242 "value" => $lng->txt("filename_special_characters"),
1243 'propertyNameVisible' => false);
1244 }
1245 else if (preg_match('/[\\\\\\/:*?"<>|]/', $this->title))
1246 {
1247 $props[] = array("alert" => false, "property" => $lng->txt("filename_interoperability"),
1248 "value" => $lng->txt("filename_windows_special_characters"),
1249 'propertyNameVisible' => false);
1250 }
1251 else if (preg_match('/\\.$/', $this->title))
1252 {
1253 $props[] = array("alert" => false, "property" => $lng->txt("filename_interoperability"),
1254 "value" => $lng->txt("filename_windows_empty_extension"),
1255 'propertyNameVisible' => false);
1256 }
1257 else if (preg_match('/^(\\.|\\.\\.)$/', $this->title))
1258 {
1259 $props[] = array("alert" => false, "property" => $lng->txt("filename_interoperability"),
1260 "value" => $lng->txt("filename_special_filename"),
1261 'propertyNameVisible' => false);
1262 }
1263 else if (preg_match('/#/', $this->title))
1264 {
1265 $props[] = array("alert" => false, "property" => $lng->txt("filename_interoperability"),
1266 "value" => $lng->txt("filename_windows_webdav_issue"),
1267 'propertyNameVisible' => false);
1268 }
1269 }
1270 // END WebDAV Display warning for invisible files and files with special characters
1271
1272 // BEGIN ChangeEvent: display changes.
1273 require_once('Services/Tracking/classes/class.ilChangeEvent.php');
1275 {
1276 global $ilias, $lng, $ilUser;
1277 if ($ilias->account->getId() != ANONYMOUS_USER_ID)
1278 {
1279 // Performance improvement: for container objects
1280 // we only display 'changed inside' events, for
1281 // leaf objects we only display 'object new/changed'
1282 // events
1283 $isContainer = in_array($this->type, array('cat', 'fold', 'crs', 'grp'));
1284 if($isContainer)
1285 {
1286 $state = ilChangeEvent::_lookupInsideChangeState($this->obj_id, $ilUser->getId());
1287 if($state > 0)
1288 {
1289 $props[] = array(
1290 "alert" => true,
1291 "value" => $lng->txt('state_changed_inside'),
1292 'propertyNameVisible' => false);
1293 }
1294 }
1295 /*
1296 * elseif(!$objDefinition->isAdministrationObject(ilObject::_lookupType($this->obj_id)))
1297 *
1298 * only files support write events properly
1299 */
1300 elseif($this->type == "file")
1301 {
1302 $state = ilChangeEvent::_lookupChangeState($this->obj_id, $ilUser->getId());
1303 if($state > 0)
1304 {
1305 $props[] = array(
1306 "alert" => true,
1307 "value" => $lng->txt(($state == 1) ? 'state_unread' : 'state_changed'),
1308 'propertyNameVisible' => false);
1309 }
1310 }
1311 }
1312 }
1313 // END ChangeEvent: display changes.
1314 }
1315
1316 return $props;
1317 }
1318
1322 function addCustomProperty($a_property = "", $a_value = "",
1323 $a_alert = false, $a_newline = false)
1324 {
1325 $this->cust_prop[] = array("property" => $a_property, "value" => $a_value,
1326 "alert" => $a_alert, "newline" => $a_newline);
1327 }
1328
1332 function getCustomProperties($a_prop)
1333 {
1334 if (is_array($this->cust_prop))
1335 {
1336 foreach($this->cust_prop as $prop)
1337 {
1338 $a_prop[] = $prop;
1339 }
1340 }
1341 return $a_prop;
1342 }
1343
1348 public function getAlertProperties()
1349 {
1350 $alert = array();
1351 foreach((array)$this->getProperties() as $prop)
1352 {
1353 if($prop['alert'] == true)
1354 {
1355 $alert[] = $prop;
1356 }
1357 }
1358 return $alert;
1359 }
1360
1365 {
1366 $this->notice_prop = array();
1367 if($infos = $this->ldap_mapping->getInfoStrings($this->obj_id,true))
1368 {
1369 foreach($infos as $info)
1370 {
1371 $this->notice_prop[] = array('value' => $info);
1372 }
1373 }
1374 return $this->notice_prop ? $this->notice_prop : array();
1375 }
1379 public function addCustomCommand($a_link, $a_lang_var, $a_frame = "", $onclick = "")
1380 {
1381 $this->cust_commands[] =
1382 array("link" => $a_link, "lang_var" => $a_lang_var,
1383 "frame" => $a_frame, "onclick" => $onclick);
1384 }
1385
1390 public function forceVisibleOnly($a_stat)
1391 {
1392 $this->force_visible_only = $a_stat;
1393 }
1394
1399 public function isVisibleOnlyForced()
1400 {
1402 }
1403
1427 public function getCommands()
1428 {
1429 global $ilAccess, $ilBench;
1430
1431 $ref_commands = array();
1432 foreach($this->commands as $command)
1433 {
1434 $permission = $command["permission"];
1435 $cmd = $command["cmd"];
1436 $lang_var = $command["lang_var"];
1437 $txt = "";
1438 $info_object = null;
1439
1440 if (isset($command["txt"]))
1441 {
1442 $txt = $command["txt"];
1443 }
1444
1445 // BEGIN WebDAV: Suppress commands that don't make sense for anonymous users.
1446 // Suppress commands that don't make sense for anonymous users
1447 global $ilias;
1448 if ($ilias->account->getId() == ANONYMOUS_USER_ID &&
1449 $command['enable_anonymous'] == 'false')
1450 {
1451 continue;
1452 }
1453 // END WebDAV: Suppress commands that don't make sense for anonymous users.
1454
1455 // all access checking should be made within $ilAccess and
1456 // the checkAccess of the ilObj...Access classes
1457 $ilBench->start("ilObjectListGUI", "4110_get_commands_check_access");
1458 //$access = $ilAccess->checkAccess($permission, $cmd, $this->ref_id, $this->type);
1459 $access = $this->checkCommandAccess($permission,$cmd,$this->ref_id,$this->type);
1460 $ilBench->stop("ilObjectListGUI", "4110_get_commands_check_access");
1461
1462 if ($access)
1463 {
1464 $cmd_link = $this->getCommandLink($command["cmd"]);
1465 $cmd_frame = $this->getCommandFrame($command["cmd"]);
1466 $cmd_image = $this->getCommandImage($command["cmd"]);
1467 $access_granted = true;
1468 }
1469 else
1470 {
1471 $access_granted = false;
1472 $info_object = $ilAccess->getInfo();
1473 }
1474
1475 if (!isset($command["default"]))
1476 {
1477 $command["default"] = "";
1478 }
1479 $ref_commands[] = array(
1480 "permission" => $permission,
1481 "cmd" => $cmd,
1482 "link" => $cmd_link,
1483 "frame" => $cmd_frame,
1484 "lang_var" => $lang_var,
1485 "txt" => $txt,
1486 "granted" => $access_granted,
1487 "access_info" => $info_object,
1488 "img" => $cmd_image,
1489 "default" => $command["default"]
1490 );
1491 }
1492
1493 return $ref_commands;
1494 }
1495
1496 // BEGIN WebDAV: Visualize object state in its icon.
1504 public function getIconImageType()
1505 {
1506 if ($this->type == "sahs" && $this->offline_mode) {
1507 return $this->type . "_offline";
1508 }
1509 return $this->type;
1510 }
1511 // END WebDAV: Visualize object state in its icon.
1512
1520 public function insertTitle()
1521 {
1522 if($this->restrict_to_goto)
1523 {
1524 $this->default_command = array("frame" => "",
1525 "link" => $this->buildGotoLink());
1526 }
1527 // begin-patch lok
1528 if (
1529 !$this->default_command ||
1530 (!$this->getCommandsStatus() && !$this->restrict_to_goto) ||
1531 $this->title_link_disabled
1532 )
1533 // end-patch lok
1534 {
1535 $this->tpl->setCurrentBlock("item_title");
1536 $this->tpl->setVariable("TXT_TITLE", $this->getTitle());
1537 $this->tpl->parseCurrentBlock();
1538 }
1539 else
1540 {
1541 $this->default_command['link'] = $this->modifyTitleLink($this->default_command['link']);
1542
1543 $this->default_command["link"] =
1544 $this->modifySAHSlaunch($this->default_command["link"],$this->default_command["frame"]);
1545
1546 if ($this->default_command["frame"] != "")
1547 {
1548 $this->tpl->setCurrentBlock("title_linked_frame");
1549 $this->tpl->setVariable("TARGET_TITLE_LINKED", $this->default_command["frame"]);
1550 $this->tpl->parseCurrentBlock();
1551 }
1552
1553 // workaround for repository frameset
1554 #var_dump("<pre>",$this->default_command['link'],"</pre>");
1555 $this->default_command["link"] =
1556 $this->appendRepositoryFrameParameter($this->default_command["link"]);
1557
1558 #var_dump("<pre>",$this->default_command['link'],"</pre>");
1559
1560
1561 // the default command is linked with the title
1562 $this->tpl->setCurrentBlock("item_title_linked");
1563 $this->tpl->setVariable("TXT_TITLE_LINKED", $this->getTitle());
1564 $this->tpl->setVariable("HREF_TITLE_LINKED", $this->default_command["link"]);
1565
1566 // has preview?
1567 include_once("./Services/Preview/classes/class.ilPreview.php");
1568 if (ilPreview::hasPreview($this->obj_id, $this->type))
1569 {
1570 include_once("./Services/Preview/classes/class.ilPreviewGUI.php");
1571
1572 // get context for access checks later on
1573 $access_handler = null;
1574 $context;
1575 switch ($this->context)
1576 {
1580 include_once("./Services/PersonalWorkspace/classes/class.ilWorkspaceAccessHandler.php");
1581 $access_handler = new ilWorkspaceAccessHandler();
1582 break;
1583
1584 default:
1585 global $ilAccess;
1587 $access_handler = $ilAccess;
1588 break;
1589 }
1590
1591 $preview = new ilPreviewGUI($this->ref_id, $context, $this->obj_id, $access_handler);
1592 $preview_status = ilPreview::lookupRenderStatus($this->obj_id);
1593 $preview_status_class = "";
1594 $preview_text_topic = "preview_show";
1595 if ($preview_status == ilPreview::RENDER_STATUS_NONE)
1596 {
1597 $preview_status_class = "ilPreviewStatusNone";
1598 $preview_text_topic = "preview_none";
1599 }
1600 $this->tpl->setCurrentBlock("item_title_linked");
1601 $this->tpl->setVariable("PREVIEW_STATUS_CLASS", $preview_status_class);
1602 $this->tpl->setVariable("SRC_PREVIEW_ICON", ilUtil::getImagePath("preview.png", "Services/Preview"));
1603 $this->tpl->setVariable("TXT_PREVIEW", $this->lng->txt($preview_text_topic));
1604 $this->tpl->setVariable("SCRIPT_PREVIEW_CLICK", $preview->getJSCall($this->getUniqueItemId(true)));
1605 $this->tpl->parseCurrentBlock();
1606 }
1607
1608 $this->tpl->parseCurrentBlock();
1609 }
1610
1611 if ($this->bold_title == true)
1612 {
1613 $this->tpl->touchBlock('bold_title_start');
1614 $this->tpl->touchBlock('bold_title_end');
1615 }
1616 }
1617
1618 protected function buildGotoLink()
1619 {
1620 switch($this->context)
1621 {
1623 include_once "Services/PersonalWorkspace/classes/class.ilWorkspaceAccessHandler.php";
1624 return ilWorkspaceAccessHandler::getGotoLink($this->ref_id, $this->obj_id);
1625
1626 default:
1627 // not implemented yet
1628 break;
1629 }
1630 }
1631
1638 public function insertSubstitutions()
1639 {
1640 $fields_shown = false;
1641 foreach($this->substitutions->getParsedSubstitutions($this->ref_id,$this->obj_id) as $data)
1642 {
1643 if($data['bold'])
1644 {
1645 $data['name'] = '<strong>'.$data['name'].'</strong>';
1646 $data['value'] = '<strong>'.$data['value'].'</strong>';
1647 }
1648 $this->tpl->touchBlock("std_prop");
1649 $this->tpl->setCurrentBlock('item_property');
1650 if($data['show_field'])
1651 {
1652 $this->tpl->setVariable('TXT_PROP',$data['name']);
1653 }
1654 $this->tpl->setVariable('VAL_PROP',$data['value']);
1655 $this->tpl->parseCurrentBlock();
1656
1657 if($data['newline'])
1658 {
1659 $this->tpl->touchBlock('newline_prop');
1660 }
1661 $fields_shown = false;
1662
1663 }
1664 if($fields_shown)
1665 {
1666 $this->tpl->touchBlock('newline_prop');
1667 }
1668 }
1669
1670
1679 {
1680 if($this->getSubstitutionStatus())
1681 {
1682 $this->insertSubstitutions();
1683 if(!$this->substitutions->isDescriptionEnabled())
1684 {
1685 return true;
1686 }
1687 }
1688
1689 // see bug #16519
1690 $d = $this->getDescription();
1691 $d = strip_tags($d, "<b>");
1692 $this->tpl->setCurrentBlock("item_description");
1693 $this->tpl->setVariable("TXT_DESC", $d);
1694 $this->tpl->parseCurrentBlock();
1695 }
1696
1701 public function insertSearchFragment()
1702 {
1703 if(strlen($this->getSearchFragment()))
1704 {
1705 $this->tpl->setCurrentBlock('search_fragment');
1706 $this->tpl->setVariable('TXT_SEARCH_FRAGMENT',$this->getSearchFragment().' ...');
1707 $this->tpl->parseCurrentBlock();
1708 }
1709 }
1710
1716 public function insertRelevance()
1717 {
1718 global $lng;
1719
1720 if(!$this->enabledRelevance() or !(int) $this->getRelevance())
1721 {
1722 return false;
1723 }
1724
1725 include_once "Services/UIComponent/ProgressBar/classes/class.ilProgressBar.php";
1727 $pbar->setCurrent($this->getRelevance());
1728
1729 $this->tpl->setCurrentBlock('relevance');
1730 $this->tpl->setVariable('REL_PBAR', $pbar->render());
1731 $this->tpl->parseCurrentBlock();
1732 }
1733
1739 function setMode($a_mode)
1740 {
1741 $this->mode = $a_mode;
1742 }
1743
1749 function getMode()
1750 {
1751 return $this->mode;
1752 }
1753
1757 function setConditionDepth($a_depth)
1758 {
1759 $this->condition_depth = $a_depth;
1760 }
1761
1769 function isMode($a_mode)
1770 {
1771 if ($a_mode == $this->mode)
1772 {
1773 return true;
1774 }
1775 else
1776 {
1777 return false;
1778 }
1779 }
1780
1786 function insertProperties($a_item = '')
1787 {
1788 global $ilAccess, $lng, $ilUser;
1789
1790 $props = $this->getProperties($a_item);
1791 $props = $this->getCustomProperties($props);
1792
1793 if($this->context != self::CONTEXT_WORKSPACE && $this->context != self::CONTEXT_WORKSPACE_SHARING)
1794 {
1795 // add learning progress custom property
1796 include_once "Services/Tracking/classes/class.ilLPStatus.php";
1797 $lp = ilLPStatus::getListGUIStatus($this->obj_id);
1798 if($lp)
1799 {
1800 $props[] = array("alert" => false,
1801 "property" => $lng->txt("learning_progress"),
1802 "value" => $lp,
1803 "newline" => true);
1804 }
1805
1806 // add no item access note in public section
1807 // for items that are visible but not readable
1808 if ($this->ilias->account->getId() == ANONYMOUS_USER_ID)
1809 {
1810 if (!$ilAccess->checkAccess("read", "", $this->ref_id, $this->type, $this->obj_id))
1811 {
1812 $props[] = array("alert" => true,
1813 "value" => $lng->txt("no_access_item_public"),
1814 "newline" => true);
1815 }
1816 }
1817 }
1818
1819 // reference objects have translated ids, revert to originals
1820 $note_ref_id = $this->ref_id;
1821 $note_obj_id = $this->obj_id;
1822 if($this->reference_ref_id)
1823 {
1824 $note_ref_id = $this->reference_ref_id;
1825 $note_obj_id = $this->reference_obj_id;
1826 }
1827
1828 $redraw_js = "il.Object.redrawListItem(".$note_ref_id.");";
1829
1830 // add common properties (comments, notes, tags)
1831 if ((self::$cnt_notes[$note_obj_id][IL_NOTE_PRIVATE] > 0 ||
1832 self::$cnt_notes[$note_obj_id][IL_NOTE_PUBLIC] > 0 ||
1833 self::$cnt_tags[$note_obj_id] > 0 ||
1834 is_array(self::$tags[$note_obj_id])) &&
1835 ($ilUser->getId() != ANONYMOUS_USER_ID))
1836 {
1837 include_once("./Services/Notes/classes/class.ilNoteGUI.php");
1838 include_once("./Services/Tagging/classes/class.ilTaggingGUI.php");
1839
1840 $nl = true;
1841 if ($this->isCommentsActivated($this->type, $this->ref_id, $this->obj_id, false, false)
1842 && self::$cnt_notes[$note_obj_id][IL_NOTE_PUBLIC] > 0)
1843 {
1844 $props[] = array("alert" => false,
1845 "property" => $lng->txt("notes_comments"),
1846 "value" => "<a href='#' onclick=\"return ".
1847 ilNoteGUI::getListCommentsJSCall($this->ajax_hash, $redraw_js)."\">".
1848 self::$cnt_notes[$note_obj_id][IL_NOTE_PUBLIC]."</a>",
1849 "newline" => $nl);
1850 $nl = false;
1851 }
1852
1853 if ($this->notes_enabled && self::$cnt_notes[$note_obj_id][IL_NOTE_PRIVATE] > 0)
1854 {
1855 $props[] = array("alert" => false,
1856 "property" => $lng->txt("notes"),
1857 "value" => "<a href='#' onclick=\"return ".
1858 ilNoteGUI::getListNotesJSCall($this->ajax_hash, $redraw_js)."\">".
1859 self::$cnt_notes[$note_obj_id][IL_NOTE_PRIVATE]."</a>",
1860 "newline" => $nl);
1861 $nl = false;
1862 }
1863 if ($this->tags_enabled &&
1864 (self::$cnt_tags[$note_obj_id] > 0 ||
1865 is_array(self::$tags[$note_obj_id])))
1866 {
1867 $tags_set = new ilSetting("tags");
1868 if ($tags_set->get("enable"))
1869 {
1870 $tags_url = ilTaggingGUI::getListTagsJSCall($this->ajax_hash, $redraw_js);
1871
1872 // list object tags
1873 if(is_array(self::$tags[$note_obj_id]))
1874 {
1875 $tags_tmp = array();
1876 foreach(self::$tags[$note_obj_id] as $tag => $is_tag_owner)
1877 {
1878 if($is_tag_owner)
1879 {
1880 $tags_tmp[] = "<a class=\"ilTag ilTagRelHigh\" href='#' onclick=\"return ".
1881 $tags_url."\">".$tag."</a>";
1882 }
1883 else
1884 {
1885 $tags_tmp[] = "<span class=\"ilTag ilTagRelMiddle\">".$tag."</span>";
1886 }
1887 }
1888 $tags_value = implode(" ", $tags_tmp);
1889 $nl = true;
1890 $prop_text = "";
1891 }
1892 // tags counter
1893 else
1894 {
1895 $tags_value = "<a href='#' onclick=\"return ".$tags_url."\">".
1896 self::$cnt_tags[$note_obj_id]."</a>";
1897 $prop_text = $lng->txt("tagging_tags");
1898 }
1899 $props[] = array("alert" => false,
1900 "property" => $prop_text,
1901 "value" => $tags_value,
1902 "newline" => $nl);
1903 $nl = false;
1904 }
1905 }
1906 }
1907
1908 $cnt = 1;
1909 if (is_array($props) && count($props) > 0)
1910 {
1911 foreach($props as $prop)
1912 {
1913 // BEGIN WebDAV: Display a separator between properties.
1914 if ($cnt > 1)
1915 {
1916 $this->tpl->touchBlock("separator_prop");
1917 }
1918 // END WebDAV: Display a separator between properties.
1919
1920 if ($prop["alert"] == true)
1921 {
1922 $this->tpl->touchBlock("alert_prop");
1923 }
1924 else
1925 {
1926 $this->tpl->touchBlock("std_prop");
1927 }
1928 if ($prop["newline"] == true && $cnt > 1)
1929 {
1930 $this->tpl->touchBlock("newline_prop");
1931 }
1932 //BEGIN WebDAV: Support hidden property names.
1933 if (isset($prop["property"]) && $prop['propertyNameVisible'] !== false && $prop["property"] != "")
1934 //END WebDAV: Support hidden property names.
1935 {
1936 $this->tpl->setCurrentBlock("prop_name");
1937 $this->tpl->setVariable("TXT_PROP", $prop["property"]);
1938 $this->tpl->parseCurrentBlock();
1939 }
1940 $this->tpl->setCurrentBlock("item_property");
1941 //BEGIN WebDAV: Support links in property values.
1942 if ($prop['link'])
1943 {
1944 $this->tpl->setVariable("LINK_PROP", $prop['link']);
1945 $this->tpl->setVariable("LINK_VAL_PROP", $prop["value"]);
1946 }
1947 else
1948 {
1949 $this->tpl->setVariable("VAL_PROP", $prop["value"]);
1950 }
1951 //END WebDAV: Support links in property values.
1952 $this->tpl->parseCurrentBlock();
1953
1954 $cnt++;
1955 }
1956 $this->tpl->setCurrentBlock("item_properties");
1957 $this->tpl->parseCurrentBlock();
1958 }
1959 }
1960
1962 {
1963 $this->getNoticeProperties();
1964 foreach($this->notice_prop as $property)
1965 {
1966 $this->tpl->setCurrentBlock('notice_item');
1967 $this->tpl->setVariable('NOTICE_ITEM_VALUE',$property['value']);
1968 $this->tpl->parseCurrentBlock();
1969 }
1970 $this->tpl->setCurrentBlock('notice_property');
1971 $this->tpl->parseCurrentBlock();
1972 }
1973
1974
1980 function insertPayment()
1981 {
1982 global $ilAccess,$ilObjDataCache,$ilUser;
1983
1984 if(IS_PAYMENT_ENABLED && $this->payment_enabled)
1985 {
1986 include_once './Services/Payment/classes/class.ilPaymentObject.php';
1987 include_once './Services/Payment/classes/class.ilPaymentBookings.php';
1988
1989 if(ilPaymentobject::_requiresPurchaseToAccess($this->ref_id))
1990 {
1992 {
1993 // get additional information about order_date and duration
1994
1995 $order_infos = array();
1997
1998 if(count($order_infos) > 0)
1999 {
2000 global $lng;
2001 $pay_lang = $lng;
2002 $pay_lang->loadLanguageModule('payment');
2003 $alert = true;
2004 $a_newline = true;
2005 $a_property = $pay_lang->txt('object_purchased_date');
2006 $a_value = ilDatePresentation::formatDate(new ilDateTime($order_infos["order_date"],IL_CAL_UNIX));
2007
2008 $this->addCustomProperty($a_property, $a_value, $alert, $a_newline);
2009
2010 $alert = true;
2011 $a_newline = true;
2012 $a_property = $this->lng->txt('object_duration');
2013 if($order_infos['duration'] == 0)
2014 $a_value = $pay_lang->txt('unlimited_duration');
2015 else
2016 $a_value = $order_infos['duration'] .' '.$this->lng->txt('months');
2017 $this->addCustomProperty($a_property, $a_value, $alert, $a_newline);
2018 }
2019
2020 // check for extension prices
2021 if(ilPaymentObject::_hasExtensions($this->ref_id))
2022 {
2023 $has_extension_prices = true;
2024 $this->insertPaymentCommand($has_extension_prices);
2025 }
2026
2027 }
2028 else
2029 {
2030 // only relevant and needed for the shop content page
2031
2032 $this->ctpl = new ilTemplate("tpl.container_list_item_commands.html", true, true,
2033 "Services/Container", "DEFAULT", false, true);
2034 $this->ctpl->setCurrentBlock('payment');
2035 $this->ctpl->setVariable('PAYMENT_TYPE_IMG', ilUtil::getImagePath('icon_pays.svg'));
2036 $this->ctpl->setVariable('PAYMENT_ALT_IMG', $this->lng->txt('payment_system') . ': ' . $this->lng->txt('payment_buyable'));
2037 $this->ctpl->parseCurrentBlock();
2038
2039 $this->insertPaymentCommand();
2040 }
2041 }
2042 }
2043 }
2044
2045 protected function insertPaymentCommand($has_extension_prices = false)
2046 {
2047 $commands = $this->getCommands($this->ref_id, $this->obj_id);
2048 foreach($commands as $command)
2049 {
2050 if($command['default'] === true)
2051 {
2052 $command = $this->createDefaultCommand($command);
2053// if(is_null($command['link']) )
2054// {
2055 switch($this->type)
2056 {
2057 case 'sahs':
2058 $command['link'] = 'ilias.php?baseClass=ilSAHSPresentationGUI&ref_id='.$this->ref_id;
2059 break;
2060
2061 case 'lm':
2062 $command['link'] = 'ilias.php?baseClass=ilLMPresentationGUI&ref_id='.$this->ref_id;
2063 break;
2064 case 'exc':
2065 default:
2066 $command['link'] = 'ilias.php?baseClass=ilShopController&cmdClass=ilshoppurchasegui&ref_id='.$this->ref_id;
2067 break;
2068 }
2069// }
2070
2072 if(strpos($command['link'], '_'.$type.'_') !== false)
2073 {
2074 $demo_link = str_replace('_'.$type.'_', '_'.$type.'purchasetypedemo_', $command['link']);
2075 $buy_link = str_replace('_'.$type.'_', '_'.$type.'purchasetypebuy_', $command['link']);
2076 }
2077 else
2078 {
2079 $demo_link = $command['link'].(strpos($command['link'], '?') === false ? '?' : '&').'purchasetype=demo';
2080 $buy_link = $command['link'].(strpos($command['link'], '?') === false ? '?' : '&').'purchasetype=buy';
2081 }
2082
2083 $this->current_selection_list->addItem($this->lng->txt('payment_demo'), "", $demo_link, $a_img, $this->lng->txt('payment_demo'), $command['frame']);
2084 if($has_extension_prices == true)
2085 {
2086 $this->current_selection_list->addItem($this->lng->txt('buy_extension'), "", $buy_link, $a_img, $this->lng->txt('buy_extension'), $command['frame']);
2087 }
2088 else
2089 $this->current_selection_list->addItem($this->lng->txt('buy'), "", $buy_link, $a_img, $this->lng->txt('buy'), $command['frame']);
2090
2091 }
2092 }
2093 }
2094
2095 protected function parseConditions($toggle_id,$conditions,$obligatory = true)
2096 {
2097 global $ilAccess, $lng, $objDefinition,$tree;
2098
2099 $num_required = ilConditionHandler::calculateRequiredTriggers($this->ref_id, $this->obj_id);
2100 $num_optional_required =
2101 $num_required - count($conditions) + count(ilConditionHandler::getOptionalConditionsOfTarget($this->ref_id, $this->obj_id));
2102
2103 // Check if all conditions are fullfilled
2104 $visible_conditions = array();
2105 $passed_optional = 0;
2106 foreach($conditions as $condition)
2107 {
2108 if($obligatory and !$condition['obligatory'])
2109 {
2110 continue;
2111 }
2112 if(!$obligatory and $condition['obligatory'])
2113 {
2114 continue;
2115 }
2116
2117 if($tree->isDeleted($condition['trigger_ref_id']))
2118 {
2119 continue;
2120 }
2121
2122 include_once 'Services/Container/classes/class.ilMemberViewSettings.php';
2123 $ok = ilConditionHandler::_checkCondition($condition['id']) and
2124 !ilMemberViewSettings::getInstance()->isActive();
2125
2126 if(!$ok)
2127 {
2128 $visible_conditions[] = $condition['id'];
2129 }
2130
2131 if(!$obligatory and $ok)
2132 {
2133 ++$passed_optional;
2134 // optional passed
2135 if($passed_optional >= $num_optional_required)
2136 {
2137 return true;
2138 }
2139 }
2140 }
2141
2142 foreach($conditions as $condition)
2143 {
2144 if(!in_array($condition['id'], $visible_conditions))
2145 {
2146 continue;
2147 }
2148
2149 include_once './Services/AccessControl/classes/class.ilConditionHandlerGUI.php';
2150 $cond_txt = ilConditionHandlerGUI::translateOperator($condition['trigger_obj_id'],$condition['operator']).' '.$condition['value'];
2151
2152 // display trigger item
2153 $class = $objDefinition->getClassName($condition["trigger_type"]);
2154 $location = $objDefinition->getLocation($condition["trigger_type"]);
2155 if ($class == "" && $location == "")
2156 {
2157 continue;
2158 }
2159 $missing_cond_exist = true;
2160
2161 $full_class = "ilObj".$class."ListGUI";
2162 include_once($location."/class.".$full_class.".php");
2163 $item_list_gui = new $full_class($this);
2164 $item_list_gui->setMode(IL_LIST_AS_TRIGGER);
2165 $item_list_gui->enablePath(false);
2166 $item_list_gui->enableIcon(true);
2167 $item_list_gui->setConditionDepth($this->condition_depth + 1);
2168 $item_list_gui->setParentRefId($this->getUniqueItemId()); // yes we can
2169 $item_list_gui->addCustomProperty($this->lng->txt("precondition_required_itemlist"), $cond_txt, false, true);
2170
2171 $item_list_gui->enableCommands($this->commands_enabled, $this->std_cmd_only);
2172 $item_list_gui->enableProperties($this->properties_enabled);
2173
2174 $trigger_html = $item_list_gui->getListItemHTML($condition['trigger_ref_id'],
2175 $condition['trigger_obj_id'], ilObject::_lookupTitle($condition["trigger_obj_id"]),
2176 "");
2177 $this->tpl->setCurrentBlock("precondition");
2178 if ($trigger_html == "")
2179 {
2180 $trigger_html = $this->lng->txt("precondition_not_accessible");
2181 }
2182 $this->tpl->setVariable("TXT_CONDITION", trim($cond_txt));
2183 $this->tpl->setVariable("TRIGGER_ITEM", $trigger_html);
2184 $this->tpl->parseCurrentBlock();
2185 }
2186
2187 if ($missing_cond_exist and $obligatory)
2188 {
2189 $this->tpl->setCurrentBlock("preconditions");
2190 $this->tpl->setVariable("CONDITION_TOGGLE_ID", "_obl_".$toggle_id);
2191 $this->tpl->setVariable("TXT_PRECONDITIONS", $lng->txt("preconditions_obligatory_hint"));
2192 $this->tpl->parseCurrentBlock();
2193
2194 }
2195 elseif($missing_cond_exist and !$obligatory)
2196 {
2197 $this->tpl->setCurrentBlock("preconditions");
2198 $this->tpl->setVariable("CONDITION_TOGGLE_ID", "_opt_".$toggle_id);
2199 $this->tpl->setVariable("TXT_PRECONDITIONS", sprintf($lng->txt("preconditions_optional_hint"),$num_optional_required));
2200 $this->tpl->parseCurrentBlock();
2201 }
2202
2203 return !$missing_cond_exist;
2204 }
2205
2210 {
2211 global $ilAccess, $lng, $objDefinition,$tree;
2212
2213 include_once("./Services/AccessControl/classes/class.ilConditionHandler.php");
2214
2215 $missing_cond_exist = false;
2216
2217 // do not show multi level conditions (messes up layout)
2218 if ($this->condition_depth > 0)
2219 {
2220 return;
2221 }
2222
2223 // Sort by title
2224 /*
2225 foreach(ilConditionHandler::_getConditionsOfTarget($this->ref_id, $this->obj_id) as $condition)
2226 {
2227 $condition['title'] = ilObject::_lookupTitle($condition['trigger_obj_id']);
2228 }
2229 */
2230
2231 if($this->condition_target)
2232 {
2234 $this->condition_target['ref_id'],
2235 $this->condition_target['obj_id'],
2236 $this->condition_target['target_type']
2237 );
2238 }
2239 else
2240 {
2241 $conditions = ilConditionHandler::_getConditionsOfTarget($this->ref_id, $this->obj_id);
2242 }
2243
2244 if(sizeof($conditions))
2245 {
2246 for($i = 0; $i < count($conditions); $i++)
2247 {
2248 $conditions[$i]['title'] = ilObject::_lookupTitle($conditions[$i]['trigger_obj_id']);
2249 }
2250 $conditions = ilUtil::sortArray($conditions,'title','DESC');
2251
2253
2254 // Show obligatory and optional preconditions seperated
2255 $all_done_obl = $this->parseConditions(self::$js_unique_id,$conditions,true);
2256 $all_done_opt = $this->parseConditions(self::$js_unique_id,$conditions,false);
2257
2258 if(!$all_done_obl || !$all_done_opt)
2259 {
2260 $this->tpl->setCurrentBlock("preconditions_toggle");
2261 $this->tpl->setVariable("PRECONDITION_TOGGLE_INTRO", $this->lng->txt("precondition_toggle"));
2262 $this->tpl->setVariable("PRECONDITION_TOGGLE_TRIGGER", $this->lng->txt("show"));
2263 $this->tpl->setVariable("PRECONDITION_TOGGLE_ID", self::$js_unique_id);
2264 $this->tpl->setVariable("TXT_PRECONDITION_SHOW", $this->lng->txt("show"));
2265 $this->tpl->setVariable("TXT_PRECONDITION_HIDE", $this->lng->txt("hide"));
2266 $this->tpl->parseCurrentBlock();
2267 }
2268 }
2269 }
2270
2279 function insertCommand($a_href, $a_text, $a_frame = "", $a_img = "", $a_cmd = "", $a_onclick = "")
2280 {
2281 // #11099
2282 $chksum = md5($a_href.$a_text);
2283 if($a_href == "#" ||
2284 !in_array($chksum, $this->prevent_duplicate_commands))
2285 {
2286 if($a_href != "#")
2287 {
2288 $this->prevent_duplicate_commands[] = $chksum;
2289 }
2290
2291 $prevent_background_click = false;
2292 if ($a_cmd =='mount_webfolder')
2293 {
2294 $prevent_background_click = true;
2295 }
2296 $this->current_selection_list->addItem($a_text, "", $a_href, $a_img, $a_text, $a_frame,
2297 "", $prevent_background_click, $a_onclick);
2298 }
2299 }
2300
2309 {
2310 if ($this->std_cmd_only)
2311 {
2312 return;
2313 }
2314
2315 if(is_object($this->getContainerObject()) and
2317 {
2318 if($this->checkCommandAccess('delete','',$this->ref_id,$this->type))
2319 {
2320 $this->ctrl->setParameter($this->getContainerObject(),'item_ref_id',$this->getCommandId());
2321 $cmd_link = $this->ctrl->getLinkTarget($this->getContainerObject(), "delete");
2322 $this->insertCommand($cmd_link, $this->lng->txt("delete"));
2323 $this->adm_commands_included = true;
2324 return true;
2325 }
2326 return false;
2327 }
2328
2329 if($this->checkCommandAccess('delete','',$this->ref_id,$this->type))
2330 {
2331 $this->ctrl->setParameter($this->container_obj, "ref_id",
2332 $this->container_obj->object->getRefId());
2333 $this->ctrl->setParameter($this->container_obj, "item_ref_id", $this->getCommandId());
2334 $cmd_link = $this->ctrl->getLinkTarget($this->container_obj, "delete");
2335 $this->insertCommand($cmd_link, $this->lng->txt("delete"), "",
2336 "");
2337 $this->adm_commands_included = true;
2338 }
2339 }
2340
2349 {
2350 global $objDefinition;
2351
2352 if ($this->std_cmd_only)
2353 {
2354 return;
2355 }
2356
2357 // #17307
2358 if(!$this->checkCommandAccess('delete','',$this->ref_id,$this->type) or
2359 !$objDefinition->allowLink($this->type))
2360 {
2361 return false;
2362 }
2363
2364 // BEGIN PATCH Lucene search
2365
2366 if(is_object($this->getContainerObject()) and
2368 {
2369 $this->ctrl->setParameter($this->getContainerObject(),'item_ref_id',$this->getCommandId());
2370 $cmd_link = $this->ctrl->getLinkTarget($this->getContainerObject(), "link");
2371 $this->insertCommand($cmd_link, $this->lng->txt("link"));
2372 $this->adm_commands_included = true;
2373 return true;
2374 }
2375 // END PATCH Lucene Search
2376
2377 // if the permission is changed here, it has
2378 // also to be changed in ilContainerGUI, admin command check
2379 $this->ctrl->setParameter($this->container_obj, "ref_id",
2380 $this->container_obj->object->getRefId());
2381 $this->ctrl->setParameter($this->container_obj, "item_ref_id", $this->getCommandId());
2382 $cmd_link = $this->ctrl->getLinkTarget($this->container_obj, "link");
2383 $this->insertCommand($cmd_link, $this->lng->txt("link"), "",
2384 "");
2385 $this->adm_commands_included = true;
2386 return true;
2387 }
2388
2395 function insertCutCommand($a_to_repository = false)
2396 {
2397 global $ilAccess;
2398
2399 if ($this->std_cmd_only)
2400 {
2401 return;
2402 }
2403 // BEGIN PATCH Lucene search
2404 if(is_object($this->getContainerObject()) and
2406 {
2407 if($this->checkCommandAccess('delete','',$this->ref_id,$this->type))
2408 {
2409 $this->ctrl->setParameter($this->getContainerObject(),'item_ref_id',$this->getCommandId());
2410 $cmd_link = $this->ctrl->getLinkTarget($this->getContainerObject(), "cut");
2411 $this->insertCommand($cmd_link, $this->lng->txt("move"));
2412 $this->adm_commands_included = true;
2413 return true;
2414 }
2415 return false;
2416 }
2417 // END PATCH Lucene Search
2418
2419 // if the permission is changed here, it has
2420 // also to be changed in ilContainerContentGUI, determineAdminCommands
2421 if($this->checkCommandAccess('delete','',$this->ref_id,$this->type) &&
2422 $this->container_obj->object)
2423 {
2424 $this->ctrl->setParameter($this->container_obj, "ref_id",
2425 $this->container_obj->object->getRefId());
2426 $this->ctrl->setParameter($this->container_obj, "item_ref_id", $this->getCommandId());
2427
2428 if(!$a_to_repository)
2429 {
2430 $cmd_link = $this->ctrl->getLinkTarget($this->container_obj, "cut");
2431 $this->insertCommand($cmd_link, $this->lng->txt("move"), "",
2432 "");
2433 }
2434 else
2435 {
2436 $cmd_link = $this->ctrl->getLinkTarget($this->container_obj, "cut_for_repository");
2437 $this->insertCommand($cmd_link, $this->lng->txt("wsp_move_to_repository"), "",
2438 "");
2439 }
2440
2441 $this->adm_commands_included = true;
2442 }
2443 }
2444
2450 public function insertCopyCommand($a_to_repository = false)
2451 {
2452 global $objDefinition;
2453
2454 if($this->std_cmd_only)
2455 {
2456 return;
2457 }
2458
2459 if($this->checkCommandAccess('copy', 'copy', $this->ref_id, $this->type) &&
2460 $objDefinition->allowCopy($this->type))
2461 {
2462 if($this->context != self::CONTEXT_WORKSPACE && $this->context != self::CONTEXT_WORKSPACE_SHARING)
2463 {
2464 $this->ctrl->setParameterByClass('ilobjectcopygui','source_id',$this->getCommandId());
2465 $cmd_copy = $this->ctrl->getLinkTargetByClass('ilobjectcopygui','initTargetSelection');
2466 $this->insertCommand($cmd_copy, $this->lng->txt('copy'));
2467 }
2468 else
2469 {
2470 $this->ctrl->setParameter($this->container_obj, "ref_id",
2471 $this->container_obj->object->getRefId());
2472 $this->ctrl->setParameter($this->container_obj, "item_ref_id", $this->getCommandId());
2473
2474 if(!$a_to_repository)
2475 {
2476 $cmd_copy = $this->ctrl->getLinkTarget($this->container_obj, 'copy');
2477 $this->insertCommand($cmd_copy, $this->lng->txt('copy'));
2478 }
2479 else
2480 {
2481 $cmd_copy = $this->ctrl->getLinkTarget($this->container_obj, 'copy_to_repository');
2482 $this->insertCommand($cmd_copy, $this->lng->txt('wsp_copy_to_repository'));
2483 }
2484 }
2485
2486 $this->adm_commands_included = true;
2487 }
2488 return;
2489 }
2490
2491
2496 {
2497 global $ilAccess, $objDefinition;
2498
2499 if ($this->std_cmd_only)
2500 {
2501 return;
2502 }
2503
2504 if(!$objDefinition->isContainer(ilObject::_lookupType($this->obj_id)))
2505 {
2506 return false;
2507 }
2508
2509 if(is_object($this->getContainerObject()) and
2511 isset($_SESSION['clipboard']))
2512 {
2513 $this->ctrl->setParameter($this->getContainerObject(),'item_ref_id',$this->getCommandId());
2514 $cmd_link = $this->ctrl->getLinkTarget($this->getContainerObject(), "paste");
2515 $this->insertCommand($cmd_link, $this->lng->txt("paste"));
2516 $this->adm_commands_included = true;
2517 return true;
2518 }
2519 return false;
2520 }
2521
2530 {
2531 global $ilSetting, $ilUser;
2532
2533 if ($this->std_cmd_only)
2534 {
2535 return;
2536 }
2537
2538 if((int)$ilSetting->get('disable_my_offers'))
2539 {
2540 return;
2541 }
2542
2544
2545 if ($ilUser->getId() != ANONYMOUS_USER_ID)
2546 {
2547 // BEGIN WebDAV: Lock/Unlock objects
2548 /* This code section is temporarily commented out.
2549 I will reactivate it at a later point, when I get the
2550 the backend working properly. - Werner Randelshofer 2008-04-17
2551 if (is_object($this->container_obj) && $this->rbacsystem->checkAccess("write", $this->ref_id))
2552 {
2553 require_once 'Services/WebDAV/classes/class.ilDAVServer.php';
2554 if (ilDAVServer::_isActive() && ilDAVServer::_isActionsVisible())
2555 {
2556 $this->ctrl->setParameter($this->container_obj, "ref_id",
2557 $this->container_obj->object->getRefId());
2558 $this->ctrl->setParameter($this->container_obj, "type", $this->type);
2559 $this->ctrl->setParameter($this->container_obj, "item_ref_id", $this->ref_id);
2560 $cmd_link = $this->ctrl->getLinkTarget($this->container_obj, "lock");
2561 $this->insertCommand($cmd_link, $this->lng->txt("lock"));
2562
2563 $this->ctrl->setParameter($this->container_obj, "ref_id",
2564 $this->container_obj->object->getRefId());
2565 $this->ctrl->setParameter($this->container_obj, "type", $this->type);
2566 $this->ctrl->setParameter($this->container_obj, "item_ref_id", $this->ref_id);
2567 $cmd_link = $this->ctrl->getLinkTarget($this->container_obj, "unlock");
2568 $this->insertCommand($cmd_link, $this->lng->txt("unlock"));
2569 }
2570 }
2571 */
2572 // END WebDAV: Lock/Unlock objects
2573
2574 // #17467 - add ref_id to link (in repository only!)
2575 if(is_object($this->container_obj) &&
2576 !($this->container_obj instanceof ilAdministrationCommandHandling) &&
2577 is_object($this->container_obj->object))
2578 {
2579 $this->ctrl->setParameter($this->container_obj, "ref_id", $this->container_obj->object->getRefId());
2580 }
2581
2582 if (!$ilUser->isDesktopItem($this->getCommandId(), $type))
2583 {
2584 // Pass type and object ID to ilAccess to improve performance
2585 global $ilAccess;
2586 if ($this->checkCommandAccess("read", "", $this->ref_id, $this->type, $this->obj_id))
2587 {
2588 if($this->getContainerObject() instanceof ilDesktopItemHandling)
2589 {
2590 $this->ctrl->setParameter($this->container_obj, "type", $type);
2591 $this->ctrl->setParameter($this->container_obj, "item_ref_id", $this->getCommandId());
2592 $cmd_link = $this->ctrl->getLinkTarget($this->container_obj, "addToDesk");
2593 $this->insertCommand($cmd_link, $this->lng->txt("to_desktop"), "",
2594 "");
2595 }
2596 }
2597 }
2598 else
2599 {
2600 if ($this->getContainerObject() instanceof ilDesktopItemHandling)
2601 {
2602 $this->ctrl->setParameter($this->container_obj, "type", $type);
2603 $this->ctrl->setParameter($this->container_obj, "item_ref_id", $this->getCommandId());
2604 $cmd_link = $this->ctrl->getLinkTarget($this->container_obj, "removeFromDesk");
2605 $this->insertCommand($cmd_link, $this->lng->txt("unsubscribe"), "",
2606 "");
2607 }
2608 }
2609 }
2610 }
2611
2616 {
2617 if ($this->std_cmd_only)
2618 {
2619 return;
2620 }
2621 $cmd_link = $this->getCommandLink("infoScreen");
2622 $cmd_frame = $this->getCommandFrame("infoScreen");
2623 $this->insertCommand($cmd_link, $this->lng->txt("info_short"), $cmd_frame,
2624 ilUtil::getImagePath("icon_info.svg"));
2625 }
2626
2633 function insertCommonSocialCommands($a_header_actions = false)
2634 {
2635 global $ilSetting, $lng, $ilUser, $tpl;
2636
2637 if ($this->std_cmd_only ||
2638 ($ilUser->getId() == ANONYMOUS_USER_ID))
2639 {
2640 return;
2641 }
2642 $lng->loadLanguageModule("notes");
2643 $lng->loadLanguageModule("tagging");
2644 $cmd_link = $this->getCommandLink("infoScreen")."#notes_top";
2645 $cmd_tag_link = $this->getCommandLink("infoScreen");
2646 $cmd_frame = $this->getCommandFrame("infoScreen");
2647 include_once("./Services/Notes/classes/class.ilNoteGUI.php");
2648
2649 // reference objects have translated ids, revert to originals
2650 $note_ref_id = $this->ref_id;
2651 if($this->reference_ref_id)
2652 {
2653 $note_ref_id = $this->reference_ref_id;
2654 }
2655
2656 $js_updater = $a_header_actions
2657 ? "il.Object.redrawActionHeader();"
2658 : "il.Object.redrawListItem(".$note_ref_id.")";
2659
2660 $comments_enabled = $this->isCommentsActivated($this->type, $this->ref_id, $this->obj_id, $a_header_actions, true);
2662 {
2663 $this->insertCommand("#", $this->lng->txt("notes_comments"), $cmd_frame,
2664 "", "", ilNoteGUI::getListCommentsJSCall($this->ajax_hash, $js_updater));
2665 }
2666
2667 if($this->notes_enabled)
2668 {
2669 $this->insertCommand("#", $this->lng->txt("notes"), $cmd_frame,
2670 "", "", ilNoteGUI::getListNotesJSCall($this->ajax_hash, $js_updater));
2671 }
2672
2673 if ($this->tags_enabled)
2674 {
2675 include_once("./Services/Tagging/classes/class.ilTaggingGUI.php");
2676 //$this->insertCommand($cmd_tag_link, $this->lng->txt("tagging_set_tag"), $cmd_frame);
2677 $this->insertCommand("#", $this->lng->txt("tagging_set_tag"), $cmd_frame,
2678 "", "", ilTaggingGUI::getListTagsJSCall($this->ajax_hash, $js_updater));
2679 }
2680 }
2681
2688 {
2689 if ($this->std_cmd_only || !$this->container_obj->object)
2690 {
2691 return;
2692 }
2693
2694 $parent_ref_id = $this->container_obj->object->getRefId();
2695 $parent_type = $this->container_obj->object->getType();
2696
2697 if($this->checkCommandAccess('write','',$parent_ref_id,$parent_type) ||
2698 $this->checkCommandAccess('write','',$this->ref_id,$this->type))
2699 {
2700 $this->ctrl->setParameterByClass('ilobjectactivationgui','cadh',
2701 $this->ajax_hash);
2702 $this->ctrl->setParameterByClass('ilobjectactivationgui','parent_id',
2704 $cmd_lnk = $this->ctrl->getLinkTargetByClass(array($this->gui_class_name, 'ilcommonactiondispatchergui', 'ilobjectactivationgui'),
2705 'edit');
2706
2707 $this->insertCommand($cmd_lnk, $this->lng->txt('obj_activation_list_gui'));
2708 }
2709 }
2710
2718 function insertCommands($a_use_asynch = false, $a_get_asynch_commands = false,
2719 $a_asynch_url = "", $a_header_actions = false)
2720 {
2721 global $lng, $ilUser;
2722
2723 if (!$this->getCommandsStatus())
2724 {
2725 return;
2726 }
2727
2728 include_once("Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php");
2729 $this->current_selection_list = new ilAdvancedSelectionListGUI();
2730 $this->current_selection_list->setAsynch($a_use_asynch && !$a_get_asynch_commands);
2731 $this->current_selection_list->setAsynchUrl($a_asynch_url);
2732 if ($a_header_actions)
2733 {
2734 $this->current_selection_list->setListTitle("<span class='hidden-xs'>".$lng->txt("actions")."</span>");
2735 }
2736 else
2737 {
2738 $this->current_selection_list->setListTitle("");
2739 }
2740 $this->current_selection_list->setId("act_".$this->getUniqueItemId(false));
2741 $this->current_selection_list->setSelectionHeaderClass("small");
2742 $this->current_selection_list->setItemLinkClass("xsmall");
2743 $this->current_selection_list->setLinksMode("il_ContainerItemCommand2");
2744 $this->current_selection_list->setHeaderIcon(ilAdvancedSelectionListGUI::DOWN_ARROW_DARK);
2745 $this->current_selection_list->setUseImages(false);
2746 $this->current_selection_list->setAdditionalToggleElement($this->getUniqueItemId(true), "ilContainerListItemOuterHighlight");
2747
2748 include_once 'Services/Payment/classes/class.ilPaymentObject.php';
2749
2750 $this->ctrl->setParameterByClass($this->gui_class_name, "ref_id", $this->ref_id);
2751
2752 // only standard command?
2753 $only_default = false;
2754 if ($a_use_asynch && !$a_get_asynch_commands)
2755 {
2756 $only_default = true;
2757 }
2758
2759 $this->default_command = false;
2760 $this->prevent_duplicate_commands = array();
2761
2762 // we only allow the following commands inside the header actions
2763 $valid_header_commands = array("mount_webfolder");
2764
2765 $commands = $this->getCommands($this->ref_id, $this->obj_id);
2766 foreach($commands as $command)
2767 {
2768 if($a_header_actions && !in_array($command["cmd"], $valid_header_commands))
2769 {
2770 continue;
2771 }
2772
2773 if ($command["granted"] == true )
2774 {
2775 if (!$command["default"] === true)
2776 {
2777 if (!$this->std_cmd_only && !$only_default)
2778 {
2779 // workaround for repository frameset
2780 $command["link"] =
2781 $this->appendRepositoryFrameParameter($command["link"]);
2782
2783 $cmd_link = $command["link"];
2784 $txt = ($command["lang_var"] == "")
2785 ? $command["txt"]
2786 : $this->lng->txt($command["lang_var"]);
2787 $this->insertCommand($cmd_link, $txt,
2788 $command["frame"], $command["img"], $command["cmd"]);
2789 }
2790 }
2791 else
2792 {
2793 $this->default_command = $this->createDefaultCommand($command);
2794 //$this->default_command = $command;
2795 }
2796 }
2797 elseif($command["default"] === true)
2798 {
2799 $items =& $command["access_info"];
2800 foreach ($items as $item)
2801 {
2802 if ($item["type"] == IL_NO_LICENSE)
2803 {
2804 $this->addCustomProperty($this->lng->txt("license"),$item["text"],true);
2805 $this->enableProperties(true);
2806 break;
2807 }
2808 }
2809 }
2810 }
2811
2812 if (!$only_default)
2813 {
2814 // custom commands
2815 if (is_array($this->cust_commands))
2816 {
2817 foreach ($this->cust_commands as $command)
2818 {
2819 $this->insertCommand($command["link"], $this->lng->txt($command["lang_var"]),
2820 $command["frame"], "", $command["cmd"], $command["onclick"]);
2821 }
2822 }
2823
2824 // info screen commmand
2825 if ($this->getInfoScreenStatus())
2826 {
2827 $this->insertInfoScreenCommand();
2828 }
2829
2830 if (!$this->isMode(IL_LIST_AS_TRIGGER))
2831 {
2832 // edit timings
2833 if($this->timings_enabled)
2834 {
2835 $this->insertTimingsCommand();
2836 }
2837
2838 // delete
2839 if ($this->delete_enabled)
2840 {
2841 $this->insertDeleteCommand();
2842 }
2843
2844 // link
2845 if ($this->link_enabled)
2846 {
2847 $this->insertLinkCommand();
2848 }
2849
2850 // cut
2851 if ($this->cut_enabled)
2852 {
2853 $this->insertCutCommand();
2854 }
2855
2856 // copy
2857 if ($this->copy_enabled)
2858 {
2859 $this->insertCopyCommand();
2860 }
2861
2862 // cut/copy from workspace to repository
2863 if ($this->repository_transfer_enabled)
2864 {
2865 $this->insertCutCommand(true);
2866 $this->insertCopyCommand(true);
2867 }
2868
2869 // subscribe
2870 if ($this->subscribe_enabled)
2871 {
2872 $this->insertSubscribeCommand();
2873 }
2874
2875 // multi download
2876 if ($this->multi_download_enabled && $a_header_actions)
2877 {
2879 }
2880
2881 // BEGIN PATCH Lucene search
2882 if($this->cut_enabled or $this->link_enabled)
2883 {
2884 $this->insertPasteCommand();
2885 }
2886 // END PATCH Lucene Search
2887
2888 if(IS_PAYMENT_ENABLED)
2889 {
2890 $this->insertPayment();
2891 }
2892 }
2893 }
2894
2895 // common social commands (comment, notes, tags)
2896 if (!$only_default && !$this->isMode(IL_LIST_AS_TRIGGER))
2897 {
2898 $this->insertCommonSocialCommands($a_header_actions);
2899 }
2900
2901 if(!$a_header_actions)
2902 {
2903 $this->ctrl->clearParametersByClass($this->gui_class_name);
2904 }
2905
2906 // fix bug #12417
2907 // there is one case, where no action menu should be displayed:
2908 // public area, category, no info tab
2909 // todo: make this faster and remove type specific implementation if possible
2910 if ($a_use_asynch && !$a_get_asynch_commands && !$a_header_actions)
2911 {
2912 if ($ilUser->getId() == ANONYMOUS_USER_ID && $this->type == "cat")
2913 {
2914 include_once("./Services/Container/classes/class.ilContainer.php");
2915 include_once("./Services/Object/classes/class.ilObjectServiceSettingsGUI.php");
2917 $this->obj_id,
2919 true))
2920 {
2921 return;
2922 }
2923 }
2924 }
2925
2926 if ($a_use_asynch && $a_get_asynch_commands)
2927 {
2928 return $this->current_selection_list->getHTML(true);
2929 }
2930
2931 return $this->current_selection_list->getHTML();
2932 }
2933
2939 function enableComments($a_value, $a_enable_comments_settings = true)
2940 {
2941 global $ilSetting;
2942
2943 // global switch
2944 if($ilSetting->get("disable_comments"))
2945 {
2946 $a_value = false;
2947 }
2948
2949 $this->comments_enabled = (bool)$a_value;
2950 $this->comments_settings_enabled = (bool)$a_enable_comments_settings;
2951 }
2952
2958 function enableNotes($a_value)
2959 {
2960 global $ilSetting;
2961
2962 // global switch
2963 if($ilSetting->get("disable_notes"))
2964 {
2965 $a_value = false;
2966 }
2967
2968 $this->notes_enabled = (bool)$a_value;
2969 }
2970
2976 function enableTags($a_value)
2977 {
2978 $tags_set = new ilSetting("tags");
2979 if (!$tags_set->get("enable"))
2980 {
2981 $a_value = false;
2982 }
2983 $this->tags_enabled = (bool)$a_value;
2984 }
2985
2994 function enableRating($a_value, $a_text = null, $a_categories = false, array $a_ctrl_path = null)
2995 {
2996 $this->rating_enabled = (bool)$a_value;
2997
2998 if($this->rating_enabled)
2999 {
3000 $this->rating_categories_enabled = (bool)$a_categories;
3001 $this->rating_text = $a_text;
3002 $this->rating_ctrl_path = $a_ctrl_path;
3003 }
3004 }
3005
3011 function enableMultiDownload($a_value)
3012 {
3013 $folder_set = new ilSetting("fold");
3014 if (!$folder_set->get("enable_multi_download"))
3015 {
3016 $a_value = false;
3017 }
3018 $this->multi_download_enabled = (bool)$a_value;
3019 }
3020
3022 {
3023 global $ilAccess, $objDefinition;
3024
3025 if ($this->std_cmd_only)
3026 return;
3027
3028 if(!$objDefinition->isContainer(ilObject::_lookupType($this->obj_id)))
3029 return false;
3030
3031 if(is_object($this->getContainerObject()) &&
3032 $this->getContainerObject() instanceof ilContainerGUI)
3033 {
3034 $this->ctrl->setParameter($this->getContainerObject(), "type", "");
3035 $this->ctrl->setParameter($this->getContainerObject(), "item_ref_id", "");
3036 $this->ctrl->setParameter($this->getContainerObject(), "active_node", "");
3037 $cmd = $_GET["cmd"] == "enableMultiDownload" ? "render" : "enableMultiDownload";
3038 $cmd_link = $this->ctrl->getLinkTarget($this->getContainerObject(), $cmd);
3039 $this->insertCommand($cmd_link, $this->lng->txt("download_multiple_objects"));
3040 return true;
3041 }
3042
3043 return false;
3044 }
3045
3046 function enableDownloadCheckbox($a_ref_id, $a_value)
3047 {
3048 global $ilAccess;
3049
3050 // TODO: delegate to list object class!
3051 if (!$this->getContainerObject()->isActiveAdministrationPanel() || $_SESSION["clipboard"])
3052 {
3053 if (in_array($this->type, array("file", "fold")) &&
3054 $ilAccess->checkAccess("read", "", $a_ref_id, $this->type))
3055 {
3056 $this->download_checkbox_state = self::DOWNLOAD_CHECKBOX_ENABLED;
3057 }
3058 else
3059 {
3060 $this->download_checkbox_state = self::DOWNLOAD_CHECKBOX_DISABLED;
3061 }
3062 }
3063 else
3064 {
3065 $this->download_checkbox_state = self::DOWNLOAD_CHECKBOX_NONE;
3066 }
3067 }
3068
3070 {
3072 }
3073
3077 static function prepareJsLinks($a_redraw_url, $a_notes_url, $a_tags_url, $a_tpl = null)
3078 {
3079 global $tpl;
3080
3081 if (is_null($a_tpl))
3082 {
3083 $a_tpl = $tpl;
3084 }
3085
3086 if($a_notes_url)
3087 {
3088 include_once("./Services/Notes/classes/class.ilNoteGUI.php");
3089 ilNoteGUI::initJavascript($a_notes_url);
3090 }
3091
3092 if($a_tags_url)
3093 {
3094 include_once("./Services/Tagging/classes/class.ilTaggingGUI.php");
3095 ilTaggingGUI::initJavascript($a_tags_url);
3096 }
3097
3098 if($a_redraw_url)
3099 {
3100 $a_tpl->addOnLoadCode("il.Object.setRedrawAHUrl('".
3101 $a_redraw_url."');");
3102 }
3103 }
3104
3111 function setHeaderSubObject($a_type, $a_id)
3112 {
3113 $this->sub_obj_type = $a_type;
3114 $this->sub_obj_id = (int)$a_id;
3115 }
3116
3126 function addHeaderIcon($a_id, $a_img, $a_tooltip = null, $a_onclick = null, $a_status_text = null, $a_href = null)
3127 {
3128 $this->header_icons[$a_id] = array("img" => $a_img,
3129 "tooltip" => $a_tooltip,
3130 "onclick" => $a_onclick,
3131 "status_text" => $a_status_text,
3132 "href" => $a_href);
3133 }
3134
3140 function addHeaderIconHTML($a_id, $a_html)
3141 {
3142 $this->header_icons[$a_id] = $a_html;
3143 }
3144
3145 function setAjaxHash($a_hash)
3146 {
3147 $this->ajax_hash = $a_hash;
3148 }
3149
3156 {
3157 global $ilUser, $lng, $tpl;
3158
3159 $htpl = new ilTemplate("tpl.header_action.html", true, true, "Services/Repository");
3160
3161 $redraw_js = "il.Object.redrawActionHeader();";
3162
3163 // tags
3164 if($this->tags_enabled)
3165 {
3166 include_once("./Services/Tagging/classes/class.ilTagging.php");
3168 ilObject::_lookupType($this->obj_id), 0, "", $ilUser->getId());
3169 if (count($tags) > 0)
3170 {
3171 include_once("./Services/Tagging/classes/class.ilTaggingGUI.php");
3172 $lng->loadLanguageModule("tagging");
3173 $this->addHeaderIcon("tags",
3174 ilUtil::getImagePath("icon_tag.svg"),
3175 $lng->txt("tagging_tags").": ".count($tags),
3176 ilTaggingGUI::getListTagsJSCall($this->ajax_hash, $redraw_js),
3177 count($tags));
3178 }
3179 }
3180
3181 // notes and comments
3182 $comments_enabled = $this->isCommentsActivated($this->type, $this->ref_id, $this->obj_id, true, false);
3183 if($this->notes_enabled || $comments_enabled)
3184 {
3185 include_once("./Services/Notes/classes/class.ilNote.php");
3186 include_once("./Services/Notes/classes/class.ilNoteGUI.php");
3187 $cnt = ilNote::_countNotesAndComments($this->obj_id, $this->sub_obj_id);
3188
3189 if($this->notes_enabled && $cnt[$this->obj_id][IL_NOTE_PRIVATE] > 0)
3190 {
3191 $this->addHeaderIcon("notes",
3192 ilUtil::getImagePath("note_unlabeled.svg"),
3193 $lng->txt("private_notes").": ".$cnt[$this->obj_id][IL_NOTE_PRIVATE],
3194 ilNoteGUI::getListNotesJSCall($this->ajax_hash, $redraw_js),
3195 $cnt[$this->obj_id][IL_NOTE_PRIVATE]
3196 );
3197 }
3198
3199 if($comments_enabled && $cnt[$this->obj_id][IL_NOTE_PUBLIC] > 0)
3200 {
3201 $lng->loadLanguageModule("notes");
3202
3203 $this->addHeaderIcon("comments",
3204 ilUtil::getImagePath("comment_unlabeled.svg"),
3205 $lng->txt("notes_public_comments").": ".$cnt[$this->obj_id][IL_NOTE_PUBLIC],
3206 ilNoteGUI::getListCommentsJSCall($this->ajax_hash, $redraw_js),
3207 $cnt[$this->obj_id][IL_NOTE_PUBLIC]);
3208 }
3209 }
3210
3211 // rating
3212 if($this->rating_enabled)
3213 {
3214 include_once("./Services/Rating/classes/class.ilRatingGUI.php");
3215 $rating_gui = new ilRatingGUI();
3216 $rating_gui->enableCategories($this->rating_categories_enabled);
3217 // never rate sub objects from header action!
3218 $rating_gui->setObject($this->obj_id, $this->type);
3219 if($this->rating_text)
3220 {
3221 $rating_gui->setYourRatingText($this->rating_text);
3222 }
3223
3224 $this->ctrl->setParameterByClass("ilRatingGUI", "cadh", $this->ajax_hash);
3225 $this->ctrl->setParameterByClass("ilRatingGUI", "rnsb", true);
3226 if($this->rating_ctrl_path)
3227 {
3228 $rating_gui->setCtrlPath($this->rating_ctrl_path);
3229 $ajax_url = $this->ctrl->getLinkTargetByClass($this->rating_ctrl_path, "saveRating", "", true, false);
3230 }
3231 else
3232 {
3233 // ???
3234 $ajax_url = $this->ctrl->getLinkTargetByClass("ilRatingGUI", "saveRating", "", true, false);
3235 }
3236 $tpl->addOnLoadCode("il.Object.setRatingUrl('".$ajax_url."');");
3237
3238 $this->addHeaderIconHTML("rating",
3239 $rating_gui->getHtml(true,
3240 $this->checkCommandAccess("read", "", $this->ref_id, $this->type),
3241 "il.Object.saveRating(%rating%);"));
3242 }
3243
3244 if($this->header_icons)
3245 {
3246 include_once("./Services/UIComponent/Tooltip/classes/class.ilTooltipGUI.php");
3247
3248 $chunks = array();
3249 foreach($this->header_icons as $id => $attr)
3250 {
3251 $id = "headp_".$id;
3252
3253 if(is_array($attr))
3254 {
3255 if($attr["onclick"])
3256 {
3257 $htpl->setCurrentBlock("onclick");
3258 $htpl->setVariable("PROP_ONCLICK", $attr["onclick"]);
3259 $htpl->parseCurrentBlock();
3260 }
3261
3262 if($attr["status_text"])
3263 {
3264 $htpl->setCurrentBlock("status");
3265 $htpl->setVariable("PROP_TXT", $attr["status_text"]);
3266 $htpl->parseCurrentBlock();
3267 }
3268
3269 if(!$attr["href"])
3270 {
3271 $attr["href"] = "#";
3272 }
3273
3274 $htpl->setCurrentBlock("prop");
3275 $htpl->setVariable("PROP_ID", $id);
3276 $htpl->setVariable("IMG", ilUtil::img($attr["img"]));
3277 $htpl->setVariable("PROP_HREF", $attr["href"]);
3278 $htpl->parseCurrentBlock();
3279
3280 if($attr["tooltip"])
3281 {
3282 ilTooltipGUI::addTooltip($id, $attr["tooltip"]);
3283 }
3284 }
3285 else
3286 {
3287 $chunks[] = $attr;
3288 }
3289 }
3290
3291 if(sizeof($chunks))
3292 {
3293 $htpl->setVariable("PROP_CHUNKS",
3294 implode("&nbsp;&nbsp;&nbsp;", $chunks)."&nbsp;&nbsp;&nbsp;");
3295 }
3296 }
3297
3298 $htpl->setVariable("ACTION_DROP_DOWN",
3299 $this->insertCommands(false, false, "", true));
3300
3301 return $htpl->get();
3302 }
3303
3304
3310 {
3311 $script = substr(strrchr($_SERVER["PHP_SELF"],"/"),1);
3312
3313 // we should get rid of this nonsense with 4.4 (alex)
3314 if ((strtolower($_GET["baseClass"]) != "ilrepositorygui") &&
3315 is_int(strpos($a_link,"baseClass=ilRepositoryGUI")))
3316 {
3317 if ($this->type != "frm")
3318 {
3319 $a_link =
3320 ilUtil::appendUrlParameterString($a_link, "rep_frame=1");
3321 }
3322 }
3323
3324 return $a_link;
3325 }
3326
3327 protected function modifyTitleLink($a_default_link)
3328 {
3329 if($this->default_command_params)
3330 {
3331 $params = array();
3332 foreach($this->default_command_params as $name => $value)
3333 {
3334 $params[] = $name.'='.$value;
3335 }
3336 $params = implode('&', $params);
3337
3338
3339 // #12370
3340 if(!stristr($a_default_link, '?'))
3341 {
3342 $a_default_link = ($a_default_link.'?'.$params);
3343 }
3344 else
3345 {
3346 $a_default_link = ($a_default_link.'&'.$params);
3347 }
3348 }
3349 return $a_default_link;
3350 }
3351
3355 function modifySAHSlaunch($a_link,$wtarget)
3356 {
3357 global $ilBrowser;
3358
3359 if (strstr($a_link, 'ilSAHSPresentationGUI') && !$this->offline_mode)
3360 {
3361 include_once 'Modules/ScormAicc/classes/class.ilObjSAHSLearningModule.php';
3362 $sahs_obj = new ilObjSAHSLearningModule($this->ref_id);
3363 $om = $sahs_obj->getOpenMode();
3364 $width = $sahs_obj->getWidth();
3365 $height = $sahs_obj->getHeight();
3366 if ( ($om == 5 || $om == 1) && $width > 0 && $height > 0) $om++;
3367 if ($om != 0 && !$ilBrowser->isMobile())
3368 {
3369 $this->default_command["frame"]="";
3370 $a_link = "javascript:void(0); onclick=startSAHS('".$a_link."','".$wtarget."',".$om.",".$width.",".$height.");";
3371 }
3372 }
3373 return $a_link;
3374 }
3375
3379 function insertPath()
3380 {
3381 global $tree, $lng;
3382
3383 if($this->getPathStatus() != false)
3384 {
3385 include_once 'Services/Tree/classes/class.ilPathGUI.php';
3386 $path_gui = new ilPathGUI();
3387 $path_gui->enableTextOnly(!$this->path_linked);
3388 $path_gui->setUseImages(false);
3389
3390 $start_node = $this->path_start_node
3391 ? $this->path_start_node
3392 : ROOT_FOLDER_ID;
3393
3394 $this->tpl->setCurrentBlock("path_item");
3395 $this->tpl->setVariable('PATH_ITEM',$path_gui->getPath($start_node,$this->ref_id));
3396 $this->tpl->parseCurrentBlock();
3397
3398 $this->tpl->setCurrentBlock("path");
3399 $this->tpl->setVariable("TXT_LOCATION", $lng->txt("locator"));
3400 $this->tpl->parseCurrentBlock();
3401 return true;
3402 }
3403 }
3404
3411 public function insertProgressInfo()
3412 {
3413 return true;
3414 }
3415
3416
3421 {
3422 global $lng, $objDefinition;
3423
3424 $cnt = 0;
3425 if ($this->getCheckboxStatus())
3426 {
3427 $this->tpl->setCurrentBlock("check");
3428 $this->tpl->setVariable("VAL_ID", $this->getCommandId());
3429 $this->tpl->parseCurrentBlock();
3430 $cnt += 1;
3431 }
3432 else if ($this->getDownloadCheckboxState() != self::DOWNLOAD_CHECKBOX_NONE)
3433 {
3434 $this->tpl->setCurrentBlock("check_download");
3435 if ($this->getDownloadCheckboxState() == self::DOWNLOAD_CHECKBOX_ENABLED)
3436 $this->tpl->setVariable("VAL_ID", $this->getCommandId());
3437 else
3438 $this->tpl->setVariable("VAL_VISIBILITY", "visibility: hidden;\" disabled=\"disabled");
3439 $this->tpl->parseCurrentBlock();
3440 $cnt += 1;
3441 }
3442 elseif($this->getExpandStatus())
3443 {
3444 $this->tpl->setCurrentBlock('expand');
3445
3446 if($this->isExpanded())
3447 {
3448 $this->ctrl->setParameter($this->container_obj,'expand',-1 * $this->obj_id);
3449 $this->tpl->setVariable('EXP_HREF',$this->ctrl->getLinkTarget($this->container_obj,'',$this->getUniqueItemId(true)));
3450 $this->ctrl->clearParameters($this->container_obj);
3451 $this->tpl->setVariable('EXP_IMG',ilUtil::getImagePath('tree_exp.svg'));
3452 $this->tpl->setVariable('EXP_ALT',$this->lng->txt('collapse'));
3453 }
3454 else
3455 {
3456 $this->ctrl->setParameter($this->container_obj,'expand',$this->obj_id);
3457 $this->tpl->setVariable('EXP_HREF',$this->ctrl->getLinkTarget($this->container_obj,'',$this->getUniqueItemId(true)));
3458 $this->ctrl->clearParameters($this->container_obj);
3459 $this->tpl->setVariable('EXP_IMG',ilUtil::getImagePath('tree_col.svg'));
3460 $this->tpl->setVariable('EXP_ALT',$this->lng->txt('expand'));
3461 }
3462
3463 $this->tpl->parseCurrentBlock();
3464 $cnt += 1;
3465 }
3466
3467 if ($this->getIconStatus())
3468 {
3469 if ($cnt == 1)
3470 {
3471 $this->tpl->touchBlock("i_1"); // indent
3472 }
3473
3474 // icon link
3475 if ($this->title_link_disabled || !$this->default_command || (!$this->getCommandsStatus() && !$this->restrict_to_goto))
3476 {
3477 }
3478 else
3479 {
3480 $this->tpl->setCurrentBlock("icon_link_s");
3481
3482 if ($this->default_command["frame"] != "")
3483 {
3484 $this->tpl->setVariable("ICON_TAR", "target='".$this->default_command["frame"]."'");
3485 }
3486
3487 $this->tpl->setVariable("ICON_HREF",
3488 $this->default_command["link"]);
3489 $this->tpl->parseCurrentBlock();
3490 $this->tpl->touchBlock("icon_link_e");
3491 }
3492
3493 $this->tpl->setCurrentBlock("icon");
3494 if (!$objDefinition->isPlugin($this->getIconImageType()))
3495 {
3496 $this->tpl->setVariable("ALT_ICON", $lng->txt("icon")." ".$lng->txt("obj_".$this->getIconImageType()));
3497 }
3498 else
3499 {
3500 include_once("Services/Component/classes/class.ilPlugin.php");
3501 $this->tpl->setVariable("ALT_ICON", $lng->txt("icon")." ".
3502 ilPlugin::lookupTxt("rep_robj", $this->getIconImageType(), "obj_".$this->getIconImageType()));
3503 }
3504
3505 $this->tpl->setVariable("SRC_ICON",
3506 ilObject::_getIcon($this->obj_id, "small", $this->getIconImageType()));
3507 $this->tpl->parseCurrentBlock();
3508 $cnt += 1;
3509 }
3510
3511 $this->tpl->touchBlock("d_".$cnt); // indent main div
3512 }
3513
3518 {
3519 foreach ($this->sub_item_html as $sub_html)
3520 {
3521 $this->tpl->setCurrentBlock("subitem");
3522 $this->tpl->setVariable("SUBITEM", $sub_html);
3523 $this->tpl->parseCurrentBlock();
3524 }
3525 }
3526
3531 {
3532 if ($this->position_enabled)
3533 {
3534 $this->tpl->setCurrentBlock("position");
3535 $this->tpl->setVariable("POS_ID", $this->position_field_index);
3536 $this->tpl->setVariable("POS_VAL", $this->position_value);
3537 $this->tpl->parseCurrentBlock();
3538 }
3539 }
3540
3546 {
3547 return $this->adm_commands_included;
3548 }
3549
3554 {
3555 global $ilUser;
3556 if($this->acache->getLastAccessStatus() == "miss" &&
3557 !$this->prevent_access_caching)
3558 {
3559 $this->acache->storeEntry($ilUser->getId().":".$this->ref_id,
3560 serialize($this->access_cache), $this->ref_id);
3561 }
3562 }
3563
3578 function getListItemHTML($a_ref_id, $a_obj_id, $a_title, $a_description,
3579 $a_use_asynch = false, $a_get_asynch_commands = false, $a_asynch_url = "", $a_context = self::CONTEXT_REPOSITORY)
3580 {
3581 global $ilAccess, $ilBench, $ilUser, $ilCtrl;
3582
3583 // this variable stores wheter any admin commands
3584 // are included in the output
3585 $this->adm_commands_included = false;
3586
3587 // only for permformance exploration
3588 $type = ilObject::_lookupType($a_obj_id);
3589
3590 // initialization
3591 $ilBench->start("ilObjectListGUI", "1000_getListHTML_init$type");
3592 $this->initItem($a_ref_id, $a_obj_id, $a_title, $a_description, $a_context);
3593 $ilBench->stop("ilObjectListGUI", "1000_getListHTML_init$type");
3594
3595 // prepare ajax calls
3596 include_once "Services/Object/classes/class.ilCommonActionDispatcherGUI.php";
3597 if($a_context == self::CONTEXT_REPOSITORY)
3598 {
3600 }
3601 else
3602 {
3604 }
3605 $this->setAjaxHash(ilCommonActionDispatcherGUI::buildAjaxHash($node_type, $a_ref_id, $type, $a_obj_id));
3606
3607 if ($a_use_asynch && $a_get_asynch_commands)
3608 {
3609 return $this->insertCommands(true, true);
3610 }
3611
3612 if($this->rating_enabled)
3613 {
3614 if(ilRating::hasRatingInListGUI($this->obj_id, $this->type))
3615 {
3616 $may_rate = $this->checkCommandAccess("read", "", $this->ref_id, $this->type);
3617
3618 $rating = new ilRatingGUI();
3619 $rating->setObject($this->obj_id, $this->type);
3620/* $this->addCustomProperty(
3621 $this->lng->txt("rating_average_rating"),
3622 $rating->getListGUIProperty($this->ref_id, $may_rate, $this->ajax_hash, $this->parent_ref_id),
3623 false,
3624 true
3625 );*/
3626 $this->addCustomProperty(
3627 "",
3628 $rating->getListGUIProperty($this->ref_id, $may_rate, $this->ajax_hash, $this->parent_ref_id),
3629 false,
3630 true
3631 );
3632 }
3633 }
3634
3635 // read from cache
3636 include_once("Services/Object/classes/class.ilListItemAccessCache.php");
3637 $this->acache = new ilListItemAccessCache();
3638 $cres = $this->acache->getEntry($ilUser->getId().":".$a_ref_id);
3639 if($this->acache->getLastAccessStatus() == "hit")
3640 {
3641 $this->access_cache = unserialize($cres);
3642 }
3643 else
3644 {
3645 // write to cache
3646 $this->storeAccessCache();
3647 }
3648
3649 // visible check
3650 if (!$this->checkCommandAccess("visible", "", $a_ref_id, "", $a_obj_id))
3651 {
3652 $ilBench->stop("ilObjectListGUI", "2000_getListHTML_check_visible");
3653 $this->resetCustomData();
3654 return "";
3655 }
3656
3657 // BEGIN WEBDAV
3658 if($type=='file' AND ilObjFileAccess::_isFileHidden($a_title))
3659 {
3660 $this->resetCustomData();
3661 return "";
3662 }
3663 // END WEBDAV
3664
3665
3666 $this->tpl = new ilTemplate(static::$tpl_file_name, true, true,
3667 static::$tpl_component, "DEFAULT", false, true);
3668
3669 if ($this->getCommandsStatus() ||
3670 ($this->payment_enabled && IS_PAYMENT_ENABLED))
3671 {
3672 if (!$this->getSeparateCommands())
3673 {
3674 $this->tpl->setVariable("COMMAND_SELECTION_LIST",
3675 $this->insertCommands($a_use_asynch, $a_get_asynch_commands, $a_asynch_url));
3676 }
3677 }
3678
3679 if($this->getProgressInfoStatus())
3680 {
3681 $this->insertProgressInfo();
3682 }
3683
3684 // insert title and describtion
3685 $this->insertTitle();
3686 if (!$this->isMode(IL_LIST_AS_TRIGGER))
3687 {
3688 if ($this->getDescriptionStatus())
3689 {
3690 $this->insertDescription();
3691 }
3692 }
3693
3694 if($this->getSearchFragmentStatus())
3695 {
3696 $this->insertSearchFragment();
3697 }
3698 if($this->enabledRelevance())
3699 {
3700 $this->insertRelevance();
3701 }
3702
3703 // properties
3704 $ilBench->start("ilObjectListGUI", "6000_insert_properties$type");
3705 if ($this->getPropertiesStatus())
3706 {
3707 $this->insertProperties();
3708 }
3709 $ilBench->stop("ilObjectListGUI", "6000_insert_properties$type");
3710
3711 // notice properties
3712 $ilBench->start("ilObjectListGUI", "6500_insert_notice_properties$type");
3713 if($this->getNoticePropertiesStatus())
3714 {
3715 $this->insertNoticeProperties();
3716 }
3717 $ilBench->stop("ilObjectListGUI", "6500_insert_notice_properties$type");
3718
3719 // preconditions
3720 $ilBench->start("ilObjectListGUI", "7000_insert_preconditions");
3721 if ($this->getPreconditionsStatus())
3722 {
3723 $this->insertPreconditions();
3724 }
3725 $ilBench->stop("ilObjectListGUI", "7000_insert_preconditions");
3726
3727 // path
3728 $ilBench->start("ilObjectListGUI", "8000_insert_path");
3729 $this->insertPath();
3730 $ilBench->stop("ilObjectListGUI", "8000_insert_path");
3731
3732 $ilBench->start("ilObjectListGUI", "8500_item_detail_links");
3733 if($this->getItemDetailLinkStatus())
3734 {
3735 $this->insertItemDetailLinks();
3736 }
3737 $ilBench->stop("ilObjectListGUI", "8500_item_detail_links");
3738
3739 // icons and checkboxes
3740 $this->insertIconsAndCheckboxes();
3741
3742 // input field for position
3743 $this->insertPositionField();
3744
3745 // subitems
3746 $this->insertSubItems();
3747
3748 // file upload
3749 if ($this->isFileUploadAllowed())
3750 {
3751 $this->insertFileUpload();
3752 }
3753
3754 $this->resetCustomData();
3755
3756 $this->tpl->setVariable("DIV_CLASS",'ilContainerListItemOuter');
3757 $this->tpl->setVariable("DIV_ID", 'id = "'.$this->getUniqueItemId(true).'"');
3758 $this->tpl->setVariable("ADDITIONAL", $this->getAdditionalInformation());
3759
3760 // #11554 - make sure that internal ids are reset
3761 $this->ctrl->setParameter($this->getContainerObject(), "item_ref_id", "");
3762
3763 return $this->tpl->get();
3764 }
3765
3769 protected function resetCustomData()
3770 {
3771 // #15747
3772 $this->cust_prop = array();
3773 $this->cust_commands = array();
3774 $this->sub_item_html = array();
3775 $this->position_enabled = false;
3776 }
3777
3783 public function setParentRefId($a_ref_id)
3784 {
3785 $this->parent_ref_id = $a_ref_id;
3786 }
3787
3794 protected function getUniqueItemId($a_as_div = false)
3795 {
3796 // use correct id for references
3797 $id_ref = ($this->reference_ref_id > 0)
3798 ? $this->reference_ref_id
3799 : $this->ref_id;
3800
3801 // add unique identifier for preconditions (objects can appear twice in same container)
3802 if($this->condition_depth)
3803 {
3804 $id_ref .= "_pc".$this->condition_depth;
3805 }
3806
3807 // unique
3808 $id_ref .= "_pref_".$this->parent_ref_id;
3809
3810 if(!$a_as_div)
3811 {
3812 return $id_ref;
3813 }
3814 else
3815 {
3816 // action menu [yellow] toggle
3817 return "lg_div_".$id_ref;
3818 }
3819 }
3820
3825 {
3826 return $this->insertCommands();
3827 }
3828
3832 function isSideBlock()
3833 {
3834 return false;
3835 }
3836
3842 public function setBoldTitle($a_bold_title)
3843 {
3844 $this->bold_title = $a_bold_title;
3845
3846 }
3847
3853 public function isTitleBold()
3854 {
3855 return $this->bold_title;
3856 }
3857
3864 static function preloadCommonProperties($a_obj_ids, $a_context)
3865 {
3866 global $lng, $ilSetting, $ilUser;
3867
3868 if($a_context == self::CONTEXT_REPOSITORY)
3869 {
3870 $active_notes = !$ilSetting->get("disable_notes");
3871 $active_comments = !$ilSetting->get("disable_comments");
3872
3873 if($active_notes || $active_comments)
3874 {
3875 include_once("./Services/Notes/classes/class.ilNote.php");
3876 }
3877
3878 if($active_comments)
3879 {
3880 // needed for action
3881 self::$comments_activation = ilNote::getRepObjActivation($a_obj_ids);
3882 }
3883
3884 // properties are optional
3885 if($ilSetting->get('comments_tagging_in_lists'))
3886 {
3887 if($active_notes || $active_comments)
3888 {
3889 self::$cnt_notes = ilNote::_countNotesAndCommentsMultiple($a_obj_ids, true);
3890
3891 $lng->loadLanguageModule("notes");
3892 }
3893
3894 $tags_set = new ilSetting("tags");
3895 if($tags_set->get("enable"))
3896 {
3897 $all_users = $tags_set->get("enable_all_users");
3898
3899 include_once("./Services/Tagging/classes/class.ilTagging.php");
3900 if(!$ilSetting->get('comments_tagging_in_lists_tags'))
3901 {
3902 self::$cnt_tags = ilTagging::_countTags($a_obj_ids, $all_users);
3903 }
3904 else
3905 {
3906 $tag_user_id = null;
3907 if(!$all_users)
3908 {
3909 $tag_user_id = $ilUser->getId();
3910 }
3911 self::$tags = ilTagging::_getListTagsForObjects($a_obj_ids, $tag_user_id);
3912 }
3913
3914 $lng->loadLanguageModule("tagging");
3915 }
3916 }
3917
3918 $lng->loadLanguageModule("rating");
3919 }
3920
3921 self::$preload_done = true;
3922 }
3923
3934 protected function isCommentsActivated($a_type, $a_ref_id, $a_obj_id, $a_header_actions, $a_check_write_access = true)
3935 {
3936 if($this->comments_enabled)
3937 {
3938 if(!$this->comments_settings_enabled)
3939 {
3940 return true;
3941 }
3942 if($a_check_write_access && $this->checkCommandAccess('write','', $a_ref_id, $a_type))
3943 {
3944 return true;
3945 }
3946 // fallback to single object check if no preloaded data
3947 // only the repository does preloadCommonProperties() yet
3948 if(!$a_header_actions && self::$preload_done)
3949 {
3950 if(self::$comments_activation[$a_obj_id][$a_type])
3951 {
3952 return true;
3953 }
3954 }
3955 else
3956 {
3957 include_once("./Services/Notes/classes/class.ilNote.php");
3958 if(ilNote::commentsActivated($a_obj_id, 0, $a_type))
3959 {
3960 return true;
3961 }
3962 }
3963 }
3964 return false;
3965 }
3966
3974 public function enableTimings($a_status)
3975 {
3976 $this->timings_enabled = (bool)$a_status;
3977 }
3978
3984 public function isFileUploadAllowed()
3985 {
3986 // check if file upload allowed
3987 include_once("./Services/FileUpload/classes/class.ilFileUploadUtil.php");
3988 return ilFileUploadUtil::isUploadAllowed($this->ref_id, $this->type);
3989 }
3990
3994 public function insertFileUpload()
3995 {
3996 include_once("./Services/FileUpload/classes/class.ilFileUploadGUI.php");
3998
3999 $upload = new ilFileUploadGUI($this->getUniqueItemId(true), $this->ref_id);
4000
4001 $this->tpl->setCurrentBlock("fileupload");
4002 $this->tpl->setVariable("FILE_UPLOAD", $upload->getHTML());
4003 $this->tpl->parseCurrentBlock();
4004 }
4005}
4006
4007?>
global $tpl
Definition: ilias.php:8
$location
Definition: buildRTE.php:44
$_GET["client_id"]
$_SESSION["AccountId"]
const IL_NO_LICENSE
const IL_CAL_UNIX
const IL_NOTE_PRIVATE
Definition: class.ilNote.php:4
const IL_NOTE_PUBLIC
Definition: class.ilNote.php:5
const IL_LIST_AS_TRIGGER
const IL_LIST_FULL
User interface class for advanced drop-down selection lists.
static _lookupChangeState($obj_id, $usr_id)
Returns the change state of the object for the specified user.
static _isActive()
Returns true, if change event tracking is active.
static _lookupInsideChangeState($parent_obj_id, $usr_id)
Returns the changed state of objects which are children of the specified parent object.
static buildAjaxHash($a_node_type, $a_node_id, $a_obj_type, $a_obj_id, $a_sub_type=null, $a_sub_id=null)
Build ajax hash.
static translateOperator($a_obj_id, $a_operator)
Translate operator.
static getOptionalConditionsOfTarget($a_target_ref_id, $a_target_obj_id, $a_obj_type='')
Get optional conditions.
static calculateRequiredTriggers($a_target_ref_id, $a_target_obj_id, $a_target_obj_type='', $a_force_update=false)
calculate number of obligatory items
static _getConditionsOfTarget($a_target_ref_id, $a_target_obj_id, $a_target_type="")
get all conditions of target object
_checkCondition($a_id, $a_usr_id=0)
checks wether a single condition is fulfilled every trigger object type must implement a static metho...
Class ilContainerGUI.
_lookupContainerSetting($a_id, $a_keyword, $a_default_value=NULL)
Lookup a container setting.
static getInstance()
Get singelton iunstance.
static formatDate(ilDateTime $date)
Format a date @access public.
@classDescription Date and time handling
static initFileUpload()
Initializes the file upload and loads the needed javascripts and styles.
static isUploadAllowed($a_ref_id, $a_type="")
Determines whether files can be uploaded to the object with the specified reference id.
static _getInstance()
Get singleton instance of this class.
static getListGUIStatus($a_obj_id)
Caches (check) access information on list items.
static getInstance()
Get instance.
initJavascript($a_ajax_url, $a_type=IL_NOTE_PRIVATE)
Init javascript.
getListCommentsJSCall($a_hash, $a_update_code=null)
Get list comments js call.
getListNotesJSCall($a_hash, $a_update_code=null)
Get list notes js call.
static commentsActivated($a_rep_obj_id, $a_obj_id, $a_obj_type)
Are comments activated for object?
static _countNotesAndComments($a_rep_obj_id, $a_sub_obj_id=null)
Get all notes related to a specific object.
static _countNotesAndCommentsMultiple($a_rep_obj_ids, $a_no_sub_objs=false)
Get all notes related to multiple objcts.
static getRepObjActivation($a_rep_obj_ids)
Get activation for repository objects.
static _isFileHidden($a_file_name)
Returns true, if a file with the specified name, is usually hidden from the user.
static _lookupUserIsOfflineMode($a_obj_id)
Checks offlineMode and returns false if.
Class ilObjSCORMLearningModule.
_getCommands()
get commands
Class ilObjectListGUI.
enableDescription($a_status)
En/disable description.
getAdditionalInformation()
Get additional information.
enabledRelevance()
enabled relevance
getContainerObject()
get container object
setHeaderSubObject($a_type, $a_id)
Set sub object identifier.
getTitle()
getTitle overwritten in class.ilObjLinkResourceList.php
isTitleBold()
@access public
setBoldTitle($a_bold_title)
@access public @params boolean $a_bold_title set the item title bold
addHeaderIconHTML($a_id, $a_html)
getMode()
get output mode
insertProperties($a_item='')
insert properties
setSearchFragment($a_text)
set search fragment
setMode($a_mode)
set output mode
initItem($a_ref_id, $a_obj_id, $a_title="", $a_description="", $a_context=self::CONTEXT_REPOSITORY)
inititialize new item (is called by getItemHTML())
setConditionTarget($a_ref_id, $a_obj_id, $a_target_type)
getAlertProperties()
get all alert properties
enableLinkedPath($a_status)
Enable linked path.
storeAccessCache()
Store access cache.
modifyTitleLink($a_default_link)
adminCommandsIncluded()
returns whether any admin commands (link, delete, cut) are included in the output
insertTitle()
insert item title
setDetailsLevel($a_level)
Details level Currently used in Search which shows only limited properties of forums Currently used f...
enableDownloadCheckbox($a_ref_id, $a_value)
enableCommands($a_status, $a_std_only=false)
En/disable commands.
setDefaultCommandParameters(array $a_params)
getCommandLink($a_cmd)
Get command link url.
enableRepositoryTransfer($a_value)
Enable copy/move to repository (from personal workspace)
getCommands()
get all current commands for a specific ref id (in the permission context of the current user)
insertRelevance()
insert relevance
insertSubstitutions()
Insert substitutions.
enableProperties($a_status)
En/disable properties.
getIconImageType()
Returns the icon image type.
setSeparateCommands($a_val)
Set separate commands.
insertFileUpload()
Inserts a file upload component.
static prepareJsLinks($a_redraw_url, $a_notes_url, $a_tags_url, $a_tpl=null)
Insert js/ajax links into template
insertPreconditions()
insert all missing preconditions
isCommentsActivated($a_type, $a_ref_id, $a_obj_id, $a_header_actions, $a_check_write_access=true)
Check comments status against comments settings and context.
enableRelevance($a_status)
enable relevance
parseConditions($toggle_id, $conditions, $obligatory=true)
addCustomCommand($a_link, $a_lang_var, $a_frame="", $onclick="")
add a custom command
isMode($a_mode)
check current output mode
insertPasteCommand()
Insert paste command.
enableLink($a_status)
En/disable link.
getSearchFragmentStatus()
Show hide search result fragments.
insertPayment()
insert payment information
enableSubstitutions($a_status)
Enable substitutions.
isSideBlock()
Returns whether current item is a block in a side column or not.
isVisibleOnlyForced()
Force unreadable.
getProperties($a_item='')
Get item properties.
enableCheckbox($a_status)
En/Dis-able checkboxes.
getCommandsHTML()
Get commands HTML (must be called after get list item html)
setConditionDepth($a_depth)
set depth for precondition output (stops at level 5)
getItemDetailLinkStatus()
get item detail link status
resetCustomData()
reset properties and commands
forceVisibleOnly($a_stat)
Force visible access only.
addSubItemHTML($a_html)
Add HTML for subitem (used for sessions)
getCommandFrame($a_cmd)
Get command target frame.
getNoticeProperties()
get notice properties
enableNotes($a_value)
Toogle notes action status.
addCustomProperty($a_property="", $a_value="", $a_alert=false, $a_newline=false)
add custom property
insertTimingsCommand()
insert edit timings command
insertInfoScreenCommand()
insert info screen command
enableNoticeProperties($a_status)
En/disable notices.
enablePayment($a_status)
En/disable payment.
getUniqueItemId($a_as_div=false)
Get unique item identifier (for js-actions)
getCommandImage($a_cmd)
Get command icon image.
setParentRefId($a_ref_id)
Set current parent ref id to enable unique js-ids (sessions, etc.)
enableIcon($a_status)
En/Dis-able icons.
getSearchFragment()
get search fragment
insertSearchFragment()
Insert highlighted search fragment.
getHeaderAction()
Get header action.
insertCutCommand($a_to_repository=false)
insert cut command
createDefaultCommand($command)
Get default command link Overwritten for e.g categories,courses => they return a goto link If search ...
enableSearchFragments($a_status)
En/disable description.
enableCopy($a_status)
En/disable copy.
enableTimings($a_status)
enable timings link
addHeaderIcon($a_id, $a_img, $a_tooltip=null, $a_onclick=null, $a_status_text=null, $a_href=null)
insertItemDetailLinks()
insert item detail links
static preloadCommonProperties($a_obj_ids, $a_context)
Preload common properties.
getListItemHTML($a_ref_id, $a_obj_id, $a_title, $a_description, $a_use_asynch=false, $a_get_asynch_commands=false, $a_asynch_url="", $a_context=self::CONTEXT_REPOSITORY)
Get all item information (title, commands, description) in HTML.
enablePreconditions($a_status)
En/disable preconditions.
enableTags($a_value)
Toogle tags action status.
getDescription()
getDescription overwritten in class.ilObjLinkResourceList.php
setPositionInputField($a_field_index, $a_position_value)
Set position input field.
getSubstitutionStatus()
Get substitution status.
enableCut($a_status)
En/disable cut.
setRelevance($a_rel)
set relevance
enableMultiDownload($a_value)
Toggles whether multiple objects can be downloaded at once or not.
enableExpand($a_status)
En/Dis-able expand/collapse link.
insertProgressInfo()
insert progress info
insertDescription()
insert item description
setDescription($a_description)
enableProgressInfo($a_status)
enable progress info
insertPositionField()
Insert field for positioning.
insertSubscribeCommand()
insert subscribe command
enableSubscribe($a_status)
En/disable subscribe.
appendRepositoryFrameParameter($a_link)
workaround: all links into the repository (from outside) must tell repository to setup the frameset
getCheckboxStatus()
Are checkboxes enabled?
insertLinkCommand()
insert link command
isFileUploadAllowed()
Gets a value indicating whether file uploads to this object are allowed or not.
insertCommonSocialCommands($a_header_actions=false)
Insert common social commands (comments, notes, tagging)
setContainerObject($container_obj)
set the container object (e.g categorygui) Used for link, delete ... commands
enableRating($a_value, $a_text=null, $a_categories=false, array $a_ctrl_path=null)
Toogle rating action status.
checkCommandAccess($a_permission, $a_cmd, $a_ref_id, $a_type, $a_obj_id="")
enableItemDetailLinks($a_status)
enable item detail links E.g Direct links to chapters or pages
modifySAHSlaunch($a_link, $wtarget)
workaround: SAHS in new javavasript-created window or iframe
insertCopyCommand($a_to_repository=false)
Insert copy command.
getCustomProperties($a_prop)
get custom properties
insertSubItems()
Insert subitems.
enableComments($a_value, $a_enable_comments_settings=true)
Toogle comments action status.
getCommandId()
get command id Normally the ref id.
enableInfoScreen($a_info_screen)
En/disable path.
getProgressInfoStatus()
get progress info status
insertIconsAndCheckboxes()
Insert icons and checkboxes.
enablePath($a_path, $a_start_node=null)
En/disable path.
setAdditionalInformation($a_val)
Set additional information.
setItemDetailLinks($a_detail_links, $a_intro_txt='')
set items detail links
restrictToGoto($a_value)
Restrict all actions/links to goto.
getDetailsLevel()
Get current details level.
getIconStatus()
Are icons enabled?
getSeparateCommands()
Get separate commands.
ilObjectListGUI()
constructor
insertDeleteCommand()
insert cut command
getExpandStatus()
Is expand/collapse enabled.
insertCommands($a_use_asynch=false, $a_get_asynch_commands=false, $a_asynch_url="", $a_header_actions=false)
insert all commands into html code
getRelevance()
get relevance
enableDelete($a_status)
En/disable delete.
insertCommand($a_href, $a_text, $a_frame="", $a_img="", $a_cmd="", $a_onclick="")
insert command button
insertPaymentCommand($has_extension_prices=false)
static _lookupObjId($a_id)
static _lookupTitle($a_id)
lookup object title
static _getIcon($a_obj_id="", $a_size="big", $a_type="", $a_offline=false)
Get icon for repository item.
static _lookupType($a_id, $a_reference=false)
lookup object type
Creates a path for a start and endnode.
static _hasAccess($a_pobject_id, $a_user_id=0, $a_transaction=0)
static _lookupOrder($a_pobject_id)
static _hasExtensions($a_ref_id)
static _lookupPobjectId($a_ref_id)
static lookupTxt($a_mod_prefix, $a_pl_id, $a_lang_var)
Lookup language text.
static hasPreview($a_obj_id, $a_type="")
Determines whether the object with the specified reference id has a preview.
const RENDER_STATUS_NONE
static lookupRenderStatus($a_obj_id)
Gets the render status for the object with the specified id.
static getInstance()
Factory.
Class ilRatingGUI.
static hasRatingInListGUI($a_obj_id, $a_obj_type)
ILIAS Setting Class.
getListTagsJSCall($a_hash, $a_update_code=null)
Get tagging js call.
initJavascript($a_ajax_url)
Init javascript.
static getTagsForUserAndObject($a_obj_id, $a_obj_type, $a_sub_obj_id, $a_sub_obj_type, $a_user_id)
Get tags for a user and an object.
static _getListTagsForObjects(array $a_obj_ids, $a_user_id=null)
Get tags for given object ids.
static _countTags($a_obj_ids, $a_all_users=false)
Count all tags for repository objects.
special template class to simplify handling of ITX/PEAR
static addTooltip($a_el_id, $a_text, $a_container="", $a_my="bottom center", $a_at="top center", $a_use_htmlspecialchars=true)
Adds a tooltip to an HTML element.
static appendUrlParameterString($a_url, $a_par, $xml_style=false)
append URL parameter string ("par1=value1&par2=value2...") to given URL string
static sortArray($array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
static img($a_src, $a_alt="", $a_width="", $a_height="", $a_border=0, $a_id="", $a_class="")
Build img tag.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
Access handler for personal workspace.
static getGotoLink($a_node_id, $a_obj_id, $a_additional=null)
$txt
Definition: error.php:12
$data
$params
Definition: example_049.php:96
$info
Definition: example_052.php:80
global $ilBench
Definition: ilias.php:18
global $ilCtrl
Definition: ilias.php:18
Interface for GUI classes (PDGUI, LuceneSearchGUI...) that have to handle administration commands (cu...
Interface for gui classes (e.g ilLuceneSearchGUI) that offer add/remove to/from desktop.
redirection script todo: (a better solution should control the processing via a xml file)
global $lng
Definition: privfeed.php:40
global $ilSetting
Definition: privfeed.php:40
$cmd
Definition: sahs_server.php:35
if($_REQUEST['ilias_path']) define('ILIAS_HTTP_PATH' $_REQUEST['ilias_path']
Definition: index.php:7
if((!isset($_SERVER['DOCUMENT_ROOT'])) OR(empty($_SERVER['DOCUMENT_ROOT']))) $_SERVER['DOCUMENT_ROOT']
$preview
global $ilUser
Definition: imgupload.php:15