ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
class.ilExplorerBaseGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3
16abstract class ilExplorerBaseGUI
17{
21 protected $log;
22
26 protected $ctrl;
27
31 protected $tpl;
32
33 //protected static $js_tree_path = "./libs/bower/bower_components/jstree/jquery.jstree.js";
34 protected static $js_tree_path = "./libs/bower/bower_components/jstree/dist/jstree.js";
35 protected static $js_tree_path_css = "./libs/bower/bower_components/jstree/dist/themes/default/style.min.css";
36
37 protected static $js_expl_path = "./Services/UIComponent/Explorer2/js/Explorer2.js";
38 protected $skip_root_node = false;
39 protected $ajax = false;
40 protected $custom_open_nodes = array();
41 protected $selected_nodes = array();
42 protected $select_postvar = "";
43 protected $offline_mode = false;
44 protected $sec_highl_nodes = array();
45 protected $enable_dnd = false;
46 protected $search_term = "";
47
49 protected $open_nodes = [];
50
52 protected $store;
53
57 protected $parent_obj;
58
62 protected $child_limit = 0;
63
65
67 protected $parent_cmd = '';
68
72 public function __construct($a_expl_id, $a_parent_obj, $a_parent_cmd)
73 {
74 global $DIC;
75
76 $this->log = $DIC["ilLog"];
77 $this->ctrl = $DIC->ctrl();
78 $this->tpl = $DIC["tpl"];
79 $this->id = $a_expl_id;
80 $this->parent_obj = $a_parent_obj;
81 $this->parent_cmd = $a_parent_cmd;
82 // get open nodes
83 include_once("./Services/Authentication/classes/class.ilSessionIStorage.php");
84 $this->store = new ilSessionIStorage("expl2");
85 $open_nodes = $this->store->get("on_" . $this->id);
86 $this->open_nodes = unserialize($open_nodes);
87 if (!is_array($this->open_nodes)) {
88 $this->open_nodes = array();
89 }
90
91 $this->requested_node_id = $_GET["node_id"];
92
93 $this->nodeOnclickEnabled = true;
95 }
96
102 public function setChildLimit($a_val)
103 {
104 $this->child_limit = $a_val;
105 }
106
112 public function getChildLimit()
113 {
114 return $this->child_limit;
115 }
116
122 public function setSearchTerm($a_val)
123 {
124 $this->search_term = $a_val;
125 }
126
132 public function getSearchTerm()
133 {
134 return $this->search_term;
135 }
136
137
143 public function setMainTemplate($a_main_tpl = null)
144 {
145 $this->tpl = $a_main_tpl;
146 }
147
148
152 public static function getLocalExplorerJsPath()
153 {
154 return self::$js_expl_path;
155 }
156
160 public static function getLocalJsTreeJsPath()
161 {
162 return self::$js_tree_path;
163 }
164
168 public static function getLocalJsTreeCssPath()
169 {
171 }
172
178 public static function createHTMLExportDirs($a_target_dir)
179 {
180 ilUtil::makeDirParents($a_target_dir . "/Services/UIComponent/Explorer2/lib/jstree-v.pre1.0");
181 ilUtil::makeDirParents($a_target_dir . "/Services/UIComponent/Explorer2/js");
182 }
183
184
185
186 //
187 // Abstract functions that need to be overwritten in derived classes
188 //
189
198 abstract public function getRootNode();
199
206 abstract public function getChildsOfNode($a_parent_node_id);
207
214 abstract public function getNodeContent($a_node);
215
222 abstract public function getNodeId($a_node);
223
224
225 //
226 // Functions with standard implementations that may be overwritten
227 //
228
235 public function getNodeHref($a_node)
236 {
237 return "#";
238 }
239
249 public function nodeHasVisibleChilds($a_node)
250 {
251 $childs = $this->getChildsOfNode($this->getNodeId($a_node));
252
253 foreach ($childs as $child) {
254 if ($this->isNodeVisible($child)) {
255 return true;
256 }
257 }
258 return false;
259 }
260
269 public function sortChilds($a_childs, $a_parent_node_id)
270 {
271 return $a_childs;
272 }
273
280 public function getNodeIcon($a_node)
281 {
282 return "";
283 }
284
291 public function getNodeIconAlt($a_node)
292 {
293 return "";
294 }
295
302 public function getNodeTarget($a_node)
303 {
304 return "";
305 }
306
313 public function getNodeOnClick($a_node)
314 {
315 if ($this->select_postvar != "") {
316 return $this->getSelectOnClick($a_node);
317 }
318 return "";
319 }
320
327 public function isNodeVisible($a_node)
328 {
329 return true;
330 }
331
338 public function isNodeHighlighted($a_node)
339 {
340 return false;
341 }
342
349 public function isNodeClickable($a_node)
350 {
351 return true;
352 }
353
360 protected function isNodeSelectable($a_node)
361 {
362 return true;
363 }
364
365
366 //
367 // Basic configuration / setter/getter
368 //
369
375 public function getId()
376 {
377 return $this->id;
378 }
379
387 public function setSkipRootNode($a_val)
388 {
389 $this->skip_root_node = $a_val;
390 }
391
397 public function getSkipRootNode()
398 {
400 }
401
407 public function setAjax($a_val)
408 {
409 $this->ajax = $a_val;
410 }
411
417 public function getAjax()
418 {
419 return $this->ajax;
420 }
421
427 public function setSecondaryHighlightedNodes($a_val)
428 {
429 $this->sec_highl_nodes = $a_val;
430 }
431
438 {
440 }
441
448 public function setNodeOpen($a_id)
449 {
450 if (!in_array($a_id, $this->custom_open_nodes)) {
451 $this->custom_open_nodes[] = $a_id;
452 }
453 }
454
461 final protected function getNodeToggleOnClick($a_node)
462 {
463 return "$('#" . $this->getContainerId() . "').jstree('toggle_node' , '#" .
464 $this->getDomNodeIdForNodeId($this->getNodeId($a_node)) . "'); return false;";
465 }
466
473 final protected function getSelectOnClick($a_node)
474 {
475 $dn_id = $this->getDomNodeIdForNodeId($this->getNodeId($a_node));
476 $oc = "il.Explorer2.selectOnClick(event, '" . $dn_id . "'); return false;";
477 return $oc;
478 }
479
487 public function setSelectMode($a_postvar, $a_multi = false)
488 {
489 $this->select_postvar = $a_postvar;
490 $this->select_multi = $a_multi;
491 }
492
499 public function setNodeSelected($a_id)
500 {
501 if (!in_array($a_id, $this->selected_nodes)) {
502 $this->selected_nodes[] = $a_id;
503 }
504 }
505
511 public function setOfflineMode($a_val)
512 {
513 $this->offline_mode = $a_val;
514 }
515
521 public function getOfflineMode()
522 {
523 return $this->offline_mode;
524 }
525
526 //
527 // Standard functions that usually are not overwritten / internal use
528 //
529
535 public function handleCommand()
536 {
537 if ($_GET["exp_cmd"] != "" &&
538 $_GET["exp_cont"] == $this->getContainerId()) {
539 $cmd = $_GET["exp_cmd"];
540 if (in_array($cmd, array("openNode", "closeNode", "getNodeAsync"))) {
541 $this->$cmd();
542 }
543
544 return true;
545 }
546 return false;
547 }
548
555 public function getContainerId()
556 {
557 return "il_expl2_jstree_cont_" . $this->getId();
558 }
559
563 public function openNode()
564 {
566
567 $id = $this->getNodeIdForDomNodeId($_GET["node_id"]);
568 if (!in_array($id, $this->open_nodes)) {
569 $this->open_nodes[] = $id;
570 }
571 $this->store->set("on_" . $this->id, serialize($this->open_nodes));
572 exit;
573 }
574
578 public function closeNode()
579 {
581
582 $id = $this->getNodeIdForDomNodeId($_GET["node_id"]);
583 if (in_array($id, $this->open_nodes)) {
584 $k = array_search($id, $this->open_nodes);
585 unset($this->open_nodes[$k]);
586 }
587 $this->store->set("on_" . $this->id, serialize($this->open_nodes));
588 exit;
589 }
590
594 public function getNodeAsync()
595 {
596 $this->beforeRendering();
597
598 $etpl = new ilTemplate("tpl.explorer2.html", true, true, "Services/UIComponent/Explorer2");
599
600 $root = $this->getNodeId($this->getRootNode());
601 if (!in_array($root, $this->open_nodes)) {
602 $this->open_nodes[] = $root;
603 }
604
605 if ($_GET["node_id"] != "") {
606 $id = $this->getNodeIdForDomNodeId($_GET["node_id"]);
607 $this->setSearchTerm(ilUtil::stripSlashes($_GET["searchterm"]));
608 $this->renderChilds($id, $etpl);
609 } else {
610 $id = $this->getNodeId($this->getRootNode());
611 $this->renderNode($this->getRootNode(), $etpl);
612 }
613 echo $etpl->get("tag");
614 exit;
615 }
616
620 public function beforeRendering()
621 {
622 }
623
630 protected function isNodeOpen($node_id)
631 {
632 return ($this->getNodeId($this->getRootNode()) == $node_id
633 || in_array($node_id, $this->open_nodes)
634 || in_array($node_id, $this->custom_open_nodes));
635 }
636
637
644 public function getOnLoadCode()
645 {
647
648 $container_id = $this->getContainerId();
649 $container_outer_id = "il_expl2_jstree_cont_out_" . $this->getId();
650
651 // collect open nodes
652 $open_nodes = array($this->getDomNodeIdForNodeId($this->getNodeId($this->getRootNode())));
653 foreach ($this->open_nodes as $nid) {
654 $open_nodes[] = $this->getDomNodeIdForNodeId($nid);
655 }
656 foreach ($this->custom_open_nodes as $nid) {
657 $dnode = $this->getDomNodeIdForNodeId($nid);
658 if (!in_array($dnode, $open_nodes)) {
659 $open_nodes[] = $dnode;
660 }
661 }
662
663 // ilias config options
664 $url = "";
665 if (!$this->getOfflineMode()) {
666 if (is_object($this->parent_obj)) {
667 $url = $ilCtrl->getLinkTarget($this->parent_obj, $this->parent_cmd, "", true);
668 } else {
669 $url = $ilCtrl->getLinkTargetByClass($this->parent_obj, $this->parent_cmd, "", true);
670 }
671 }
672
673 // secondary highlighted nodes
674 $shn = array();
675 foreach ($this->sec_highl_nodes as $sh) {
676 $shn[] = $this->getDomNodeIdForNodeId($sh);
677 }
678 $config = array(
679 "container_id" => $container_id,
680 "container_outer_id" => $container_outer_id,
681 "url" => $url,
682 "second_hnodes" => $shn,
683 "ajax" => $this->getAjax(),
684 );
685
686
687 // jstree config options
688 $js_tree_config = array(
689 "core" => array(
690 "animation" => 0,
691 "initially_open" => $open_nodes,
692 "open_parents" => false,
693 "strings" => array("loading" => "Loading ...", "new_node" => "New node"),
694 "themes" => array("dots" => false, "icons" => false, "theme" => "")
695 ),
696 "plugins" => $this->getJSTreePlugins(),
697 "html_data" => array()
698 );
699
700 return 'il.Explorer2.init(' . json_encode($config) . ', ' . json_encode($js_tree_config) . ');';
701 }
702
703 protected function getJSTreePlugins()
704 {
705 $plugins = array("html_data", "themes", "json_data");
706 if ($this->isEnableDnd()) {
707 $plugins[] = "dnd";
708 }
709 return $plugins;
710 }
711
712
716 public static function init($a_main_tpl = null)
717 {
718 global $DIC;
719
720 if ($a_main_tpl == null) {
721 $tpl = $DIC["tpl"];
722 } else {
723 $tpl = $a_main_tpl;
724 }
725
726 include_once("./Services/jQuery/classes/class.iljQueryUtil.php");
728
729 $tpl->addJavascript(self::getLocalExplorerJsPath());
730 $tpl->addJavascript(self::getLocalJsTreeJsPath());
731 $tpl->addCss(self::getLocalJsTreeCssPath());
732 }
733
734
738 public function getHTML()
739 {
742
743 $root = $this->getNodeId($this->getRootNode());
744 if (!in_array($root, $this->open_nodes)) {
745 $this->open_nodes[] = $root;
746 }
747
748 $this->beforeRendering();
749
751 $container_id = $this->getContainerId();
752 $container_outer_id = "il_expl2_jstree_cont_out_" . $this->getId();
753
754 if (!$ilCtrl->isAsynch()) {
755 $tpl->addOnLoadCode($this->getOnLoadCode());
756 }
757
758 $etpl = new ilTemplate("tpl.explorer2.html", true, true, "Services/UIComponent/Explorer2");
759
760 if (!$this->ajax) {
761 // render childs
762 $root_node = $this->getRootNode();
763
764 if (!$this->getSkipRootNode() &&
765 $this->isNodeVisible($this->getRootNode())) {
766 $this->listStart($etpl);
767 $this->renderNode($this->getRootNode(), $etpl);
768 $this->listEnd($etpl);
769 } else {
770 $childs = $this->getChildsOfNode($this->getNodeId($root_node));
771 $childs = $this->sortChilds($childs, $this->getNodeId($root_node));
772 $any = false;
773 foreach ($childs as $child_node) {
774 if ($this->isNodeVisible($child_node)) {
775 if (!$any) {
776 $this->listStart($etpl);
777 $any = true;
778 }
779 $this->renderNode($child_node, $etpl);
780 }
781 }
782 if ($any) {
783 $this->listEnd($etpl);
784 }
785 }
786 }
787
788 $etpl->setVariable("CONTAINER_ID", $container_id);
789 $etpl->setVariable("CONTAINER_OUTER_ID", $container_outer_id);
790
791 $add = "";
792 if ($ilCtrl->isAsynch()) {
793 $add = "<script>" . $this->getOnLoadCode() . "</script>";
794 }
795
796 $content = $etpl->get();
797 //echo $content.$add; exit;
798 return $content . $add;
799 }
800
807 public function renderNode($a_node, $tpl)
808 {
809 $skip = ($this->getSkipRootNode()
810 && $this->getNodeId($this->getRootNode()) == $this->getNodeId($a_node));
811 if (!$skip) {
812 $this->listItemStart($tpl, $a_node);
813
814 // select mode?
815 if ($this->select_postvar != "" && $this->isNodeSelectable($a_node)) {
816 if ($this->select_multi) {
817 $tpl->setCurrentBlock("cb");
818 if (in_array($this->getNodeId($a_node), $this->selected_nodes)) {
819 $tpl->setVariable("CHECKED", 'checked="checked"');
820 }
821 $tpl->setVariable("CB_VAL", $this->getNodeId($a_node));
822 $tpl->setVariable("CB_NAME", $this->select_postvar . "[]");
823 $tpl->parseCurrentBlock();
824 } else {
825 $tpl->setCurrentBlock("rd");
826 if (in_array($this->getNodeId($a_node), $this->selected_nodes)) {
827 $tpl->setVariable("SELECTED", 'checked="checked"');
828 }
829 $tpl->setVariable("RD_VAL", $this->getNodeId($a_node));
830 $tpl->setVariable("RD_NAME", $this->select_postvar);
831 $tpl->parseCurrentBlock();
832 }
833 }
834
835
836 if ($this->isNodeHighlighted($a_node)) {
837 $tpl->touchBlock("hl");
838 }
839 $tpl->setCurrentBlock("content");
840 if ($this->getNodeIcon($a_node) != "") {
841 $tpl->setVariable("ICON", ilUtil::img($this->getNodeIcon($a_node), $this->getNodeIconAlt($a_node)) . " ");
842 }
843 $tpl->setVariable("CONTENT", $this->getNodeContent($a_node));
844 if ($this->isNodeClickable($a_node)) {
845 $tpl->setVariable("HREF", $this->getNodeHref($a_node));
846 }
847 $target = $this->getNodeTarget($a_node);
848 if ($target != "") {
849 $targetRelatedParams = array(
850 'target="' . $target . '"'
851 );
852
853 if ('_blank' === $target) {
854 $targetRelatedParams[] = 'rel="noopener"';
855 }
856
857 $tpl->setVariable('TARGET', implode(' ', $targetRelatedParams));
858 }
859 if (!$this->isNodeOnclickEnabled() || !$this->isNodeClickable($a_node)) {
860 $tpl->setVariable("ONCLICK", 'onclick="return false;"');
861 $tpl->setVariable("A_CLASS", 'class="disabled"');
862 } else {
863 $onclick = $this->getNodeOnClick($a_node);
864 if ($onclick != "") {
865 $tpl->setVariable("ONCLICK", 'onclick="' . $onclick . '"');
866 }
867 }
868 $tpl->parseCurrentBlock();
869
870 $tpl->touchBlock("tag");
871 }
872
873 if (!$this->getAjax() || in_array($this->getNodeId($a_node), $this->open_nodes)
874 || in_array($this->getNodeId($a_node), $this->custom_open_nodes)) {
875 $this->renderChilds($this->getNodeId($a_node), $tpl);
876 }
877
878 if (!$skip) {
879 $this->listItemEnd($tpl);
880 }
881 }
882
889 final public function renderChilds($a_node_id, $tpl)
890 {
891 $childs = $this->getChildsOfNode($a_node_id);
892 $childs = $this->sortChilds($childs, $a_node_id);
893
894 if (count($childs) > 0 || ($this->getSearchTerm() != "" && $this->requested_node_id == $this->getDomNodeIdForNodeId($a_node_id))) {
895 // collect visible childs
896
897 $visible_childs = [];
898 $cnt_child = 0;
899
900 foreach ($childs as $child) {
901 $cnt_child++;
902 if ($this->getChildLimit() > 0 && $this->getChildLimit() < $cnt_child) {
903 continue;
904 }
905
906 if ($this->isNodeVisible($child)) {
907 $visible_childs[] = $child;
908 }
909 }
910
911 // search field, if too many childs
912 $any = false;
913 if ($this->getChildLimit() > 0 && $this->getChildLimit() < $cnt_child
914 || ($this->getSearchTerm() != "")) {
915 if (!$any) {
916 $this->listStart($tpl);
917 $any = true;
918 }
919 $tpl->setCurrentBlock("list_search");
920 $tpl->setVariable("SEARCH_CONTAINER_ID", $a_node_id);
921 if ($this->requested_node_id == $this->getDomNodeIdForNodeId($a_node_id)) {
922 $tpl->setVariable("SEARCH_VAL", $this->getSearchTerm());
923 }
924 $tpl->parseCurrentBlock();
925 $tpl->touchBlock("tag");
926 }
927
928 // render visible childs
929 foreach ($visible_childs as $child) {
930 // check child limit
931 $cnt_child++;
932
933 if ($this->isNodeVisible($child)) {
934 if (!$any) {
935 $this->listStart($tpl);
936 $any = true;
937 }
938 $this->renderNode($child, $tpl);
939 }
940 }
941 if ($any) {
942 $this->listEnd($tpl);
943 }
944 }
945 }
946
953 public function getDomNodeIdForNodeId($a_node_id)
954 {
955 return "exp_node_" . $this->getId() . "_" . $a_node_id;
956 }
957
964 public function getNodeIdForDomNodeId($a_dom_node_id)
965 {
966 $i = strlen("exp_node_" . $this->getId() . "_");
967 return substr($a_dom_node_id, $i);
968 }
969
976 public function listItemStart($tpl, $a_node)
977 {
978 $tpl->setCurrentBlock("list_item_start");
979 if ($this->getAjax() && $this->nodeHasVisibleChilds($a_node) && !$this->isNodeOpen($this->getNodeId($a_node))) {
980 $tpl->touchBlock("li_closed");
981 }
982 if ($this->isNodeOpen($this->getNodeId($a_node))) {
983 $tpl->touchBlock("li_opened");
984 }
985
986 $tpl->setVariable(
987 "DOM_NODE_ID",
988 $this->getDomNodeIdForNodeId($this->getNodeId($a_node))
989 );
990 $tpl->parseCurrentBlock();
991 $tpl->touchBlock("tag");
992 }
993
1000 public function listItemEnd($tpl)
1001 {
1002 $tpl->touchBlock("list_item_end");
1003 $tpl->touchBlock("tag");
1004 }
1005
1012 public function listStart($tpl)
1013 {
1014 $tpl->touchBlock("list_start");
1015 $tpl->touchBlock("tag");
1016 }
1017
1024 public function listEnd($tpl)
1025 {
1026 $tpl->touchBlock("list_end");
1027 $tpl->touchBlock("tag");
1028 }
1029
1033 public function isNodeOnclickEnabled()
1034 {
1036 }
1037
1042 {
1043 $this->nodeOnclickEnabled = $nodeOnclickEnabled;
1044 }
1045
1046 public function isEnableDnd()
1047 {
1048 return $this->enable_dnd;
1049 }
1050
1055 public function setEnableDnd($enable_dnd)
1056 {
1057 $this->enable_dnd = $enable_dnd;
1058 }
1059}
$_GET["client_id"]
An exception for terminatinating execution or to throw for unit testing.
Explorer base GUI class.
setNodeSelected($a_id)
Set node to be opened (additional custom opened node, not standard expand behaviour)
getNodeIcon($a_node)
Get node icon path.
getNodeContent($a_node)
Get content of a node.
getId()
Get id of explorer element.
isNodeSelectable($a_node)
Is node selectable?
getContainerId()
Get container id.
setNodeOnclickEnabled($nodeOnclickEnabled)
getNodeIconAlt($a_node)
Get node icon alt attribute.
getNodeAsync()
Get node asynchronously.
setMainTemplate($a_main_tpl=null)
Set main template (that is responsible for adding js/css)
getNodeOnClick($a_node)
Get node onclick attribute.
setSecondaryHighlightedNodes($a_val)
Set secondary (background) highlighted nodes.
static init($a_main_tpl=null)
Init JS.
static getLocalJsTreeCssPath()
Get local path of jsTree js.
beforeRendering()
Before rendering.
setEnableDnd($enable_dnd)
Enable Drag & Drop functionality.
getOnLoadCode()
Get on load code.
renderChilds($a_node_id, $tpl)
Render childs.
getChildLimit()
Get child limit.
static getLocalExplorerJsPath()
Get local path of explorer js.
renderNode($a_node, $tpl)
Render node.
getChildsOfNode($a_parent_node_id)
Get childs of node.
isNodeClickable($a_node)
Is node clickable?
getDomNodeIdForNodeId($a_node_id)
Get DOM node id for node id.
getNodeTarget($a_node)
Get node target (frame) attribute.
getNodeIdForDomNodeId($a_dom_node_id)
Get node id for dom node id.
static getLocalJsTreeJsPath()
Get local path of jsTree js.
handleCommand()
Handle explorer internal command.
nodeHasVisibleChilds($a_node)
Node has childs?
setChildLimit($a_val)
Set child limit.
getSecondaryHighlightedNodes()
Get secondary (background) highlighted nodes.
sortChilds($a_childs, $a_parent_node_id)
Sort childs.
getNodeId($a_node)
Get id of a node.
setSearchTerm($a_val)
Set search term.
getSkipRootNode()
Get skip root node.
getSearchTerm()
Get search term.
getNodeToggleOnClick($a_node)
Get onclick attribute for node toggling.
getOfflineMode()
Get offline mode.
setSkipRootNode($a_val)
Set skip root node.
setNodeOpen($a_id)
Set node to be opened (additional custom opened node, not standard expand behaviour)
__construct($a_expl_id, $a_parent_obj, $a_parent_cmd)
Constructor.
getNodeHref($a_node)
Get href for node.
isNodeHighlighted($a_node)
Is node highlighted?
static createHTMLExportDirs($a_target_dir)
Create html export directories.
listItemEnd($tpl)
List item end.
isNodeOpen($node_id)
Get all open nodes.
setSelectMode($a_postvar, $a_multi=false)
Set select mode (to deactivate, pass an empty string as postvar)
getRootNode()
Get root node.
setOfflineMode($a_val)
Set offline mode.
isNodeVisible($a_node)
Is node visible?
getSelectOnClick($a_node)
Get onclick attribute for selecting radio/checkbox.
listItemStart($tpl, $a_node)
List item start.
Session based immediate storage.
special template class to simplify handling of ITX/PEAR
static img($a_src, $a_alt=null, $a_width="", $a_height="", $a_border=0, $a_id="", $a_class="")
Build img tag.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static makeDirParents($a_dir)
Create a new directory and all parent directories.
static initConnection(ilGlobalTemplateInterface $a_main_tpl=null)
Init YUI Connection module.
static initjQuery(ilGlobalTemplateInterface $a_tpl=null)
inits and adds the jQuery JS-File to the global or a passed template
global $ilCtrl
Definition: ilias.php:18
exit
Definition: login.php:29
if(!array_key_exists('PATH_INFO', $_SERVER)) $config
Definition: metadata.php:68
$i
Definition: metadata.php:24
$url
$DIC
Definition: xapitoken.php:46