ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilLocatorGUI.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
16 {
20  protected $tree;
21 
25  protected $ctrl;
26 
30  protected $obj_definition;
31 
35  protected $access;
36 
40  protected $settings;
41 
42  protected $lng;
43  protected $entries;
44 
49  public function __construct()
50  {
51  global $DIC;
52 
53  $this->tree = $DIC->repositoryTree();
54  $this->ctrl = $DIC->ctrl();
55  $this->obj_definition = $DIC["objDefinition"];
56  $this->access = $DIC->access();
57  $this->settings = $DIC->settings();
58  $lng = $DIC->language();
59 
60  $this->lng = $lng;
61  $this->entries = array();
62  $this->setTextOnly(false);
63  $this->offline = false;
64  }
65 
71  public function setTextOnly($a_textonly)
72  {
73  $this->textonly = $a_textonly;
74  }
75 
76  public function setOffline($a_offline)
77  {
78  $this->offline = $a_offline;
79  }
80 
81  public function getOffline()
82  {
83  return $this->offline;
84  }
85 
91  public function getTextOnly()
92  {
93  return $this->textonly;
94  }
95 
102  public function addRepositoryItems($a_ref_id = 0)
103  {
104  $setting = $this->settings;
105  $tree = $this->tree;
107 
108  if ($a_ref_id == 0) {
109  $a_ref_id = $_GET["ref_id"];
110  }
111 
112  include_once './Services/Container/classes/class.ilMemberViewSettings.php';
113  if (ilMemberViewSettings::getInstance()->isActive() and $a_ref_id != ROOT_FOLDER_ID) {
114  $a_start = ilMemberViewSettings::getInstance()->getContainer();
115  } else {
116  $a_start = ROOT_FOLDER_ID;
117  }
118 
119  if ($a_ref_id > 0) {
120  $path = $tree->getPathFull($a_ref_id, $a_start);
121 
122  // check if path contains crs
123  $crs_ref_id = 0;
124  foreach ($path as $k => $v) {
125  if ($v["type"] == "crs") {
126  $crs_ref_id = $v["child"];
127  }
128  }
129  if (!$setting->get("rep_breadcr_crs")) { // no overwrite
130  $crs_ref_id = 0;
131  } elseif ($setting->get("rep_breadcr_crs_overwrite")) { // overwrite
132  // course wants full path
134  $crs_ref_id = 0;
135  }
136  // course wants default and default wants full path
137  if (ilContainer::_lookupContainerSetting(ilObject::_lookupObjId($crs_ref_id), "rep_breacrumb") == ilObjCourseGUI::BREADCRUMB_DEFAULT && !$setting->get("rep_breadcr_crs_default")) {
138  $crs_ref_id = 0;
139  }
140  }
141 
142  // add item for each node on path
143  foreach ((array) $path as $key => $row) {
144  if (!in_array($row["type"], array("root", "cat", "crs", "fold", "grp", "prg", "lso"))) {
145  continue;
146  }
147  if ($crs_ref_id > 0 && $row["child"] == $crs_ref_id) {
148  $crs_ref_id = 0;
149  }
150  if ($crs_ref_id > 0) {
151  continue;
152  }
153 
154  if ($row["title"] == "ILIAS" && $row["type"] == "root") {
155  $row["title"] = $this->lng->txt("repository");
156  }
157 
158  $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $row["child"]);
159  $this->addItem(
160  $row["title"],
161  $ilCtrl->getLinkTargetByClass("ilrepositorygui", "frameset"),
162  ilFrameTargetInfo::_getFrame("MainContent"),
163  $row["child"]
164  );
165  $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $_GET["ref_id"]);
166  }
167  }
168  }
169 
176  public function addAdministrationItems($a_ref_id = 0)
177  {
178  $tree = $this->tree;
180  $objDefinition = $this->obj_definition;
181  $lng = $this->lng;
182 
183  if ($a_ref_id == 0) {
184  $a_ref_id = $_GET["ref_id"];
185  }
186 
187  if ($a_ref_id > 0) {
188  $path = $tree->getPathFull($a_ref_id);
189 
190  // add item for each node on path
191  foreach ($path as $key => $row) {
192  if (!in_array($row["type"], array("root", "cat", "crs", "fold", "grp"))) {
193  continue;
194  }
195 
196  if ($row["child"] == ROOT_FOLDER_ID) {
197  $row["title"] = $lng->txt("repository");
198  }
199 
200  $class_name = $objDefinition->getClassName($row["type"]);
201  $class = strtolower("ilObj" . $class_name . "GUI");
202  $ilCtrl->setParameterByClass($class, "ref_id", $row["child"]);
203  $this->addItem(
204  $row["title"],
205  $ilCtrl->getLinkTargetbyClass($class, "view"),
206  "",
207  $row["child"]
208  );
209  }
210  }
211  }
212 
213  public function addContextItems($a_ref_id, $a_omit_node = false, $a_stop = 0)
214  {
215  $tree = $this->tree;
216 
217  if ($a_ref_id > 0) {
218  $path = $tree->getPathFull($a_ref_id);
219 
220  // we want to show the full path, from the major container to the item
221  // (folders are not! treated as containers here), at least one parent item
222  $r_path = array_reverse($path);
223  $first = "";
224  $omit = array();
225  $do_omit = false;
226  foreach ($r_path as $key => $row) {
227  if ($first == "") {
228  if (in_array($row["type"], array("root", "cat", "grp", "crs")) &&
229  $row["child"] != $a_ref_id) {
230  $first = $row["child"];
231  }
232  }
233  if ($a_stop == $row["child"]) {
234  $do_omit = true;
235  }
236  $omit[$row["child"]] = $do_omit;
237  }
238 
239  $add_it = false;
240  foreach ($path as $key => $row) {
241  if ($first == $row["child"]) {
242  $add_it = true;
243  }
244 
245 
246  if ($add_it && !$omit[$row["child"]] &&
247  (!$a_omit_node || ($row["child"] != $a_ref_id))) {
248  //echo "-".ilObject::_lookupTitle($row["obj_id"])."-";
249  if ($row["title"] == "ILIAS" && $row["type"] == "root") {
250  $row["title"] = $this->lng->txt("repository");
251  }
252  $this->addItem(
253  $row["title"],
254  "./goto.php?client_id=" . rawurlencode(CLIENT_ID) . "&target=" . $row["type"] . "_" . $row["child"],
255  "_top",
256  $row["child"],
257  $row["type"]
258  );
259  }
260  }
261  }
262  }
263 
271  public function addItem($a_title, $a_link, $a_frame = "", $a_ref_id = 0, $type = null)
272  {
273  // LTI
274  global $DIC;
275  $ltiview = $DIC['lti'];
276 
277  $ilAccess = $this->access;
278 
279  if ($a_ref_id > 0 && !$ilAccess->checkAccess("visible", "", $a_ref_id)) {
280  return;
281  }
282  // LTI
283  if ($ltiview->isActive()) {
284  $a_frame = "_self";
285  }
286  $this->entries[] = array("title" => $a_title,
287  "link" => $a_link, "frame" => $a_frame, "ref_id" => $a_ref_id, "type" => $type);
288  }
289 
293  public function clearItems()
294  {
295  $this->entries = array();
296  }
297 
301  public function getItems()
302  {
303  return $this->entries;
304  }
305 
309  public function getHTML()
310  {
311  global $DIC;
312  $ltiview = $DIC["lti"];
313  if ($ltiview->isActive() && !$ltiview->show_locator) {
314  return "";
315  }
316  $lng = $this->lng;
318 
319  if ($this->getTextOnly()) {
320  $loc_tpl = new ilTemplate("tpl.locator_text_only.html", true, true, "Services/Locator");
321  } else {
322  $loc_tpl = new ilTemplate("tpl.locator.html", true, true, "Services/Locator");
323  }
324 
325  $items = $this->getItems();
326  $first = true;
327 
328  if (is_array($items)) {
329  foreach ($items as $item) {
330  if (!$first) {
331  $loc_tpl->touchBlock("locator_separator_prefix");
332  }
333 
334  if ($item["ref_id"] > 0) {
335  $obj_id = ilObject::_lookupObjId($item["ref_id"]);
336  $type = ilObject::_lookupType($obj_id);
337 
338  if (!$this->getTextOnly()) {
339  $icon_path = ilObject::_getIcon(
340  $obj_id,
341  "tiny",
342  $type,
343  $this->getOffline()
344  );
345  }
346 
347  $loc_tpl->setCurrentBlock("locator_img");
348  $loc_tpl->setVariable("IMG_SRC", $icon_path);
349  $loc_tpl->setVariable(
350  "IMG_ALT",
351  $lng->txt("obj_" . $type)
352  );
353  $loc_tpl->parseCurrentBlock();
354  }
355 
356  $loc_tpl->setCurrentBlock("locator_item");
357  if ($item["link"] != "") {
358  $loc_tpl->setVariable("LINK_ITEM", $item["link"]);
359  if ($item["frame"] != "") {
360  $loc_tpl->setVariable("LINK_TARGET", ' target="' . $item["frame"] . '" ');
361  }
362  $loc_tpl->setVariable("ITEM", $item["title"]);
363  } else {
364  $loc_tpl->setVariable("PREFIX", $item["title"]);
365  }
366  $loc_tpl->parseCurrentBlock();
367 
368  $first = false;
369  }
370  } else {
371  $loc_tpl->setVariable("NOITEM", "&nbsp;");
372  $loc_tpl->touchBlock("locator");
373  }
374  $loc_tpl->setVariable("TXT_BREADCRUMBS", $lng->txt("breadcrumb_navigation"));
375 
376  return trim($loc_tpl->get());
377  }
378 
382  public function getTextVersion()
383  {
384  $lng = $this->lng;
386 
387  $items = $this->getItems();
388  $first = true;
389 
390  $str = "";
391  if (is_array($items)) {
392  foreach ($items as $item) {
393  if (!$first) {
394  $str .= " > ";
395  }
396 
397  $str .= $item["title"];
398 
399  $first = false;
400  }
401  }
402 
403  return $str;
404  }
405 } // END class.LocatorGUI
$path
Definition: aliased.php:25
settings()
Definition: settings.php:2
getHTML()
Get locator HTML.
addItem($a_title, $a_link, $a_frame="", $a_ref_id=0, $type=null)
add locator item
clearItems()
Clear all Items.
$type
global $DIC
Definition: saml.php:7
$_GET["client_id"]
addContextItems($a_ref_id, $a_omit_node=false, $a_stop=0)
getItems()
Get all locator entries.
getTextOnly()
Get Only text, no HTML.
addAdministrationItems($a_ref_id=0)
add administration tree items
locator handling class
global $ilCtrl
Definition: ilias.php:18
getTextVersion()
Get text version.
setTextOnly($a_textonly)
Set Only text, no HTML.
static _lookupObjId($a_id)
special template class to simplify handling of ITX/PEAR
static _lookupType($a_id, $a_reference=false)
lookup object type
$row
__construct()
Constructor.
static _getFrame($a_class, $a_type='')
Get content frame name.
global $ilSetting
Definition: privfeed.php:17
static getInstance()
Get instance.
addRepositoryItems($a_ref_id=0)
add repository item
setOffline($a_offline)
$key
Definition: croninfo.php:18
static _lookupContainerSetting($a_id, $a_keyword, $a_default_value=null)
Lookup a container setting.