ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilExplorer.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_FM_POSITIVE", 1);
5 define("IL_FM_NEGATIVE", 2);
6 
17 {
18  var $id;
19 
25  var $ilias;
26 
32  var $output;
33 
40 
46  var $tree;
47 
53  var $target;
54 
61 
68 
74  var $expanded;
75 
82 
88  var $order_direction = "asc";
89 
96 
103 
104 
111 
118 
125 
132 
138  var $filtered = false;
139 
146 
152  var $expand_all = false;
153 
159  var $root_id = null;
160 
161  var $use_standard_frame = false;
162 
168  function __construct($a_target)
169  {
170  global $ilias, $objDefinition;
171 
172  if (!isset($a_target) or !is_string($a_target))
173  {
174  $this->ilias->raiseError(get_class($this)."::Constructor(): No target given!",$this->ilias->error_obj->WARNING);
175  }
176 
177  // autofilter object types in devmode
178  $devtypes = $objDefinition->getDevModeAll();
179 
180  if (count($devtypes > 0))
181  {
182  // activate filter if objects found in devmode
183  $this->setFiltered(true);
184 
185  foreach ($devtypes as $type)
186  {
187  $this->addFilter($type);
188  }
189  }
190 
191  $this->ilias = $ilias;
192  $this->output = array();
193  $this->expanded = array();
194  $this->target = $a_target;
195  $this->target_get = 'ref_id';
196  $this->frame_target = "content";
197  $this->order_column = "title";
198  $this->tree = new ilTree(ROOT_FOLDER_ID);
199  $this->tree->initLangCode();
200  $this->expand_target = $_SERVER["PATH_INFO"];
201  $this->rbac_check = true;
202  $this->output_icons = true;
203  $this->expand_variable = "expand";
204  $this->setTitleLength(50);
205  $this->post_sort=true;
207  $this->highlighted = "";
208  $this->show_minus = true;
209  $this->counter = 0;
210  $this->asnch_expanding = false;
211  }
212 
218  function setId($a_val)
219  {
220  $this->id = $a_val;
221  }
222 
228  function getId()
229  {
230  return $this->id;
231  }
232 
238  function setAsynchExpanding($a_val)
239  {
240  $this->asnch_expanding = $a_val;
241  }
242 
249  {
250  return $this->asnch_expanding;
251  }
252 
260  public function initItemCounter($a_number)
261  {
262  $this->counter = $a_number;
263  }
264 
270  function setTitle($a_val)
271  {
272  $this->title = $a_val;
273  }
274 
280  public function setTitleLength($a_length)
281  {
282  $this->textwidth = $a_length;
283  }
284 
289  public function getTitleLength()
290  {
291  return $this->textwidth;
292  }
293 
299  function getTitle()
300  {
301  return $this->title;
302  }
303 
311  public function setRoot($a_root_id)
312  {
313  #$this->tree = new ilTree(ROOT_FOLDER_ID,$a_root_id);
314  $this->root_id = $a_root_id;
315  }
316 
324  public function getRoot()
325  {
326  return $this->root_id == null ?
327  $this->tree->getRootId() :
329  }
330 
336  function setOrderColumn($a_column)
337  {
338  $this->order_column = $a_column;
339  }
340 
346  function setOrderDirection($a_direction)
347  {
348  if ($a_direction == "desc")
349  {
350  $this->order_direction = $a_direction;
351  }
352  else
353  {
354  $this->order_direction = "asc";
355  }
356  }
357 
363  function setTargetGet($a_target_get)
364  {
365  if (!isset($a_target_get) or !is_string($a_target_get))
366  {
367  $this->ilias->raiseError(get_class($this)."::setTargetGet(): No target given!",$this->ilias->error_obj->WARNING);
368  }
369 
370  $this->target_get = $a_target_get;
371  }
372 
378  function setParamsGet($a_params_get)
379  {
380  if (!isset($a_params_get) or !is_array($a_params_get))
381  {
382  $this->ilias->raiseError(get_class($this)."::setTargetGet(): No target given!",$this->ilias->error_obj->WARNING);
383  }
384 
385  foreach ($a_params_get as $key => $val)
386  {
387  $str .= "&".$key."=".$val;
388  }
389 
390  $this->params_get = $str;
391  }
392 
393 
400  function setExpandTarget($a_exp_target)
401  {
402  $this->expand_target = $a_exp_target;
403  }
404 
410  function setFrameUpdater($a_up_frame, $a_up_script, $a_params = "")
411  {
412  $this->up_frame = $a_up_frame;
413  $this->up_script = $a_up_script;
414  $this->up_params = $a_params;
415  }
416 
417 
421  function highlightNode($a_id)
422  {
423  $this->highlighted = $a_id;
424  }
425 
431  function checkPermissions($a_check)
432  {
433  $this->rbac_check = $a_check;
434  }
435 
441  function setSessionExpandVariable($a_var_name = "expand")
442  {
443  $this->expand_variable = $a_var_name;
444  }
445 
451  function outputIcons($a_icons)
452  {
453  $this->output_icons = $a_icons;
454  }
455 
456 
463  function setClickable($a_type, $a_clickable)
464  {
465  if($a_clickable)
466  {
467  $this->is_clickable[$a_type] = "";
468  }
469  else
470  {
471  $this->is_clickable[$a_type] = "n";
472  }
473  }
474 
475  function isVisible($a_ref_id,$a_type)
476  {
477  global $rbacsystem, $ilBench;
478 
479  if (!$this->rbac_check)
480  {
481  return true;
482  }
483 
484  $ilBench->start("Explorer", "setOutput_isVisible");
485  $visible = $rbacsystem->checkAccess('visible',$a_ref_id);
486  $ilBench->stop("Explorer", "setOutput_isVisible");
487 
488  return $visible;
489  }
490 
496  public function setTreeLead($a_val)
497  {
498  $this->tree_lead = $a_val;
499  }
500 
506  public function getTreeLead()
507  {
508  return $this->tree_lead;
509  }
510 
518  function isClickable($a_type, $a_ref_id = 0)
519  {
520  // in this standard implementation
521  // only the type determines, wether an object should be clickable or not
522  // but this method can be overwritten and make $exp->setFilterMode(IL_FM_NEGATIVE);use of the ref id
523  // (this happens e.g. in class ilRepositoryExplorerGUI)
524  if ($this->is_clickable[$a_type] == "n")
525  {
526  return false;
527  }
528  else
529  {
530  return true;
531  }
532  }
533 
538  function setPostSort($a_sort)
539  {
540  $this->post_sort = $a_sort;
541  }
542 
548  function setFilterMode($a_mode = IL_FM_NEGATIVE)
549  {
550  $this->filter_mode = $a_mode;
551  }
552 
558  function getFilterMode()
559  {
560  return $this->filter_mode;
561  }
562 
569  function setUseStandardFrame($a_val)
570  {
571  $this->use_standard_frame = $a_val;
572  }
573 
580  {
582  }
583 
590  function getChildsOfNode($a_parent_id)
591  {
592  return $this->tree->getChilds($a_parent_id, $this->order_column);
593  }
594 
595 
604  function setOutput($a_parent_id, $a_depth = 1,$a_obj_id = 0, $a_highlighted_subtree = false)
605  {
606  global $rbacadmin, $rbacsystem, $ilBench;
607 
608 #echo 'ParentId: '.$a_parent_id.' depth: '.$a_depth.' obj_id: '.$a_obj_id;
609 
610  if (!isset($a_parent_id))
611  {
612  $this->ilias->raiseError(get_class($this)."::setOutput(): No node_id given!",$this->ilias->error_obj->WARNING);
613  }
614 
615  if ($this->showChilds($a_parent_id,$a_obj_id))
616  {
617  $objects = $this->getChildsOfNode($a_parent_id);
618  }
619  else
620  {
621  $objects = array();
622  }
623 
624  $objects = $this->modifyChilds($a_parent_id, $objects);
625 
626  // force expansion (of single nodes)
627  if ($this->forceExpanded($a_parent_id) && !in_array($a_parent_id, $this->expanded))
628  {
629  $this->expanded[] = $a_parent_id;
630  }
631 
632  if (count($objects) > 0)
633  {
634  // Maybe call a lexical sort function for the child objects
635  $tab = ++$a_depth - 2;
636  if ($this->post_sort)
637  {
638  $objects = $this->sortNodes($objects,$a_obj_id);
639  }
640  $skip_rest = false;
641  foreach ($objects as $key => $object)
642  {
643  // skip childs, if parent is not expanded
644  if (!$this->forceExpanded($object["child"]) && $skip_rest)
645  {
646  continue;
647  }
648 //echo "<br>-".$object["child"]."-".$this->forceExpanded($object["child"])."-";
649  //ask for FILTER
650  if ($this->filtered == false or $this->checkFilter($object["type"]) == false)
651  {
652  if ($this->isVisible($object['child'],$object['type']))
653  {
654  $ilBench->start("Explorer", "setOutput_setFormatOptions");
655  #echo 'CHILD getIndex() '.$object['child'].' parent: '.$this->getRoot();
656  if ($object["child"] != $this->getRoot())
657  {
658  $parent_index = $this->getIndex($object);
659  }
660  $this->format_options["$this->counter"]["parent"] = $object["parent"];
661  $this->format_options["$this->counter"]["child"] = $object["child"];
662  $this->format_options["$this->counter"]["title"] = $object["title"];
663  $this->format_options["$this->counter"]["type"] = $object["type"];
664  $this->format_options["$this->counter"]["obj_id"] = $object["obj_id"];
665  $this->format_options["$this->counter"]["desc"] = "obj_".$object["type"];
666  $this->format_options["$this->counter"]["depth"] = $tab;
667  $this->format_options["$this->counter"]["container"] = false;
668  $this->format_options["$this->counter"]["visible"] = true;
669  $this->format_options["$this->counter"]["highlighted_subtree"] = $a_highlighted_subtree;
670 
671  // Create prefix array
672  for ($i = 0; $i < $tab; ++$i)
673  {
674  $this->format_options["$this->counter"]["tab"][] = 'blank';
675  }
676 
677  // fix explorer (sometimes explorer disappears)
678  if ($parent_index == 0)
679  {
680  if (!$this->expand_all and !in_array($object["parent"], $this->expanded))
681  {
682  $this->expanded[] = $object["parent"];
683  }
684  }
685 
686  // only if parent is expanded and visible, object is visible
687  if ($object["child"] != $this->getRoot() and ((!$this->expand_all and !in_array($object["parent"],$this->expanded))
688  or !$this->format_options["$parent_index"]["visible"]))
689  {
690  if (!$this->forceExpanded($object["child"]))
691  {
692  // if parent is not expanded, and one child is
693  // visible we don't need more information and
694  // can skip the rest of the childs
695  if ($this->format_options["$this->counter"]["visible"])
696  {
697 //echo "-setSkipping";
698  $skip_rest = true;
699  }
700  $this->format_options["$this->counter"]["visible"] = false;
701  }
702  }
703 
704  // if object exists parent is container
705  if ($object["child"] != $this->getRoot())
706  {
707  $this->format_options["$parent_index"]["container"] = true;
708 
709  if ($this->expand_all or in_array($object["parent"],$this->expanded))
710  {
711  //echo "<br>-".$object["child"]."-".$this->forceExpanded($object["child"])."-";
712  if ($this->forceExpanded($object["parent"]))
713  {
714  $this->format_options["$parent_index"]["tab"][($tab-2)] = 'forceexp';
715  }
716  else
717  {
718  $this->format_options["$parent_index"]["tab"][($tab-2)] = 'minus';
719  }
720  }
721  else
722  {
723  $this->format_options["$parent_index"]["tab"][($tab-2)] = 'plus';
724  }
725  }
726  //echo "-"."$parent_index"."-";
727  //var_dump($this->format_options["$parent_index"]);
728  ++$this->counter;
729  $ilBench->stop("Explorer", "setOutput_setFormatOptions");
730 
731  // stop recursion if 2. level beyond expanded nodes is reached
732  if ($this->expand_all or in_array($object["parent"],$this->expanded) or ($object["parent"] == 0)
733  or $this->forceExpanded($object["child"]))
734  {
735  $highlighted_subtree = ($a_highlighted_subtree ||
736  ($object["child"] == $this->highlighted))
737  ? true
738  : false;
739 
740  // recursive
741  $this->setOutput($object["child"],$a_depth,$object['obj_id'], $highlighted_subtree);
742  }
743  } //if
744  } //if FILTER
745  } //foreach
746  } //if
747  } //function
748 
749  function modifyChilds($a_parent_id, $a_objects)
750  {
751  return $a_objects;
752  }
753 
759  function showChilds($a_parent_id)
760  {
761  return true;
762  }
763 
767  function forceExpanded($a_obj_id)
768  {
769  return false;
770  }
771 
779  {
780  $this->tree->getMaximumDepth();
781  }
782 
783 
790  function getOutput()
791  {
792  global $ilBench, $tpl, $lng;
793 
794  $ilBench->start("Explorer", "getOutput");
795 
796  $this->format_options[0]["tab"] = array();
797 
798  $depth = $this->getMaximumTreeDepth();
799 
800  for ($i=0;$i<$depth;++$i)
801  {
802  $this->createLines($i);
803  }
804 
805  include_once("./Services/YUI/classes/class.ilYuiUtil.php");
807  $tpl->addJavaScript("./Services/UIComponent/Explorer/js/ilExplorer.js");
808 
809 //echo "hh";
810  // set global body class
811 // $tpl->setBodyClass("il_Explorer");
812 
813  $tpl_tree = new ilTemplate("tpl.tree.html", true, true, "Services/UIComponent/Explorer");
814 
815  // updater
816  if (($_GET["ict"] || $_POST["collapseAll"] != "" || $_POST["expandAll"] != "") && $this->up_frame != "")
817  {
818  $tpl_tree->setCurrentBlock("updater");
819  $tpl_tree->setVariable("UPDATE_FRAME", $this->up_frame);
820  $tpl_tree->setVariable("UPDATE_SCRIPT", $this->up_script);
821  if (is_array($this->up_params))
822  {
823  $up_str = $lim = "";
824  foreach ($this->up_params as $p)
825  {
826  $up_str.= $lim."'".$p."'";
827  $lim = ",";
828  }
829  $tpl_tree->setVariable("UPDATE_PARAMS", $up_str);
830  }
831  $tpl_tree->parseCurrentBlock();
832  }
833 
834  $cur_depth = -1;
835  foreach ($this->format_options as $key => $options)
836  {
837 //echo "-".$options["depth"]."-";
838  if (!$options["visible"])
839  {
840  continue;
841  }
842 
843  // end tags
844  $this->handleListEndTags($tpl_tree, $cur_depth, $options["depth"]);
845 
846  // start tags
847  $this->handleListStartTags($tpl_tree, $cur_depth, $options["depth"]);
848 
849  $cur_depth = $options["depth"];
850 
851  if ($options["visible"] and $key != 0)
852  {
853  $this->formatObject($tpl_tree, $options["child"],$options,$options['obj_id']);
854  }
855  if ($key == 0)
856  {
857  $this->formatHeader($tpl_tree, $options["child"],$options);
858  }
859 
860  }
861 //if ($GLOBALS["ilUser"]->getLogin() == "alex") var_dump($this->format_options);
862  $this->handleListEndTags($tpl_tree, $cur_depth, -1);
863 
864  $ilBench->stop("Explorer", "getOutput");
865 
866  $tpl_tree->setVariable("TREE_LEAD", "");
867  if ($this->tree_lead != "")
868  {
869  $tpl_tree->setCurrentBlock("tree_lead");
870  $tpl_tree->setVariable("TREE_LEAD", $this->tree_lead);
871  $tpl_tree->parseCurrentBlock();
872  }
873  if ($this->getId() != "")
874  {
875  $tpl_tree->setVariable("TREE_ID", 'id="'.$this->getId().'_tree"');
876  }
877 
878  $html = $tpl_tree->get();
879 
880  if ($this->getUseStandardFrame())
881  {
882  $mtpl = new ilTemplate("tpl.main.html", true, true);
883  $mtpl->setVariable("LOCATION_STYLESHEET", ilUtil::getStyleSheetLocation());
884  $mtpl->setVariable("BODY_CLASS", "il_Explorer");
885  $mtpl->addBlockFile("CONTENT", "content", "tpl.explorer.html");
886  if ($this->getTitle() != "")
887  {
888  $mtpl->setVariable("TXT_EXPLORER_HEADER", $this->getTitle());
889  }
890  if ($this->getId() != "")
891  {
892  $mtpl->setVariable("ID", 'id="'.$this->getId().'"');
893  }
894  $mtpl->setVariable("IMG_SPACE", ilUtil::getImagePath("spacer.png", false));
895  $mtpl->setCurrentBlock("content");
896  $mtpl->setVariable("EXPLORER", $html);
897  $mtpl->setVariable("EXP_REFRESH", $lng->txt("refresh"));
898  $mtpl->parseCurrentBlock();
899  $html = $mtpl->get();
900  }
901 
902  return $html;
903  }
904 
905 
906 
910  function handleListEndTags(&$a_tpl_tree, $a_cur_depth, $a_item_depth)
911  {
912  if ($a_item_depth < $a_cur_depth)
913  {
914  // </li></ul> for ending lists
915  for ($i = 0; $i < ($a_cur_depth - $a_item_depth); $i++)
916  {
917  $a_tpl_tree->touchBlock("end_list_item");
918  $a_tpl_tree->touchBlock("element");
919 
920  $a_tpl_tree->touchBlock("end_list");
921  $a_tpl_tree->touchBlock("element");
922  }
923  }
924  else if ($a_item_depth == $a_cur_depth)
925  {
926  // </li> for ending list items
927  $a_tpl_tree->touchBlock("end_list_item");
928  $a_tpl_tree->touchBlock("element");
929  }
930  }
931 
935  function handleListStartTags(&$a_tpl_tree, $a_cur_depth, $a_item_depth)
936  {
937  // start tags
938  if ($a_item_depth > $a_cur_depth)
939  {
940  // <ul><li> for new lists
941  if ($a_item_depth > 1)
942  {
943  $a_tpl_tree->touchBlock("start_list");
944  }
945  else
946  {
947  $a_tpl_tree->touchBlock("start_list_no_indent");
948  }
949  $a_tpl_tree->touchBlock("element");
950 
951  $a_tpl_tree->touchBlock("start_list_item");
952  $a_tpl_tree->touchBlock("element");
953  }
954  else
955  {
956  // <li> items
957  $a_tpl_tree->touchBlock("start_list_item");
958  $a_tpl_tree->touchBlock("element");
959  }
960  }
961 
970  function formatHeader($tpl,$a_obj_id,$a_option)
971  {
972  }
973 
982  function formatObject($tpl, $a_node_id,$a_option,$a_obj_id = 0)
983  {
984  global $lng;
985  if (!isset($a_node_id) or !is_array($a_option))
986  {
987  $this->ilias->raiseError(get_class($this)."::formatObject(): Missing parameter or wrong datatype! ".
988  "node_id: ".$a_node_id." options:".var_dump($a_option),$this->ilias->error_obj->WARNING);
989  }
990 
991  $pic = false;
992  foreach ((array) $a_option["tab"] as $picture)
993  {
994  if ($picture == 'plus')
995  {
996  $tpl->setCurrentBlock("expander");
997  $tpl->setVariable("EXP_DESC", $lng->txt("collapsed"));
998  $tpl->setVariable("LINK_NAME", $a_node_id);
999  if (!$this->getAsynchExpanding())
1000  {
1001  $target = $this->createTarget('+',$a_node_id, $a_option["highlighted_subtree"]);
1002  $tpl->setVariable("LINK_TARGET_EXPANDER", $target);
1003  }
1004  else
1005  {
1006  $target = $this->createTarget('+',$a_node_id, $a_option["highlighted_subtree"], false);
1007  $tpl->setVariable("ONCLICK_TARGET_EXPANDER", " onclick=\"return il.Explorer.refresh('tree_div', '".$target."');\"");
1008  $tpl->setVariable("LINK_TARGET_EXPANDER", "#");
1009  }
1010  $tpl->setVariable("IMGPATH", $this->getImage("browser/plus.png"));
1011  $tpl->parseCurrentBlock();
1012  $pic = true;
1013  }
1014 
1015  if ($picture == 'forceexp')
1016  {
1017  $tpl->setCurrentBlock("expander");
1018  $tpl->setVariable("EXP_DESC", $lng->txt("expanded"));
1019  $target = $this->createTarget('+',$a_node_id);
1020  $tpl->setVariable("LINK_NAME", $a_node_id);
1021  $tpl->setVariable("LINK_TARGET_EXPANDER", $target);
1022  $tpl->setVariable("IMGPATH", $this->getImage("browser/forceexp.png"));
1023  $tpl->parseCurrentBlock();
1024  $pic = true;
1025  }
1026 
1027  if ($picture == 'minus' && $this->show_minus)
1028  {
1029  $tpl->setCurrentBlock("expander");
1030  $tpl->setVariable("EXP_DESC", $lng->txt("expanded"));
1031  $tpl->setVariable("LINK_NAME", $a_node_id);
1032  if (!$this->getAsynchExpanding())
1033  {
1034  $target = $this->createTarget('-',$a_node_id, $a_option["highlighted_subtree"]);
1035  $tpl->setVariable("LINK_TARGET_EXPANDER", $target);
1036  }
1037  else
1038  {
1039  $target = $this->createTarget('-',$a_node_id, $a_option["highlighted_subtree"], false);
1040  $tpl->setVariable("ONCLICK_TARGET_EXPANDER", " onclick=\"return il.Explorer.refresh('tree_div', '".$target."');\"");
1041  $tpl->setVariable("LINK_TARGET_EXPANDER", "#");
1042  }
1043  $tpl->setVariable("IMGPATH", $this->getImage("browser/minus.png"));
1044  $tpl->parseCurrentBlock();
1045  $pic = true;
1046  }
1047 
1048  }
1049 
1050  if (!$pic)
1051  {
1052  $tpl->setCurrentBlock("blank");
1053  $tpl->setVariable("BLANK_PATH", $this->getImage("browser/blank.png"));
1054  $tpl->parseCurrentBlock();
1055  }
1056 
1057  if ($this->output_icons)
1058  {
1059  $tpl->setCurrentBlock("icon");
1060  $tpl->setVariable("ICON_IMAGE" , $this->getImage("icon_".$a_option["type"].".svg", $a_option["type"], $a_obj_id));
1061 
1062  $tpl->setVariable("TARGET_ID" , "iconid_".$a_node_id);
1063  $this->iconList[] = "iconid_".$a_node_id;
1064  $tpl->setVariable("TXT_ALT_IMG",
1065  $this->getImageAlt($lng->txt("icon")." ".$lng->txt($a_option["desc"]), $a_option["type"], $a_obj_id));
1066  $tpl->parseCurrentBlock();
1067  }
1068 
1069  if(strlen($sel = $this->buildSelect($a_node_id,$a_option['type'])))
1070  {
1071  $tpl->setCurrentBlock('select');
1072  $tpl->setVariable('OBJ_SEL',$sel);
1073  $tpl->parseCurrentBlock();
1074  }
1075 
1076  if ($this->isClickable($a_option["type"], $a_node_id,$a_obj_id)) // output link
1077  {
1078  $tpl->setCurrentBlock("link");
1079  //$target = (strpos($this->target, "?") === false) ?
1080  // $this->target."?" : $this->target."&";
1081  //$tpl->setVariable("LINK_TARGET", $target.$this->target_get."=".$a_node_id.$this->params_get);
1082  $tpl->setVariable("LINK_TARGET", $this->buildLinkTarget($a_node_id, $a_option["type"]));
1083 
1084  $style_class = $this->getNodeStyleClass($a_node_id, $a_option["type"]);
1085 
1086  if ($style_class != "")
1087  {
1088  $tpl->setVariable("A_CLASS", ' class="'.$style_class.'" ' );
1089  }
1090 
1091  if (($onclick = $this->buildOnClick($a_node_id, $a_option["type"], $a_option["title"])) != "")
1092  {
1093  $tpl->setVariable("ONCLICK", "onClick=\"$onclick\"");
1094  }
1095 
1096  //$tpl->setVariable("LINK_NAME", $a_node_id);
1097  $tpl->setVariable("TITLE", ilUtil::shortenText(
1098  $this->buildTitle($a_option["title"], $a_node_id, $a_option["type"]),
1099  $this->textwidth, true));
1100  $tpl->setVariable("DESC", ilUtil::shortenText(
1101  $this->buildDescription($a_option["description"], $a_node_id, $a_option["type"]), $this->textwidth, true));
1102  $frame_target = $this->buildFrameTarget($a_option["type"], $a_node_id, $a_option["obj_id"]);
1103  if ($frame_target != "")
1104  {
1105  $tpl->setVariable("TARGET", " target=\"".$frame_target."\"");
1106  }
1107  $tpl->parseCurrentBlock();
1108  }
1109  else // output text only
1110  {
1111  $tpl->setCurrentBlock("text");
1112  $tpl->setVariable("OBJ_TITLE", ilUtil::shortenText(
1113  $this->buildTitle($a_option["title"], $a_node_id, $a_option["type"]), $this->textwidth, true));
1114  $tpl->setVariable("OBJ_DESC", ilUtil::shortenText(
1115  $this->buildDescription($a_option["desc"], $a_node_id, $a_option["type"]), $this->textwidth, true));
1116  $tpl->parseCurrentBlock();
1117  }
1118 
1119  $tpl->setCurrentBlock("list_item");
1120  $tpl->parseCurrentBlock();
1121  $tpl->touchBlock("element");
1122  }
1123 
1127  function getImage($a_name, $a_type = "", $a_obj_id = "")
1128  {
1129  return ilUtil::getImagePath($a_name);
1130  }
1131 
1135  function getImageAlt($a_default_text, $a_type = "", $a_obj_id = "")
1136  {
1137  return $a_default_text;
1138  }
1139 
1143  function getNodeStyleClass($a_id, $a_type)
1144  {
1145  if ($a_id == $this->highlighted)
1146  {
1147  return "il_HighlightedNode";
1148  }
1149  return "";
1150  }
1151 
1155  function buildLinkTarget($a_node_id, $a_type)
1156  {
1157  $target = (strpos($this->target, "?") === false)
1158  ? $this->target."?"
1159  : $this->target."&";
1160  return $target.$this->target_get."=".$a_node_id.$this->params_get;
1161  }
1162 
1166  function buildOnClick($a_node_id, $a_type, $a_title)
1167  {
1168  return "";
1169  }
1170 
1174  function buildTitle($a_title, $a_id, $a_type)
1175  {
1176  return $a_title;
1177  }
1178 
1182  function buildDescription($a_desc, $a_id, $a_type)
1183  {
1184  return "";
1185  }
1186 
1190  function buildSelect($a_node_id,$a_type)
1191  {
1192  return "";
1193  }
1194 
1195 
1199  function buildFrameTarget($a_type, $a_child = 0, $a_obj_id = 0)
1200  {
1201  return $this->frame_target;
1202  }
1203 
1204 
1212  function createTarget($a_type,$a_node_id,$a_highlighted_subtree = false, $a_append_anch = true)
1213  {
1214  if (!isset($a_type) or !is_string($a_type) or !isset($a_node_id))
1215  {
1216  $this->ilias->raiseError(get_class($this)."::createTarget(): Missing parameter or wrong datatype! ".
1217  "type: ".$a_type." node_id:".$a_node_id,$this->ilias->error_obj->WARNING);
1218  }
1219 
1220  // SET expand parameter:
1221  // positive if object is expanded
1222  // negative if object is compressed
1223  $a_node_id = $a_type == '+' ? $a_node_id : -(int) $a_node_id;
1224 
1225  $sep = (is_int(strpos($this->expand_target, "?")))
1226  ? "&"
1227  : "?";
1228 
1229  // in current tree flag
1230  $ict_str = ($a_highlighted_subtree || $this->highlighted == "")
1231  ? "&ict=1"
1232  : "";
1233  if ($this->getAsynchExpanding())
1234  {
1235  $ict_str.= "&cmdMode=asynch";
1236  }
1237  if ($a_append_anch)
1238  {
1239  return $this->expand_target.$sep.$this->expand_variable."=".$a_node_id.$this->params_get.$ict_str."#".abs($a_node_id);
1240  }
1241  else
1242  {
1243  return $this->expand_target.$sep.$this->expand_variable."=".$a_node_id.$this->params_get.$ict_str;
1244  }
1245  }
1246 
1253  function setFrameTarget($a_target)
1254  {
1255  $this->frame_target = $a_target;
1256  }
1257 
1263  function createLines($a_depth)
1264  {
1265  for ($i = 0; $i < count($this->format_options); ++$i)
1266  {
1267  if ($this->format_options[$i]["depth"] == $a_depth+1
1268  and !$this->format_options[$i]["container"]
1269  and $this->format_options[$i]["depth"] != 1)
1270  {
1271  $this->format_options[$i]["tab"]["$a_depth"] = "quer";
1272  }
1273 
1274  if ($this->format_options[$i]["depth"] == $a_depth+2)
1275  {
1276  if ($this->is_in_array($i+1,$this->format_options[$i]["depth"]))
1277  {
1278  $this->format_options[$i]["tab"]["$a_depth"] = "winkel";
1279  }
1280  else
1281  {
1282  $this->format_options[$i]["tab"]["$a_depth"] = "ecke";
1283  }
1284  }
1285 
1286  if ($this->format_options[$i]["depth"] > $a_depth+2)
1287  {
1288  if ($this->is_in_array($i+1,$a_depth+2))
1289  {
1290  $this->format_options[$i]["tab"]["$a_depth"] = "hoch";
1291  }
1292  }
1293  }
1294  }
1295 
1303  function is_in_array($a_start,$a_depth)
1304  {
1305  for ($i=$a_start;$i<count($this->format_options);++$i)
1306  {
1307  if ($this->format_options[$i]["depth"] < $a_depth)
1308  {
1309  break;
1310  }
1311 
1312  if ($this->format_options[$i]["depth"] == $a_depth)
1313  {
1314  return true;
1315  }
1316  }
1317  return false;
1318  }
1319 
1326  function getIndex($a_data)
1327  {
1328  if(!is_array($this->format_options))
1329  {
1330  return -1;
1331  }
1332 
1333  foreach ($this->format_options as $key => $value)
1334  {
1335  if (($value["child"] == $a_data["parent"]))
1336  {
1337  return $key;
1338  }
1339  }
1340 
1341  return -1;
1342  // exit on error
1343  #$this->ilias->raiseError(get_class($this)."::getIndex(): Error in tree. No index found!",$this->ilias->error_obj->FATAL);
1344  }
1345 
1352  function addFilter($a_item)
1353  {
1354  $ispresent = 0;
1355 
1356  if (is_array($this->filter))
1357  {
1358  //run through filter
1359  foreach ($this->filter as $item)
1360  {
1361  if ($item == $a_item)
1362  {
1363  $is_present = 1;
1364 
1365  return false;
1366  }
1367  }
1368  }
1369  else
1370  {
1371  $this->filter = array();
1372  }
1373  if ($is_present == 0)
1374  {
1375  $this->filter[] = $a_item;
1376  }
1377 
1378  return true;
1379  }
1380 
1387  function delFilter($a_item)
1388  {
1389  //check if a filter exists
1390  if (is_array($this->filter))
1391  {
1392  //build copy of the existing filter without the given item
1393  $tmp = array();
1394 
1395  foreach ($this->filter as $item)
1396  {
1397  if ($item != $a_item)
1398  {
1399  $tmp[] = $item;
1400  }
1401  else
1402  {
1403  $deleted = 1;
1404  }
1405  }
1406 
1407  $this->filter = $tmp;
1408  }
1409  else
1410  {
1411  return false;
1412  }
1413 
1414  if ($deleted == 1)
1415  {
1416  return true;
1417  }
1418  else
1419  {
1420  return false;
1421  }
1422  }
1423 
1430  function setExpand($a_node_id)
1431  {
1432  // IF ISN'T SET CREATE SESSION VARIABLE
1433  if(!is_array($_SESSION[$this->expand_variable]))
1434  {
1436  }
1437  // IF $_GET["expand"] is positive => expand this node
1438  if ($a_node_id > 0 && !in_array($a_node_id,$_SESSION[$this->expand_variable]))
1439  {
1440  array_push($_SESSION[$this->expand_variable],$a_node_id);
1441  }
1442  // IF $_GET["expand"] is negative => compress this node
1443  if ($a_node_id < 0)
1444  {
1445  $key = array_keys($_SESSION[$this->expand_variable],-(int) $a_node_id);
1446  unset($_SESSION[$this->expand_variable][$key[0]]);
1447  }
1448  $this->expanded = $_SESSION[$this->expand_variable];
1449  }
1450 
1457  function forceExpandAll($a_mode, $a_show_minus = true)
1458  {
1459  $this->expand_all = (bool) $a_mode;
1460  $this->show_minus = $a_show_minus;
1461  }
1462 
1469  function setFiltered($a_bool)
1470  {
1471  $this->filtered = $a_bool;
1472  return true;
1473  }
1474 
1481  function checkFilter($a_item)
1482  {
1483  if (is_array($this->filter))
1484  {
1485  if (in_array($a_item, $this->filter))
1486  {
1487  $ret = true;
1488  }
1489  else
1490  {
1491  $ret = false;
1492  }
1493  }
1494  else
1495  {
1496  $ret = false;
1497  }
1498 
1499  if ($this->getFilterMode() == IL_FM_NEGATIVE )
1500  {
1501  return $ret;
1502  }
1503  else
1504  {
1505  return !$ret;
1506  }
1507  }
1508 
1515  function sortNodes($a_nodes,$a_parent_obj_id)
1516  {
1517  foreach ($a_nodes as $key => $node)
1518  {
1519  if ($node["type"] == "adm")
1520  {
1521  $match = $key;
1522  $adm_node = $node;
1523  break;
1524  }
1525  }
1526 
1527  // cut off adm node
1528  isset($match) ? array_splice($a_nodes,$match,1) : "";
1529 
1530  $a_nodes = ilUtil::sortArray($a_nodes,$this->order_column,$this->order_direction);
1531 
1532  // append adm node to end of list
1533  isset ($match) ? array_push($a_nodes,$adm_node) : "";
1534 
1535  return $a_nodes;
1536  }
1537 } // END class.ilExplorer
1538 ?>
formatObject($tpl, $a_node_id, $a_option, $a_obj_id=0)
Creates output recursive method private.
forceExpandAll($a_mode, $a_show_minus=true)
force expandAll.
setPostSort($a_sort)
process post sorting
formatHeader($tpl, $a_obj_id, $a_option)
Creates output for header (is empty here but can be overwritten in derived classes) ...
if((!isset($_SERVER['DOCUMENT_ROOT'])) OR(empty($_SERVER['DOCUMENT_ROOT']))) $_SERVER['DOCUMENT_ROOT']
buildFrameTarget($a_type, $a_child=0, $a_obj_id=0)
get frame target (may be overwritten by derived classes)
setFilterMode($a_mode=IL_FM_NEGATIVE)
set filter mode
highlightNode($a_id)
set highlighted node
getNodeStyleClass($a_id, $a_type)
get style class for node
getTitleLength()
Get max title length.
$_SESSION["AccountId"]
buildLinkTarget($a_node_id, $a_type)
get link target (may be overwritten by derived classes)
__construct($a_target)
Constructor public.
setId($a_val)
Set id.
setTargetGet($a_target_get)
set the varname in Get-string public
isVisible($a_ref_id, $a_type)
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
$_GET["client_id"]
getUseStandardFrame()
Get use standard explorer frame.
setTitleLength($a_length)
Set max title length.
static initConnection()
Init YUI Connection module.
is_in_array($a_start, $a_depth)
DESCRIPTION MISSING private.
buildSelect($a_node_id, $a_type)
standard implementation for adding an option select box between image and title
setFrameUpdater($a_up_frame, $a_up_script, $a_params="")
Set Explorer Updater.
static shortenText($a_str, $a_len, $a_dots=false, $a_next_blank=false, $a_keep_extension=false)
shorten a string to given length.
modifyChilds($a_parent_id, $a_objects)
setExpandTarget($a_exp_target)
target script for expand icons
getChildsOfNode($a_parent_id)
Get childs of node.
getId()
Get id.
checkPermissions($a_check)
check permissions via rbac
setAsynchExpanding($a_val)
Set asynch expanding.
handleListEndTags(&$a_tpl_tree, $a_cur_depth, $a_item_depth)
handle list end tags ( and )
getIndex($a_data)
get index of format_options array from specific ref_id,parent_id private
static sortArray($array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
setOrderColumn($a_column)
set the order column public
setFiltered($a_bool)
active/deactivate the filter public
getAsynchExpanding()
Get asynch expanding.
global $tpl
Definition: ilias.php:8
setClickable($a_type, $a_clickable)
(de-)activates links for a certain object type
setOutput($a_parent_id, $a_depth=1, $a_obj_id=0, $a_highlighted_subtree=false)
Creates output for explorer view in admin menue recursive method public.
createTarget($a_type, $a_node_id, $a_highlighted_subtree=false, $a_append_anch=true)
Creates Get Parameter private.
setUseStandardFrame($a_val)
Set use standard frame.
$counter
buildOnClick($a_node_id, $a_type, $a_title)
get onclick event handling (may be overwritten by derived classes)
$a_type
Definition: workflow.php:93
forceExpanded($a_obj_id)
force expansion of node
sortNodes($a_nodes, $a_parent_obj_id)
sort nodes and put adm object to the end of sorted array private
if(!is_array($argv)) $options
getRoot()
get root id
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
getTreeLead()
Get tree leading content.
special template class to simplify handling of ITX/PEAR
showChilds($a_parent_id)
determines wether the childs of an object should be shown or not note: this standard implementation a...
redirection script todo: (a better solution should control the processing via a xml file) ...
setFrameTarget($a_target)
set target frame or not frame?
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
Create styles array
The data for the language used.
setRoot($a_root_id)
Set root node.
Class ilExplorer class for explorer view in admin frame.
initItemCounter($a_number)
Init item counter.
buildTitle($a_title, $a_id, $a_type)
standard implementation for title, may be overwritten by derived classes
getFilterMode()
get filter mode
checkFilter($a_item)
check if item is in filter private
getImage($a_name, $a_type="", $a_obj_id="")
get image path (may be overwritten by derived classes)
getMaximumTreeDepth()
Get maximum tree depth.
handleListStartTags(&$a_tpl_tree, $a_cur_depth, $a_item_depth)
handle list start tags (
setParamsGet($a_params_get)
set additional params to be passed in Get-string public
isClickable($a_type, $a_ref_id=0)
check if links for certain object type are activated
global $lng
Definition: privfeed.php:17
setTreeLead($a_val)
Set tree leading content.
global $ilBench
Definition: ilias.php:18
$ret
Definition: parser.php:6
setOrderDirection($a_direction)
set the order direction public
getTitle()
Get title.
setSessionExpandVariable($a_var_name="expand")
set name of expand session variable
addFilter($a_item)
adds item to the filter public
getImageAlt($a_default_text, $a_type="", $a_obj_id="")
get image alt text
delFilter($a_item)
removes item from the filter public
const IL_FM_NEGATIVE
outputIcons($a_icons)
output icons
buildDescription($a_desc, $a_id, $a_type)
standard implementation for description, may be overwritten by derived classes
setTitle($a_val)
Set title.
$_POST["username"]
$html
Definition: example_001.php:87
createLines($a_depth)
Creates lines for explorer view private.
setExpand($a_node_id)
set the expand option this value is stored in a SESSION variable to save it different view (lo view...
getOutput()
Creates output recursive method public.