ILIAS  release_5-0 Revision 5.0.0-1144-gc4397b1f870
class.ilRepositoryExplorerGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4include_once("./Services/UIComponent/Explorer2/classes/class.ilTreeExplorerGUI.php");
5
17{
18 protected $type_grps = array();
19 protected $session_materials = array();
20
24 public function __construct($a_parent_obj, $a_parent_cmd)
25 {
26 global $tree, $ilSetting, $objDefinition;
27
28 $this->cur_ref_id = (int) $_GET["ref_id"];
29
30 $this->top_node_id = 0;
31 if ($ilSetting->get("rep_tree_limit_grp_crs") && $this->cur_ref_id > 0)
32 {
33 $path = $tree->getPathId($this->cur_ref_id);
34 foreach ($path as $n)
35 {
36 if ($top_node > 0)
37 {
38 break;
39 }
41 array("crs", "grp")))
42 {
43 $this->top_node_id = $n;
44 }
45 }
46
47 }
48
49 parent::__construct("rep_exp", $a_parent_obj, $a_parent_cmd, $tree);
50
51 $this->setSkipRootNode(false);
52 $this->setAjax(true);
53 $this->setOrderField("title");
54
55 if ($ilSetting->get("repository_tree_pres") == "" ||
56 ($ilSetting->get("rep_tree_limit_grp_crs") && $this->top_node_id == 0))
57 {
58 $this->setTypeWhiteList(array("root", "cat", "catr", "grp", "icrs",
59 "crs", "crsr", "rcrs", "itgr"));
60 }
61 else if ($ilSetting->get("repository_tree_pres") == "all_types")
62 {
63 $white = array();
64 foreach ($objDefinition->getSubObjectsRecursively("root") as $rtype)
65 {
66 if (/* $rtype["name"] != "itgr" && */ !$objDefinition->isSideBlock($rtype["name"]))
67 {
68 $white[] = $rtype["name"];
69 }
70 }
71 $this->setTypeWhiteList($white);
72 }
73 if ((int) $_GET["ref_id"] > 0)
74 {
75 $this->setPathOpen((int) $_GET["ref_id"]);
76 }
77 }
78
85 function getRootNode()
86 {
87 if ($this->top_node_id > 0)
88 {
89 return $this->getTree()->getNodeData($this->top_node_id);
90 }
91 else
92 {
93 return parent::getRootNode();
94 }
95 }
96
103 function getNodeContent($a_node)
104 {
105 global $lng;
106
107 $title = $a_node["title"];
108
109 if ($a_node["child"] == $this->getNodeId($this->getRootNode()))
110 {
111 if ($title == "ILIAS")
112 {
113 $title = $lng->txt("repository");
114 }
115 }
116 else if($a_node["type"] == "sess" &&
117 !trim($title))
118 {
119 // #14367 - see ilObjSessionListGUI
120 include_once('./Modules/Session/classes/class.ilSessionAppointment.php');
121 $app_info = ilSessionAppointment::_lookupAppointment($a_node["obj_id"]);
122 $title = ilSessionAppointment::_appointmentToString($app_info['start'], $app_info['end'],$app_info['fullday']);
123 }
124
125 return $title;
126 }
127
134 function getNodeIcon($a_node)
135 {
136 $obj_id = ilObject::_lookupObjId($a_node["child"]);
137 return ilObject::_getIcon($obj_id, "tiny", $a_node["type"]);
138 }
139
146 function getNodeIconAlt($a_node)
147 {
148 global $lng;
149
150 if ($a_node["child"] == $this->getNodeId($this->getRootNode()))
151 {
152 $title = $a_node["title"];
153 if ($title == "ILIAS")
154 {
155 $title = $lng->txt("repository");
156 }
157 return $lng->txt("icon")." ".$title;
158 }
159
160
161 return parent::getNodeIconAlt($a_node);
162 }
163
170 function isNodeHighlighted($a_node)
171 {
172 if ($a_node["child"] == $_GET["ref_id"] ||
173 ($_GET["ref_id"] == "" && $a_node["child"] == $this->getNodeId($this->getRootNode())))
174 {
175 return true;
176 }
177 return false;
178 }
179
186 function getNodeHref($a_node)
187 {
188 global $ilCtrl;
189
190 switch($a_node["type"])
191 {
192 case "root":
193 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $a_node["child"]);
194 $link = $ilCtrl->getLinkTargetByClass("ilrepositorygui", "");
195 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $_GET["ref_id"]);
196 return $link;
197
198 case "cat":
199 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $a_node["child"]);
200 $link = $ilCtrl->getLinkTargetByClass("ilrepositorygui", "");
201 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $_GET["ref_id"]);
202 return $link;
203
204 case "catr":
205 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $a_node["child"]);
206 $link = $ilCtrl->getLinkTargetByClass("ilrepositorygui", "redirect");
207 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $_GET["ref_id"]);
208 return $link;
209
210 case "grp":
211 $ilCtrl->setParameterByClass("ilobjgroupgui", "ref_id", $a_node["child"]);
212 $link = $ilCtrl->getLinkTargetByClass(array("ilrepositorygui", "ilobjgroupgui"), "");
213 $ilCtrl->setParameterByClass("ilobjgroupgui", "ref_id", $_GET["ref_id"]);
214 return $link;
215
216 case "crs":
217 $ilCtrl->setParameterByClass("ilobjcoursegui", "ref_id", $a_node["child"]);
218 $link = $ilCtrl->getLinkTargetByClass(array("ilrepositorygui", "ilobjcoursegui"), "view");
219 $ilCtrl->setParameterByClass("ilobjcoursegui", "ref_id", $_GET["ref_id"]);
220 return $link;
221
222 case "crsr":
223 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $a_node["child"]);
224 $link = $ilCtrl->getLinkTargetByClass("ilrepositorygui", "redirect");
225 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $_GET["ref_id"]);
226 return $link;
227
228 case "icrs":
229 $ilCtrl->setParameterByClass("ilobjilinccoursegui", "ref_id", $a_node["child"]);
230 $link = $ilCtrl->getLinkTargetByClass(array("ilrepositorygui", "ilobjilinccoursegui"), "");
231 $ilCtrl->setParameterByClass("ilobjilinccoursegui", "ref_id", $_GET["ref_id"]);
232 return $link;
233
234 case 'rcrs':
235 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $a_node["child"]);
236 $link = $ilCtrl->getLinkTargetByClass("ilrepositorygui", "infoScreen");
237 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $_GET["ref_id"]);
238 return $link;
239
240 default:
241 include_once('./Services/Link/classes/class.ilLink.php');
242 return ilLink::_getStaticLink($a_node["child"], $a_node["type"], true);
243
244 }
245 }
246
253 function isNodeVisible($a_node)
254 {
255 global $ilAccess,$tree,$ilSetting;
256
257 if (!$ilAccess->checkAccess('visible', '', $a_node["child"]))
258 {
259 return false;
260 }
261
262 $is_course = false;
263 $container_parent_id = $tree->checkForParentType($a_node["child"], 'grp');
264 if(!$container_parent_id)
265 {
266 $is_course = true;
267 $container_parent_id = $tree->checkForParentType($a_node["child"], 'crs');
268 }
269 if($container_parent_id)
270 {
271 // do not display session materials for container course/group
272 if($ilSetting->get("repository_tree_pres") == "all_types" && $container_parent_id != $a_node["child"])
273 {
274 // get container event items only once
275 if(!isset($this->session_materials[$container_parent_id]))
276 {
277 include_once './Modules/Session/classes/class.ilEventItems.php';
278 $this->session_materials[$container_parent_id] = ilEventItems::_getItemsOfContainer($container_parent_id);
279 }
280 if(in_array($a_node["child"], $this->session_materials[$container_parent_id]))
281 {
282 return false;
283 }
284 }
285 }
286
287 return true;
288 }
289
298 function sortChilds($a_childs, $a_parent_node_id)
299 {
300 global $objDefinition, $ilAccess;
301
302 $parent_obj_id = ilObject::_lookupObjId($a_parent_node_id);
303 if ($parent_obj_id > 0)
304 {
305 $parent_type = ilObject::_lookupType($parent_obj_id);
306 }
307 else
308 {
309 $parent_type = "dummy";
310 $this->type_grps["dummy"] = array("root" => "dummy");
311 }
312
313 // alex: if this is not initialized, things are messed up
314 // see bug 0015978
315 $this->type_grps = array();
316
317 if (empty($this->type_grps[$parent_type]))
318 {
319 $this->type_grps[$parent_type] =
320 $objDefinition->getGroupedRepositoryObjectTypes($parent_type);
321 }
322
323 // #14465 - item groups
324 include_once('./Services/Object/classes/class.ilObjectActivation.php');
325 $group = array();
326 $igroup = array(); // used for item groups, see bug #0015978
327 $in_any_group = array();
328 foreach ($a_childs as $child)
329 {
330 // item group: get childs
331 if ($child["type"] == "itgr")
332 {
333 $g = $child["child"];
334
336 if ($items)
337 {
338 // add item group ref id to item group block
339 $this->type_grps[$parent_type]["itgr"]["ref_ids"][] = $g;
340
341 // #16697 - check item group permissions
342 $may_read = $ilAccess->checkAccess('read', '', $g);
343
344 // see bug #0015978
345 if ($may_read)
346 {
347 include_once("./Services/Container/classes/class.ilContainerSorting.php");
348 $items = ilContainerSorting::_getInstance($parent_obj_id)->sortSubItems('itgr', $child["obj_id"], $items);
349 }
350
351 foreach($items as $item)
352 {
353 $in_any_group[] = $item["child"];
354
355 if($may_read)
356 {
357 $igroup[$g][] = $item;
358 $group[$g][] = $item;
359 }
360 }
361 }
362 }
363 // type group
364 else
365 {
366 $g = $objDefinition->getGroupOfObj($child["type"]);
367 if ($g == "")
368 {
369 $g = $child["type"];
370 }
371 $group[$g][] = $child;
372 }
373 }
374
375 $in_any_group = array_unique($in_any_group);
376
377 // custom block sorting?
378 include_once("./Services/Container/classes/class.ilContainerSorting.php");
379 $sort = ilContainerSorting::_getInstance($parent_obj_id);
380 $block_pos = $sort->getBlockPositions();
381 if (sizeof($block_pos))
382 {
383 $tmp = $this->type_grps[$parent_type];
384
385 $this->type_grps[$parent_type] = array();
386 foreach ($block_pos as $block_type)
387 {
388 // type group
389 if (!is_numeric($block_type) &&
390 array_key_exists($block_type, $tmp))
391 {
392 $this->type_grps[$parent_type][$block_type] = $tmp[$block_type];
393 unset($tmp[$block_type]);
394 }
395 // item group
396 else
397 {
398 // using item group ref id directly
399 $this->type_grps[$parent_type][$block_type] = array();
400 }
401 }
402
403 // append missing
404 if (sizeof($tmp))
405 {
406 foreach ($tmp as $block_type => $grp)
407 {
408 $this->type_grps[$parent_type][$block_type] = $grp;
409 }
410 }
411
412 unset($tmp);
413 }
414
415 $childs = array();
416 $done = array();
417
418 foreach ($this->type_grps[$parent_type] as $t => $g)
419 {
420 // type group
421 if (is_array($group[$t]))
422 {
423 // see bug #0015978
424 // custom sorted igroups
425 if (is_array($igroup[$t]))
426 {
427 foreach ($igroup[$t] as $k => $item)
428 {
429 if (!in_array($item["child"], $done))
430 {
431 $childs[] = $item;
432 $done[] = $item["child"];
433 }
434 }
435 }
436 else
437 {
438 // do we have to sort this group??
439 include_once("./Services/Container/classes/class.ilContainer.php");
440 include_once("./Services/Container/classes/class.ilContainerSorting.php");
441 $sort = ilContainerSorting::_getInstance($parent_obj_id);
442 $group = $sort->sortItems($group);
443
444 // need extra session sorting here
445 if ($t == "sess")
446 {
447
448 }
449
450 foreach ($group[$t] as $k => $item)
451 {
452 if (!in_array($item["child"], $done) &&
453 !in_array($item["child"], $in_any_group)) // #16697
454 {
455 $childs[] = $item;
456 $done[] = $item["child"];
457 }
458 }
459 }
460 }
461 // item groups (if not custom block sorting)
462 else if ($t == "itgr" &&
463 is_array($g["ref_ids"]))
464 {
465 foreach ($g["ref_ids"] as $ref_id)
466 {
467 if (isset($group[$ref_id]))
468 {
469 foreach ($group[$ref_id] as $k => $item)
470 {
471 if(!in_array($item["child"], $done))
472 {
473 $childs[] = $item;
474 $done[] = $item["child"];
475 }
476 }
477 }
478 }
479 }
480 }
481
482 return $childs;
483 }
484
491 function getChildsOfNode($a_parent_node_id)
492 {
493 global $rbacsystem;
494
495 if (!$rbacsystem->checkAccess("read", $a_parent_node_id))
496 {
497 return array();
498 }
499
500 $obj_id = ilObject::_lookupObjId($a_parent_node_id);
501 if (!ilConditionHandler::_checkAllConditionsOfTarget($a_parent_node_id, $obj_id))
502 {
503 return array();
504 }
505
506 return parent::getChildsOfNode($a_parent_node_id);
507 }
508
515 function isNodeClickable($a_node)
516 {
517 global $rbacsystem,$tree,$ilDB,$ilUser,$ilAccess;
518
519 $obj_id = ilObject::_lookupObjId($a_node["child"]);
520 if (!ilConditionHandler::_checkAllConditionsOfTarget($a_node["child"], $obj_id))
521 {
522 return false;
523 }
524
525 switch ($a_node["type"])
526 {
527 case "crs":
528 return $ilAccess->checkAccess("read", "", $a_node["child"]);
529
530 // visible groups can allways be clicked; group processing decides
531 // what happens next
532 case "grp":
533 return true;
534
535 case 'tst':
536 if(!$rbacsystem->checkAccess("read", $a_node["child"]))
537 {
538 return false;
539 }
540
541 $query = sprintf("SELECT * FROM tst_tests WHERE obj_fi=%s", $obj_id);
542 $res = $ilDB->query($query);
543 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
544 {
545 return (bool) $row->complete;
546 }
547 return false;
548
549 case 'svy':
550 if(!$rbacsystem->checkAccess("read", $a_node["child"]))
551 {
552 return false;
553 }
554
555 $query = sprintf("SELECT * FROM svy_svy WHERE obj_fi=%s", $obj_id);
556 $res = $ilDB->query($query);
557 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
558 {
559 return (bool) $row->complete;
560 }
561 return false;
562
563 // media pools can only be edited
564 case "mep":
565 if ($rbacsystem->checkAccess("read", $a_node["child"]))
566 {
567 return true;
568 }
569 else
570 {
571 return false;
572 }
573 break;
574
575 case 'crsr':
576 case 'catr':
577 include_once('./Services/ContainerReference/classes/class.ilContainerReferenceAccess.php');
578 return ilContainerReferenceAccess::_isAccessible($a_node["child"]);
579
580
581 // all other types are only clickable, if read permission is given
582 default:
583 if ($rbacsystem->checkAccess("read", $a_node["child"]))
584 {
585 // check if lm is online
586 if ($a_node["type"] == "lm")
587 {
588 include_once("./Modules/LearningModule/classes/class.ilObjLearningModule.php");
589 $lm_obj =& new ilObjLearningModule($a_node["child"]);
590 if((!$lm_obj->getOnline()) && (!$rbacsystem->checkAccess('write', $a_node["child"])))
591 {
592 return false;
593 }
594 }
595 // check if fblm is online
596 if ($a_node["type"] == "htlm")
597 {
598 include_once("./Modules/HTMLLearningModule/classes/class.ilObjFileBasedLM.php");
599 $lm_obj =& new ilObjFileBasedLM($a_node["child"]);
600 if((!$lm_obj->getOnline()) && (!$rbacsystem->checkAccess('write', $a_node["child"])))
601 {
602 return false;
603 }
604 }
605 // check if fblm is online
606 if ($a_node["type"] == "sahs")
607 {
608 include_once("./Modules/ScormAicc/classes/class.ilObjSAHSLearningModule.php");
609 $lm_obj =& new ilObjSAHSLearningModule($a_node["child"]);
610 if((!$lm_obj->getOnline()) && (!$rbacsystem->checkAccess('write', $a_node["child"])))
611 {
612 return false;
613 }
614 }
615 // check if glossary is online
616 if ($a_node["type"] == "glo")
617 {
618 $obj_id = ilObject::_lookupObjectId($a_node["child"]);
619 include_once("./Modules/Glossary/classes/class.ilObjGlossary.php");
620 if((!ilObjGlossary::_lookupOnline($obj_id)) &&
621 (!$rbacsystem->checkAccess('write', $a_node["child"])))
622 {
623 return false;
624 }
625 }
626
627 return true;
628 }
629 else
630 {
631 return false;
632 }
633 break;
634 }
635 }
636
637}
638
639?>
$n
Definition: RandomTest.php:80
$_GET["client_id"]
const DB_FETCHMODE_OBJECT
Definition: class.ilDB.php:11
_checkAllConditionsOfTarget($a_target_ref_id, $a_target_id, $a_target_type="", $a_usr_id=0)
checks wether all conditions of a target object are fulfilled
static _isAccessible($a_ref_id)
Check if target is accessible and not deleted.
static _getInstance($a_obj_id)
get instance by obj_id
_getItemsOfContainer($a_ref_id)
setSkipRootNode($a_val)
Set skip root node.
File Based Learning Module (HTML) object.
_lookupOnline($a_id)
check wether content object is online
Class ilObjLearningModule.
Class ilObjSCORMLearningModule.
static getItemsByItemGroup($a_item_group_ref_id)
Get materials of item group.
static _lookupObjId($a_id)
static _lookupObjectId($a_ref_id)
lookup object id
static _getIcon($a_obj_id="", $a_size="big", $a_type="", $a_offline=false)
Get icon for repository item.
static _lookupType($a_id, $a_reference=false)
lookup object type
Repository explorer GUI class.
getNodeContent($a_node)
Get node content.
getChildsOfNode($a_parent_node_id)
Get childs of node.
isNodeHighlighted($a_node)
Is node highlighted?
getNodeHref($a_node)
Get href for node.
sortChilds($a_childs, $a_parent_node_id)
Sort childs.
__construct($a_parent_obj, $a_parent_cmd)
Constructor.
isNodeClickable($a_node)
Is node clickable?
isNodeVisible($a_node)
Is node visible.
getNodeIconAlt($a_node)
Get node icon alt text.
static _lookupAppointment($a_obj_id)
lookup appointment
static _appointmentToString($start, $end, $fulltime)
Explorer class that works on tree objects (Services/Tree)
setTypeWhiteList($a_val)
Set type white list.
setPathOpen($a_id)
Set node path to be opened.
getNodeId($a_node)
Get id for node.
setOrderField($a_val, $a_numeric=false)
Set order field.
global $ilCtrl
Definition: ilias.php:18
global $lng
Definition: privfeed.php:40
global $ilSetting
Definition: privfeed.php:40
$ref_id
Definition: sahs_server.php:39
$path
Definition: index.php:22
global $ilDB
global $ilUser
Definition: imgupload.php:15