ILIAS  Release_4_4_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilObjTaxonomyGUI.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2012 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 require_once "./Services/Object/classes/class.ilObject2GUI.php";
5 require_once "./Services/Taxonomy/classes/class.ilObjTaxonomy.php";
6 include_once("./Services/Taxonomy/interfaces/interface.ilTaxAssignedItemInfo.php");
7 
19 {
20  protected $multiple = false;
21  protected $assigned_item_sorting = false;
22 
26  function __construct($a_id = 0)
27  {
28  global $ilCtrl;
29 
31 
32  $ilCtrl->saveParameter($this, "tax_node");
33  $ilCtrl->saveParameter($this, "tax_id");
34  }
35 
41  function getType()
42  {
43  return "tax";
44  }
45 
51  function setAssignedObject($a_val)
52  {
53  $this->assigned_object_id = $a_val;
54  }
55 
61  function getAssignedObject()
62  {
63  return $this->assigned_object_id;
64  }
65 
71  function setMultiple($a_val)
72  {
73  $this->multiple = $a_val;
74  }
75 
81  function getMultiple()
82  {
83  return $this->multiple;
84  }
85 
91  function activateAssignedItemSorting(ilTaxAssignedItemInfo $a_item_info_obj, $a_component_id, $a_obj_id, $a_item_type)
92  {
93  $this->assigned_item_sorting = true;
94  $this->assigned_item_info_obj = $a_item_info_obj;
95  $this->assigned_item_comp_id = $a_component_id;
96  $this->assigned_item_obj_id = $a_obj_id;
97  $this->assigned_item_type = $a_item_type;
98  }
99 
100 
104  function executeCommand()
105  {
106  global $ilCtrl, $ilUser, $ilTabs;
107 
108  $next_class = $ilCtrl->getNextClass();
109 
110  switch ($next_class)
111  {
112  default:
113  $cmd = $ilCtrl->getCmd("listTaxonomies");
114  $this->$cmd();
115  break;
116  }
117  }
118 
122  protected function initCreationForms()
123  {
124  $forms = array();
125 
126  $forms = array(
127  self::CFORM_NEW => $this->initCreateForm("tax")
128  );
129 
130  return $forms;
131  }
132 
133 
137 
145  {
146  global $ilToolbar, $ilCtrl, $lng;
147 
148 
149 // if (count($tax_ids) != 0 && !$this->getMultiple())
150 // {
151 // $this->listNodes();
152 // }
153 // else if ($this->getMultiple())
154 // {
155  $this->listTaxonomies();
156 // }
157 
158  // currently we support only one taxonomy, otherwise we may need to provide
159  // a list here
160 
161  }
162 
170  {
172  $tax_id = (int) $_GET["tax_id"];
173  if (in_array($tax_id, $tax_ids))
174  {
175  return $tax_id;
176  }
177  return false;
178  }
179 
180 
188  {
189  $tax_id = $this->getCurrentTaxonomyId();
190  if ($tax_id > 0)
191  {
192  $tax = new ilObjTaxonomy($tax_id);
193  return $tax;
194  }
195 
196  return false;
197  }
198 
199 
206  function listNodes()
207  {
208  global $tpl, $ilToolbar, $lng, $ilCtrl;
209 
210  $tax = $this->getCurrentTaxonomy();
211 
212  $this->setTabs("list_items");
213 
214  // show toolbar
215  $ilToolbar->setFormAction($ilCtrl->getFormAction($this));
216  $ilToolbar->addFormButton($lng->txt("tax_create_node"), "createTaxNode");
217 
218  $ilToolbar->setCloseFormTag(false);
219 
220 
221  // show tree
222  $this->showTree();
223 
224  // show subitems
225  include_once("./Services/Taxonomy/classes/class.ilTaxonomyTableGUI.php");
226  $table = new ilTaxonomyTableGUI($this, "listNodes", $tax->getTree(),
227  (int) $_GET["tax_node"], $this->getCurrentTaxonomy());
228  $table->setOpenFormTag(false);
229 
230  $tpl->setContent($table->getHTML());
231  }
232 
233 
241  {
242  $this->create();
243  }
244 
245 
250  protected function checkPermissionBool($a_perm, $a_cmd = "", $a_type = "", $a_node_id = null)
251  {
252  if ($this->getAssignedObject() > 0)
253  {
254  return true;
255  }
256  else
257  {
258  return parent::checkPermissionBool($a_perm, $a_cmd, $a_type, $a_node_id);
259  }
260  }
261 
268  function cancel()
269  {
270  global $ilCtrl;
271 
272  if ($this->getAssignedObject() > 0)
273  {
274  $ilCtrl->redirect($this, "listTaxonomies");
275  }
276 
277  return parent::cancel();
278  }
279 
286  function save()
287  {
288  global $ilCtrl;
289 
290  if ($this->getAssignedObject() > 0)
291  {
292  $_REQUEST["new_type"] = "tax";
293  }
294 
296  }
297 
304  protected function afterSave(ilObject $a_new_object)
305  {
306  global $ilCtrl, $lng;
307 
308  if ($this->getAssignedObject() > 0)
309  {
310  ilObjTaxonomy::saveUsage($a_new_object->getId(),
311  $this->getAssignedObject());
312  $ilCtrl->setParameter($this, "tax_id", $a_new_object->getId());
313  ilUtil::sendSuccess($lng->txt("tax_added"), true);
314  $ilCtrl->redirect($this, "editSettings");
315  }
316  }
317 
321  function showTree($a_ass_items = false)
322  {
323  global $ilUser, $tpl, $ilCtrl, $lng;
324 
325  $tax = $this->getCurrentTaxonomy();
326 
327  include_once("./Services/Taxonomy/classes/class.ilTaxonomyExplorerGUI.php");
328  $cmd = $a_ass_items
329  ? "listAssignedItems"
330  : "listNodes";
331  $tax_exp = new ilTaxonomyExplorerGUI($this, "showTree", $tax->getId(),
332  "ilobjtaxonomygui", $cmd);
333  if (!$tax_exp->handleCommand())
334  {
335  //$tpl->setLeftNavContent($tax_exp->getHTML());
336  $tpl->setLeftContent($tax_exp->getHTML()."&nbsp;");
337  }
338  return;
339  }
340 
347  static function getTreeHTML($a_tax_id, $a_class, $a_cmd,
348  $a_target_class, $a_target_cmd, $a_root_node_title = "")
349  {
350 die("ilObjTaxonomyGUI::getTreeHTML is deprecated.");
351  include_once("./Services/Taxonomy/classes/class.ilTaxonomyExplorerGUI.php");
352  $tax_exp = new ilTaxonomyExplorerGUI($a_class, $a_cmd, $a_tax_id,
353  $a_target_class, $a_target_cmd);
354  if (!$tax_exp->handleCommand())
355  {
356  return $tax_exp->getHTML()."&nbsp;";
357  }
358  return;
359  }
360 
361 
368  function createTaxNode()
369  {
370  global $tpl, $ilHelp;
371 
372  $this->setTabs("list_items");
373  $ilHelp->setSubScreenId("create_node");
374 
375  $this->initTaxNodeForm("create");
376  $tpl->setContent($this->form->getHTML());
377  }
378 
379 
385  public function initTaxNodeForm($a_mode = "edit")
386  {
387  global $lng, $ilCtrl;
388 
389  include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
390  $this->form = new ilPropertyFormGUI();
391 
392  // title
393  $ti = new ilTextInputGUI($this->lng->txt("title"), "title");
394  $this->form->addItem($ti);
395 
396  // order nr
397  $tax = $this->getCurrentTaxonomy();
398  if ($tax->getSortingMode() == ilObjTaxonomy::SORT_MANUAL)
399  {
400  $or = new ilTextInputGUI($this->lng->txt("tax_order_nr"), "order_nr");
401  $or->setMaxLength(5);
402  $or->setSize(5);
403  $this->form->addItem($or);
404  }
405 
406  if ($a_mode == "edit")
407  {
408  $node = new ilTaxonomyNode((int) $_GET["tax_node"]);
409  $ti->setValue($node->getTitle());
410  $or->setValue($node->getOrderNr());
411  }
412 
413  // save and cancel commands
414  if ($a_mode == "create")
415  {
416  $this->form->addCommandButton("saveTaxNode", $lng->txt("save"));
417  $this->form->addCommandButton("listNodes", $lng->txt("cancel"));
418  $this->form->setTitle($lng->txt("tax_new_tax_node"));
419  }
420  else
421  {
422  $this->form->addCommandButton("updateTaxNode", $lng->txt("save"));
423  $this->form->addCommandButton("listNodes", $lng->txt("cancel"));
424  $this->form->setTitle($lng->txt("tax_edit_tax_node"));
425  }
426 
427  $this->form->setFormAction($ilCtrl->getFormAction($this));
428 
429  }
430 
435  public function saveTaxNode()
436  {
437  global $tpl, $lng, $ilCtrl;
438 
439  $this->initTaxNodeForm("create");
440  if ($this->form->checkInput())
441  {
442  $tax = $this->getCurrentTaxonomy();
443 
444  // create node
445  include_once("./Services/Taxonomy/classes/class.ilTaxonomyNode.php");
446  $node = new ilTaxonomyNode();
447  $node->setTitle($this->form->getInput("title"));
448 
449  $tax = $this->getCurrentTaxonomy();
450  if ($tax->getSortingMode() == ilObjTaxonomy::SORT_MANUAL)
451  {
452  $order_nr = $this->form->getInput("order_nr");
453  }
454  if ($order_nr === "")
455  {
456  $order_nr = ilTaxonomyNode::getNextOrderNr($tax->getId(), (int) $_GET["tax_node"]);
457  }
458  //echo $order_nr; exit;
459  $node->setOrderNr($order_nr);
460  $node->setTaxonomyId($tax->getId());
461  $node->create();
462 
463  // put in tree
464  ilTaxonomyNode::putInTree($tax->getId(), $node, (int) $_GET["tax_node"]);
465 
466  ilTaxonomyNode::fixOrderNumbers($tax->getId(), (int) $_GET["tax_node"]);
467 
468  ilUtil::sendSuccess($lng->txt("msg_obj_modified"), true);
469  $ilCtrl->redirect($this, "listNodes");
470  }
471  else
472  {
473  $this->form->setValuesByPost();
474  $tpl->setContent($this->form->getHtml());
475  }
476  }
477 
478 
482  function updateTaxNode()
483  {
484  global $lng, $ilCtrl, $tpl;
485 
486  $this->initTaxNodeForm("edit");
487  if ($this->form->checkInput())
488  {
489  // create node
490  $node = new ilTaxonomyNode($_GET["tax_node"]);
491  $node->setTitle($this->form->getInput("title"));
492 
493  $tax = $this->getCurrentTaxonomy();
494  if ($tax->getSortingMode() == ilObjTaxonomy::SORT_MANUAL)
495  {
496  $node->setOrderNr($this->form->getInput("order_nr"));
497  }
498 
499  $node->update();
500 
501  ilUtil::sendInfo($lng->txt("msg_obj_modified"), true);
502  $ilCtrl->redirect($this, "");
503  }
504  else
505  {
506  $this->form->setValuesByPost();
507  $tpl->setContent($this->form->getHtml());
508  }
509  }
510 
514  function deleteItems()
515  {
516  global $lng, $tpl, $ilCtrl, $ilTabs, $ilHelp;
517 
518  if(!isset($_POST["id"]))
519  {
520  $this->ilias->raiseError($this->lng->txt("no_checkbox"),$this->ilias->error_obj->MESSAGE);
521  }
522 
523  $this->setTabs("list_items");
524  $ilHelp->setSubScreenId("del_items");
525 
526 // $ilTabs->clearTargets();
527 
528  include_once("./Services/Utilities/classes/class.ilConfirmationGUI.php");
529  $confirmation_gui = new ilConfirmationGUI();
530 
531  $confirmation_gui->setFormAction($ilCtrl->getFormAction($this));
532  $confirmation_gui->setHeaderText($this->lng->txt("info_delete_sure"));
533 
534  // Add items to delete
535  include_once("./Services/Taxonomy/classes/class.ilTaxonomyNode.php");
536  foreach($_POST["id"] as $id)
537  {
538  $confirmation_gui->addItem("id[]", $id,
540  }
541 
542  $confirmation_gui->setCancel($lng->txt("cancel"), "listNodes");
543  $confirmation_gui->setConfirm($lng->txt("confirm"), "confirmedDelete");
544 
545  $tpl->setContent($confirmation_gui->getHTML());
546  }
547 
551  function confirmedDelete()
552  {
553  global $ilCtrl;
554 
555  include_once("./Services/Taxonomy/classes/class.ilTaxonomyNode.php");
556 
557  // delete all selected objects
558  foreach ($_POST["id"] as $id)
559  {
560  $node = new ilTaxonomyNode($id);
561  $tax = new ilObjTaxonomy($node->getTaxonomyId());
562  $tax_tree = $tax->getTree();
563  $node_data = $tax_tree->getNodeData($id);
564  if (is_object($node))
565  {
566  $node->delete();
567  }
568  if($tax_tree->isInTree($id))
569  {
570  $tax_tree->deleteTree($node_data);
571  }
572  ilTaxonomyNode::fixOrderNumbers($node->getTaxonomyId(), $node_data["parent"]);
573  }
574 
575  // feedback
576  ilUtil::sendInfo($this->lng->txt("info_deleted"),true);
577 
578  $ilCtrl->redirect($this, "listNodes");
579  }
580 
587  function saveSorting()
588  {
589  global $ilCtrl, $lng;
590 
591  // save sorting
592  include_once("./Services/Taxonomy/classes/class.ilTaxonomyNode.php");
593  if (is_array($_POST["order"]))
594  {
595 // asort($_POST["order"]);
596 // $cnt = 10;
597  foreach ($_POST["order"] as $k => $v)
598  {
600  ilTaxonomyNode::fixOrderNumbers($this->getCurrentTaxonomyId(), (int) $_GET["tax_node"]);
601 // $cnt+= 10;
602  }
603  }
604 
605  // save titles
606  if (is_array($_POST["title"]))
607  {
608  foreach ($_POST["title"] as $k => $v)
609  {
612  }
613  }
614 
615 
616  ilUtil::sendSuccess($lng->txt("msg_obj_modified"));
617  $ilCtrl->redirect($this, "listNodes");
618  }
619 
623  function moveItems()
624  {
625  global $tpl, $ilCtrl, $lng, $ilToolbar, $ilHelp;
626 
627  $this->setTabs("list_items");
628  $ilHelp->setSubScreenId("move_items");
629 
630  $ilToolbar->addButton($lng->txt("cancel"),
631  $ilCtrl->getLinkTarget($this, "listNodes"));
632 
633  ilUtil::sendInfo($lng->txt("tax_please_select_target"));
634 
635  if (is_array($_POST["id"]))
636  {
637  $ilCtrl->setParameter($this, "move_ids", implode($_POST["id"], ","));
638 
639  global $ilUser, $tpl, $ilCtrl, $lng;
640 
641  include_once("./Services/Taxonomy/classes/class.ilTaxonomyExplorerGUI.php");
642  $tax_exp = new ilTaxonomyExplorerGUI($this, "moveItems", $this->getCurrentTaxonomy()->getId(),
643  "ilobjtaxonomygui", "pasteItems");
644  if (!$tax_exp->handleCommand())
645  {
646  //$tpl->setLeftNavContent($tax_exp->getHTML());
647  $tpl->setContent($tax_exp->getHTML()."&nbsp;");
648  }
649  }
650  }
651 
655  function pasteItems()
656  {
657  global $lng, $ilCtrl;
658 //var_dump($_GET);
659 //var_dump($_POST);
660  if ($_GET["move_ids"] != "")
661  {
662  $move_ids = explode(",", $_GET["move_ids"]);
663  $tax = $this->getCurrentTaxonomy();
664  $tree = $tax->getTree();
665 
666  include_once("./Services/Taxonomy/classes/class.ilTaxonomyNode.php");
667  $target_node = new ilTaxonomyNode((int) $_GET["tax_node"]);
668  foreach ($move_ids as $m_id)
669  {
670  // cross check taxonomy
671  $node = new ilTaxonomyNode((int) $m_id);
672  if ($node->getTaxonomyId() == $tax->getId() &&
673  ($target_node->getTaxonomyId() == $tax->getId() ||
674  $target_node->getId() == $tree->readRootId()))
675  {
676  // check if target is not within the selected nodes
677  if($tree->isGrandChild((int) $m_id, $target_node->getId()))
678  {
679  ilUtil::sendFailure($lng->txt("tax_target_within_nodes"), true);
680  $this->ctrl->redirect($this, "listNodes");
681  }
682 
683  // if target is not current place, move
684  $parent_id = $tree->getParentId((int) $m_id);
685  if ($parent_id != $target_node->getId())
686  {
687  $tree->moveTree((int) $m_id, $target_node->getId());
688  ilTaxonomyNode::fixOrderNumbers($tax->getId(), $target_node->getId());
690  }
691  }
692  }
693  }
694 
695  ilUtil::sendSuccess($lng->txt("msg_obj_modified"), true);
696  $ilCtrl->redirect($this, "listNodes");
697  }
698 
703  {
704  global $ilCtrl, $tpl, $lng;
705 
706  $tax = $this->getCurrentTaxonomy();
707 
708  include_once("./Services/Utilities/classes/class.ilConfirmationGUI.php");
709  $cgui = new ilConfirmationGUI();
710  $cgui->setFormAction($ilCtrl->getFormAction($this));
711  $cgui->setHeaderText($lng->txt("tax_confirm_deletion"));
712  $cgui->setCancel($lng->txt("cancel"), "listTaxonomies");
713  $cgui->setConfirm($lng->txt("delete"), "deleteTaxonomy");
714 
715  $cgui->addItem("id[]", $i, $tax->getTitle());
716 
717  $tpl->setContent($cgui->getHTML());
718  }
719 
726  function deleteTaxonomy()
727  {
728  global $ilCtrl, $lng;
729 
730  $tax = $this->getCurrentTaxonomy();
731  $tax->delete();
732 
733  ilUtil::sendSuccess($lng->txt("tax_tax_deleted"), true);
734  $ilCtrl->redirect($this, "listTaxonomies");
735  }
736 
743  function listTaxonomies()
744  {
745  global $tpl, $ilToolbar, $lng, $ilCtrl;
746 
748  if (count($tax_ids) == 0 || $this->getMultiple())
749  {
750  $ilToolbar->addButton($lng->txt("tax_add_taxonomy"),
751  $ilCtrl->getLinkTarget($this, "createAssignedTaxonomy"));
752  }
753  else
754  {
755  ilUtil::sendInfo($lng->txt("tax_max_one_tax"));
756  }
757 
758  include_once("./Services/Taxonomy/classes/class.ilTaxonomyListTableGUI.php");
759 
760  $tab = new ilTaxonomyListTableGUI($this, "listTaxonomies", $this->getAssignedObject());
761 
762  $tpl->setContent($tab->getHTML());
763  }
764 
770  function setTabs($a_id)
771  {
772  global $ilTabs, $ilCtrl, $tpl, $lng, $ilHelp;
773 
774  $ilTabs->clearTargets();
775 
776  $ilHelp->setScreenIdComponent("tax");
777 
778  $tpl->setTitle(ilObject::_lookupTitle($this->getCurrentTaxonomyId()));
779  $tpl->setTitleIcon(ilUtil::getImagePath("icon_tax_b.png"));
780 
781  $ilTabs->setBackTarget($lng->txt("back"),
782  $ilCtrl->getLinkTarget($this, "listTaxonomies"));
783 
784  $ilTabs->addTab("list_items", $lng->txt("tax_nodes"),
785  $ilCtrl->getLinkTarget($this, "listNodes"));
786  if ($this->assigned_item_sorting)
787  {
788  $ilTabs->addTab("ass_items", $lng->txt("tax_assigned_items"),
789  $ilCtrl->getLinkTarget($this, "listAssignedItems"));
790  }
791  $ilTabs->addTab("settings", $lng->txt("settings"),
792  $ilCtrl->getLinkTarget($this, "editSettings"));
793 
794  $ilTabs->activateTab($a_id);
795  }
796 
803  function editSettings()
804  {
805  global $tpl;
806 
807  $this->setTabs("settings");
808 
809  $form = $this->initSettingsForm();
810  $tpl->setContent($form->getHTML());
811  }
812 
816  public function initSettingsForm()
817  {
818  global $lng, $ilCtrl;
819 
820  $tax = $this->getCurrentTaxonomy();
821 
822  include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
823  $form = new ilPropertyFormGUI();
824 
825  // title
826  $ti = new ilTextInputGUI($lng->txt("title"), "title");
827  $ti->setMaxLength(200);
828  $form->addItem($ti);
829  $ti->setValue($tax->getTitle());
830 
831  // description
832  $ta = new ilTextAreaInputGUI($lng->txt("description"), "description");
833  //$ta->setCols();
834  //$ta->setRows();
835  $form->addItem($ta);
836  $ta->setValue($tax->getDescription());
837 
838  // sorting
839  $options = array(
840  ilObjTaxonomy::SORT_ALPHABETICAL => $lng->txt("tax_alphabetical"),
841  ilObjTaxonomy::SORT_MANUAL => $lng->txt("tax_manual")
842  );
843  $si = new ilSelectInputGUI($lng->txt("tax_node_sorting"), "sorting");
844  $si->setOptions($options);
845  $form->addItem($si);
846  $si->setValue($tax->getSortingMode());
847 
848  // assigned item sorting
849  if ($this->assigned_item_sorting)
850  {
851  $cb = new ilCheckboxInputGUI($lng->txt("tax_item_sorting"), "item_sorting");
852  $cb->setChecked($tax->getItemSorting());
853  $form->addItem($cb);
854  }
855 
856  $form->addCommandButton("updateSettings", $lng->txt("save"));
857 
858  $form->setTitle($lng->txt("settings"));
859  $form->setFormAction($ilCtrl->getFormAction($this));
860 
861  return $form;
862  }
863 
867  public function updateSettings()
868  {
869  global $tpl, $lng, $ilCtrl;
870 
871  $form = $this->initSettingsForm();
872  if ($form->checkInput())
873  {
874  $tax = $this->getCurrentTaxonomy();
875  $tax->setTitle($form->getInput("title"));
876  $tax->setDescription($form->getInput("description"));
877  $tax->setSortingMode($form->getInput("sorting"));
878  $tax->setItemSorting($form->getInput("item_sorting"));
879  $tax->update();
880 
881  ilUtil::sendSuccess($lng->txt("msg_obj_modified"), true);
882  $ilCtrl->redirect($this, "editSettings");
883  }
884  else
885  {
886  $form->setValuesByPost();
887  $tpl->setContent($form->getHtml());
888  }
889  }
890 
897  function listAssignedItems()
898  {
899  global $tpl, $ilToolbar, $lng, $ilCtrl;
900 
901  $tax = $this->getCurrentTaxonomy();
902 
903  $this->setTabs("ass_items");
904 
905  // show tree
906  $this->showTree(true);
907 
908  // list assigned items
909  include_once("./Services/Taxonomy/classes/class.ilTaxAssignedItemsTableGUI.php");
910  $table = new ilTaxAssignedItemsTableGUI($this, "listAssignedItems",
911  (int) $_GET["tax_node"], $this->getCurrentTaxonomy(), $this->assigned_item_comp_id,
912  $this->assigned_item_obj_id, $this->assigned_item_type, $this->assigned_item_info_obj);
913 
914  $tpl->setContent($table->getHTML());
915  }
916 
924  {
925  global $lng, $ilCtrl;
926 
927  include_once("./Services/Taxonomy/classes/class.ilTaxNodeAssignment.php");
928  if (is_array($_POST["order"]))
929  {
930  $order = $_POST["order"];
931  //asort($order, SORT_NUMERIC);
932  //$cnt = 10;
933  $tax_node = (int) $_GET["tax_node"];
934  foreach ($order as $a_item_id => $ord_nr)
935  {
936  $tax_ass = new ilTaxNodeAssignment($this->assigned_item_comp_id,
937  $this->assigned_item_obj_id,
938  $this->assigned_item_type, $this->getCurrentTaxonomyId());
939  $tax_ass->setOrderNr($tax_node, $a_item_id, $ord_nr);
940  //$cnt+= 10;
941  }
942  $tax_ass = new ilTaxNodeAssignment($this->assigned_item_comp_id,
943  $this->assigned_item_obj_id,
944  $this->assigned_item_type, $this->getCurrentTaxonomyId());
945  $tax_ass->fixOrderNr($tax_node);
946  ilUtil::sendSuccess($lng->txt("msg_obj_modified"), true);
947  }
948  $ilCtrl->redirect($this, "listAssignedItems");
949  }
950 
951 }
952 ?>