ILIAS  release_7 Revision v7.30-3-g800a261c036
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 = "./node_modules/jstree/dist/jstree.js";
34 protected static $js_tree_path_css = "./node_modules/jstree/dist/themes/default/style.min.css";
35
36 protected static $js_expl_path = "./Services/UIComponent/Explorer2/js/Explorer2.js";
37 protected $skip_root_node = false;
38 protected $ajax = false;
39 protected $custom_open_nodes = array();
40 protected $selected_nodes = array();
41 protected $select_postvar = "";
42 protected $offline_mode = false;
43 protected $sec_highl_nodes = array();
44 protected $enable_dnd = false;
45 protected $search_term = "";
46
48 protected $open_nodes = [];
49
51 protected $store;
52
56 protected $parent_obj;
57
61 protected $child_limit = 0;
62
64
66 protected $parent_cmd = '';
67
71 public function __construct($a_expl_id, $a_parent_obj, $a_parent_cmd)
72 {
73 global $DIC;
74
75 $this->log = $DIC["ilLog"];
76 $this->ctrl = $DIC->ctrl();
77 $this->tpl = $DIC["tpl"];
78 $this->id = $a_expl_id;
79 $this->parent_obj = $a_parent_obj;
80 $this->parent_cmd = $a_parent_cmd;
81 // get open nodes
82 include_once("./Services/Authentication/classes/class.ilSessionIStorage.php");
83 $this->store = new ilSessionIStorage("expl2");
84 $open_nodes = $this->store->get("on_" . $this->id);
85 $this->open_nodes = unserialize($open_nodes);
86 if (!is_array($this->open_nodes)) {
87 $this->open_nodes = array();
88 }
89
90 $this->requested_node_id = $_GET["node_id"];
91
92 $this->nodeOnclickEnabled = true;
94 }
95
101 public function setChildLimit($a_val)
102 {
103 $this->child_limit = $a_val;
104 }
105
111 public function getChildLimit()
112 {
113 return $this->child_limit;
114 }
115
121 public function setSearchTerm($a_val)
122 {
123 $this->search_term = $a_val;
124 }
125
131 public function getSearchTerm()
132 {
133 return $this->search_term;
134 }
135
136
142 public function setMainTemplate($a_main_tpl = null)
143 {
144 $this->tpl = $a_main_tpl;
145 }
146
147
151 public static function getLocalExplorerJsPath()
152 {
153 return self::$js_expl_path;
154 }
155
159 public static function getLocalJsTreeJsPath()
160 {
161 return self::$js_tree_path;
162 }
163
167 public static function getLocalJsTreeCssPath()
168 {
170 }
171
177 public static function createHTMLExportDirs($a_target_dir)
178 {
179 ilUtil::makeDirParents($a_target_dir . "/Services/UIComponent/Explorer2/lib/jstree-v.pre1.0");
180 ilUtil::makeDirParents($a_target_dir . "/Services/UIComponent/Explorer2/js");
181 }
182
183
184
185 //
186 // Abstract functions that need to be overwritten in derived classes
187 //
188
197 abstract public function getRootNode();
198
205 abstract public function getChildsOfNode($a_parent_node_id);
206
213 abstract public function getNodeContent($a_node);
214
221 abstract public function getNodeId($a_node);
222
223
224 //
225 // Functions with standard implementations that may be overwritten
226 //
227
234 public function getNodeHref($a_node)
235 {
236 return "#";
237 }
238
248 public function nodeHasVisibleChilds($a_node)
249 {
250 $childs = $this->getChildsOfNode($this->getNodeId($a_node));
251
252 foreach ($childs as $child) {
253 if ($this->isNodeVisible($child)) {
254 return true;
255 }
256 }
257 return false;
258 }
259
268 public function sortChilds($a_childs, $a_parent_node_id)
269 {
270 return $a_childs;
271 }
272
279 public function getNodeIcon($a_node)
280 {
281 return "";
282 }
283
290 public function getNodeIconAlt($a_node)
291 {
292 return "";
293 }
294
301 public function getNodeTarget($a_node)
302 {
303 return "";
304 }
305
312 public function getNodeOnClick($a_node)
313 {
314 if ($this->select_postvar != "") {
315 return $this->getSelectOnClick($a_node);
316 }
317 return "";
318 }
319
326 public function isNodeVisible($a_node)
327 {
328 return true;
329 }
330
337 public function isNodeHighlighted($a_node)
338 {
339 return false;
340 }
341
348 public function isNodeClickable($a_node)
349 {
350 return true;
351 }
352
359 protected function isNodeSelectable($a_node)
360 {
361 return true;
362 }
363
364
365 //
366 // Basic configuration / setter/getter
367 //
368
374 public function getId()
375 {
376 return $this->id;
377 }
378
386 public function setSkipRootNode($a_val)
387 {
388 $this->skip_root_node = $a_val;
389 }
390
396 public function getSkipRootNode()
397 {
399 }
400
406 public function setAjax($a_val)
407 {
408 $this->ajax = $a_val;
409 }
410
416 public function getAjax()
417 {
418 return $this->ajax;
419 }
420
426 public function setSecondaryHighlightedNodes($a_val)
427 {
428 $this->sec_highl_nodes = $a_val;
429 }
430
437 {
439 }
440
447 public function setNodeOpen($a_id)
448 {
449 if (!in_array($a_id, $this->custom_open_nodes)) {
450 $this->custom_open_nodes[] = $a_id;
451 }
452 }
453
460 final protected function getNodeToggleOnClick($a_node)
461 {
462 return "$('#" . $this->getContainerId() . "').jstree('toggle_node' , '#" .
463 $this->getDomNodeIdForNodeId($this->getNodeId($a_node)) . "'); return false;";
464 }
465
472 final protected function getSelectOnClick($a_node)
473 {
474 $dn_id = $this->getDomNodeIdForNodeId($this->getNodeId($a_node));
475 $oc = "il.Explorer2.selectOnClick(event, '" . $dn_id . "'); return false;";
476 return $oc;
477 }
478
486 public function setSelectMode($a_postvar, $a_multi = false)
487 {
488 $this->select_postvar = $a_postvar;
489 $this->select_multi = $a_multi;
490 }
491
498 public function setNodeSelected($a_id)
499 {
500 if (!in_array($a_id, $this->selected_nodes)) {
501 $this->selected_nodes[] = $a_id;
502 }
503 }
504
510 public function setOfflineMode($a_val)
511 {
512 $this->offline_mode = $a_val;
513 }
514
520 public function getOfflineMode()
521 {
522 return $this->offline_mode;
523 }
524
525 //
526 // Standard functions that usually are not overwritten / internal use
527 //
528
534 public function handleCommand()
535 {
536 if ($_GET["exp_cmd"] != "" &&
537 $_GET["exp_cont"] == $this->getContainerId()) {
538 $cmd = $_GET["exp_cmd"];
539 if (in_array($cmd, array("openNode", "closeNode", "getNodeAsync"))) {
540 $this->$cmd();
541 }
542
543 return true;
544 }
545 return false;
546 }
547
554 public function getContainerId()
555 {
556 return "il_expl2_jstree_cont_" . $this->getId();
557 }
558
562 public function openNode()
563 {
564 $ilLog = $this->log;
565
566 $id = $this->getNodeIdForDomNodeId($_GET["node_id"]);
567 if (!in_array($id, $this->open_nodes)) {
568 $this->open_nodes[] = $id;
569 }
570 $this->store->set("on_" . $this->id, serialize($this->open_nodes));
571 exit;
572 }
573
577 public function closeNode()
578 {
579 $ilLog = $this->log;
580
581 $id = $this->getNodeIdForDomNodeId($_GET["node_id"]);
582 if (in_array($id, $this->open_nodes)) {
583 $k = array_search($id, $this->open_nodes);
584 unset($this->open_nodes[$k]);
585 }
586 $this->store->set("on_" . $this->id, serialize($this->open_nodes));
587 exit;
588 }
589
593 public function getNodeAsync()
594 {
595 $this->beforeRendering();
596
597 $etpl = new ilTemplate("tpl.explorer2.html", true, true, "Services/UIComponent/Explorer2");
598
599 $root = $this->getNodeId($this->getRootNode());
600 if (!in_array($root, $this->open_nodes)) {
601 $this->open_nodes[] = $root;
602 }
603
604 if ($_GET["node_id"] != "") {
605 $id = $this->getNodeIdForDomNodeId($_GET["node_id"]);
606 $this->setSearchTerm(ilUtil::stripSlashes($_GET["searchterm"]));
607 $this->renderChilds($id, $etpl);
608 } else {
609 $id = $this->getNodeId($this->getRootNode());
610 $this->renderNode($this->getRootNode(), $etpl);
611 }
612 echo $etpl->get("tag");
613 exit;
614 }
615
619 public function beforeRendering()
620 {
621 }
622
629 protected function isNodeOpen($node_id)
630 {
631 return ($this->getNodeId($this->getRootNode()) == $node_id
632 || in_array($node_id, $this->open_nodes)
633 || in_array($node_id, $this->custom_open_nodes));
634 }
635
636
643 public function getOnLoadCode()
644 {
645 $ilCtrl = $this->ctrl;
646
647 $container_id = $this->getContainerId();
648 $container_outer_id = "il_expl2_jstree_cont_out_" . $this->getId();
649
650 // collect open nodes
651 $open_nodes = array($this->getDomNodeIdForNodeId($this->getNodeId($this->getRootNode())));
652 foreach ($this->open_nodes as $nid) {
653 $open_nodes[] = $this->getDomNodeIdForNodeId($nid);
654 }
655 foreach ($this->custom_open_nodes as $nid) {
656 $dnode = $this->getDomNodeIdForNodeId($nid);
657 if (!in_array($dnode, $open_nodes)) {
658 $open_nodes[] = $dnode;
659 }
660 }
661
662 // ilias config options
663 $url = "";
664 if (!$this->getOfflineMode()) {
665 if (is_object($this->parent_obj)) {
666 $url = $ilCtrl->getLinkTarget($this->parent_obj, $this->parent_cmd, "", true);
667 } else {
668 $url = $ilCtrl->getLinkTargetByClass($this->parent_obj, $this->parent_cmd, "", true);
669 }
670 }
671
672 // secondary highlighted nodes
673 $shn = array();
674 foreach ($this->sec_highl_nodes as $sh) {
675 $shn[] = $this->getDomNodeIdForNodeId($sh);
676 }
677 $config = array(
678 "container_id" => $container_id,
679 "container_outer_id" => $container_outer_id,
680 "url" => $url,
681 "second_hnodes" => $shn,
682 "ajax" => $this->getAjax(),
683 );
684
685
686 // jstree config options
687 $js_tree_config = array(
688 "core" => array(
689 "animation" => 0,
690 "initially_open" => $open_nodes,
691 "open_parents" => false,
692 "strings" => array("loading" => "Loading ...", "new_node" => "New node"),
693 "themes" => array("dots" => false, "icons" => false, "theme" => "")
694 ),
695 "plugins" => $this->getJSTreePlugins(),
696 "html_data" => array()
697 );
698
699 return 'il.Explorer2.init(' . json_encode($config) . ', ' . json_encode($js_tree_config) . ');';
700 }
701
702 protected function getJSTreePlugins()
703 {
704 $plugins = array("html_data", "themes", "json_data");
705 if ($this->isEnableDnd()) {
706 $plugins[] = "dnd";
707 }
708 return $plugins;
709 }
710
711
715 public static function init($a_main_tpl = null)
716 {
717 global $DIC;
718
719 if ($a_main_tpl == null) {
720 $tpl = $DIC["tpl"];
721 } else {
722 $tpl = $a_main_tpl;
723 }
724
725 include_once("./Services/jQuery/classes/class.iljQueryUtil.php");
727
728 $tpl->addJavascript(self::getLocalExplorerJsPath());
729 $tpl->addJavascript(self::getLocalJsTreeJsPath());
730 $tpl->addCss(self::getLocalJsTreeCssPath());
731 }
732
733
737 public function getHTML()
738 {
740 $ilCtrl = $this->ctrl;
741
742 $root = $this->getNodeId($this->getRootNode());
743 if (!in_array($root, $this->open_nodes)) {
744 $this->open_nodes[] = $root;
745 }
746
747 $this->beforeRendering();
748
750 $container_id = $this->getContainerId();
751 $container_outer_id = "il_expl2_jstree_cont_out_" . $this->getId();
752
753 if (!$ilCtrl->isAsynch()) {
754 $tpl->addOnLoadCode($this->getOnLoadCode());
755 }
756
757 $etpl = new ilTemplate("tpl.explorer2.html", true, true, "Services/UIComponent/Explorer2");
758
759 if (!$this->ajax) {
760 // render childs
761 $root_node = $this->getRootNode();
762
763 if (!$this->getSkipRootNode() &&
764 $this->isNodeVisible($this->getRootNode())) {
765 $this->listStart($etpl);
766 $this->renderNode($this->getRootNode(), $etpl);
767 $this->listEnd($etpl);
768 } else {
769 $childs = $this->getChildsOfNode($this->getNodeId($root_node));
770 $childs = $this->sortChilds($childs, $this->getNodeId($root_node));
771 $any = false;
772 foreach ($childs as $child_node) {
773 if ($this->isNodeVisible($child_node)) {
774 if (!$any) {
775 $this->listStart($etpl);
776 $any = true;
777 }
778 $this->renderNode($child_node, $etpl);
779 }
780 }
781 if ($any) {
782 $this->listEnd($etpl);
783 }
784 }
785 }
786
787 $etpl->setVariable("CONTAINER_ID", $container_id);
788 $etpl->setVariable("CONTAINER_OUTER_ID", $container_outer_id);
789
790 $add = "";
791 if ($ilCtrl->isAsynch()) {
792 $add = "<script>" . $this->getOnLoadCode() . "</script>";
793 }
794
795 $content = $etpl->get();
796 //echo $content.$add; exit;
797 return $content . $add;
798 }
799
806 public function renderNode($a_node, $tpl)
807 {
808 $skip = ($this->getSkipRootNode()
809 && $this->getNodeId($this->getRootNode()) == $this->getNodeId($a_node));
810 if (!$skip) {
811 $this->listItemStart($tpl, $a_node);
812
813 // select mode?
814 if ($this->select_postvar != "" && $this->isNodeSelectable($a_node)) {
815 if ($this->select_multi) {
816 $tpl->setCurrentBlock("cb");
817 if (in_array($this->getNodeId($a_node), $this->selected_nodes)) {
818 $tpl->setVariable("CHECKED", 'checked="checked"');
819 }
820 $tpl->setVariable("CB_VAL", $this->getNodeId($a_node));
821 $tpl->setVariable("CB_NAME", $this->select_postvar . "[]");
822 $tpl->parseCurrentBlock();
823 } else {
824 $tpl->setCurrentBlock("rd");
825 if (in_array($this->getNodeId($a_node), $this->selected_nodes)) {
826 $tpl->setVariable("SELECTED", 'checked="checked"');
827 }
828 $tpl->setVariable("RD_VAL", $this->getNodeId($a_node));
829 $tpl->setVariable("RD_NAME", $this->select_postvar);
830 $tpl->parseCurrentBlock();
831 }
832 }
833
834
835 if ($this->isNodeHighlighted($a_node)) {
836 $tpl->touchBlock("hl");
837 }
838 $tpl->setCurrentBlock("content");
839 if ($this->getNodeIcon($a_node) != "") {
840 $tpl->setVariable("ICON", ilUtil::img($this->getNodeIcon($a_node), $this->getNodeIconAlt($a_node)) . " ");
841 }
842 $tpl->setVariable("CONTENT", $this->getNodeContent($a_node));
843 if ($this->isNodeClickable($a_node)) {
844 $tpl->setVariable("HREF", $this->getNodeHref($a_node));
845 }
846 $target = $this->getNodeTarget($a_node);
847 if ($target != "") {
848 $targetRelatedParams = array(
849 'target="' . $target . '"'
850 );
851
852 if ('_blank' === $target) {
853 $targetRelatedParams[] = 'rel="noopener"';
854 }
855
856 $tpl->setVariable('TARGET', implode(' ', $targetRelatedParams));
857 }
858 if (!$this->isNodeOnclickEnabled() || !$this->isNodeClickable($a_node)) {
859 $tpl->setVariable("ONCLICK", 'onclick="return false;"');
860 $tpl->setVariable("A_CLASS", 'class="disabled"');
861 } else {
862 $onclick = $this->getNodeOnClick($a_node);
863 if ($onclick != "") {
864 $tpl->setVariable("ONCLICK", 'onclick="' . $onclick . '"');
865 }
866 }
867 $tpl->parseCurrentBlock();
868
869 $tpl->touchBlock("tag");
870 }
871
872 if (!$this->getAjax() || in_array($this->getNodeId($a_node), $this->open_nodes)
873 || in_array($this->getNodeId($a_node), $this->custom_open_nodes)) {
874 $this->renderChilds($this->getNodeId($a_node), $tpl);
875 }
876
877 if (!$skip) {
878 $this->listItemEnd($tpl);
879 }
880 }
881
888 final public function renderChilds($a_node_id, $tpl)
889 {
890 $childs = $this->getChildsOfNode($a_node_id);
891 $childs = $this->sortChilds($childs, $a_node_id);
892
893 if (count($childs) > 0 || ($this->getSearchTerm() != "" && $this->requested_node_id == $this->getDomNodeIdForNodeId($a_node_id))) {
894 // collect visible childs
895
896 $visible_childs = [];
897 $cnt_child = 0;
898
899 foreach ($childs as $child) {
900 $cnt_child++;
901 if ($this->getChildLimit() > 0 && $this->getChildLimit() < $cnt_child) {
902 continue;
903 }
904
905 if ($this->isNodeVisible($child)) {
906 $visible_childs[] = $child;
907 }
908 }
909
910 // search field, if too many childs
911 $any = false;
912 if ($this->getChildLimit() > 0 && $this->getChildLimit() < $cnt_child
913 || ($this->getSearchTerm() != "")) {
914 if (!$any) {
915 $this->listStart($tpl);
916 $any = true;
917 }
918 $tpl->setCurrentBlock("list_search");
919 $tpl->setVariable("SEARCH_CONTAINER_ID", $a_node_id);
920 if ($this->requested_node_id == $this->getDomNodeIdForNodeId($a_node_id)) {
921 $tpl->setVariable("SEARCH_VAL", $this->getSearchTerm());
922 }
923 $tpl->parseCurrentBlock();
924 $tpl->touchBlock("tag");
925 }
926
927 // render visible childs
928 foreach ($visible_childs as $child) {
929 // check child limit
930 $cnt_child++;
931
932 if ($this->isNodeVisible($child)) {
933 if (!$any) {
934 $this->listStart($tpl);
935 $any = true;
936 }
937 $this->renderNode($child, $tpl);
938 }
939 }
940 if ($any) {
941 $this->listEnd($tpl);
942 }
943 }
944 }
945
952 public function getDomNodeIdForNodeId($a_node_id)
953 {
954 return "exp_node_" . $this->getId() . "_" . $a_node_id;
955 }
956
963 public function getNodeIdForDomNodeId($a_dom_node_id)
964 {
965 $i = strlen("exp_node_" . $this->getId() . "_");
966 return substr($a_dom_node_id, $i);
967 }
968
975 public function listItemStart($tpl, $a_node)
976 {
977 $tpl->setCurrentBlock("list_item_start");
978 if ($this->getAjax() && $this->nodeHasVisibleChilds($a_node) && !$this->isNodeOpen($this->getNodeId($a_node))) {
979 $tpl->touchBlock("li_closed");
980 }
981 if ($this->isNodeOpen($this->getNodeId($a_node))) {
982 $tpl->touchBlock("li_opened");
983 }
984
985 $tpl->setVariable(
986 "DOM_NODE_ID",
987 $this->getDomNodeIdForNodeId($this->getNodeId($a_node))
988 );
989 $tpl->parseCurrentBlock();
990 $tpl->touchBlock("tag");
991 }
992
999 public function listItemEnd($tpl)
1000 {
1001 $tpl->touchBlock("list_item_end");
1002 $tpl->touchBlock("tag");
1003 }
1004
1011 public function listStart($tpl)
1012 {
1013 $tpl->touchBlock("list_start");
1014 $tpl->touchBlock("tag");
1015 }
1016
1023 public function listEnd($tpl)
1024 {
1025 $tpl->touchBlock("list_end");
1026 $tpl->touchBlock("tag");
1027 }
1028
1032 public function isNodeOnclickEnabled()
1033 {
1035 }
1036
1041 {
1042 $this->nodeOnclickEnabled = $nodeOnclickEnabled;
1043 }
1044
1045 public function isEnableDnd()
1046 {
1047 return $this->enable_dnd;
1048 }
1049
1054 public function setEnableDnd($enable_dnd)
1055 {
1056 $this->enable_dnd = $enable_dnd;
1057 }
1058}
$_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 $DIC
Definition: goto.php:24
exit
Definition: login.php:29
if(!array_key_exists('PATH_INFO', $_SERVER)) $config
Definition: metadata.php:68
$i
Definition: metadata.php:24
$url