ILIAS  release_5-0 Revision 5.0.0-1144-gc4397b1f870
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
128 {
129 global $rbacsystem, $ilCtrl, $lng, $ilias;
130
131 $this->rbacsystem = $rbacsystem;
132 $this->ilias = $ilias;
133 $this->ctrl = $ilCtrl;
134 $this->lng = $lng;
135 $this->mode = IL_LIST_FULL;
136 $this->path_enabled = false;
137
138 $this->enableComments(false);
139 $this->enableNotes(false);
140 $this->enableTags(false);
141
142 // unique js-ids
143 $this->setParentRefId($_REQUEST["ref_id"]);
144
145//echo "list";
146 $this->init();
147
148 include_once('Services/LDAP/classes/class.ilLDAPRoleGroupMapping.php');
149 $this->ldap_mapping = ilLDAPRoleGroupMapping::_getInstance();
150
151 $lng->loadLanguageModule("obj");
152 }
153
154
161 function setContainerObject($container_obj)
162 {
163 $this->container_obj = $container_obj;
164 }
165
173 public function getContainerObject()
174 {
175 return $this->container_obj;
176 }
177
178
184 function init()
185 {
186 // Create static links for default command (linked title) or not
187 $this->static_link_enabled = true;
188 $this->delete_enabled = true;
189 $this->cut_enabled = true;
190 $this->subscribe_enabled = true;
191 $this->link_enabled = false;
192 $this->copy_enabled = false;
193 $this->payment_enabled = false;
194 $this->progress_enabled = false;
195 $this->notice_properties_enabled = true;
196 $this->info_screen_enabled = false;
197 $this->type = ""; // "cat", "course", ...
198 $this->gui_class_name = ""; // "ilobjcategorygui", "ilobjcoursegui", ...
199
200 // general commands array, e.g.
201 include_once('./Services/Object/classes/class.ilObjectAccess.php');
202 $this->commands = ilObjectAccess::_getCommands();
203 }
204
205 // Single get set methods
212 function enableProperties($a_status)
213 {
214 $this->properties_enabled = $a_status;
215
216 return;
217 }
225 {
227 }
234 function enablePreconditions($a_status)
235 {
236 $this->preconditions_enabled = $a_status;
237
238 return;
239 }
240
242 {
244 }
245
252 function enableNoticeProperties($a_status)
253 {
254 $this->notice_properties_enabled = $a_status;
255
256 return;
257 }
265 {
267 }
274 function enableDescription($a_status)
275 {
276 $this->description_enabled = $a_status;
277
278 return;
279 }
287 {
289 }
290
298 {
300 }
301
308 function enableSearchFragments($a_status)
309 {
310 $this->search_fragment_enabled = $a_status;
311
312 return;
313 }
314
320 public function enableLinkedPath($a_status)
321 {
322 $this->path_linked = $a_status;
323 }
324
329 public function enabledRelevance()
330 {
332 }
333
338 public function enableRelevance($a_status)
339 {
340 $this->enabled_relevance = $a_status;
341 }
342
348 public function setRelevance($a_rel)
349 {
350 $this->relevance = $a_rel;
351 }
352
358 public function getRelevance()
359 {
360 return $this->relevance;
361 }
362
368 function enableIcon($a_status)
369 {
370 $this->icons_enabled = $a_status;
371 }
372
378 function getIconStatus()
379 {
381 }
382
388 function enableCheckbox($a_status)
389 {
390 $this->checkboxes_enabled = $a_status;
391 }
392
399 {
401 }
402
408 function enableExpand($a_status)
409 {
410 $this->expand_enabled = $a_status;
411 }
412
419 {
421 }
422
423 function setExpanded($a_status)
424 {
425 $this->is_expanded = $a_status;
426 }
427
428 function isExpanded()
429 {
430 return $this->is_expanded;
431 }
438 function setPositionInputField($a_field_index, $a_position_value)
439 {
440 $this->position_enabled = true;
441 $this->position_field_index = $a_field_index;
442 $this->position_value = $a_position_value;
443 }
444
451 function enableDelete($a_status)
452 {
453 $this->delete_enabled = $a_status;
454
455 return;
456 }
464 {
465 return $this->delete_enabled;
466 }
467
474 function enableCut($a_status)
475 {
476 $this->cut_enabled = $a_status;
477
478 return;
479 }
485 function getCutStatus()
486 {
487 return $this->cut_enabled;
488 }
489
496 function enableCopy($a_status)
497 {
498 $this->copy_enabled = $a_status;
499
500 return;
501 }
507 function getCopyStatus()
508 {
509 return $this->copy_enabled;
510 }
511
518 function enableSubscribe($a_status)
519 {
520 $this->subscribe_enabled = $a_status;
521
522 return;
523 }
530 {
531 return $this->subscribe_enabled;
532 }
539 function enablePayment($a_status)
540 {
541 $this->payment_enabled = $a_status;
542
543 return;
544 }
551 {
552 return $this->payment_enabled;
553 }
560 function enableLink($a_status)
561 {
562 $this->link_enabled = $a_status;
563
564 return;
565 }
571 function getLinkStatus()
572 {
573 return $this->link_enabled;
574 }
575
583 function enablePath($a_path, $a_start_node = null)
584 {
585 $this->path_enabled = $a_path;
586 $this->path_start_node = (int)$a_start_node;
587 }
588
594 function getPathStatus()
595 {
596 return $this->path_enabled;
597 }
598
605 function enableCommands($a_status, $a_std_only = false)
606 {
607 $this->commands_enabled = $a_status;
608 $this->std_cmd_only = $a_std_only;
609 }
616 {
618 }
619
626 function enableInfoScreen($a_info_screen)
627 {
628 $this->info_screen_enabled = $a_info_screen;
629 }
630
636 function addSubItemHTML($a_html)
637 {
638 $this->sub_item_html[] = $a_html;
639 }
640
647 {
649 }
650
658 public function enableProgressInfo($a_status)
659 {
660 $this->progress_enabled = $a_status;
661 }
662
670 public function getProgressInfoStatus()
671 {
673 }
674
682 public function enableSubstitutions($a_status)
683 {
684 $this->substitutions_enabled = $a_status;
685 }
686
693 public function getSubstitutionStatus()
694 {
696 }
697
706 public function enableItemDetailLinks($a_status)
707 {
708 $this->item_detail_links_enabled = $a_status;
709 }
710
717 public function getItemDetailLinkStatus()
718 {
720 }
721
729 public function setItemDetailLinks($a_detail_links,$a_intro_txt = '')
730 {
731 $this->item_detail_links = $a_detail_links;
732 $this->item_detail_links_intro = $a_intro_txt;
733 }
734
742 public function insertItemDetailLinks()
743 {
744 if(!count($this->item_detail_links))
745 {
746 return true;
747 }
748 if(strlen($this->item_detail_links_intro))
749 {
750 $this->tpl->setCurrentBlock('item_detail_intro');
751 $this->tpl->setVariable('ITEM_DETAIL_INTRO_TXT',$this->item_detail_links_intro);
752 $this->tpl->parseCurrentBlock();
753 }
754
755 foreach($this->item_detail_links as $info)
756 {
757 $this->tpl->setCurrentBlock('item_detail_link');
758 $this->tpl->setVariable('ITEM_DETAIL_LINK_TARGET',$info['target']);
759 $this->tpl->setVariable('ITEM_DETAIL_LINK_DESC',$info['desc']);
760 $this->tpl->setVariable('ITEM_DETAIL_LINK_HREF',$info['link']);
761 $this->tpl->setVariable('ITEM_DETAIL_LINK_NAME',$info['name']);
762 $this->tpl->parseCurrentBlock();
763 }
764 $this->tpl->setCurrentBlock('item_detail_links');
765 $this->tpl->parseCurrentBlock();
766 }
767
768
769
774 function setTitle($a_title)
775 {
776 $this->title = $a_title;
777 }
778
784 function getTitle()
785 {
786 return $this->title;
787 }
788
793 function setDescription($a_description)
794 {
795 $this->description = $a_description;
796 }
797
803 function getDescription()
804 {
805 return $this->description;
806 }
807
813 public function setSearchFragment($a_text)
814 {
815 $this->search_fragment = $a_text;
816 }
817
822 public function getSearchFragment()
823 {
825 }
826
832 function setSeparateCommands($a_val)
833 {
834 $this->separate_commands = $a_val;
835 }
836
843 {
845 }
855 public function getCommandId()
856 {
857 return $this->ref_id;
858 }
859
866 {
867 $this->additional_information = $a_val;
868 }
869
876 {
878 }
879
887 public function setDetailsLevel($a_level)
888 {
889 $this->details_level = $a_level;
890 }
891
896 public function getDetailsLevel()
897 {
899 }
900
906 public function enableRepositoryTransfer($a_value)
907 {
908 $this->repository_transfer_enabled = (bool)$a_value;
909 }
910
916 public function restrictToGoto($a_value)
917 {
918 $this->restrict_to_goto = (bool)$a_value;
919 }
920
926 public function checkCommandAccess($a_permission,$a_cmd,$a_ref_id,$a_type,$a_obj_id="")
927 {
928 global $ilAccess;
929
930 // e.g: subitems should not be readable since their parent sesssion is readonly.
931 if($a_permission != 'visible' and $this->isVisibleOnlyForced())
932 {
933 return false;
934 }
935
936 $cache_prefix = null;
937 if($this->context == self::CONTEXT_WORKSPACE || $this->context == self::CONTEXT_WORKSPACE_SHARING)
938 {
939 $cache_prefix = "wsp";
940 if(!$this->ws_access)
941 {
942 include_once "Services/PersonalWorkspace/classes/class.ilWorkspaceAccessHandler.php";
943 $this->ws_access = new ilWorkspaceAccessHandler();
944 }
945 }
946
947 if (isset($this->access_cache[$a_permission]["-".$a_cmd][$cache_prefix.$a_ref_id]))
948 {
949 return $this->access_cache[$a_permission]["-".$a_cmd][$cache_prefix.$a_ref_id];
950 }
951
952 if($this->context == self::CONTEXT_REPOSITORY || $this->context == self::CONTEXT_SHOP)
953 {
954 $access = $ilAccess->checkAccess($a_permission,$a_cmd,$a_ref_id,$a_type,$a_obj_id);
955 if ($ilAccess->getPreventCachingLastResult())
956 {
957 $this->prevent_access_caching = true;
958 }
959 }
960 else
961 {
962 $access = $this->ws_access->checkAccess($a_permission,$a_cmd,$a_ref_id,$a_type);
963 }
964
965 $this->access_cache[$a_permission]["-".$a_cmd][$cache_prefix.$a_ref_id] = $access;
966 return $access;
967 }
968
978 function initItem($a_ref_id, $a_obj_id, $a_title = "", $a_description = "", $a_context = self::CONTEXT_REPOSITORY)
979 {
980 $this->offline_mode = false;
981 include_once('Modules/ScormAicc/classes/class.ilObjSAHSLearningModuleAccess.php');
982 if ($this->type == "sahs") {
983 $this->offline_mode = ilObjSAHSLearningModuleAccess::_lookupUserIsOfflineMode($a_obj_id);
984 }
985 $this->access_cache = array();
986 $this->ref_id = $a_ref_id;
987 $this->obj_id = $a_obj_id;
988 $this->context = $a_context;
989 $this->setTitle($a_title);
990 $this->setDescription($a_description);
991 #$this->description = $a_description;
992
993 // checks, whether any admin commands are included in the output
994 $this->adm_commands_included = false;
995 $this->prevent_access_caching = false;
996
997 }
998
999 public function setConditionTarget($a_ref_id, $a_obj_id, $a_target_type)
1000 {
1001 $this->condition_target = array(
1002 'ref_id' => $a_ref_id,
1003 'obj_id' => $a_obj_id,
1004 'target_type' => $a_target_type
1005 );
1006 }
1007
1008 public function resetConditionTarget()
1009 {
1010 $this->condition_target = array();
1011 }
1012
1013 public function disableTitleLink($a_status)
1014 {
1015 $this->title_link_disabled = $a_status;
1016 }
1017 // end-patch lok
1018
1019 public function setDefaultCommandParameters(array $a_params)
1020 {
1021 $this->default_command_params = $a_params;
1022 }
1023
1033 public function createDefaultCommand($command)
1034 {
1035 // begin-patch lok
1036 if($this->static_link_enabled and !$this->default_command_params)
1037 {
1038 include_once('./Services/Link/classes/class.ilLink.php');
1039 if($link = ilLink::_getStaticLink($this->ref_id,$this->type,false))
1040 {
1041 $command['link'] = $link;
1042 $command['frame'] = '_top';
1043 }
1044 }
1045 if($this->default_command_params)
1046 {
1047 $params = array();
1048 foreach($this->default_command_params as $name => $value)
1049 {
1050 $params[] = $name.'='.$value;
1051 }
1052 $params = implode('&', $params);
1053
1054 // #12370
1055 if(!stristr($command['link'], '?'))
1056 {
1057 $command['link'] .= '?'.$params;
1058 }
1059 else
1060 {
1061 $command['link'] .= '&'.$params;
1062 }
1063 }
1064 return $command;
1065 }
1066
1079 function getCommandLink($a_cmd)
1080 {
1081 if($this->context == self::CONTEXT_REPOSITORY || $this->context == self::CONTEXT_SHOP)
1082 {
1083 // BEGIN WebDAV Get mount webfolder link.
1084 require_once ('Services/WebDAV/classes/class.ilDAVActivationChecker.php');
1085 if ($a_cmd == 'mount_webfolder' && ilDAVActivationChecker::_isActive())
1086 {
1087 require_once ('Services/WebDAV/classes/class.ilDAVServer.php');
1088 $davServer = ilDAVServer::getInstance();
1089
1090 // XXX: The following is a very dirty, ugly trick.
1091 // To mount URI needs to be put into two attributes:
1092 // href and folder. This hack returns both attributes
1093 // like this: http://...mount_uri..." folder="http://...folder_uri...
1094 return $davServer->getMountURI($this->ref_id).
1095 '" folder="'.$davServer->getFolderURI($this->ref_id);
1096 }
1097 // END WebDAV Get mount webfolder link.
1098
1099 $this->ctrl->setParameterByClass("ilrepositorygui", "ref_id", $this->getCommandId());
1100 $cmd_link = $this->ctrl->getLinkTargetByClass("ilrepositorygui", $a_cmd);
1101 $this->ctrl->setParameterByClass("ilrepositorygui", "ref_id", $_GET["ref_id"]);
1102 return $cmd_link;
1103
1104 /* separate method for this line
1105 $cmd_link = $this->ctrl->getLinkTargetByClass($this->gui_class_name,
1106 $a_cmd);
1107 return $cmd_link;
1108 */
1109 }
1110 else
1111 {
1112 $this->ctrl->setParameterByClass($this->gui_class_name, "ref_id", "");
1113 $this->ctrl->setParameterByClass($this->gui_class_name, "wsp_id", $this->ref_id);
1114 return $this->ctrl->getLinkTargetByClass($this->gui_class_name, $a_cmd);
1115 }
1116 }
1117
1118
1128 function getCommandFrame($a_cmd)
1129 {
1130 // BEGIN WebDAV Get mount webfolder link.
1131 require_once ('Services/WebDAV/classes/class.ilDAVActivationChecker.php');
1132 if ($a_cmd == 'mount_webfolder' && ilDAVActivationChecker::_isActive())
1133 {
1134 return '_blank';
1135 }
1136 // begin-patch fm
1137 if($a_cmd == 'fileManagerLaunch')
1138 {
1139 return '_blank';
1140 }
1141 // end-patch fm
1142 return "";
1143 }
1144
1154 function getCommandImage($a_cmd)
1155 {
1156 return "";
1157 }
1158
1170 public function getProperties($a_item = '')
1171 {
1172 global $objDefinition;
1173
1174 $props = array();
1175 // please list alert properties first
1176 // example (use $lng->txt instead of "Status"/"Offline" strings):
1177 // $props[] = array("alert" => true, "property" => "Status", "value" => "Offline");
1178 // $props[] = array("alert" => false, "property" => ..., "value" => ...);
1179 // ...
1180
1181 // #8280: WebDav is only supported in repository
1182 if($this->context == self::CONTEXT_REPOSITORY)
1183 {
1184 // BEGIN WebDAV Display locking information
1185 require_once ('Services/WebDAV/classes/class.ilDAVActivationChecker.php');
1187 {
1188 require_once ('Services/WebDAV/classes/class.ilDAVServer.php');
1189 global $ilias, $lng;
1190
1191 // Show lock info
1192 require_once('Services/WebDAV/classes/class.ilDAVLocks.php');
1193 $davLocks = new ilDAVLocks();
1194 if ($ilias->account->getId() != ANONYMOUS_USER_ID)
1195 {
1196 $locks =& $davLocks->getLocksOnObjectObj($this->obj_id);
1197 if (count($locks) > 0)
1198 {
1199 $lockUser = new ilObjUser($locks[0]['ilias_owner']);
1200
1201 $props[] = array(
1202 "alert" => false,
1203 "property" => $lng->txt("in_use_by"),
1204 "value" => $lockUser->getLogin(),
1205 "link" => "./ilias.php?user=".$locks[0]['ilias_owner'].'&cmd=showUserProfile&cmdClass=ilpersonaldesktopgui&cmdNode=1&baseClass=ilPersonalDesktopGUI',
1206 );
1207 }
1208 }
1209 // END WebDAV Display locking information
1210
1211 if($this->getDetailsLevel() == self::DETAILS_SEARCH)
1212 {
1213 return $props;
1214 }
1215
1216 // BEGIN WebDAV Display warning for invisible Unix files and files with special characters
1217 if (preg_match('/^(\\.|\\.\\.)$/', $this->title))
1218 {
1219 $props[] = array("alert" => false, "property" => $lng->txt("filename_interoperability"),
1220 "value" => $lng->txt("filename_special_filename"),
1221 'propertyNameVisible' => false);
1222 }
1223 else if (preg_match('/^\\./', $this->title))
1224 {
1225 $props[] = array("alert" => false, "property" => $lng->txt("filename_visibility"),
1226 "value" => $lng->txt("filename_hidden_unix_file"),
1227 'propertyNameVisible' => false);
1228 }
1229 else if (preg_match('/~$/', $this->title))
1230 {
1231 $props[] = array("alert" => false, "property" => $lng->txt("filename_visibility"),
1232 "value" => $lng->txt("filename_hidden_backup_file"),
1233 'propertyNameVisible' => false);
1234 }
1235 else if (preg_match('/[\\/]/', $this->title))
1236 {
1237 $props[] = array("alert" => false, "property" => $lng->txt("filename_interoperability"),
1238 "value" => $lng->txt("filename_special_characters"),
1239 'propertyNameVisible' => false);
1240 }
1241 else if (preg_match('/[\\\\\\/:*?"<>|]/', $this->title))
1242 {
1243 $props[] = array("alert" => false, "property" => $lng->txt("filename_interoperability"),
1244 "value" => $lng->txt("filename_windows_special_characters"),
1245 'propertyNameVisible' => false);
1246 }
1247 else if (preg_match('/\\.$/', $this->title))
1248 {
1249 $props[] = array("alert" => false, "property" => $lng->txt("filename_interoperability"),
1250 "value" => $lng->txt("filename_windows_empty_extension"),
1251 'propertyNameVisible' => false);
1252 }
1253 else if (preg_match('/^(\\.|\\.\\.)$/', $this->title))
1254 {
1255 $props[] = array("alert" => false, "property" => $lng->txt("filename_interoperability"),
1256 "value" => $lng->txt("filename_special_filename"),
1257 'propertyNameVisible' => false);
1258 }
1259 else if (preg_match('/#/', $this->title))
1260 {
1261 $props[] = array("alert" => false, "property" => $lng->txt("filename_interoperability"),
1262 "value" => $lng->txt("filename_windows_webdav_issue"),
1263 'propertyNameVisible' => false);
1264 }
1265 }
1266 // END WebDAV Display warning for invisible files and files with special characters
1267
1268 // BEGIN ChangeEvent: display changes.
1269 require_once('Services/Tracking/classes/class.ilChangeEvent.php');
1271 {
1272 global $ilias, $lng, $ilUser;
1273 if ($ilias->account->getId() != ANONYMOUS_USER_ID)
1274 {
1275 // Performance improvement: for container objects
1276 // we only display 'changed inside' events, for
1277 // leaf objects we only display 'object new/changed'
1278 // events
1279 $isContainer = in_array($this->type, array('cat', 'fold', 'crs', 'grp'));
1280 if($isContainer)
1281 {
1282 $state = ilChangeEvent::_lookupInsideChangeState($this->obj_id, $ilUser->getId());
1283 if($state > 0)
1284 {
1285 $props[] = array(
1286 "alert" => true,
1287 "value" => $lng->txt('state_changed_inside'),
1288 'propertyNameVisible' => false);
1289 }
1290 }
1291 /*
1292 * elseif(!$objDefinition->isAdministrationObject(ilObject::_lookupType($this->obj_id)))
1293 *
1294 * only files support write events properly
1295 */
1296 elseif($this->type == "file")
1297 {
1298 $state = ilChangeEvent::_lookupChangeState($this->obj_id, $ilUser->getId());
1299 if($state > 0)
1300 {
1301 $props[] = array(
1302 "alert" => true,
1303 "value" => $lng->txt(($state == 1) ? 'state_unread' : 'state_changed'),
1304 'propertyNameVisible' => false);
1305 }
1306 }
1307 }
1308 }
1309 // END ChangeEvent: display changes.
1310 }
1311
1312 return $props;
1313 }
1314
1318 function addCustomProperty($a_property = "", $a_value = "",
1319 $a_alert = false, $a_newline = false)
1320 {
1321 $this->cust_prop[] = array("property" => $a_property, "value" => $a_value,
1322 "alert" => $a_alert, "newline" => $a_newline);
1323 }
1324
1328 function getCustomProperties($a_prop)
1329 {
1330 if (is_array($this->cust_prop))
1331 {
1332 foreach($this->cust_prop as $prop)
1333 {
1334 $a_prop[] = $prop;
1335 }
1336 }
1337 return $a_prop;
1338 }
1339
1344 public function getAlertProperties()
1345 {
1346 $alert = array();
1347 foreach((array)$this->getProperties() as $prop)
1348 {
1349 if($prop['alert'] == true)
1350 {
1351 $alert[] = $prop;
1352 }
1353 }
1354 return $alert;
1355 }
1356
1361 {
1362 $this->notice_prop = array();
1363 if($infos = $this->ldap_mapping->getInfoStrings($this->obj_id,true))
1364 {
1365 foreach($infos as $info)
1366 {
1367 $this->notice_prop[] = array('value' => $info);
1368 }
1369 }
1370 return $this->notice_prop ? $this->notice_prop : array();
1371 }
1375 public function addCustomCommand($a_link, $a_lang_var, $a_frame = "", $onclick = "")
1376 {
1377 $this->cust_commands[] =
1378 array("link" => $a_link, "lang_var" => $a_lang_var,
1379 "frame" => $a_frame, "onclick" => $onclick);
1380 }
1381
1386 public function forceVisibleOnly($a_stat)
1387 {
1388 $this->force_visible_only = $a_stat;
1389 }
1390
1395 public function isVisibleOnlyForced()
1396 {
1398 }
1399
1423 public function getCommands()
1424 {
1425 global $ilAccess, $ilBench;
1426
1427 $ref_commands = array();
1428 foreach($this->commands as $command)
1429 {
1430 $permission = $command["permission"];
1431 $cmd = $command["cmd"];
1432 $lang_var = $command["lang_var"];
1433 $txt = "";
1434 $info_object = null;
1435
1436 if (isset($command["txt"]))
1437 {
1438 $txt = $command["txt"];
1439 }
1440
1441 // BEGIN WebDAV: Suppress commands that don't make sense for anonymous users.
1442 // Suppress commands that don't make sense for anonymous users
1443 global $ilias;
1444 if ($ilias->account->getId() == ANONYMOUS_USER_ID &&
1445 $command['enable_anonymous'] == 'false')
1446 {
1447 continue;
1448 }
1449 // END WebDAV: Suppress commands that don't make sense for anonymous users.
1450
1451 // all access checking should be made within $ilAccess and
1452 // the checkAccess of the ilObj...Access classes
1453 $ilBench->start("ilObjectListGUI", "4110_get_commands_check_access");
1454 //$access = $ilAccess->checkAccess($permission, $cmd, $this->ref_id, $this->type);
1455 $access = $this->checkCommandAccess($permission,$cmd,$this->ref_id,$this->type);
1456 $ilBench->stop("ilObjectListGUI", "4110_get_commands_check_access");
1457
1458 if ($access)
1459 {
1460 $cmd_link = $this->getCommandLink($command["cmd"]);
1461 $cmd_frame = $this->getCommandFrame($command["cmd"]);
1462 $cmd_image = $this->getCommandImage($command["cmd"]);
1463 $access_granted = true;
1464 }
1465 else
1466 {
1467 $access_granted = false;
1468 $info_object = $ilAccess->getInfo();
1469 }
1470
1471 if (!isset($command["default"]))
1472 {
1473 $command["default"] = "";
1474 }
1475 $ref_commands[] = array(
1476 "permission" => $permission,
1477 "cmd" => $cmd,
1478 "link" => $cmd_link,
1479 "frame" => $cmd_frame,
1480 "lang_var" => $lang_var,
1481 "txt" => $txt,
1482 "granted" => $access_granted,
1483 "access_info" => $info_object,
1484 "img" => $cmd_image,
1485 "default" => $command["default"]
1486 );
1487 }
1488
1489 return $ref_commands;
1490 }
1491
1492 // BEGIN WebDAV: Visualize object state in its icon.
1500 public function getIconImageType()
1501 {
1502 if ($this->type == "sahs" && $this->offline_mode) {
1503 return $this->type . "_offline";
1504 }
1505 return $this->type;
1506 }
1507 // END WebDAV: Visualize object state in its icon.
1508
1516 public function insertTitle()
1517 {
1518 if($this->restrict_to_goto)
1519 {
1520 $this->default_command = array("frame" => "",
1521 "link" => $this->buildGotoLink());
1522 }
1523 // begin-patch lok
1524 if (
1525 !$this->default_command ||
1526 (!$this->getCommandsStatus() && !$this->restrict_to_goto) ||
1527 $this->title_link_disabled
1528 )
1529 // end-patch lok
1530 {
1531 $this->tpl->setCurrentBlock("item_title");
1532 $this->tpl->setVariable("TXT_TITLE", $this->getTitle());
1533 $this->tpl->parseCurrentBlock();
1534 }
1535 else
1536 {
1537 $this->default_command['link'] = $this->modifyTitleLink($this->default_command['link']);
1538
1539 $this->default_command["link"] =
1540 $this->modifySAHSlaunch($this->default_command["link"],$this->default_command["frame"]);
1541
1542 if ($this->default_command["frame"] != "")
1543 {
1544 $this->tpl->setCurrentBlock("title_linked_frame");
1545 $this->tpl->setVariable("TARGET_TITLE_LINKED", $this->default_command["frame"]);
1546 $this->tpl->parseCurrentBlock();
1547 }
1548
1549 // workaround for repository frameset
1550 #var_dump("<pre>",$this->default_command['link'],"</pre>");
1551 $this->default_command["link"] =
1552 $this->appendRepositoryFrameParameter($this->default_command["link"]);
1553
1554 #var_dump("<pre>",$this->default_command['link'],"</pre>");
1555
1556
1557 // the default command is linked with the title
1558 $this->tpl->setCurrentBlock("item_title_linked");
1559 $this->tpl->setVariable("TXT_TITLE_LINKED", $this->getTitle());
1560 $this->tpl->setVariable("HREF_TITLE_LINKED", $this->default_command["link"]);
1561
1562 // has preview?
1563 include_once("./Services/Preview/classes/class.ilPreview.php");
1564 if (ilPreview::hasPreview($this->obj_id, $this->type))
1565 {
1566 include_once("./Services/Preview/classes/class.ilPreviewGUI.php");
1567
1568 // get context for access checks later on
1569 $access_handler = null;
1570 $context;
1571 switch ($this->context)
1572 {
1576 include_once("./Services/PersonalWorkspace/classes/class.ilWorkspaceAccessHandler.php");
1577 $access_handler = new ilWorkspaceAccessHandler();
1578 break;
1579
1580 default:
1581 global $ilAccess;
1583 $access_handler = $ilAccess;
1584 break;
1585 }
1586
1587 $preview = new ilPreviewGUI($this->ref_id, $context, $this->obj_id, $access_handler);
1588 $preview_status = ilPreview::lookupRenderStatus($this->obj_id);
1589 $preview_status_class = "";
1590 $preview_text_topic = "preview_show";
1591 if ($preview_status == ilPreview::RENDER_STATUS_NONE)
1592 {
1593 $preview_status_class = "ilPreviewStatusNone";
1594 $preview_text_topic = "preview_none";
1595 }
1596 $this->tpl->setCurrentBlock("item_title_linked");
1597 $this->tpl->setVariable("PREVIEW_STATUS_CLASS", $preview_status_class);
1598 $this->tpl->setVariable("SRC_PREVIEW_ICON", ilUtil::getImagePath("preview.png", "Services/Preview"));
1599 $this->tpl->setVariable("TXT_PREVIEW", $this->lng->txt($preview_text_topic));
1600 $this->tpl->setVariable("SCRIPT_PREVIEW_CLICK", $preview->getJSCall($this->getUniqueItemId(true)));
1601 $this->tpl->parseCurrentBlock();
1602 }
1603
1604 $this->tpl->parseCurrentBlock();
1605 }
1606
1607 if ($this->bold_title == true)
1608 {
1609 $this->tpl->touchBlock('bold_title_start');
1610 $this->tpl->touchBlock('bold_title_end');
1611 }
1612 }
1613
1614 protected function buildGotoLink()
1615 {
1616 switch($this->context)
1617 {
1619 include_once "Services/PersonalWorkspace/classes/class.ilWorkspaceAccessHandler.php";
1620 return ilWorkspaceAccessHandler::getGotoLink($this->ref_id, $this->obj_id);
1621
1622 default:
1623 // not implemented yet
1624 break;
1625 }
1626 }
1627
1634 public function insertSubstitutions()
1635 {
1636 $fields_shown = false;
1637 foreach($this->substitutions->getParsedSubstitutions($this->ref_id,$this->obj_id) as $data)
1638 {
1639 if($data['bold'])
1640 {
1641 $data['name'] = '<strong>'.$data['name'].'</strong>';
1642 $data['value'] = '<strong>'.$data['value'].'</strong>';
1643 }
1644 $this->tpl->touchBlock("std_prop");
1645 $this->tpl->setCurrentBlock('item_property');
1646 if($data['show_field'])
1647 {
1648 $this->tpl->setVariable('TXT_PROP',$data['name']);
1649 }
1650 $this->tpl->setVariable('VAL_PROP',$data['value']);
1651 $this->tpl->parseCurrentBlock();
1652
1653 if($data['newline'])
1654 {
1655 $this->tpl->touchBlock('newline_prop');
1656 }
1657 $fields_shown = false;
1658
1659 }
1660 if($fields_shown)
1661 {
1662 $this->tpl->touchBlock('newline_prop');
1663 }
1664 }
1665
1666
1675 {
1676 if($this->getSubstitutionStatus())
1677 {
1678 $this->insertSubstitutions();
1679 if(!$this->substitutions->isDescriptionEnabled())
1680 {
1681 return true;
1682 }
1683 }
1684
1685 // see bug #16519
1686 $d = $this->getDescription();
1687 $d = strip_tags($d, "<b>");
1688 $this->tpl->setCurrentBlock("item_description");
1689 $this->tpl->setVariable("TXT_DESC", $d);
1690 $this->tpl->parseCurrentBlock();
1691 }
1692
1697 public function insertSearchFragment()
1698 {
1699 if(strlen($this->getSearchFragment()))
1700 {
1701 $this->tpl->setCurrentBlock('search_fragment');
1702 $this->tpl->setVariable('TXT_SEARCH_FRAGMENT',$this->getSearchFragment().' ...');
1703 $this->tpl->parseCurrentBlock();
1704 }
1705 }
1706
1712 public function insertRelevance()
1713 {
1714 global $lng;
1715
1716 if(!$this->enabledRelevance() or !(int) $this->getRelevance())
1717 {
1718 return false;
1719 }
1720
1721 include_once "Services/UIComponent/ProgressBar/classes/class.ilProgressBar.php";
1723 $pbar->setCurrent($this->getRelevance());
1724
1725 $this->tpl->setCurrentBlock('relevance');
1726 $this->tpl->setVariable('REL_PBAR', $pbar->render());
1727 $this->tpl->parseCurrentBlock();
1728 }
1729
1735 function setMode($a_mode)
1736 {
1737 $this->mode = $a_mode;
1738 }
1739
1745 function getMode()
1746 {
1747 return $this->mode;
1748 }
1749
1753 function setConditionDepth($a_depth)
1754 {
1755 $this->condition_depth = $a_depth;
1756 }
1757
1765 function isMode($a_mode)
1766 {
1767 if ($a_mode == $this->mode)
1768 {
1769 return true;
1770 }
1771 else
1772 {
1773 return false;
1774 }
1775 }
1776
1782 function insertProperties($a_item = '')
1783 {
1784 global $ilAccess, $lng, $ilUser;
1785
1786 $props = $this->getProperties($a_item);
1787 $props = $this->getCustomProperties($props);
1788
1789 if($this->context != self::CONTEXT_WORKSPACE && $this->context != self::CONTEXT_WORKSPACE_SHARING)
1790 {
1791 // add learning progress custom property
1792 include_once "Services/Tracking/classes/class.ilLPStatus.php";
1793 $lp = ilLPStatus::getListGUIStatus($this->obj_id);
1794 if($lp)
1795 {
1796 $props[] = array("alert" => false,
1797 "property" => $lng->txt("learning_progress"),
1798 "value" => $lp,
1799 "newline" => true);
1800 }
1801
1802 // add no item access note in public section
1803 // for items that are visible but not readable
1804 if ($this->ilias->account->getId() == ANONYMOUS_USER_ID)
1805 {
1806 if (!$ilAccess->checkAccess("read", "", $this->ref_id, $this->type, $this->obj_id))
1807 {
1808 $props[] = array("alert" => true,
1809 "value" => $lng->txt("no_access_item_public"),
1810 "newline" => true);
1811 }
1812 }
1813 }
1814
1815 // reference objects have translated ids, revert to originals
1816 $note_ref_id = $this->ref_id;
1817 $note_obj_id = $this->obj_id;
1818 if($this->reference_ref_id)
1819 {
1820 $note_ref_id = $this->reference_ref_id;
1821 $note_obj_id = $this->reference_obj_id;
1822 }
1823
1824 $redraw_js = "il.Object.redrawListItem(".$note_ref_id.");";
1825
1826 // add common properties (comments, notes, tags)
1827 if ((self::$cnt_notes[$note_obj_id][IL_NOTE_PRIVATE] > 0 ||
1828 self::$cnt_notes[$note_obj_id][IL_NOTE_PUBLIC] > 0 ||
1829 self::$cnt_tags[$note_obj_id] > 0 ||
1830 is_array(self::$tags[$note_obj_id])) &&
1831 ($ilUser->getId() != ANONYMOUS_USER_ID))
1832 {
1833 include_once("./Services/Notes/classes/class.ilNoteGUI.php");
1834 include_once("./Services/Tagging/classes/class.ilTaggingGUI.php");
1835
1836 $nl = true;
1837 if ($this->isCommentsActivated($this->type, $this->ref_id, $this->obj_id, false, false)
1838 && self::$cnt_notes[$note_obj_id][IL_NOTE_PUBLIC] > 0)
1839 {
1840 $props[] = array("alert" => false,
1841 "property" => $lng->txt("notes_comments"),
1842 "value" => "<a href='#' onclick=\"return ".
1843 ilNoteGUI::getListCommentsJSCall($this->ajax_hash, $redraw_js)."\">".
1844 self::$cnt_notes[$note_obj_id][IL_NOTE_PUBLIC]."</a>",
1845 "newline" => $nl);
1846 $nl = false;
1847 }
1848
1849 if ($this->notes_enabled && self::$cnt_notes[$note_obj_id][IL_NOTE_PRIVATE] > 0)
1850 {
1851 $props[] = array("alert" => false,
1852 "property" => $lng->txt("notes"),
1853 "value" => "<a href='#' onclick=\"return ".
1854 ilNoteGUI::getListNotesJSCall($this->ajax_hash, $redraw_js)."\">".
1855 self::$cnt_notes[$note_obj_id][IL_NOTE_PRIVATE]."</a>",
1856 "newline" => $nl);
1857 $nl = false;
1858 }
1859 if ($this->tags_enabled &&
1860 (self::$cnt_tags[$note_obj_id] > 0 ||
1861 is_array(self::$tags[$note_obj_id])))
1862 {
1863 $tags_set = new ilSetting("tags");
1864 if ($tags_set->get("enable"))
1865 {
1866 $tags_url = ilTaggingGUI::getListTagsJSCall($this->ajax_hash, $redraw_js);
1867
1868 // list object tags
1869 if(is_array(self::$tags[$note_obj_id]))
1870 {
1871 $tags_tmp = array();
1872 foreach(self::$tags[$note_obj_id] as $tag => $is_tag_owner)
1873 {
1874 if($is_tag_owner)
1875 {
1876 $tags_tmp[] = "<a class=\"ilTag ilTagRelHigh\" href='#' onclick=\"return ".
1877 $tags_url."\">".$tag."</a>";
1878 }
1879 else
1880 {
1881 $tags_tmp[] = "<span class=\"ilTag ilTagRelMiddle\">".$tag."</span>";
1882 }
1883 }
1884 $tags_value = implode(" ", $tags_tmp);
1885 $nl = true;
1886 $prop_text = "";
1887 }
1888 // tags counter
1889 else
1890 {
1891 $tags_value = "<a href='#' onclick=\"return ".$tags_url."\">".
1892 self::$cnt_tags[$note_obj_id]."</a>";
1893 $prop_text = $lng->txt("tagging_tags");
1894 }
1895 $props[] = array("alert" => false,
1896 "property" => $prop_text,
1897 "value" => $tags_value,
1898 "newline" => $nl);
1899 $nl = false;
1900 }
1901 }
1902 }
1903
1904 $cnt = 1;
1905 if (is_array($props) && count($props) > 0)
1906 {
1907 foreach($props as $prop)
1908 {
1909 // BEGIN WebDAV: Display a separator between properties.
1910 if ($cnt > 1)
1911 {
1912 $this->tpl->touchBlock("separator_prop");
1913 }
1914 // END WebDAV: Display a separator between properties.
1915
1916 if ($prop["alert"] == true)
1917 {
1918 $this->tpl->touchBlock("alert_prop");
1919 }
1920 else
1921 {
1922 $this->tpl->touchBlock("std_prop");
1923 }
1924 if ($prop["newline"] == true && $cnt > 1)
1925 {
1926 $this->tpl->touchBlock("newline_prop");
1927 }
1928 //BEGIN WebDAV: Support hidden property names.
1929 if (isset($prop["property"]) && $prop['propertyNameVisible'] !== false && $prop["property"] != "")
1930 //END WebDAV: Support hidden property names.
1931 {
1932 $this->tpl->setCurrentBlock("prop_name");
1933 $this->tpl->setVariable("TXT_PROP", $prop["property"]);
1934 $this->tpl->parseCurrentBlock();
1935 }
1936 $this->tpl->setCurrentBlock("item_property");
1937 //BEGIN WebDAV: Support links in property values.
1938 if ($prop['link'])
1939 {
1940 $this->tpl->setVariable("LINK_PROP", $prop['link']);
1941 $this->tpl->setVariable("LINK_VAL_PROP", $prop["value"]);
1942 }
1943 else
1944 {
1945 $this->tpl->setVariable("VAL_PROP", $prop["value"]);
1946 }
1947 //END WebDAV: Support links in property values.
1948 $this->tpl->parseCurrentBlock();
1949
1950 $cnt++;
1951 }
1952 $this->tpl->setCurrentBlock("item_properties");
1953 $this->tpl->parseCurrentBlock();
1954 }
1955 }
1956
1958 {
1959 $this->getNoticeProperties();
1960 foreach($this->notice_prop as $property)
1961 {
1962 $this->tpl->setCurrentBlock('notice_item');
1963 $this->tpl->setVariable('NOTICE_ITEM_VALUE',$property['value']);
1964 $this->tpl->parseCurrentBlock();
1965 }
1966 $this->tpl->setCurrentBlock('notice_property');
1967 $this->tpl->parseCurrentBlock();
1968 }
1969
1970
1976 function insertPayment()
1977 {
1978 global $ilAccess,$ilObjDataCache,$ilUser;
1979
1980 if(IS_PAYMENT_ENABLED && $this->payment_enabled)
1981 {
1982 include_once './Services/Payment/classes/class.ilPaymentObject.php';
1983 include_once './Services/Payment/classes/class.ilPaymentBookings.php';
1984
1985 if(ilPaymentobject::_requiresPurchaseToAccess($this->ref_id))
1986 {
1988 {
1989 // get additional information about order_date and duration
1990
1991 $order_infos = array();
1993
1994 if(count($order_infos) > 0)
1995 {
1996 global $lng;
1997 $pay_lang = $lng;
1998 $pay_lang->loadLanguageModule('payment');
1999 $alert = true;
2000 $a_newline = true;
2001 $a_property = $pay_lang->txt('object_purchased_date');
2002 $a_value = ilDatePresentation::formatDate(new ilDateTime($order_infos["order_date"],IL_CAL_UNIX));
2003
2004 $this->addCustomProperty($a_property, $a_value, $alert, $a_newline);
2005
2006 $alert = true;
2007 $a_newline = true;
2008 $a_property = $this->lng->txt('object_duration');
2009 if($order_infos['duration'] == 0)
2010 $a_value = $pay_lang->txt('unlimited_duration');
2011 else
2012 $a_value = $order_infos['duration'] .' '.$this->lng->txt('months');
2013 $this->addCustomProperty($a_property, $a_value, $alert, $a_newline);
2014 }
2015
2016 // check for extension prices
2017 if(ilPaymentObject::_hasExtensions($this->ref_id))
2018 {
2019 $has_extension_prices = true;
2020 $this->insertPaymentCommand($has_extension_prices);
2021 }
2022
2023 }
2024 else
2025 {
2026 // only relevant and needed for the shop content page
2027
2028 $this->ctpl = new ilTemplate("tpl.container_list_item_commands.html", true, true,
2029 "Services/Container", "DEFAULT", false, true);
2030 $this->ctpl->setCurrentBlock('payment');
2031 $this->ctpl->setVariable('PAYMENT_TYPE_IMG', ilUtil::getImagePath('icon_pays.svg'));
2032 $this->ctpl->setVariable('PAYMENT_ALT_IMG', $this->lng->txt('payment_system') . ': ' . $this->lng->txt('payment_buyable'));
2033 $this->ctpl->parseCurrentBlock();
2034
2035 $this->insertPaymentCommand();
2036 }
2037 }
2038 }
2039 }
2040
2041 protected function insertPaymentCommand($has_extension_prices = false)
2042 {
2043 $commands = $this->getCommands($this->ref_id, $this->obj_id);
2044 foreach($commands as $command)
2045 {
2046 if($command['default'] === true)
2047 {
2048 $command = $this->createDefaultCommand($command);
2049// if(is_null($command['link']) )
2050// {
2051 switch($this->type)
2052 {
2053 case 'sahs':
2054 $command['link'] = 'ilias.php?baseClass=ilSAHSPresentationGUI&ref_id='.$this->ref_id;
2055 break;
2056
2057 case 'lm':
2058 $command['link'] = 'ilias.php?baseClass=ilLMPresentationGUI&ref_id='.$this->ref_id;
2059 break;
2060 case 'exc':
2061 default:
2062 $command['link'] = 'ilias.php?baseClass=ilShopController&cmdClass=ilshoppurchasegui&ref_id='.$this->ref_id;
2063 break;
2064 }
2065// }
2066
2068 if(strpos($command['link'], '_'.$type.'_') !== false)
2069 {
2070 $demo_link = str_replace('_'.$type.'_', '_'.$type.'purchasetypedemo_', $command['link']);
2071 $buy_link = str_replace('_'.$type.'_', '_'.$type.'purchasetypebuy_', $command['link']);
2072 }
2073 else
2074 {
2075 $demo_link = $command['link'].(strpos($command['link'], '?') === false ? '?' : '&').'purchasetype=demo';
2076 $buy_link = $command['link'].(strpos($command['link'], '?') === false ? '?' : '&').'purchasetype=buy';
2077 }
2078
2079 $this->current_selection_list->addItem($this->lng->txt('payment_demo'), "", $demo_link, $a_img, $this->lng->txt('payment_demo'), $command['frame']);
2080 if($has_extension_prices == true)
2081 {
2082 $this->current_selection_list->addItem($this->lng->txt('buy_extension'), "", $buy_link, $a_img, $this->lng->txt('buy_extension'), $command['frame']);
2083 }
2084 else
2085 $this->current_selection_list->addItem($this->lng->txt('buy'), "", $buy_link, $a_img, $this->lng->txt('buy'), $command['frame']);
2086
2087 }
2088 }
2089 }
2090
2091 protected function parseConditions($toggle_id,$conditions,$obligatory = true)
2092 {
2093 global $ilAccess, $lng, $objDefinition,$tree;
2094
2095 $num_required = ilConditionHandler::calculateRequiredTriggers($this->ref_id, $this->obj_id);
2096 $num_optional_required =
2097 $num_required - count($conditions) + count(ilConditionHandler::getOptionalConditionsOfTarget($this->ref_id, $this->obj_id));
2098
2099 // Check if all conditions are fullfilled
2100 $visible_conditions = array();
2101 $passed_optional = 0;
2102 foreach($conditions as $condition)
2103 {
2104 if($obligatory and !$condition['obligatory'])
2105 {
2106 continue;
2107 }
2108 if(!$obligatory and $condition['obligatory'])
2109 {
2110 continue;
2111 }
2112
2113 if($tree->isDeleted($condition['trigger_ref_id']))
2114 {
2115 continue;
2116 }
2117
2118 include_once 'Services/Container/classes/class.ilMemberViewSettings.php';
2119 $ok = ilConditionHandler::_checkCondition($condition['id']) and
2120 !ilMemberViewSettings::getInstance()->isActive();
2121
2122 if(!$ok)
2123 {
2124 $visible_conditions[] = $condition['id'];
2125 }
2126
2127 if(!$obligatory and $ok)
2128 {
2129 ++$passed_optional;
2130 // optional passed
2131 if($passed_optional >= $num_optional_required)
2132 {
2133 return true;
2134 }
2135 }
2136 }
2137
2138 foreach($conditions as $condition)
2139 {
2140 if(!in_array($condition['id'], $visible_conditions))
2141 {
2142 continue;
2143 }
2144
2145 include_once './Services/AccessControl/classes/class.ilConditionHandlerGUI.php';
2146 $cond_txt = ilConditionHandlerGUI::translateOperator($condition['trigger_obj_id'],$condition['operator']).' '.$condition['value'];
2147
2148 // display trigger item
2149 $class = $objDefinition->getClassName($condition["trigger_type"]);
2150 $location = $objDefinition->getLocation($condition["trigger_type"]);
2151 if ($class == "" && $location == "")
2152 {
2153 continue;
2154 }
2155 $missing_cond_exist = true;
2156
2157 $full_class = "ilObj".$class."ListGUI";
2158 include_once($location."/class.".$full_class.".php");
2159 $item_list_gui = new $full_class($this);
2160 $item_list_gui->setMode(IL_LIST_AS_TRIGGER);
2161 $item_list_gui->enablePath(false);
2162 $item_list_gui->enableIcon(true);
2163 $item_list_gui->setConditionDepth($this->condition_depth + 1);
2164 $item_list_gui->setParentRefId($this->getUniqueItemId()); // yes we can
2165 $item_list_gui->addCustomProperty($this->lng->txt("precondition_required_itemlist"), $cond_txt, false, true);
2166
2167 $item_list_gui->enableCommands($this->commands_enabled, $this->std_cmd_only);
2168 $item_list_gui->enableProperties($this->properties_enabled);
2169
2170 $trigger_html = $item_list_gui->getListItemHTML($condition['trigger_ref_id'],
2171 $condition['trigger_obj_id'], ilObject::_lookupTitle($condition["trigger_obj_id"]),
2172 "");
2173 $this->tpl->setCurrentBlock("precondition");
2174 if ($trigger_html == "")
2175 {
2176 $trigger_html = $this->lng->txt("precondition_not_accessible");
2177 }
2178 $this->tpl->setVariable("TXT_CONDITION", trim($cond_txt));
2179 $this->tpl->setVariable("TRIGGER_ITEM", $trigger_html);
2180 $this->tpl->parseCurrentBlock();
2181 }
2182
2183 if ($missing_cond_exist and $obligatory)
2184 {
2185 $this->tpl->setCurrentBlock("preconditions");
2186 $this->tpl->setVariable("CONDITION_TOGGLE_ID", "_obl_".$toggle_id);
2187 $this->tpl->setVariable("TXT_PRECONDITIONS", $lng->txt("preconditions_obligatory_hint"));
2188 $this->tpl->parseCurrentBlock();
2189
2190 }
2191 elseif($missing_cond_exist and !$obligatory)
2192 {
2193 $this->tpl->setCurrentBlock("preconditions");
2194 $this->tpl->setVariable("CONDITION_TOGGLE_ID", "_opt_".$toggle_id);
2195 $this->tpl->setVariable("TXT_PRECONDITIONS", sprintf($lng->txt("preconditions_optional_hint"),$num_optional_required));
2196 $this->tpl->parseCurrentBlock();
2197 }
2198
2199 return !$missing_cond_exist;
2200 }
2201
2206 {
2207 global $ilAccess, $lng, $objDefinition,$tree;
2208
2209 include_once("./Services/AccessControl/classes/class.ilConditionHandler.php");
2210
2211 $missing_cond_exist = false;
2212
2213 // do not show multi level conditions (messes up layout)
2214 if ($this->condition_depth > 0)
2215 {
2216 return;
2217 }
2218
2219 // Sort by title
2220 /*
2221 foreach(ilConditionHandler::_getConditionsOfTarget($this->ref_id, $this->obj_id) as $condition)
2222 {
2223 $condition['title'] = ilObject::_lookupTitle($condition['trigger_obj_id']);
2224 }
2225 */
2226
2227 if($this->condition_target)
2228 {
2230 $this->condition_target['ref_id'],
2231 $this->condition_target['obj_id'],
2232 $this->condition_target['target_type']
2233 );
2234 }
2235 else
2236 {
2237 $conditions = ilConditionHandler::_getConditionsOfTarget($this->ref_id, $this->obj_id);
2238 }
2239
2240 if(sizeof($conditions))
2241 {
2242 for($i = 0; $i < count($conditions); $i++)
2243 {
2244 $conditions[$i]['title'] = ilObject::_lookupTitle($conditions[$i]['trigger_obj_id']);
2245 }
2246 $conditions = ilUtil::sortArray($conditions,'title','DESC');
2247
2249
2250 // Show obligatory and optional preconditions seperated
2251 $all_done_obl = $this->parseConditions(self::$js_unique_id,$conditions,true);
2252 $all_done_opt = $this->parseConditions(self::$js_unique_id,$conditions,false);
2253
2254 if(!$all_done_obl || !$all_done_opt)
2255 {
2256 $this->tpl->setCurrentBlock("preconditions_toggle");
2257 $this->tpl->setVariable("PRECONDITION_TOGGLE_INTRO", $this->lng->txt("precondition_toggle"));
2258 $this->tpl->setVariable("PRECONDITION_TOGGLE_TRIGGER", $this->lng->txt("show"));
2259 $this->tpl->setVariable("PRECONDITION_TOGGLE_ID", self::$js_unique_id);
2260 $this->tpl->setVariable("TXT_PRECONDITION_SHOW", $this->lng->txt("show"));
2261 $this->tpl->setVariable("TXT_PRECONDITION_HIDE", $this->lng->txt("hide"));
2262 $this->tpl->parseCurrentBlock();
2263 }
2264 }
2265 }
2266
2275 function insertCommand($a_href, $a_text, $a_frame = "", $a_img = "", $a_cmd = "", $a_onclick = "")
2276 {
2277 // #11099
2278 $chksum = md5($a_href.$a_text);
2279 if($a_href == "#" ||
2280 !in_array($chksum, $this->prevent_duplicate_commands))
2281 {
2282 if($a_href != "#")
2283 {
2284 $this->prevent_duplicate_commands[] = $chksum;
2285 }
2286
2287 $prevent_background_click = false;
2288 if ($a_cmd =='mount_webfolder')
2289 {
2290 $prevent_background_click = true;
2291 }
2292 $this->current_selection_list->addItem($a_text, "", $a_href, $a_img, $a_text, $a_frame,
2293 "", $prevent_background_click, $a_onclick);
2294 }
2295 }
2296
2305 {
2306 if ($this->std_cmd_only)
2307 {
2308 return;
2309 }
2310
2311 if(is_object($this->getContainerObject()) and
2313 {
2314 if($this->checkCommandAccess('delete','',$this->ref_id,$this->type))
2315 {
2316 $this->ctrl->setParameter($this->getContainerObject(),'item_ref_id',$this->getCommandId());
2317 $cmd_link = $this->ctrl->getLinkTarget($this->getContainerObject(), "delete");
2318 $this->insertCommand($cmd_link, $this->lng->txt("delete"));
2319 $this->adm_commands_included = true;
2320 return true;
2321 }
2322 return false;
2323 }
2324
2325 if($this->checkCommandAccess('delete','',$this->ref_id,$this->type))
2326 {
2327 $this->ctrl->setParameter($this->container_obj, "ref_id",
2328 $this->container_obj->object->getRefId());
2329 $this->ctrl->setParameter($this->container_obj, "item_ref_id", $this->getCommandId());
2330 $cmd_link = $this->ctrl->getLinkTarget($this->container_obj, "delete");
2331 $this->insertCommand($cmd_link, $this->lng->txt("delete"), "",
2332 "");
2333 $this->adm_commands_included = true;
2334 }
2335 }
2336
2345 {
2346 global $ilAccess;
2347
2348 if ($this->std_cmd_only)
2349 {
2350 return;
2351 }
2352 // BEGIN PATCH Lucene search
2353
2354 if(is_object($this->getContainerObject()) and
2356 {
2357 global $objDefinition;
2358
2359 if($this->checkCommandAccess('delete','',$this->ref_id,$this->type) and
2360 $objDefinition->allowLink(ilObject::_lookupType($this->obj_id)))
2361 {
2362 $this->ctrl->setParameter($this->getContainerObject(),'item_ref_id',$this->getCommandId());
2363 $cmd_link = $this->ctrl->getLinkTarget($this->getContainerObject(), "link");
2364 $this->insertCommand($cmd_link, $this->lng->txt("link"));
2365 $this->adm_commands_included = true;
2366 return true;
2367 }
2368 return false;
2369 }
2370 // END PATCH Lucene Search
2371
2372 // if the permission is changed here, it has
2373 // also to be changed in ilContainerGUI, admin command check
2374 if($this->checkCommandAccess('delete','',$this->ref_id,$this->type))
2375 {
2376 $this->ctrl->setParameter($this->container_obj, "ref_id",
2377 $this->container_obj->object->getRefId());
2378 $this->ctrl->setParameter($this->container_obj, "item_ref_id", $this->getCommandId());
2379 $cmd_link = $this->ctrl->getLinkTarget($this->container_obj, "link");
2380 $this->insertCommand($cmd_link, $this->lng->txt("link"), "",
2381 "");
2382 $this->adm_commands_included = true;
2383 }
2384 }
2385
2392 function insertCutCommand($a_to_repository = false)
2393 {
2394 global $ilAccess;
2395
2396 if ($this->std_cmd_only)
2397 {
2398 return;
2399 }
2400 // BEGIN PATCH Lucene search
2401 if(is_object($this->getContainerObject()) and
2403 {
2404 if($this->checkCommandAccess('delete','',$this->ref_id,$this->type))
2405 {
2406 $this->ctrl->setParameter($this->getContainerObject(),'item_ref_id',$this->getCommandId());
2407 $cmd_link = $this->ctrl->getLinkTarget($this->getContainerObject(), "cut");
2408 $this->insertCommand($cmd_link, $this->lng->txt("move"));
2409 $this->adm_commands_included = true;
2410 return true;
2411 }
2412 return false;
2413 }
2414 // END PATCH Lucene Search
2415
2416 // if the permission is changed here, it has
2417 // also to be changed in ilContainerContentGUI, determineAdminCommands
2418 if($this->checkCommandAccess('delete','',$this->ref_id,$this->type) &&
2419 $this->container_obj->object)
2420 {
2421 $this->ctrl->setParameter($this->container_obj, "ref_id",
2422 $this->container_obj->object->getRefId());
2423 $this->ctrl->setParameter($this->container_obj, "item_ref_id", $this->getCommandId());
2424
2425 if(!$a_to_repository)
2426 {
2427 $cmd_link = $this->ctrl->getLinkTarget($this->container_obj, "cut");
2428 $this->insertCommand($cmd_link, $this->lng->txt("move"), "",
2429 "");
2430 }
2431 else
2432 {
2433 $cmd_link = $this->ctrl->getLinkTarget($this->container_obj, "cut_for_repository");
2434 $this->insertCommand($cmd_link, $this->lng->txt("wsp_move_to_repository"), "",
2435 "");
2436 }
2437
2438 $this->adm_commands_included = true;
2439 }
2440 }
2441
2447 public function insertCopyCommand($a_to_repository = false)
2448 {
2449 if($this->std_cmd_only)
2450 {
2451 return;
2452 }
2453
2454 if($this->checkCommandAccess('copy', 'copy', $this->ref_id, $this->type))
2455 {
2456 if($this->context != self::CONTEXT_WORKSPACE && $this->context != self::CONTEXT_WORKSPACE_SHARING)
2457 {
2458 $this->ctrl->setParameterByClass('ilobjectcopygui','source_id',$this->getCommandId());
2459 $cmd_copy = $this->ctrl->getLinkTargetByClass('ilobjectcopygui','initTargetSelection');
2460 $this->insertCommand($cmd_copy, $this->lng->txt('copy'));
2461 }
2462 else
2463 {
2464 $this->ctrl->setParameter($this->container_obj, "ref_id",
2465 $this->container_obj->object->getRefId());
2466 $this->ctrl->setParameter($this->container_obj, "item_ref_id", $this->getCommandId());
2467
2468 if(!$a_to_repository)
2469 {
2470 $cmd_copy = $this->ctrl->getLinkTarget($this->container_obj, 'copy');
2471 $this->insertCommand($cmd_copy, $this->lng->txt('copy'));
2472 }
2473 else
2474 {
2475 $cmd_copy = $this->ctrl->getLinkTarget($this->container_obj, 'copy_to_repository');
2476 $this->insertCommand($cmd_copy, $this->lng->txt('wsp_copy_to_repository'));
2477 }
2478 }
2479
2480 $this->adm_commands_included = true;
2481 }
2482 return;
2483 }
2484
2485
2490 {
2491 global $ilAccess, $objDefinition;
2492
2493 if ($this->std_cmd_only)
2494 {
2495 return;
2496 }
2497
2498 if(!$objDefinition->isContainer(ilObject::_lookupType($this->obj_id)))
2499 {
2500 return false;
2501 }
2502
2503 if(is_object($this->getContainerObject()) and
2505 isset($_SESSION['clipboard']))
2506 {
2507 $this->ctrl->setParameter($this->getContainerObject(),'item_ref_id',$this->getCommandId());
2508 $cmd_link = $this->ctrl->getLinkTarget($this->getContainerObject(), "paste");
2509 $this->insertCommand($cmd_link, $this->lng->txt("paste"));
2510 $this->adm_commands_included = true;
2511 return true;
2512 }
2513 return false;
2514 }
2515
2524 {
2525 global $ilSetting, $ilUser;
2526
2527 if ($this->std_cmd_only)
2528 {
2529 return;
2530 }
2531
2532 if((int)$ilSetting->get('disable_my_offers'))
2533 {
2534 return;
2535 }
2536
2538
2539 if ($ilUser->getId() != ANONYMOUS_USER_ID)
2540 {
2541 // BEGIN WebDAV: Lock/Unlock objects
2542 /* This code section is temporarily commented out.
2543 I will reactivate it at a later point, when I get the
2544 the backend working properly. - Werner Randelshofer 2008-04-17
2545 if (is_object($this->container_obj) && $this->rbacsystem->checkAccess("write", $this->ref_id))
2546 {
2547 require_once 'Services/WebDAV/classes/class.ilDAVServer.php';
2548 if (ilDAVServer::_isActive() && ilDAVServer::_isActionsVisible())
2549 {
2550 $this->ctrl->setParameter($this->container_obj, "ref_id",
2551 $this->container_obj->object->getRefId());
2552 $this->ctrl->setParameter($this->container_obj, "type", $this->type);
2553 $this->ctrl->setParameter($this->container_obj, "item_ref_id", $this->ref_id);
2554 $cmd_link = $this->ctrl->getLinkTarget($this->container_obj, "lock");
2555 $this->insertCommand($cmd_link, $this->lng->txt("lock"));
2556
2557 $this->ctrl->setParameter($this->container_obj, "ref_id",
2558 $this->container_obj->object->getRefId());
2559 $this->ctrl->setParameter($this->container_obj, "type", $this->type);
2560 $this->ctrl->setParameter($this->container_obj, "item_ref_id", $this->ref_id);
2561 $cmd_link = $this->ctrl->getLinkTarget($this->container_obj, "unlock");
2562 $this->insertCommand($cmd_link, $this->lng->txt("unlock"));
2563 }
2564 }
2565 */
2566 // END WebDAV: Lock/Unlock objects
2567
2568 if (!$ilUser->isDesktopItem($this->getCommandId(), $type))
2569 {
2570 // Pass type and object ID to ilAccess to improve performance
2571 global $ilAccess;
2572 if ($this->checkCommandAccess("read", "", $this->ref_id, $this->type, $this->obj_id))
2573 {
2574 if($this->getContainerObject() instanceof ilDesktopItemHandling)
2575 {
2576 $this->ctrl->setParameter($this->container_obj, "type", $type);
2577 $this->ctrl->setParameter($this->container_obj, "item_ref_id", $this->getCommandId());
2578 $cmd_link = $this->ctrl->getLinkTarget($this->container_obj, "addToDesk");
2579 $this->insertCommand($cmd_link, $this->lng->txt("to_desktop"), "",
2580 "");
2581 }
2582 }
2583 }
2584 else
2585 {
2586 if ($this->getContainerObject() instanceof ilDesktopItemHandling)
2587 {
2588 $this->ctrl->setParameter($this->container_obj, "type", $type);
2589 $this->ctrl->setParameter($this->container_obj, "item_ref_id", $this->getCommandId());
2590 $cmd_link = $this->ctrl->getLinkTarget($this->container_obj, "removeFromDesk");
2591 $this->insertCommand($cmd_link, $this->lng->txt("unsubscribe"), "",
2592 "");
2593 }
2594 }
2595 }
2596 }
2597
2602 {
2603 if ($this->std_cmd_only)
2604 {
2605 return;
2606 }
2607 $cmd_link = $this->getCommandLink("infoScreen");
2608 $cmd_frame = $this->getCommandFrame("infoScreen");
2609 $this->insertCommand($cmd_link, $this->lng->txt("info_short"), $cmd_frame,
2610 ilUtil::getImagePath("icon_info.svg"));
2611 }
2612
2619 function insertCommonSocialCommands($a_header_actions = false)
2620 {
2621 global $ilSetting, $lng, $ilUser, $tpl;
2622
2623 if ($this->std_cmd_only ||
2624 ($ilUser->getId() == ANONYMOUS_USER_ID))
2625 {
2626 return;
2627 }
2628 $lng->loadLanguageModule("notes");
2629 $lng->loadLanguageModule("tagging");
2630 $cmd_link = $this->getCommandLink("infoScreen")."#notes_top";
2631 $cmd_tag_link = $this->getCommandLink("infoScreen");
2632 $cmd_frame = $this->getCommandFrame("infoScreen");
2633 include_once("./Services/Notes/classes/class.ilNoteGUI.php");
2634
2635 // reference objects have translated ids, revert to originals
2636 $note_ref_id = $this->ref_id;
2637 if($this->reference_ref_id)
2638 {
2639 $note_ref_id = $this->reference_ref_id;
2640 }
2641
2642 $js_updater = $a_header_actions
2643 ? "il.Object.redrawActionHeader();"
2644 : "il.Object.redrawListItem(".$note_ref_id.")";
2645
2646 $comments_enabled = $this->isCommentsActivated($this->type, $this->ref_id, $this->obj_id, $a_header_actions, true);
2648 {
2649 $this->insertCommand("#", $this->lng->txt("notes_comments"), $cmd_frame,
2650 "", "", ilNoteGUI::getListCommentsJSCall($this->ajax_hash, $js_updater));
2651 }
2652
2653 if($this->notes_enabled)
2654 {
2655 $this->insertCommand("#", $this->lng->txt("notes"), $cmd_frame,
2656 "", "", ilNoteGUI::getListNotesJSCall($this->ajax_hash, $js_updater));
2657 }
2658
2659 if ($this->tags_enabled)
2660 {
2661 include_once("./Services/Tagging/classes/class.ilTaggingGUI.php");
2662 //$this->insertCommand($cmd_tag_link, $this->lng->txt("tagging_set_tag"), $cmd_frame);
2663 $this->insertCommand("#", $this->lng->txt("tagging_set_tag"), $cmd_frame,
2664 "", "", ilTaggingGUI::getListTagsJSCall($this->ajax_hash, $js_updater));
2665 }
2666 }
2667
2674 {
2675 if ($this->std_cmd_only || !$this->container_obj->object)
2676 {
2677 return;
2678 }
2679
2680 $parent_ref_id = $this->container_obj->object->getRefId();
2681 $parent_type = $this->container_obj->object->getType();
2682
2683 if($this->checkCommandAccess('write','',$parent_ref_id,$parent_type) ||
2684 $this->checkCommandAccess('write','',$this->ref_id,$this->type))
2685 {
2686 $this->ctrl->setParameterByClass('ilobjectactivationgui','cadh',
2687 $this->ajax_hash);
2688 $this->ctrl->setParameterByClass('ilobjectactivationgui','parent_id',
2690 $cmd_lnk = $this->ctrl->getLinkTargetByClass(array($this->gui_class_name, 'ilcommonactiondispatchergui', 'ilobjectactivationgui'),
2691 'edit');
2692
2693 $this->insertCommand($cmd_lnk, $this->lng->txt('obj_activation_list_gui'));
2694 }
2695 }
2696
2704 function insertCommands($a_use_asynch = false, $a_get_asynch_commands = false,
2705 $a_asynch_url = "", $a_header_actions = false)
2706 {
2707 global $lng, $ilUser;
2708
2709 if (!$this->getCommandsStatus())
2710 {
2711 return;
2712 }
2713
2714 include_once("Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php");
2715 $this->current_selection_list = new ilAdvancedSelectionListGUI();
2716 $this->current_selection_list->setAsynch($a_use_asynch && !$a_get_asynch_commands);
2717 $this->current_selection_list->setAsynchUrl($a_asynch_url);
2718 if ($a_header_actions)
2719 {
2720 $this->current_selection_list->setListTitle("<span class='hidden-xs'>".$lng->txt("actions")."</span>");
2721 }
2722 else
2723 {
2724 $this->current_selection_list->setListTitle("");
2725 }
2726 $this->current_selection_list->setId("act_".$this->getUniqueItemId(false));
2727 $this->current_selection_list->setSelectionHeaderClass("small");
2728 $this->current_selection_list->setItemLinkClass("xsmall");
2729 $this->current_selection_list->setLinksMode("il_ContainerItemCommand2");
2730 $this->current_selection_list->setHeaderIcon(ilAdvancedSelectionListGUI::DOWN_ARROW_DARK);
2731 $this->current_selection_list->setUseImages(false);
2732 $this->current_selection_list->setAdditionalToggleElement($this->getUniqueItemId(true), "ilContainerListItemOuterHighlight");
2733
2734 include_once 'Services/Payment/classes/class.ilPaymentObject.php';
2735
2736 $this->ctrl->setParameterByClass($this->gui_class_name, "ref_id", $this->ref_id);
2737
2738 // only standard command?
2739 $only_default = false;
2740 if ($a_use_asynch && !$a_get_asynch_commands)
2741 {
2742 $only_default = true;
2743 }
2744
2745 $this->default_command = false;
2746 $this->prevent_duplicate_commands = array();
2747
2748 // we only allow the following commands inside the header actions
2749 $valid_header_commands = array("mount_webfolder");
2750
2751 $commands = $this->getCommands($this->ref_id, $this->obj_id);
2752 foreach($commands as $command)
2753 {
2754 if($a_header_actions && !in_array($command["cmd"], $valid_header_commands))
2755 {
2756 continue;
2757 }
2758
2759 if ($command["granted"] == true )
2760 {
2761 if (!$command["default"] === true)
2762 {
2763 if (!$this->std_cmd_only && !$only_default)
2764 {
2765 // workaround for repository frameset
2766 $command["link"] =
2767 $this->appendRepositoryFrameParameter($command["link"]);
2768
2769 $cmd_link = $command["link"];
2770 $txt = ($command["lang_var"] == "")
2771 ? $command["txt"]
2772 : $this->lng->txt($command["lang_var"]);
2773 $this->insertCommand($cmd_link, $txt,
2774 $command["frame"], $command["img"], $command["cmd"]);
2775 }
2776 }
2777 else
2778 {
2779 $this->default_command = $this->createDefaultCommand($command);
2780 //$this->default_command = $command;
2781 }
2782 }
2783 elseif($command["default"] === true)
2784 {
2785 $items =& $command["access_info"];
2786 foreach ($items as $item)
2787 {
2788 if ($item["type"] == IL_NO_LICENSE)
2789 {
2790 $this->addCustomProperty($this->lng->txt("license"),$item["text"],true);
2791 $this->enableProperties(true);
2792 break;
2793 }
2794 }
2795 }
2796 }
2797
2798 if (!$only_default)
2799 {
2800 // custom commands
2801 if (is_array($this->cust_commands))
2802 {
2803 foreach ($this->cust_commands as $command)
2804 {
2805 $this->insertCommand($command["link"], $this->lng->txt($command["lang_var"]),
2806 $command["frame"], "", $command["cmd"], $command["onclick"]);
2807 }
2808 }
2809
2810 // info screen commmand
2811 if ($this->getInfoScreenStatus())
2812 {
2813 $this->insertInfoScreenCommand();
2814 }
2815
2816 if (!$this->isMode(IL_LIST_AS_TRIGGER))
2817 {
2818 // edit timings
2819 if($this->timings_enabled)
2820 {
2821 $this->insertTimingsCommand();
2822 }
2823
2824 // delete
2825 if ($this->delete_enabled)
2826 {
2827 $this->insertDeleteCommand();
2828 }
2829
2830 // link
2831 if ($this->link_enabled)
2832 {
2833 $this->insertLinkCommand();
2834 }
2835
2836 // cut
2837 if ($this->cut_enabled)
2838 {
2839 $this->insertCutCommand();
2840 }
2841
2842 // copy
2843 if ($this->copy_enabled)
2844 {
2845 $this->insertCopyCommand();
2846 }
2847
2848 // cut/copy from workspace to repository
2849 if ($this->repository_transfer_enabled)
2850 {
2851 $this->insertCutCommand(true);
2852 $this->insertCopyCommand(true);
2853 }
2854
2855 // subscribe
2856 if ($this->subscribe_enabled)
2857 {
2858 $this->insertSubscribeCommand();
2859 }
2860
2861 // multi download
2862 if ($this->multi_download_enabled && $a_header_actions)
2863 {
2865 }
2866
2867 // BEGIN PATCH Lucene search
2868 if($this->cut_enabled or $this->link_enabled)
2869 {
2870 $this->insertPasteCommand();
2871 }
2872 // END PATCH Lucene Search
2873
2874 if(IS_PAYMENT_ENABLED)
2875 {
2876 $this->insertPayment();
2877 }
2878 }
2879 }
2880
2881 // common social commands (comment, notes, tags)
2882 if (!$only_default && !$this->isMode(IL_LIST_AS_TRIGGER))
2883 {
2884 $this->insertCommonSocialCommands($a_header_actions);
2885 }
2886
2887 if(!$a_header_actions)
2888 {
2889 $this->ctrl->clearParametersByClass($this->gui_class_name);
2890 }
2891
2892 // fix bug #12417
2893 // there is one case, where no action menu should be displayed:
2894 // public area, category, no info tab
2895 // todo: make this faster and remove type specific implementation if possible
2896 if ($a_use_asynch && !$a_get_asynch_commands && !$a_header_actions)
2897 {
2898 if ($ilUser->getId() == ANONYMOUS_USER_ID && $this->type == "cat")
2899 {
2900 include_once("./Services/Container/classes/class.ilContainer.php");
2901 include_once("./Services/Object/classes/class.ilObjectServiceSettingsGUI.php");
2903 $this->obj_id,
2905 true))
2906 {
2907 return;
2908 }
2909 }
2910 }
2911
2912 if ($a_use_asynch && $a_get_asynch_commands)
2913 {
2914 return $this->current_selection_list->getHTML(true);
2915 }
2916
2917 return $this->current_selection_list->getHTML();
2918 }
2919
2925 function enableComments($a_value, $a_enable_comments_settings = true)
2926 {
2927 global $ilSetting;
2928
2929 // global switch
2930 if($ilSetting->get("disable_comments"))
2931 {
2932 $a_value = false;
2933 }
2934
2935 $this->comments_enabled = (bool)$a_value;
2936 $this->comments_settings_enabled = (bool)$a_enable_comments_settings;
2937 }
2938
2944 function enableNotes($a_value)
2945 {
2946 global $ilSetting;
2947
2948 // global switch
2949 if($ilSetting->get("disable_notes"))
2950 {
2951 $a_value = false;
2952 }
2953
2954 $this->notes_enabled = (bool)$a_value;
2955 }
2956
2962 function enableTags($a_value)
2963 {
2964 $tags_set = new ilSetting("tags");
2965 if (!$tags_set->get("enable"))
2966 {
2967 $a_value = false;
2968 }
2969 $this->tags_enabled = (bool)$a_value;
2970 }
2971
2980 function enableRating($a_value, $a_text = null, $a_categories = false, array $a_ctrl_path = null)
2981 {
2982 $this->rating_enabled = (bool)$a_value;
2983
2984 if($this->rating_enabled)
2985 {
2986 $this->rating_categories_enabled = (bool)$a_categories;
2987 $this->rating_text = $a_text;
2988 $this->rating_ctrl_path = $a_ctrl_path;
2989 }
2990 }
2991
2997 function enableMultiDownload($a_value)
2998 {
2999 $folder_set = new ilSetting("fold");
3000 if (!$folder_set->get("enable_multi_download"))
3001 {
3002 $a_value = false;
3003 }
3004 $this->multi_download_enabled = (bool)$a_value;
3005 }
3006
3008 {
3009 global $ilAccess, $objDefinition;
3010
3011 if ($this->std_cmd_only)
3012 return;
3013
3014 if(!$objDefinition->isContainer(ilObject::_lookupType($this->obj_id)))
3015 return false;
3016
3017 if(is_object($this->getContainerObject()) &&
3018 $this->getContainerObject() instanceof ilContainerGUI)
3019 {
3020 $this->ctrl->setParameter($this->getContainerObject(), "type", "");
3021 $this->ctrl->setParameter($this->getContainerObject(), "item_ref_id", "");
3022 $this->ctrl->setParameter($this->getContainerObject(), "active_node", "");
3023 $cmd = $_GET["cmd"] == "enableMultiDownload" ? "render" : "enableMultiDownload";
3024 $cmd_link = $this->ctrl->getLinkTarget($this->getContainerObject(), $cmd);
3025 $this->insertCommand($cmd_link, $this->lng->txt("download_multiple_objects"));
3026 return true;
3027 }
3028
3029 return false;
3030 }
3031
3032 function enableDownloadCheckbox($a_ref_id, $a_value)
3033 {
3034 global $ilAccess;
3035
3036 // TODO: delegate to list object class!
3037 if (!$this->getContainerObject()->isActiveAdministrationPanel() || $_SESSION["clipboard"])
3038 {
3039 if (in_array($this->type, array("file", "fold")) &&
3040 $ilAccess->checkAccess("read", "", $a_ref_id, $this->type))
3041 {
3042 $this->download_checkbox_state = self::DOWNLOAD_CHECKBOX_ENABLED;
3043 }
3044 else
3045 {
3046 $this->download_checkbox_state = self::DOWNLOAD_CHECKBOX_DISABLED;
3047 }
3048 }
3049 else
3050 {
3051 $this->download_checkbox_state = self::DOWNLOAD_CHECKBOX_NONE;
3052 }
3053 }
3054
3056 {
3058 }
3059
3063 static function prepareJsLinks($a_redraw_url, $a_notes_url, $a_tags_url, $a_tpl = null)
3064 {
3065 global $tpl;
3066
3067 if (is_null($a_tpl))
3068 {
3069 $a_tpl = $tpl;
3070 }
3071
3072 if($a_notes_url)
3073 {
3074 include_once("./Services/Notes/classes/class.ilNoteGUI.php");
3075 ilNoteGUI::initJavascript($a_notes_url);
3076 }
3077
3078 if($a_tags_url)
3079 {
3080 include_once("./Services/Tagging/classes/class.ilTaggingGUI.php");
3081 ilTaggingGUI::initJavascript($a_tags_url);
3082 }
3083
3084 if($a_redraw_url)
3085 {
3086 $a_tpl->addOnLoadCode("il.Object.setRedrawAHUrl('".
3087 $a_redraw_url."');");
3088 }
3089 }
3090
3097 function setHeaderSubObject($a_type, $a_id)
3098 {
3099 $this->sub_obj_type = $a_type;
3100 $this->sub_obj_id = (int)$a_id;
3101 }
3102
3112 function addHeaderIcon($a_id, $a_img, $a_tooltip = null, $a_onclick = null, $a_status_text = null, $a_href = null)
3113 {
3114 $this->header_icons[$a_id] = array("img" => $a_img,
3115 "tooltip" => $a_tooltip,
3116 "onclick" => $a_onclick,
3117 "status_text" => $a_status_text,
3118 "href" => $a_href);
3119 }
3120
3126 function addHeaderIconHTML($a_id, $a_html)
3127 {
3128 $this->header_icons[$a_id] = $a_html;
3129 }
3130
3131 function setAjaxHash($a_hash)
3132 {
3133 $this->ajax_hash = $a_hash;
3134 }
3135
3142 {
3143 global $ilUser, $lng, $tpl;
3144
3145 $htpl = new ilTemplate("tpl.header_action.html", true, true, "Services/Repository");
3146
3147 $redraw_js = "il.Object.redrawActionHeader();";
3148
3149 // tags
3150 if($this->tags_enabled)
3151 {
3152 include_once("./Services/Tagging/classes/class.ilTagging.php");
3154 ilObject::_lookupType($this->obj_id), 0, "", $ilUser->getId());
3155 if (count($tags) > 0)
3156 {
3157 include_once("./Services/Tagging/classes/class.ilTaggingGUI.php");
3158 $lng->loadLanguageModule("tagging");
3159 $this->addHeaderIcon("tags",
3160 ilUtil::getImagePath("icon_tag.svg"),
3161 $lng->txt("tagging_tags").": ".count($tags),
3162 ilTaggingGUI::getListTagsJSCall($this->ajax_hash, $redraw_js),
3163 count($tags));
3164 }
3165 }
3166
3167 // notes and comments
3168 $comments_enabled = $this->isCommentsActivated($this->type, $this->ref_id, $this->obj_id, true, false);
3169 if($this->notes_enabled || $comments_enabled)
3170 {
3171 include_once("./Services/Notes/classes/class.ilNote.php");
3172 include_once("./Services/Notes/classes/class.ilNoteGUI.php");
3173 $cnt = ilNote::_countNotesAndComments($this->obj_id, $this->sub_obj_id);
3174
3175 if($this->notes_enabled && $cnt[$this->obj_id][IL_NOTE_PRIVATE] > 0)
3176 {
3177 $this->addHeaderIcon("notes",
3178 ilUtil::getImagePath("note_unlabeled.svg"),
3179 $lng->txt("private_notes").": ".$cnt[$this->obj_id][IL_NOTE_PRIVATE],
3180 ilNoteGUI::getListNotesJSCall($this->ajax_hash, $redraw_js),
3181 $cnt[$this->obj_id][IL_NOTE_PRIVATE]
3182 );
3183 }
3184
3185 if($comments_enabled && $cnt[$this->obj_id][IL_NOTE_PUBLIC] > 0)
3186 {
3187 $lng->loadLanguageModule("notes");
3188
3189 $this->addHeaderIcon("comments",
3190 ilUtil::getImagePath("comment_unlabeled.svg"),
3191 $lng->txt("notes_public_comments").": ".$cnt[$this->obj_id][IL_NOTE_PUBLIC],
3192 ilNoteGUI::getListCommentsJSCall($this->ajax_hash, $redraw_js),
3193 $cnt[$this->obj_id][IL_NOTE_PUBLIC]);
3194 }
3195 }
3196
3197 // rating
3198 if($this->rating_enabled)
3199 {
3200 include_once("./Services/Rating/classes/class.ilRatingGUI.php");
3201 $rating_gui = new ilRatingGUI();
3202 $rating_gui->enableCategories($this->rating_categories_enabled);
3203 // never rate sub objects from header action!
3204 $rating_gui->setObject($this->obj_id, $this->type);
3205 if($this->rating_text)
3206 {
3207 $rating_gui->setYourRatingText($this->rating_text);
3208 }
3209
3210 $this->ctrl->setParameterByClass("ilRatingGUI", "cadh", $this->ajax_hash);
3211 $this->ctrl->setParameterByClass("ilRatingGUI", "rnsb", true);
3212 if($this->rating_ctrl_path)
3213 {
3214 $rating_gui->setCtrlPath($this->rating_ctrl_path);
3215 $ajax_url = $this->ctrl->getLinkTargetByClass($this->rating_ctrl_path, "saveRating", "", true, false);
3216 }
3217 else
3218 {
3219 // ???
3220 $ajax_url = $this->ctrl->getLinkTargetByClass("ilRatingGUI", "saveRating", "", true, false);
3221 }
3222 $tpl->addOnLoadCode("il.Object.setRatingUrl('".$ajax_url."');");
3223
3224 $this->addHeaderIconHTML("rating",
3225 $rating_gui->getHtml(true,
3226 $this->checkCommandAccess("read", "", $this->ref_id, $this->type),
3227 "il.Object.saveRating(%rating%);"));
3228 }
3229
3230 if($this->header_icons)
3231 {
3232 include_once("./Services/UIComponent/Tooltip/classes/class.ilTooltipGUI.php");
3233
3234 $chunks = array();
3235 foreach($this->header_icons as $id => $attr)
3236 {
3237 $id = "headp_".$id;
3238
3239 if(is_array($attr))
3240 {
3241 if($attr["onclick"])
3242 {
3243 $htpl->setCurrentBlock("onclick");
3244 $htpl->setVariable("PROP_ONCLICK", $attr["onclick"]);
3245 $htpl->parseCurrentBlock();
3246 }
3247
3248 if($attr["status_text"])
3249 {
3250 $htpl->setCurrentBlock("status");
3251 $htpl->setVariable("PROP_TXT", $attr["status_text"]);
3252 $htpl->parseCurrentBlock();
3253 }
3254
3255 if(!$attr["href"])
3256 {
3257 $attr["href"] = "#";
3258 }
3259
3260 $htpl->setCurrentBlock("prop");
3261 $htpl->setVariable("PROP_ID", $id);
3262 $htpl->setVariable("IMG", ilUtil::img($attr["img"]));
3263 $htpl->setVariable("PROP_HREF", $attr["href"]);
3264 $htpl->parseCurrentBlock();
3265
3266 if($attr["tooltip"])
3267 {
3268 ilTooltipGUI::addTooltip($id, $attr["tooltip"]);
3269 }
3270 }
3271 else
3272 {
3273 $chunks[] = $attr;
3274 }
3275 }
3276
3277 if(sizeof($chunks))
3278 {
3279 $htpl->setVariable("PROP_CHUNKS",
3280 implode("&nbsp;&nbsp;&nbsp;", $chunks)."&nbsp;&nbsp;&nbsp;");
3281 }
3282 }
3283
3284 $htpl->setVariable("ACTION_DROP_DOWN",
3285 $this->insertCommands(false, false, "", true));
3286
3287 return $htpl->get();
3288 }
3289
3290
3296 {
3297 $script = substr(strrchr($_SERVER["PHP_SELF"],"/"),1);
3298
3299 // we should get rid of this nonsense with 4.4 (alex)
3300 if ((strtolower($_GET["baseClass"]) != "ilrepositorygui") &&
3301 is_int(strpos($a_link,"baseClass=ilRepositoryGUI")))
3302 {
3303 if ($this->type != "frm")
3304 {
3305 $a_link =
3306 ilUtil::appendUrlParameterString($a_link, "rep_frame=1");
3307 }
3308 }
3309
3310 return $a_link;
3311 }
3312
3313 protected function modifyTitleLink($a_default_link)
3314 {
3315 if($this->default_command_params)
3316 {
3317 $params = array();
3318 foreach($this->default_command_params as $name => $value)
3319 {
3320 $params[] = $name.'='.$value;
3321 }
3322 $params = implode('&', $params);
3323
3324
3325 // #12370
3326 if(!stristr($a_default_link, '?'))
3327 {
3328 $a_default_link = ($a_default_link.'?'.$params);
3329 }
3330 else
3331 {
3332 $a_default_link = ($a_default_link.'&'.$params);
3333 }
3334 }
3335 return $a_default_link;
3336 }
3337
3341 function modifySAHSlaunch($a_link,$wtarget)
3342 {
3343 global $ilBrowser;
3344
3345 if (strstr($a_link, 'ilSAHSPresentationGUI') && !$this->offline_mode)
3346 {
3347 include_once 'Modules/ScormAicc/classes/class.ilObjSAHSLearningModule.php';
3348 $sahs_obj = new ilObjSAHSLearningModule($this->ref_id);
3349 $om = $sahs_obj->getOpenMode();
3350 $width = $sahs_obj->getWidth();
3351 $height = $sahs_obj->getHeight();
3352 if ($om != 0 && !$ilBrowser->isMobile())
3353 {
3354 $this->default_command["frame"]="";
3355 $a_link = "javascript:void(0); onclick=startSAHS('".$a_link."','".$wtarget."',".$om.",".$width.",".$height.");";
3356 }
3357 }
3358 return $a_link;
3359 }
3360
3364 function insertPath()
3365 {
3366 global $tree, $lng;
3367
3368 if($this->getPathStatus() != false)
3369 {
3370 include_once 'Services/Tree/classes/class.ilPathGUI.php';
3371 $path_gui = new ilPathGUI();
3372 $path_gui->enableTextOnly(!$this->path_linked);
3373 $path_gui->setUseImages(false);
3374
3375 $start_node = $this->path_start_node
3376 ? $this->path_start_node
3377 : ROOT_FOLDER_ID;
3378
3379 $this->tpl->setCurrentBlock("path_item");
3380 $this->tpl->setVariable('PATH_ITEM',$path_gui->getPath($start_node,$this->ref_id));
3381 $this->tpl->parseCurrentBlock();
3382
3383 $this->tpl->setCurrentBlock("path");
3384 $this->tpl->setVariable("TXT_LOCATION", $lng->txt("locator"));
3385 $this->tpl->parseCurrentBlock();
3386 return true;
3387 }
3388 }
3389
3396 public function insertProgressInfo()
3397 {
3398 return true;
3399 }
3400
3401
3406 {
3407 global $lng, $objDefinition;
3408
3409 $cnt = 0;
3410 if ($this->getCheckboxStatus())
3411 {
3412 $this->tpl->setCurrentBlock("check");
3413 $this->tpl->setVariable("VAL_ID", $this->getCommandId());
3414 $this->tpl->parseCurrentBlock();
3415 $cnt += 1;
3416 }
3417 else if ($this->getDownloadCheckboxState() != self::DOWNLOAD_CHECKBOX_NONE)
3418 {
3419 $this->tpl->setCurrentBlock("check_download");
3420 if ($this->getDownloadCheckboxState() == self::DOWNLOAD_CHECKBOX_ENABLED)
3421 $this->tpl->setVariable("VAL_ID", $this->getCommandId());
3422 else
3423 $this->tpl->setVariable("VAL_VISIBILITY", "visibility: hidden;\" disabled=\"disabled");
3424 $this->tpl->parseCurrentBlock();
3425 $cnt += 1;
3426 }
3427 elseif($this->getExpandStatus())
3428 {
3429 $this->tpl->setCurrentBlock('expand');
3430
3431 if($this->isExpanded())
3432 {
3433 $this->ctrl->setParameter($this->container_obj,'expand',-1 * $this->obj_id);
3434 $this->tpl->setVariable('EXP_HREF',$this->ctrl->getLinkTarget($this->container_obj,'',$this->getUniqueItemId(true)));
3435 $this->ctrl->clearParameters($this->container_obj);
3436 $this->tpl->setVariable('EXP_IMG',ilUtil::getImagePath('tree_exp.svg'));
3437 $this->tpl->setVariable('EXP_ALT',$this->lng->txt('collapse'));
3438 }
3439 else
3440 {
3441 $this->ctrl->setParameter($this->container_obj,'expand',$this->obj_id);
3442 $this->tpl->setVariable('EXP_HREF',$this->ctrl->getLinkTarget($this->container_obj,'',$this->getUniqueItemId(true)));
3443 $this->ctrl->clearParameters($this->container_obj);
3444 $this->tpl->setVariable('EXP_IMG',ilUtil::getImagePath('tree_col.svg'));
3445 $this->tpl->setVariable('EXP_ALT',$this->lng->txt('expand'));
3446 }
3447
3448 $this->tpl->parseCurrentBlock();
3449 $cnt += 1;
3450 }
3451
3452 if ($this->getIconStatus())
3453 {
3454 if ($cnt == 1)
3455 {
3456 $this->tpl->touchBlock("i_1"); // indent
3457 }
3458
3459 // icon link
3460 if ($this->title_link_disabled || !$this->default_command || (!$this->getCommandsStatus() && !$this->restrict_to_goto))
3461 {
3462 }
3463 else
3464 {
3465 $this->tpl->setCurrentBlock("icon_link_s");
3466
3467 if ($this->default_command["frame"] != "")
3468 {
3469 $this->tpl->setVariable("ICON_TAR", "target='".$this->default_command["frame"]."'");
3470 }
3471
3472 $this->tpl->setVariable("ICON_HREF",
3473 $this->default_command["link"]);
3474 $this->tpl->parseCurrentBlock();
3475 $this->tpl->touchBlock("icon_link_e");
3476 }
3477
3478 $this->tpl->setCurrentBlock("icon");
3479 if (!$objDefinition->isPlugin($this->getIconImageType()))
3480 {
3481 $this->tpl->setVariable("ALT_ICON", $lng->txt("icon")." ".$lng->txt("obj_".$this->getIconImageType()));
3482 }
3483 else
3484 {
3485 include_once("Services/Component/classes/class.ilPlugin.php");
3486 $this->tpl->setVariable("ALT_ICON", $lng->txt("icon")." ".
3487 ilPlugin::lookupTxt("rep_robj", $this->getIconImageType(), "obj_".$this->getIconImageType()));
3488 }
3489
3490 $this->tpl->setVariable("SRC_ICON",
3491 ilObject::_getIcon($this->obj_id, "small", $this->getIconImageType()));
3492 $this->tpl->parseCurrentBlock();
3493 $cnt += 1;
3494 }
3495
3496 $this->tpl->touchBlock("d_".$cnt); // indent main div
3497 }
3498
3503 {
3504 foreach ($this->sub_item_html as $sub_html)
3505 {
3506 $this->tpl->setCurrentBlock("subitem");
3507 $this->tpl->setVariable("SUBITEM", $sub_html);
3508 $this->tpl->parseCurrentBlock();
3509 }
3510 }
3511
3516 {
3517 if ($this->position_enabled)
3518 {
3519 $this->tpl->setCurrentBlock("position");
3520 $this->tpl->setVariable("POS_ID", $this->position_field_index);
3521 $this->tpl->setVariable("POS_VAL", $this->position_value);
3522 $this->tpl->parseCurrentBlock();
3523 }
3524 }
3525
3531 {
3532 return $this->adm_commands_included;
3533 }
3534
3539 {
3540 global $ilUser;
3541 if($this->acache->getLastAccessStatus() == "miss" &&
3542 !$this->prevent_access_caching)
3543 {
3544 $this->acache->storeEntry($ilUser->getId().":".$this->ref_id,
3545 serialize($this->access_cache), $this->ref_id);
3546 }
3547 }
3548
3563 function getListItemHTML($a_ref_id, $a_obj_id, $a_title, $a_description,
3564 $a_use_asynch = false, $a_get_asynch_commands = false, $a_asynch_url = "", $a_context = self::CONTEXT_REPOSITORY)
3565 {
3566 global $ilAccess, $ilBench, $ilUser, $ilCtrl;
3567
3568 // this variable stores wheter any admin commands
3569 // are included in the output
3570 $this->adm_commands_included = false;
3571
3572 // only for permformance exploration
3573 $type = ilObject::_lookupType($a_obj_id);
3574
3575 // initialization
3576 $ilBench->start("ilObjectListGUI", "1000_getListHTML_init$type");
3577 $this->initItem($a_ref_id, $a_obj_id, $a_title, $a_description, $a_context);
3578 $ilBench->stop("ilObjectListGUI", "1000_getListHTML_init$type");
3579
3580 // prepare ajax calls
3581 include_once "Services/Object/classes/class.ilCommonActionDispatcherGUI.php";
3582 if($a_context == self::CONTEXT_REPOSITORY)
3583 {
3585 }
3586 else
3587 {
3589 }
3590 $this->setAjaxHash(ilCommonActionDispatcherGUI::buildAjaxHash($node_type, $a_ref_id, $type, $a_obj_id));
3591
3592 if ($a_use_asynch && $a_get_asynch_commands)
3593 {
3594 return $this->insertCommands(true, true);
3595 }
3596
3597 if($this->rating_enabled)
3598 {
3599 if(ilRating::hasRatingInListGUI($this->obj_id, $this->type))
3600 {
3601 $may_rate = $this->checkCommandAccess("read", "", $this->ref_id, $this->type);
3602
3603 $rating = new ilRatingGUI();
3604 $rating->setObject($this->obj_id, $this->type);
3605/* $this->addCustomProperty(
3606 $this->lng->txt("rating_average_rating"),
3607 $rating->getListGUIProperty($this->ref_id, $may_rate, $this->ajax_hash, $this->parent_ref_id),
3608 false,
3609 true
3610 );*/
3611 $this->addCustomProperty(
3612 "",
3613 $rating->getListGUIProperty($this->ref_id, $may_rate, $this->ajax_hash, $this->parent_ref_id),
3614 false,
3615 true
3616 );
3617 }
3618 }
3619
3620 // read from cache
3621 include_once("Services/Object/classes/class.ilListItemAccessCache.php");
3622 $this->acache = new ilListItemAccessCache();
3623 $cres = $this->acache->getEntry($ilUser->getId().":".$a_ref_id);
3624 if($this->acache->getLastAccessStatus() == "hit")
3625 {
3626 $this->access_cache = unserialize($cres);
3627 }
3628 else
3629 {
3630 // write to cache
3631 $this->storeAccessCache();
3632 }
3633
3634 // visible check
3635 if (!$this->checkCommandAccess("visible", "", $a_ref_id, "", $a_obj_id))
3636 {
3637 $ilBench->stop("ilObjectListGUI", "2000_getListHTML_check_visible");
3638 $this->resetCustomData();
3639 return "";
3640 }
3641
3642 // BEGIN WEBDAV
3643 if($type=='file' AND ilObjFileAccess::_isFileHidden($a_title))
3644 {
3645 $this->resetCustomData();
3646 return "";
3647 }
3648 // END WEBDAV
3649
3650
3651 $this->tpl = new ilTemplate("tpl.container_list_item.html", true, true,
3652 "Services/Container", "DEFAULT", false, true);
3653
3654 if ($this->getCommandsStatus() ||
3655 ($this->payment_enabled && IS_PAYMENT_ENABLED))
3656 {
3657 if (!$this->getSeparateCommands())
3658 {
3659 $this->tpl->setVariable("COMMAND_SELECTION_LIST",
3660 $this->insertCommands($a_use_asynch, $a_get_asynch_commands, $a_asynch_url));
3661 }
3662 }
3663
3664 if($this->getProgressInfoStatus())
3665 {
3666 $this->insertProgressInfo();
3667 }
3668
3669 // insert title and describtion
3670 $this->insertTitle();
3671 if (!$this->isMode(IL_LIST_AS_TRIGGER))
3672 {
3673 if ($this->getDescriptionStatus())
3674 {
3675 $this->insertDescription();
3676 }
3677 }
3678
3679 if($this->getSearchFragmentStatus())
3680 {
3681 $this->insertSearchFragment();
3682 }
3683 if($this->enabledRelevance())
3684 {
3685 $this->insertRelevance();
3686 }
3687
3688 // properties
3689 $ilBench->start("ilObjectListGUI", "6000_insert_properties$type");
3690 if ($this->getPropertiesStatus())
3691 {
3692 $this->insertProperties();
3693 }
3694 $ilBench->stop("ilObjectListGUI", "6000_insert_properties$type");
3695
3696 // notice properties
3697 $ilBench->start("ilObjectListGUI", "6500_insert_notice_properties$type");
3698 if($this->getNoticePropertiesStatus())
3699 {
3700 $this->insertNoticeProperties();
3701 }
3702 $ilBench->stop("ilObjectListGUI", "6500_insert_notice_properties$type");
3703
3704 // preconditions
3705 $ilBench->start("ilObjectListGUI", "7000_insert_preconditions");
3706 if ($this->getPreconditionsStatus())
3707 {
3708 $this->insertPreconditions();
3709 }
3710 $ilBench->stop("ilObjectListGUI", "7000_insert_preconditions");
3711
3712 // path
3713 $ilBench->start("ilObjectListGUI", "8000_insert_path");
3714 $this->insertPath();
3715 $ilBench->stop("ilObjectListGUI", "8000_insert_path");
3716
3717 $ilBench->start("ilObjectListGUI", "8500_item_detail_links");
3718 if($this->getItemDetailLinkStatus())
3719 {
3720 $this->insertItemDetailLinks();
3721 }
3722 $ilBench->stop("ilObjectListGUI", "8500_item_detail_links");
3723
3724 // icons and checkboxes
3725 $this->insertIconsAndCheckboxes();
3726
3727 // input field for position
3728 $this->insertPositionField();
3729
3730 // subitems
3731 $this->insertSubItems();
3732
3733 // file upload
3734 if ($this->isFileUploadAllowed())
3735 {
3736 $this->insertFileUpload();
3737 }
3738
3739 $this->resetCustomData();
3740
3741 $this->tpl->setVariable("DIV_CLASS",'ilContainerListItemOuter');
3742 $this->tpl->setVariable("DIV_ID", 'id = "'.$this->getUniqueItemId(true).'"');
3743 $this->tpl->setVariable("ADDITIONAL", $this->getAdditionalInformation());
3744
3745 // #11554 - make sure that internal ids are reset
3746 $this->ctrl->setParameter($this->getContainerObject(), "item_ref_id", "");
3747
3748 return $this->tpl->get();
3749 }
3750
3754 protected function resetCustomData()
3755 {
3756 // #15747
3757 $this->cust_prop = array();
3758 $this->cust_commands = array();
3759 $this->sub_item_html = array();
3760 $this->position_enabled = false;
3761 }
3762
3768 public function setParentRefId($a_ref_id)
3769 {
3770 $this->parent_ref_id = $a_ref_id;
3771 }
3772
3779 protected function getUniqueItemId($a_as_div = false)
3780 {
3781 // use correct id for references
3782 $id_ref = ($this->reference_ref_id > 0)
3783 ? $this->reference_ref_id
3784 : $this->ref_id;
3785
3786 // add unique identifier for preconditions (objects can appear twice in same container)
3787 if($this->condition_depth)
3788 {
3789 $id_ref .= "_pc".$this->condition_depth;
3790 }
3791
3792 // unique
3793 $id_ref .= "_pref_".$this->parent_ref_id;
3794
3795 if(!$a_as_div)
3796 {
3797 return $id_ref;
3798 }
3799 else
3800 {
3801 // action menu [yellow] toggle
3802 return "lg_div_".$id_ref;
3803 }
3804 }
3805
3810 {
3811 return $this->insertCommands();
3812 }
3813
3817 function isSideBlock()
3818 {
3819 return false;
3820 }
3821
3827 public function setBoldTitle($a_bold_title)
3828 {
3829 $this->bold_title = $a_bold_title;
3830
3831 }
3832
3838 public function isTitleBold()
3839 {
3840 return $this->bold_title;
3841 }
3842
3849 static function preloadCommonProperties($a_obj_ids, $a_context)
3850 {
3851 global $lng, $ilSetting, $ilUser;
3852
3853 if($a_context == self::CONTEXT_REPOSITORY)
3854 {
3855 $active_notes = !$ilSetting->get("disable_notes");
3856 $active_comments = !$ilSetting->get("disable_comments");
3857
3858 if($active_notes || $active_comments)
3859 {
3860 include_once("./Services/Notes/classes/class.ilNote.php");
3861 }
3862
3863 if($active_comments)
3864 {
3865 // needed for action
3866 self::$comments_activation = ilNote::getRepObjActivation($a_obj_ids);
3867 }
3868
3869 // properties are optional
3870 if($ilSetting->get('comments_tagging_in_lists'))
3871 {
3872 if($active_notes || $active_comments)
3873 {
3874 self::$cnt_notes = ilNote::_countNotesAndCommentsMultiple($a_obj_ids, true);
3875
3876 $lng->loadLanguageModule("notes");
3877 }
3878
3879 $tags_set = new ilSetting("tags");
3880 if($tags_set->get("enable"))
3881 {
3882 $all_users = $tags_set->get("enable_all_users");
3883
3884 include_once("./Services/Tagging/classes/class.ilTagging.php");
3885 if(!$ilSetting->get('comments_tagging_in_lists_tags'))
3886 {
3887 self::$cnt_tags = ilTagging::_countTags($a_obj_ids, $all_users);
3888 }
3889 else
3890 {
3891 $tag_user_id = null;
3892 if(!$all_users)
3893 {
3894 $tag_user_id = $ilUser->getId();
3895 }
3896 self::$tags = ilTagging::_getListTagsForObjects($a_obj_ids, $tag_user_id);
3897 }
3898
3899 $lng->loadLanguageModule("tagging");
3900 }
3901 }
3902
3903 $lng->loadLanguageModule("rating");
3904 }
3905
3906 self::$preload_done = true;
3907 }
3908
3919 protected function isCommentsActivated($a_type, $a_ref_id, $a_obj_id, $a_header_actions, $a_check_write_access = true)
3920 {
3921 if($this->comments_enabled)
3922 {
3923 if(!$this->comments_settings_enabled)
3924 {
3925 return true;
3926 }
3927 if($a_check_write_access && $this->checkCommandAccess('write','', $a_ref_id, $a_type))
3928 {
3929 return true;
3930 }
3931 // fallback to single object check if no preloaded data
3932 // only the repository does preloadCommonProperties() yet
3933 if(!$a_header_actions && self::$preload_done)
3934 {
3935 if(self::$comments_activation[$a_obj_id][$a_type])
3936 {
3937 return true;
3938 }
3939 }
3940 else
3941 {
3942 include_once("./Services/Notes/classes/class.ilNote.php");
3943 if(ilNote::commentsActivated($a_obj_id, 0, $a_type))
3944 {
3945 return true;
3946 }
3947 }
3948 }
3949 return false;
3950 }
3951
3959 public function enableTimings($a_status)
3960 {
3961 $this->timings_enabled = (bool)$a_status;
3962 }
3963
3969 public function isFileUploadAllowed()
3970 {
3971 // check if file upload allowed
3972 include_once("./Services/FileUpload/classes/class.ilFileUploadUtil.php");
3973 return ilFileUploadUtil::isUploadAllowed($this->ref_id, $this->type);
3974 }
3975
3979 public function insertFileUpload()
3980 {
3981 include_once("./Services/FileUpload/classes/class.ilFileUploadGUI.php");
3983
3984 $upload = new ilFileUploadGUI($this->getUniqueItemId(true), $this->ref_id);
3985
3986 $this->tpl->setCurrentBlock("fileupload");
3987 $this->tpl->setVariable("FILE_UPLOAD", $upload->getHTML());
3988 $this->tpl->parseCurrentBlock();
3989 }
3990}
3991
3992?>
global $tpl
Definition: ilias.php:8
$location
Definition: buildRTE.php:44
$_GET["client_id"]
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.
getListCommentsJSCall($a_hash, $a_update_code=null)
Get list comments js call.
initJavascript($a_ajax_url)
Init javascript.
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:10
< a tabindex="-1" style="border-style: none;" href="#" title="Refresh Image" onclick="document.getElementById('siimage').src = './securimage_show.php?sid=' + Math.random(); this.blur(); return false">< img src="./images/refresh.png" alt="Reload Image" height="32" width="32" onclick="this.blur()" align="bottom" border="0"/></a >< br/>< strong > Enter Code *if($_SERVER['REQUEST_METHOD']=='POST' &&@ $_POST['do']=='contact') $_SESSION['ctform']['success']
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
$preview
global $ilUser
Definition: imgupload.php:15