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
4define("IL_FM_POSITIVE", 1);
5define("IL_FM_NEGATIVE", 2);
6
17{
18 var $id;
19
25 var $ilias;
26
33
40
46 var $tree;
47
54
61
68
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
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"]);
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
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 {
1435 $_SESSION[$this->expand_variable] = array($this->getRoot());
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?>
global $tpl
Definition: ilias.php:8
$_GET["client_id"]
$_POST["username"]
$_SESSION["AccountId"]
An exception for terminatinating execution or to throw for unit testing.
const IL_FM_NEGATIVE
Class ilExplorer class for explorer view in admin frame.
setTargetGet($a_target_get)
set the varname in Get-string @access public
getNodeStyleClass($a_id, $a_type)
get style class for node
highlightNode($a_id)
set highlighted node
handleListEndTags(&$a_tpl_tree, $a_cur_depth, $a_item_depth)
handle list end tags ( and )
getFilterMode()
get filter mode
setId($a_val)
Set id.
setAsynchExpanding($a_val)
Set asynch expanding.
__construct($a_target)
Constructor @access public.
handleListStartTags(&$a_tpl_tree, $a_cur_depth, $a_item_depth)
handle list start tags (
showChilds($a_parent_id)
determines wether the childs of an object should be shown or not note: this standard implementation a...
setExpand($a_node_id)
set the expand option this value is stored in a SESSION variable to save it different view (lo view,...
getUseStandardFrame()
Get use standard explorer frame.
setSessionExpandVariable($a_var_name="expand")
set name of expand session variable
addFilter($a_item)
adds item to the filter @access public
setRoot($a_root_id)
Set root node.
buildOnClick($a_node_id, $a_type, $a_title)
get onclick event handling (may be overwritten by derived classes)
initItemCounter($a_number)
Init item counter.
sortNodes($a_nodes, $a_parent_obj_id)
sort nodes and put adm object to the end of sorted array @access private
buildSelect($a_node_id, $a_type)
standard implementation for adding an option select box between image and title
is_in_array($a_start, $a_depth)
DESCRIPTION MISSING @access private.
checkFilter($a_item)
check if item is in filter @access private
setPostSort($a_sort)
process post sorting
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 @access public.
setParamsGet($a_params_get)
set additional params to be passed in Get-string @access public
setExpandTarget($a_exp_target)
target script for expand icons
setTitleLength($a_length)
Set max title length.
outputIcons($a_icons)
output icons
setOrderDirection($a_direction)
set the order direction @access public
setTitle($a_val)
Set title.
setClickable($a_type, $a_clickable)
(de-)activates links for a certain object type
getTitle()
Get title.
setFilterMode($a_mode=IL_FM_NEGATIVE)
set filter mode
getTreeLead()
Get tree leading content.
getOutput()
Creates output recursive method @access public.
getIndex($a_data)
get index of format_options array from specific ref_id,parent_id @access private
getImageAlt($a_default_text, $a_type="", $a_obj_id="")
get image alt text
setFrameTarget($a_target)
set target frame or not frame?
createLines($a_depth)
Creates lines for explorer view @access private.
modifyChilds($a_parent_id, $a_objects)
setFrameUpdater($a_up_frame, $a_up_script, $a_params="")
Set Explorer Updater.
forceExpandAll($a_mode, $a_show_minus=true)
force expandAll.
formatObject($tpl, $a_node_id, $a_option, $a_obj_id=0)
Creates output recursive method @access private.
checkPermissions($a_check)
check permissions via rbac
getImage($a_name, $a_type="", $a_obj_id="")
get image path (may be overwritten by derived classes)
setUseStandardFrame($a_val)
Set use standard frame.
getChildsOfNode($a_parent_id)
Get childs of node.
formatHeader($tpl, $a_obj_id, $a_option)
Creates output for header (is empty here but can be overwritten in derived classes)
delFilter($a_item)
removes item from the filter @access public
setTreeLead($a_val)
Set tree leading content.
buildFrameTarget($a_type, $a_child=0, $a_obj_id=0)
get frame target (may be overwritten by derived classes)
getAsynchExpanding()
Get asynch expanding.
getTitleLength()
Get max title length.
setFiltered($a_bool)
active/deactivate the filter @access public
createTarget($a_type, $a_node_id, $a_highlighted_subtree=false, $a_append_anch=true)
Creates Get Parameter @access private.
isVisible($a_ref_id, $a_type)
forceExpanded($a_obj_id)
force expansion of node
isClickable($a_type, $a_ref_id=0)
check if links for certain object type are activated
setOrderColumn($a_column)
set the order column @access public
buildTitle($a_title, $a_id, $a_type)
standard implementation for title, may be overwritten by derived classes
buildDescription($a_desc, $a_id, $a_type)
standard implementation for description, may be overwritten by derived classes
buildLinkTarget($a_node_id, $a_type)
get link target (may be overwritten by derived classes)
getRoot()
get root id
getMaximumTreeDepth()
Get maximum tree depth.
special template class to simplify handling of ITX/PEAR
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
static shortenText($a_str, $a_len, $a_dots=false, $a_next_blank=false, $a_keep_extension=false)
shorten a string to given length.
static sortArray($array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
static initConnection()
Init YUI Connection module.
$counter
$html
Definition: example_001.php:87
global $ilBench
Definition: ilias.php:18
redirection script todo: (a better solution should control the processing via a xml file)
$ret
Definition: parser.php:6
global $lng
Definition: privfeed.php:17
if(!is_array($argv)) $options
if((!isset($_SERVER['DOCUMENT_ROOT'])) OR(empty($_SERVER['DOCUMENT_ROOT']))) $_SERVER['DOCUMENT_ROOT']
$a_type
Definition: workflow.php:93