ILIAS  eassessment Revision 61809
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilHierarchyFormGUI.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 include_once("./Services/Form/classes/class.ilFormGUI.php");
5 
15 {
21  function __construct()
22  {
23  global $lng, $tpl;
24 
25  $this->maxdepth = -1;
26  $this->multi_commands = array();
27  $this->commands = array();
28  $this->drag_target[] = array();
29  $this->drag_content[] = array();
30  $lng->loadLanguageModule("form");
31  $this->setCheckboxName("cbox");
33  $this->help_items = array();
34 
35  include_once("./Services/YUI/classes/class.ilYuiUtil.php");
37  $tpl->addJavascript("./Services/Form/js/ServiceFormHierarchyForm.js");
38  }
39 
45  function setParentCommand($a_parent_obj, $a_parent_cmd)
46  {
47  $this->parent_obj = $a_parent_obj;
48  $this->parent_cmd = $a_parent_cmd;
49  }
50 
56  function getParentObject()
57  {
58  return $this->parent_obj;
59  }
60 
66  function getParentCommand()
67  {
68  return $this->parent_cmd;
69  }
70 
76  function setId($a_id)
77  {
78  die("ilHierarchyFormGUI does currently not support multiple forms (multiple IDs). ID is always hform.");
79  }
80 
86  function getId()
87  {
88  return "hform";
89  }
90 
96  function setTree($a_tree)
97  {
98  $this->tree = $a_tree;
99  }
100 
106  function getTree()
107  {
108  return $this->tree;
109  }
110 
116  function setCurrentTopNodeId($a_currenttopnodeid)
117  {
118  $this->currenttopnodeid = $a_currenttopnodeid;
119  }
120 
127  {
128  return $this->currenttopnodeid;
129  }
130 
136  function setTitle($a_title)
137  {
138  $this->title = $a_title;
139  }
140 
146  function getTitle()
147  {
148  return $this->title;
149  }
150 
156  function setIcon($a_icon)
157  {
158  $this->icon = $a_icon;
159  }
160 
166  function getIcon()
167  {
168  return $this->icon;
169  }
170 
176  function setCheckboxName($a_checkboxname)
177  {
178  $this->checkboxname = $a_checkboxname;
179  }
180 
186  function getCheckboxName()
187  {
188  return $this->checkboxname;
189  }
190 
196  function setDragIcon($a_dragicon)
197  {
198  $this->dragicon = $a_dragicon;
199  }
200 
206  function getDragIcon()
207  {
208  return $this->dragicon;
209  }
210 
216  function setMaxDepth($a_maxdepth)
217  {
218  $this->maxdepth = $a_maxdepth;
219  }
220 
226  function getMaxDepth()
227  {
228  return $this->maxdepth;
229  }
230 
236  function setExplorerUpdater($a_exp_frame, $a_exp_id, $a_exp_target_script)
237  {
238  $this->exp_frame = $a_exp_frame;
239  $this->exp_id = $a_exp_id;
240  $this->exp_target_script = $a_exp_target_script;
241  }
242 
248  function setTriggeredUpdateCommand($a_triggered_update_command)
249  {
250  $this->triggered_update_command = $a_triggered_update_command;
251  }
252 
256  function addHelpItem($a_text, $a_image = "")
257  {
258  $this->help_items[] = array("text" => $a_text,
259  "image" => $a_image);
260  }
261 
265  function getHelpItems()
266  {
267  return $this->help_items;
268  }
269 
276  function makeDragTarget($a_id, $a_group, $a_first_child_drop_area = false, $a_as_subitem = false, $a_diss_text = "")
277  {
278  if ($a_first_child_drop_area == true) // first child drop areas only insert as subitems
279  {
280  $a_as_subitem = true;
281  }
282 
283  if ($a_id != "")
284  {
285  if ($a_first_child_drop_area)
286  {
287  $a_id.= "fc";
288  }
289 
290  $this->drag_target[] = array("id" => $a_id, "group" => $a_group);
291  $this->diss_menues[$a_id][$a_group][] = array("subitem" => $a_as_subitem, "text" => $a_diss_text);
292  }
293  }
294 
301  function makeDragContent($a_id, $a_group)
302  {
303  if ($a_id != "")
304  {
305  $this->drag_content[] = array("id" => $a_id, "group" => $a_group);
306  }
307  }
308 
315  function addMultiCommand($a_txt, $a_cmd)
316  {
317  $this->multi_commands[] = array("text" => $a_txt, "cmd" => $a_cmd);
318  }
319 
326  function addCommand($a_txt, $a_cmd)
327  {
328  $this->commands[] = array("text" => $a_txt, "cmd" => $a_cmd);
329  }
330 
336  function setHighlightedNodes($a_val)
337  {
338  $this->highlighted_nodes = $a_val;
339  }
340 
347  {
348  return $this->highlighted_nodes;
349  }
350 
356  function setFocusId($a_val)
357  {
358  $this->focus_id = $a_val;
359  }
360 
366  function getFocusId()
367  {
368  return $this->focus_id;
369  }
370 
376  function setExpandVariable($a_val)
377  {
378  $this->expand_variable = $a_val;
379  }
380 
386  function getExpandVariable()
387  {
388  return $this->expand_variable;
389  }
390 
396  function setExpanded($a_val)
397  {
398  $this->expanded = $a_val;
399  }
400 
406  function getExpanded()
407  {
408  return $this->expanded;
409  }
410 
416  function updateExpanded()
417  {
418  $ev = $this->getExpandVariable();
419 
420  if ($ev == "")
421  {
422  return;
423  }
424 
425  // init empty session
426  if (!is_array($_SESSION[$ev]))
427  {
428  $_SESSION[$ev] = array($this->getTree()->getRootId());
429  }
430 
431  if ($_POST["il_hform_expand"] != "")
432  {
433  $node_id = $_POST["il_hform_expand"];
434  }
435  if ($_GET[$ev] != "")
436  {
437  $node_id = $_GET[$ev];
438  }
439 
440  // if positive => expand this node
441  if ($node_id > 0 && !in_array($node_id,$_SESSION[$ev]))
442  {
443  array_push($_SESSION[$ev], $node_id);
444  }
445  // if negative => compress this node
446  if ($node_id < 0)
447  {
448  $key = array_keys($_SESSION[$ev],-(int) $node_id);
449  unset($_SESSION[$ev][$key[0]]);
450  }
451  $this->setExpanded($_SESSION[$ev]);
452  }
453 
458  function getChilds($a_node_id = false)
459  {
460  if ($a_node_id == false)
461  {
462  $a_node_id = $this->getCurrentTopNodeId();
463  }
464 
465  $tree_childs = $this->getTree()->getChilds($a_node_id);
466  $childs = array();
467  foreach($tree_childs as $tree_child)
468  {
469  $childs[] = array("node_id" => $tree_child["child"],
470  "title" => $tree_child["title"],
471  "type" => $tree_child["type"]);
472  }
473 
474  return $childs;
475  }
476 
480  function getContent()
481  {
482  global $lng;
483 
484  if ($this->getExpandVariable() != "")
485  {
486  $this->updateExpanded();
487  }
488 
489  $ttpl = new ilTemplate("tpl.hierarchy_form.html", true, true, "Services/Form");
490  $top_node_data = $this->getTree()->getNodeData($this->getCurrentTopNodeId());
491  $top_node = array("node_id" => $top_node_data["child"],
492  "title" => $top_node_data["title"],
493  "type" => $top_node_data["type"]);
494 
495  $childs = null;
496  $nodes_html = $this->getLevelHTML($top_node, 0, $childs);
497 
498  // icon
499  if ($this->getIcon() != "")
500  {
501  $ttpl->setCurrentBlock("icon");
502  $ttpl->setVariable("SRC_ICON", $this->getIcon());
503  $ttpl->parseCurrentBlock();
504  }
505 
506  // commands
507  $secs = array("1", "2");
508  foreach ($secs as $sec)
509  {
510  reset($this->commands);
511  reset($this->multi_commands);
512  if (count($this->multi_commands) > 0 || count($this->commands) > 0)
513  {
514  if (count($childs) > 0)
515  {
516  $single = false;
517  foreach($this->commands as $cmd)
518  {
519  $ttpl->setCurrentBlock("cmd".$sec);
520  $ttpl->setVariable("CMD", $cmd["cmd"]);
521  $ttpl->setVariable("CMD_TXT", $cmd["text"]);
522  $ttpl->parseCurrentBlock();
523  $single = true;
524  }
525 
526  $multi = false;
527  foreach($this->multi_commands as $cmd)
528  {
529  $ttpl->setCurrentBlock("multi_cmd".$sec);
530  $ttpl->setVariable("MULTI_CMD", $cmd["cmd"]);
531  $ttpl->setVariable("MULTI_CMD_TXT", $cmd["text"]);
532  $ttpl->parseCurrentBlock();
533  $multi = true;
534  }
535  if ($multi)
536  {
537  $ttpl->setCurrentBlock("multi_cmds".$sec);
538  $ttpl->setVariable("MCMD_ALT", $lng->txt("commands"));
539  if ($sec == "1")
540  {
541  $ttpl->setVariable("MCMD_IMG", ilUtil::getImagePath("arrow_downright.gif"));
542  }
543  else
544  {
545  $ttpl->setVariable("MCMD_IMG", ilUtil::getImagePath("arrow_upright.gif"));
546  }
547  $ttpl->parseCurrentBlock();
548  }
549  }
550 
551  if ($single || $multi)
552  {
553  $ttpl->setCurrentBlock("commands".$sec);
554  $ttpl->parseCurrentBlock();
555  }
556  $single = true;
557  }
558  }
559 
560  // explorer updater
561  if ($this->exp_frame != "")
562  {
563  $ttpl->setCurrentBlock("updater");
564  $ttpl->setVariable("UPDATER_FRAME", $this->exp_frame);
565  $ttpl->setVariable("EXP_ID_UPDATER", $this->exp_id);
566  $ttpl->setVariable("HREF_UPDATER", $this->exp_target_script);
567  $ttpl->parseCurrentBlock();
568  }
569 
570  // drag and drop initialisation
571  foreach($this->drag_target as $drag_target)
572  {
573  $ttpl->setCurrentBlock("dragtarget");
574  $ttpl->setVariable("EL_ID", $drag_target["id"]);
575  $ttpl->setVariable("GROUP", $drag_target["group"]);
576  $ttpl->parseCurrentBlock();
577  }
578  foreach($this->drag_content as $drag_content)
579  {
580  $ttpl->setCurrentBlock("dragcontent");
581  $ttpl->setVariable("EL_ID", $drag_content["id"]);
582  $ttpl->setVariable("GROUP", $drag_content["group"]);
583  $ttpl->parseCurrentBlock();
584  }
585 
586  // disambiguation menues and "insert as first child" flags
587  if (is_array($this->diss_menues))
588  {
589  foreach($this->diss_menues as $node_id => $d_menu)
590  {
591  foreach($d_menu as $group => $menu)
592  {
593  if (count($menu) > 1)
594  {
595  foreach($menu as $menu_item)
596  {
597  $ttpl->setCurrentBlock("dmenu_cmd");
598  $ttpl->setVariable("SUBITEM", (int) $menu_item["subitem"]);
599  $ttpl->setVariable("TXT_MENU_CMD", $menu_item["text"]);
600  $ttpl->parseCurrentBlock();
601  }
602 
603  $ttpl->setCurrentBlock("disambiguation_menu");
604  $ttpl->setVariable("DNODE_ID", $node_id);
605  $ttpl->setVariable("GRP", $group);
606  $ttpl->parseCurrentBlock();
607  }
608  else if (count($menu) == 1)
609  {
610  // set first child flag
611  $ttpl->setCurrentBlock("as_subitem_flag");
612  $ttpl->setVariable("SI_NODE_ID", $node_id);
613  $ttpl->setVariable("SI_GRP", $group);
614  $ttpl->setVariable("SI_SI", (int) $menu[0]["subitem"]);
615  $ttpl->parseCurrentBlock();
616 
617  }
618  }
619  }
620  }
621  $this->diss_menues[$a_id][$a_group][] = array("type" => $a_type, "text" => $a_diss_text);
622 
623  // help
624  $ttpl->setCurrentBlock("help_img");
625  $ttpl->setVariable("IMG_HELP", ilUtil::getImagePath("streaked_area.gif"));
626  $ttpl->parseCurrentBlock();
627  $ttpl->setCurrentBlock("help_section");
628  $ttpl->setVariable("TXT_HELP",
629  $lng->txt("form_hierarchy_add_elements"));
630  $ttpl->parseCurrentBlock();
631 
632  if ($this->getDragIcon() != "")
633  {
634  $ttpl->setCurrentBlock("help_img");
635  $ttpl->setVariable("IMG_HELP", $this->getDragIcon());
636  $ttpl->parseCurrentBlock();
637  $ttpl->setCurrentBlock("help_img");
638  $ttpl->setVariable("IMG_HELP",
639  ilUtil::getImagePath("drop_streaked_area.gif"));
640  $ttpl->parseCurrentBlock();
641  $ttpl->setCurrentBlock("help_section");
642  $ttpl->setVariable("TXT_HELP",
643  $lng->txt("form_hierarchy_drag_drop_help"));
644  $ttpl->parseCurrentBlock();
645  }
646 
647  // additional help items
648  foreach ($this->getHelpItems() as $help)
649  {
650  if ($help["image"] != "")
651  {
652  $ttpl->setCurrentBlock("help_img");
653  $ttpl->setVariable("IMG_HELP", $help["image"]);
654  $ttpl->parseCurrentBlock();
655  }
656  $ttpl->setCurrentBlock("help_section");
657  $ttpl->setVariable("TXT_HELP", $help["text"]);
658  $ttpl->parseCurrentBlock();
659  }
660 
661  if ($this->triggered_update_command != "")
662  {
663  $ttpl->setCurrentBlock("tr_update");
664  $ttpl->setVariable("UPDATE_CMD", $this->triggered_update_command);
665  $ttpl->parseCurrentBlock();
666  }
667 
668  // disambiguation menues and "insert as first child" flags
669  if (is_array($this->diss_menues))
670  {
671  foreach($this->diss_menues as $node_id => $d_menu)
672  {
673  foreach($d_menu as $group => $menu)
674  {
675  if (count($menu) > 1)
676  {
677  foreach($menu as $menu_item)
678  {
679  $ttpl->setCurrentBlock("dmenu_cmd");
680  $ttpl->setVariable("SUBITEM", (int) $menu_item["subitem"]);
681  $ttpl->setVariable("TXT_MENU_CMD", $menu_item["text"]);
682  $ttpl->parseCurrentBlock();
683  }
684 
685  $ttpl->setCurrentBlock("disambiguation_menu");
686  $ttpl->setVariable("DNODE_ID", $node_id);
687  $ttpl->setVariable("GRP", $group);
688  $ttpl->parseCurrentBlock();
689  }
690  else if (count($menu) == 1)
691  {
692  // set first child flag
693  $ttpl->setCurrentBlock("as_subitem_flag");
694  $ttpl->setVariable("SI_NODE_ID", $node_id);
695  $ttpl->setVariable("SI_GRP", $group);
696  $ttpl->setVariable("SI_SI", (int) $menu[0]["subitem"]);
697  $ttpl->parseCurrentBlock();
698 
699  }
700  }
701  }
702  }
703  $this->diss_menues[$a_id][$a_group][] = array("type" => $a_type, "text" => $a_diss_text);
704 
705  // nodes
706  $ttpl->setVariable("NODES", $nodes_html);
707 
708  // title
709 //echo "<br>".htmlentities($this->getTitle())." --- ".htmlentities(ilUtil::prepareFormOutput($this->getTitle()));
710  $ttpl->setVariable("TITLE", $this->getTitle());
711 
712 
713  return $ttpl->get();
714  }
715 
719  function getLevelHTML($a_par_node, $a_depth, &$a_childs)
720  {
721  if ($this->getMaxDepth() > -1 && $this->getMaxDepth() < $a_depth)
722  {
723  return "";
724  }
725 
726  $childs = $this->getChilds($a_par_node["node_id"]);
727  $a_childs = $childs;
728  $html = "";
729  $last_child = null;
730  $ttpl = new ilTemplate("tpl.hierarchy_form_nodes.html", true, true, "Services/Form");
731 
732  // prepended drop area
733  if ($this->nodeAllowsChilds($a_par_node) && (count($childs) > 0 || $a_depth == 0))
734  {
735  $ttpl->setCurrentBlock("drop_area");
736  $ttpl->setVariable("DNODE_ID", $a_par_node["node_id"]."fc"); // fc means "first child"
737  $ttpl->setVariable("IMG_BLANK", ilUtil::getImagePath("spacer.gif"));
738  $ttpl->parseCurrentBlock();
739 
740  $this->manageDragAndDrop($a_par_node, $a_depth, true, null, $childs);
741 
742  $menu_items = $this->getMenuItems($a_par_node, $a_depth, true, null, $childs);
743 //var_dump($menu_items);
744  if (count($menu_items) > 0)
745  {
746  // determine maximum of multi add numbers
747  $max = 1;
748  foreach($menu_items as $menu_item)
749  {
750  if ($menu_item["multi"] > $max)
751  {
752  $max = $menu_item["multi"];
753  }
754  }
755 
756  reset($menu_items);
757  $mcnt = 1;
758  foreach($menu_items as $menu_item)
759  {
760  if ($menu_item["multi"] > 1)
761  {
762  for($i = 1; $i <= $menu_item["multi"]; $i++)
763  {
764  $ttpl->setCurrentBlock("multi_add");
765  $ttpl->setVariable("MA_NUM", $i);
766  $ttpl->setVariable("MENU_CMD", $menu_item["cmd"]);
767  $ttpl->setVariable("FC", "1");
768  $ttpl->setVariable("CMD_NODE", $a_par_node["node_id"]);
769  $ttpl->setVariable("MCNT", $mcnt."fc");
770  $ttpl->parseCurrentBlock();
771  }
772  }
773 
774  // buffer td for lower multis
775  if ($max > $menu_item["multi"])
776  {
777  $ttpl->setCurrentBlock("multi_buffer");
778  $ttpl->setVariable("BUF_SPAN", $max - $menu_item["multi"]);
779  $ttpl->parseCurrentBlock();
780  }
781  $ttpl->setCurrentBlock("menu_cmd");
782  $ttpl->setVariable("TXT_MENU_CMD", $menu_item["text"]);
783  $ttpl->setVariable("MENU_CMD", $menu_item["cmd"]);
784  $ttpl->setVariable("CMD_NODE", $a_par_node["node_id"]);
785  $ttpl->setVariable("FC", "1");
786  $ttpl->setVariable("MCNT", $mcnt."fc");
787  $ttpl->parseCurrentBlock();
788  $mcnt++;
789  }
790  $ttpl->setCurrentBlock("drop_area_menu");
791  $ttpl->setVariable("MNODE_ID", $a_par_node["node_id"]."fc");
792  $ttpl->parseCurrentBlock();
793 
794  $ttpl->setCurrentBlock("element");
795  $ttpl->parseCurrentBlock();
796  }
797  }
798 
799  // insert childs
800  if (count($childs) > 0)
801  {
802  for($i = 0; $i < count($childs); $i++)
803  {
804  $next_sibling = ($i < (count($childs) - 1))
805  ? $next_sibling = $childs[$i+1]
806  : null;
807  $this->renderChild($ttpl, $childs[$i], $a_depth, $next_sibling);
808  $last_child = $child;
809  }
810  }
811 
812  $html = $ttpl->get();
813  unset($ttpl);
814 
815  return $html;
816  }
817 
821  function renderChild($a_tpl, $a_child, $a_depth, $next_sibling = null)
822  {
823  global $ilCtrl;
824 
825  // image
826  $a_tpl->setCurrentBlock("img");
827  $a_tpl->setVariable("IMGPATH", $this->getChildIcon($a_child));
828  $a_tpl->setVariable("IMGALT", $this->getChildIconAlt($a_child));
829  $a_tpl->setVariable("IMG_NODE", $a_child["node_id"]);
830  $a_tpl->setVariable("NODE_ID", $a_child["node_id"]);
831  $a_tpl->setVariable("TYPE", $a_child["type"]);
832  $a_tpl->parseCurrentBlock();
833 
834  // checkbox
835  $a_tpl->setCurrentBlock("cbox");
836  $a_tpl->setVariable("CNODE_ID", $a_child["node_id"]);
837  $a_tpl->setVariable("CBOX_NAME", $this->getCheckboxName());
838  $a_tpl->parseCurrentBlock();
839 
840  // commands of child node
841  $child_commands = $this->getChildCommands($a_child);
842  if (is_array($child_commands))
843  {
844  foreach($child_commands as $command)
845  {
846  $a_tpl->setCurrentBlock("node_cmd");
847  $a_tpl->setVariable("HREF_NODE_CMD", $command["link"]);
848  $a_tpl->setVariable("TXT_NODE_CMD", $command["text"]);
849  $a_tpl->parseCurrentBlock();
850  }
851  }
852 
853  // title
854  $a_tpl->setCurrentBlock("text");
855  $hl = $this->getHighlightedNodes();
856  if (is_array($hl) && in_array($a_child["node_id"], $hl))
857  {
858  $a_tpl->setVariable("CLASS", ' class="ilHFormHighlighted" ');
859  }
860  $a_tpl->setVariable("VAL_TITLE", ilUtil::prepareFormOutput($a_child["title"]));
861  $a_tpl->setVariable("TNODE_ID", $a_child["node_id"]);
862  $a_tpl->parseCurrentBlock();
863  $grandchilds = null;
864  $grandchilds_html = $this->getLevelHTML($a_child, $a_depth + 1, $grandchilds);
865 
866  // focus
867  if ($this->getFocusId() == $a_child["node_id"])
868  {
869  $a_tpl->setCurrentBlock("focus");
870  $a_tpl->setVariable("FNODE_ID", $a_child["node_id"]);
871  $a_tpl->parseCurrentBlock();
872  }
873 
874  // expander
875  if ($this->getExpandVariable() != "")
876  {
877  $a_tpl->setCurrentBlock("expand_icon");
878  if (!is_null($grandchilds) && count($grandchilds) > 0)
879  {
880  if (!in_array($a_child["node_id"],$this->getExpanded()))
881  {
882  $ilCtrl->setParameter($this->getParentObject(), $this->getExpandVariable(), $a_child["node_id"]);
883  $a_tpl->setVariable("IMG_EXPAND", ilUtil::getImagePath("browser/plus.gif"));
884  $a_tpl->setVariable("HREF_NAME", "n".$a_child["node_id"]);
885  $a_tpl->setVariable("HREF_EXPAND",
886  $ilCtrl->getLinkTarget($this->getParentObject(), $this->getParentCommand(), "n".$a_child["node_id"]));
887  $grandchilds_html = "";
888  }
889  else
890  {
891  $ilCtrl->setParameter($this->getParentObject(), $this->getExpandVariable(), -$a_child["node_id"]);
892  $a_tpl->setVariable("IMG_EXPAND", ilUtil::getImagePath("browser/minus.gif"));
893  $a_tpl->setVariable("HREF_NAME", "n".$a_child["node_id"]);
894  $a_tpl->setVariable("HREF_EXPAND",
895  $ilCtrl->getLinkTarget($this->getParentObject(), $this->getParentCommand(), "n".$a_child["node_id"]));
896  }
897  $ilCtrl->setParameter($this->getParentObject(), $this->getExpandVariable(), "");
898  }
899  else
900  {
901  $a_tpl->setVariable("IMG_EXPAND", ilUtil::getImagePath("spacer.gif"));
902  }
903  $a_tpl->parseCurrentBlock();
904  }
905 
906  // childs
907  $a_tpl->setCurrentBlock("list_item");
908  $a_tpl->setVariable("CHILDS", $grandchilds_html);
909  $a_tpl->parseCurrentBlock();
910 
911  $a_tpl->setCurrentBlock("element");
912  $a_tpl->parseCurrentBlock();
913 
914  // drop area after child
915  $a_tpl->setCurrentBlock("drop_area");
916  $a_tpl->setVariable("DNODE_ID", $a_child["node_id"]);
917  $a_tpl->setVariable("IMG_BLANK", ilUtil::getImagePath("spacer.gif"));
918  $a_tpl->parseCurrentBlock();
919 
920  // manage drag and drop areas
921  $this->manageDragAndDrop($a_child, $a_depth, false, $next_sibling, $grandchilds);
922 
923  // drop area menu
924  $menu_items = $this->getMenuItems($a_child, $a_depth, false, $next_sibling, $grandchilds);
925  if (count($menu_items) > 0)
926  {
927  // determine maximum of multi add numbers
928  $max = 1;
929  foreach($menu_items as $menu_item)
930  {
931  if ($menu_item["multi"] > $max)
932  {
933  $max = $menu_item["multi"];
934  }
935  }
936 
937  reset($menu_items);
938  $mcnt = 1;
939  foreach($menu_items as $menu_item)
940  {
941  if ($menu_item["multi"] > 1 )
942  {
943  for($i = 1; $i <= $menu_item["multi"]; $i++)
944  {
945  $a_tpl->setCurrentBlock("multi_add");
946  $a_tpl->setVariable("MA_NUM", $i);
947  $a_tpl->setVariable("MENU_CMD", $menu_item["cmd"]);
948  if ($menu_item["as_subitem"])
949  {
950  $a_tpl->setVariable("FC", "1");
951  $a_tpl->setVariable("MCNT", $mcnt."fc");
952  }
953  else
954  {
955  $a_tpl->setVariable("FC", "0");
956  $a_tpl->setVariable("MCNT", $mcnt);
957  }
958  $a_tpl->setVariable("CMD_NODE", $a_child["node_id"]);
959  $a_tpl->parseCurrentBlock();
960  }
961  }
962 
963  // buffer td for lower multis
964  if ($max > $menu_item["multi"])
965  {
966  $a_tpl->setCurrentBlock("multi_buffer");
967  $a_tpl->setVariable("BUF_SPAN", $max - $menu_item["multi"]);
968  $a_tpl->parseCurrentBlock();
969  }
970 
971  $a_tpl->setCurrentBlock("menu_cmd");
972  $a_tpl->setVariable("TXT_MENU_CMD", $menu_item["text"]);
973  $a_tpl->setVariable("MENU_CMD", $menu_item["cmd"]);
974  if ($menu_item["as_subitem"])
975  {
976  $a_tpl->setVariable("FC", "1");
977  $a_tpl->setVariable("MCNT", $mcnt."fc");
978  }
979  else
980  {
981  $a_tpl->setVariable("FC", "0");
982  $a_tpl->setVariable("MCNT", $mcnt);
983  }
984  $a_tpl->setVariable("CMD_NODE", $a_child["node_id"]);
985  $a_tpl->parseCurrentBlock();
986  $mcnt++;
987  }
988  $a_tpl->setCurrentBlock("drop_area_menu");
989  $a_tpl->setVariable("MNODE_ID", $a_child["node_id"]);
990  $a_tpl->parseCurrentBlock();
991  }
992 
993  $a_tpl->setCurrentBlock("element");
994  $a_tpl->parseCurrentBlock();
995  }
996 
1003  function getChildIcon($a_item)
1004  {
1005  return ilUtil::getImagePath("icon_".$a_item["type"].".gif");
1006  }
1007 
1014  function getChildIconAlt($a_item)
1015  {
1016  global $lng;
1017 
1018  return $lng->txt($a_item["type"]);
1019  }
1020 
1027  function getChildCommands($a_item)
1028  {
1029  return false;
1030  }
1031 
1044  function getMenuItems($a_node, $a_depth, $a_first_child = false, $a_next_sibling = null, $a_childs = null)
1045  {
1046  return array();
1047  }
1048 
1053  function nodeAllowsChilds($a_node)
1054  {
1055  return true;
1056  }
1057 
1064  function manageDragAndDrop($a_node, $a_depth, $a_first_child = false, $a_next_sibling = null, $a_childs = null)
1065  {
1066  //$this->makeDragTarget($a_node["id"], $a_group);
1067  //$this->makeDragTarget($a_node["id"], $a_group);
1068  }
1069 
1073  static function getPostMulti()
1074  {
1075  return (int) ($_POST["il_hform_multi"] > 1
1076  ? $_POST["il_hform_multi"]
1077  : 1);
1078  }
1079 
1083  static function getPostNodeId()
1084  {
1085  return $_POST["il_hform_node"];
1086  }
1087 
1091  static function getPostFirstChild()
1092  {
1093  return (((int) $_POST["il_hform_fc"]) == 1);
1094  }
1095 
1096 }