ILIAS  eassessment Revision 61809
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilRepositoryExplorer.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
4 
5 require_once("classes/class.ilExplorer.php");
6 
7 /*
8  * Repository Explorer
9  *
10  * @author Alex Killing <alex.killing@gmx.de>
11  * @version $Id: class.ilRepositoryExplorer.php 31725 2011-11-17 09:40:21Z hschottm $
12  * @ingroup ServicesRepository
13  */
15 {
16 
22  var $root_id;
23  var $output;
24  var $ctrl;
31  function ilRepositoryExplorer($a_target, $a_top_node = 0)
32  {
33  global $tree, $ilCtrl, $lng, $ilSetting, $objDefinition;
34 
35  $this->ctrl = $ilCtrl;
36 
37 
38  $this->force_open_path = array();
39 
40 
41  parent::ilExplorer($a_target);
42  $this->tree = $tree;
43  $this->root_id = $this->tree->readRootId();
44  $this->order_column = "title";
45  $this->setSessionExpandVariable("repexpand");
46  $this->setTitle($lng->txt("overview"));
47 
48  // please do not uncomment this
49  if ($ilSetting->get("repository_tree_pres") == "" ||
50  ($ilSetting->get("rep_tree_limit_grp_crs") && $a_top_node == 0))
51  {
52  $this->addFilter("root");
53  $this->addFilter("cat");
54  $this->addFilter('catr');
55  $this->addFilter("grp");
56  $this->addFilter("icrs");
57  $this->addFilter("crs");
58  $this->addFilter('crsr');
59  $this->addFilter('rcrs');
60  $this->setFiltered(true);
62  }
63  else if ($ilSetting->get("repository_tree_pres") == "all_types")
64  {
65  foreach ($objDefinition->getAllRBACObjects() as $rtype)
66  {
67  $this->addFilter($rtype);
68  }
69  $this->setFiltered(true);
71  }
72  }
73 
77  function setForceOpenPath($a_path)
78  {
79  $this->force_open_path = $a_path;
80  }
81 
85  function buildLinkTarget($a_node_id, $a_type)
86  {
87  global $ilCtrl;
88 
89  switch($a_type)
90  {
91  case "cat":
92  return "repository.php?ref_id=".$a_node_id;
93 
94  case "catr":
95  #include_once('./Services/ContainerReference/classes/class.ilContainerReference.php');
96  #$t_obj_id = ilContainerReference::_lookupTargetId(ilObject::_lookupObjId($a_node_id));
97  #$ref_ids = ilObject::_getAllReferences($t_obj_id);
98  #$a_node_id = current($ref_ids);
99  return "repository.php?cmd=redirect&ref_id=".$a_node_id;
100 
101  case "grp":
102  return "repository.php?ref_id=".$a_node_id."&cmdClass=ilobjgroupgui";
103 
104  case "crs":
105  return "repository.php?ref_id=".$a_node_id."&cmdClass=ilobjcoursegui&cmd=view";
106 
107  case "crsr":
108  #include_once('./Services/ContainerReference/classes/class.ilContainerReference.php');
109  #$t_obj_id = ilContainerReference::_lookupTargetId(ilObject::_lookupObjId($a_node_id));
110  #$ref_ids = ilObject::_getAllReferences($t_obj_id);
111  #$a_node_id = current($ref_ids);
112  return "repository.php?cmd=redirect&ref_id=".$a_node_id;
113 
114  case 'crsg':
115  return "repository.php?ref_id=".$a_node_id;
116 
117  case 'webr':
118  return "ilias.php?baseClass=ilLinkResourceHandlerGUI&ref_id=".$a_node_id;
119 
120  case "icrs":
121  return "repository.php?ref_id=".$a_node_id."&cmdClass=ilobjilinccoursegui";
122 
123  case 'rcrs':
124  return "repository.php?cmd=infoScreen&ref_id=".$a_node_id;
125 
126  default:
127  include_once('classes/class.ilLink.php');
128  return ilLink::_getStaticLink($a_node_id, $a_type, true);
129 
130  }
131  }
132 
137  function buildEditLinkTarget($a_node_id, $a_type)
138  {
139  global $ilCtrl;
140 
141  switch($a_type)
142  {
143  case "cat":
144  return "repository.php?cmd=edit&ref_id=".$a_node_id;
145 
146  case "catr":
147  return "repository.php?cmd=edit&ref_id=".$a_node_id;
148 
149  case "lm":
150  case "dbk":
151  return "ilias.php?baseClass=ilLMEditorGUI&amp;ref_id=".$a_node_id;
152 
153  case "htlm":
154  return "ilias.php?baseClass=ilHTLMEditorGUI&amp;ref_id=".$a_node_id;
155 
156  case "sahs":
157  return "ilias.php?baseClass=ilSAHSEditGUI&ref_id=".$a_node_id;
158 
159  case "mep":
160  return "ilias.php?baseClass=ilMediaPoolPresentationGUI&ref_id=".$a_node_id;
161 
162  case "grp":
163  return; // following link is the same as "read" link
164  return "repository.php?ref_id=".$a_node_id."&cmdClass=ilobjgroupgui";
165 
166  case "crs":
167  return "repository.php?ref_id=".$a_node_id."&cmdClass=ilobjcoursegui&cmd=edit";
168 
169  case "crsr":
170  return "repository.php?ref_id=".$a_node_id;
171 
172  case "glo":
173  return "ilias.php?baseClass=ilGlossaryEditorGUI&ref_id=".$a_node_id;
174 
175  case "exc":
176  return "ilias.php?baseClass=ilExerciseHandlerGUI&cmd=view&ref_id=".$a_node_id;
177 
178  case "fold":
179  return "repository.php?cmd=edit&ref_id=".$a_node_id;
180 
181  case "file":
182  return "repository.php?cmd=edit&cmdClass=ilobjfilegui&ref_id=".$a_node_id;
183 
184  case "sess":
185  return "repository.php?cmd=edit&ref_id=".$a_node_id;
186 
187  case 'tst':
188  return "ilias.php?baseClass=ilObjTestGUI&ref_id=".$a_node_id;
189  #return "assessment/test.php?ref_id=".$a_node_id;
190 
191  case 'svy':
192  return "survey/survey.php?ref_id=".$a_node_id;
193 
194  case 'qpl':
195  return "assessment/questionpool.php?ref_id=".$a_node_id
196  ."&cmd=questions";
197 
198  case 'spl':
199  return "survey/questionpool.php?ref_id=".$a_node_id
200  ."&cmd=questions";
201 
202  case 'svy':
203  return "survey/survey.php?ref_id=".$a_node_id;
204 
205  case 'crsg':
206  return "repository.php?cmd=edit&ref_id=".$a_node_id;
207 
208  case 'webr':
209  return "ilias.php?baseClass=ilLinkResourceHandlerGUI&cmd=editItems&ref_id=".$a_node_id;
210 
211  case 'rcrs':
212  return "repository.php?cmd=infoScreen&ref_id=".$a_node_id;
213 
214  }
215  }
216 
223  function buildFrameTarget($a_type, $a_child = 0, $a_obj_id = 0)
224  {
225  global $ilias;
226 
227  switch($a_type)
228  {
229  case "cat":
230  $t_frame = ilFrameTargetInfo::_getFrame("RepositoryContent", "cat");
231  return $t_frame;
232 
233  case "catr":
234  $t_frame = ilFrameTargetInfo::_getFrame("RepositoryContent", "catr");
235  return $t_frame;
236 
237  case "grp":
238  $t_frame = ilFrameTargetInfo::_getFrame("RepositoryContent", "grp");
239  return $t_frame;
240 
241  case "crs":
242  $t_frame = ilFrameTargetInfo::_getFrame("RepositoryContent", "crs");
243  return $t_frame;
244 
245  case "crsr":
246  $t_frame = ilFrameTargetInfo::_getFrame("RepositoryContent", "crsr");
247  return $t_frame;
248 
249  case 'rcrs':
250  $t_frame = ilFrameTargetInfo::_getFrame("RepositoryContent",'rcrs');
251  return $t_frame;
252 
253  default:
254  return "_top";
255  }
256  }
257 
261  function getImage($a_name, $a_type = "", $a_obj_id = "")
262  {
263  if ($a_type != "")
264  {
265  return ilObject::_getIcon($a_obj_id, "tiny", $a_type);
266  }
267 
268  return parent::getImage($a_name);
269  }
270 
271  function isClickable($a_type, $a_ref_id,$a_obj_id = 0)
272  {
273  global $rbacsystem,$tree,$ilDB,$ilUser;
274 
275  if(!ilConditionHandler::_checkAllConditionsOfTarget($a_ref_id,$a_obj_id))
276  {
277  return false;
278  }
279 
280  switch ($a_type)
281  {
282  case "crs":
283  include_once './Modules/Course/classes/class.ilObjCourse.php';
284 
285  // Has to be replaced by ilAccess calls
286  if(!ilObjCourse::_isActivated($a_obj_id) and !$rbacsystem->checkAccess('write',$a_ref_id))
287  {
288  return false;
289  }
290 
291  include_once './Modules/Course/classes/class.ilCourseParticipants.php';
292 
293  if(ilCourseParticipants::_isBlocked($a_obj_id,$ilUser->getId()))
294  {
295  return false;
296  }
297  if(($rbacsystem->checkAccess('join',$a_ref_id) or
298  $rbacsystem->checkAccess('read',$a_ref_id)))
299  {
300  return true;
301  }
302  return false;
303 
304  // visible groups can allways be clicked; group processing decides
305  // what happens next
306  case "grp":
307  return true;
308  break;
309 
310  case 'tst':
311  if(!$rbacsystem->checkAccess("read", $a_ref_id))
312  {
313  return false;
314  }
315 
316  $query = sprintf("SELECT * FROM tst_tests WHERE obj_fi=%s",$a_obj_id);
317  $res = $ilDB->query($query);
318  while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
319  {
320  return (bool) $row->complete;
321  }
322  return false;
323 
324  case 'svy':
325  if(!$rbacsystem->checkAccess("read", $a_ref_id))
326  {
327  return false;
328  }
329 
330  $query = sprintf("SELECT * FROM svy_svy WHERE obj_fi=%s",$a_obj_id);
331  $res = $ilDB->query($query);
332  while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
333  {
334  return (bool) $row->complete;
335  }
336  return false;
337 
338  // media pools can only be edited
339  case "mep":
340  if ($rbacsystem->checkAccess("read", $a_ref_id))
341  {
342  return true;
343  }
344  else
345  {
346  return false;
347  }
348  break;
349 
350  case 'crsr':
351  case 'catr':
352  include_once('./Services/ContainerReference/classes/class.ilContainerReferenceAccess.php');
354 
355 
356  // all other types are only clickable, if read permission is given
357  default:
358  if ($rbacsystem->checkAccess("read", $a_ref_id))
359  {
360  // check if lm is online
361  if ($a_type == "lm")
362  {
363  include_once("./Modules/LearningModule/classes/class.ilObjLearningModule.php");
364  $lm_obj =& new ilObjLearningModule($a_ref_id);
365  if((!$lm_obj->getOnline()) && (!$rbacsystem->checkAccess('write',$a_ref_id)))
366  {
367  return false;
368  }
369  }
370  // check if fblm is online
371  if ($a_type == "htlm")
372  {
373  include_once("./Modules/HTMLLearningModule/classes/class.ilObjFileBasedLM.php");
374  $lm_obj =& new ilObjFileBasedLM($a_ref_id);
375  if((!$lm_obj->getOnline()) && (!$rbacsystem->checkAccess('write',$a_ref_id)))
376  {
377  return false;
378  }
379  }
380  // check if fblm is online
381  if ($a_type == "sahs")
382  {
383  include_once("./Modules/ScormAicc/classes/class.ilObjSAHSLearningModule.php");
384  $lm_obj =& new ilObjSAHSLearningModule($a_ref_id);
385  if((!$lm_obj->getOnline()) && (!$rbacsystem->checkAccess('write',$a_ref_id)))
386  {
387  return false;
388  }
389  }
390  // check if glossary is online
391  if ($a_type == "glo")
392  {
393  $obj_id = ilObject::_lookupObjectId($a_ref_id);
394  include_once("./Modules/Glossary/classes/class.ilObjGlossary.php");
395  if((!ilObjGlossary::_lookupOnline($obj_id)) &&
396  (!$rbacsystem->checkAccess('write',$a_ref_id)))
397  {
398  return false;
399  }
400  }
401 
402  return true;
403  }
404  else
405  {
406  return false;
407  }
408  break;
409  }
410  }
411 
412  function showChilds($a_ref_id,$a_obj_id = 0)
413  {
414  global $rbacsystem,$tree;
415 //vd($a_ref_id);
416 
417  if ($a_ref_id == 0)
418  {
419  return true;
420  }
421  if(!ilConditionHandler::_checkAllConditionsOfTarget($a_ref_id,$a_obj_id))
422  {
423  return false;
424  }
425  if ($rbacsystem->checkAccess("read", $a_ref_id))
426  {
427  return true;
428  }
429  else
430  {
431  return false;
432  }
433  }
434 
435  function isVisible($a_ref_id,$a_type)
436  {
437  global $rbacsystem,$tree;
438 
439  if(!$rbacsystem->checkAccess('visible',$a_ref_id))
440  {
441  return false;
442  }
443  if ($crs_id = $tree->checkForParentType($a_ref_id,'crs'))
444  {
445  if(!$rbacsystem->checkAccess('write',$crs_id))
446  {
447  // Show only activated courses
448  $tmp_obj =& ilObjectFactory::getInstanceByRefId($crs_id,false);
449 
450  if(!$tmp_obj->isActivated())
451  {
452  unset($tmp_obj);
453  return false;
454  }
455  if(($crs_id != $a_ref_id) and $tmp_obj->isArchived())
456  {
457  return false;
458  }
459  // Show only activated course items
460  include_once "./Modules/Course/classes/class.ilCourseItems.php";
461  if(($crs_id != $a_ref_id) and (!ilCourseItems::_isActivated($a_ref_id)))
462  {
463  return false;
464  }
465  }
466  }
467  return true;
468  }
469 
470 
471 
479  function formatHeader(&$tpl, $a_obj_id,$a_option)
480  {
481  global $lng, $ilias, $tree;
482 
483  // custom icons
484  /*
485  if ($this->ilias->getSetting("custom_icons"))
486  {
487  require_once("./Services/Container/classes/class.ilContainer.php");
488  if (($path = ilContainer::_lookupIconPath($a_obj_id, "tiny")) == "")
489  {
490  $path = ilUtil::getImagePath("icon_root_s.gif");
491  }
492  }*/
493 
494  $path = ilObject::_getIcon($a_obj_id, "tiny", "root");
495 
496  $tpl->setCurrentBlock("icon");
497  $nd = $tree->getNodeData(ROOT_FOLDER_ID);
498  $title = $nd["title"];
499  if ($title == "ILIAS")
500  {
501  $title = $lng->txt("repository");
502  }
503 
504  $tpl->setVariable("ICON_IMAGE", $path);
505  $tpl->setVariable("TXT_ALT_IMG", $lng->txt("icon")." ".$title);
506  $tpl->parseCurrentBlock();
507 
508  $tpl->setCurrentBlock("link");
509  $tpl->setVariable("TITLE", $title);
510  $tpl->setVariable("LINK_TARGET", "repository.php?cmd=frameset&amp;ref_id=1");
511  $tpl->setVariable("TARGET", " target=\"_top\"");
512  $tpl->parseCurrentBlock();
513 
514  $tpl->setCurrentBlock("element");
515  $tpl->parseCurrentBlock();
516  }
517 
525  public function sortNodes($a_nodes,$a_parent_obj_id)
526  {
527  global $objDefinition;
528 
529  if ($a_parent_obj_id > 0)
530  {
531  $parent_type = ilObject::_lookupType($a_parent_obj_id);
532  }
533  else
534  {
535  $parent_type = "dummy";
536  $this->type_grps["dummy"] = array("root" => "dummy");
537  }
538 
539  if (empty($this->type_grps[$parent_type]))
540  {
541  $this->type_grps[$parent_type] =
542  $objDefinition->getGroupedRepositoryObjectTypes($parent_type);
543  }
544  $group = array();
545 
546  foreach ($a_nodes as $node)
547  {
548  $g = $objDefinition->getGroupOfObj($node["type"]);
549  if ($g == "")
550  {
551  $g = $node["type"];
552  }
553  $group[$g][] = $node;
554  }
555 
556  $nodes = array();
557  foreach ($this->type_grps[$parent_type] as $t => $g)
558  {
559  if (is_array($group[$t]))
560  {
561  // do we have to sort this group??
562  include_once("./Services/Container/classes/class.ilContainer.php");
563  include_once("./Services/Container/classes/class.ilContainerSorting.php");
564  $sort = ilContainerSorting::_getInstance($a_parent_obj_id);
565  $group = $sort->sortItems($group);
566 
567  // need extra session sorting here
568  if ($t == "sess")
569  {
570 
571  }
572 
573  foreach ($group[$t] as $k => $item)
574  {
575  $nodes[] = $item;
576  }
577  }
578  }
579 
580  return $nodes;
581  //return parent::sortNodes($a_nodes,$a_parent_obj_id);
582  }
583 
590  function forceExpanded($a_node)
591  {
592  if (in_array($a_node, $this->force_open_path))
593  {
594  return true;
595  }
596  return false;
597  }
598 
599 } // END class ilRepositoryExplorer
600 ?>