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