ILIAS  release_4-3 Revision
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilObjCategoryGUI.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
4 
5 require_once "./Services/Container/classes/class.ilContainerGUI.php";
6 
21 {
22  var $ctrl;
23 
28  function ilObjCategoryGUI($a_data, $a_id, $a_call_by_reference = true, $a_prepare_output = true)
29  {
30  //global $ilCtrl;
31 
32  // CONTROL OPTIONS
33  //$this->ctrl =& $ilCtrl;
34  //$this->ctrl->saveParameter($this,array("ref_id","cmdClass"));
35  $GLOBALS['lng']->loadLanguageModule('cat');
36 
37  $this->type = "cat";
38  $this->ilContainerGUI($a_data,(int) $a_id,$a_call_by_reference,false);
39  }
40 
41  function &executeCommand()
42  {
43  global $rbacsystem, $ilNavigationHistory, $ilAccess, $ilCtrl,$ilTabs;
44 
45  $next_class = $this->ctrl->getNextClass($this);
46  $cmd = $this->ctrl->getCmd();
47  switch($next_class)
48  {
49  case "ilobjusergui":
50  include_once('./Services/User/classes/class.ilObjUserGUI.php');
51 
52  $this->tabs_gui->setTabActive('administrate_users');
53  if(!$_GET['obj_id'])
54  {
55  $this->gui_obj = new ilObjUserGUI("",$_GET['ref_id'],true, false);
56  $this->gui_obj->setCreationMode($this->creation_mode);
57  $ret =& $this->ctrl->forwardCommand($this->gui_obj);
58  }
59  else
60  {
61  $this->gui_obj = new ilObjUserGUI("", $_GET['obj_id'],false, false);
62  $this->gui_obj->setCreationMode($this->creation_mode);
63  $ret =& $this->ctrl->forwardCommand($this->gui_obj);
64  }
65 
66  $ilTabs->clearTargets();
67  $ilTabs->setBackTarget($this->lng->txt('backto_lua'), $this->ctrl->getLinkTarget($this,'listUsers'));
68  break;
69 
70  case "ilobjuserfoldergui":
71  include_once('./Services/User/classes/class.ilObjUserFolderGUI.php');
72 
73  $this->tabs_gui->setTabActive('administrate_users');
74  $this->gui_obj = new ilObjUserFolderGUI("",(int) $_GET['ref_id'],true, false);
75  $this->gui_obj->setUserOwnerId((int) $_GET['ref_id']);
76  $this->gui_obj->setCreationMode($this->creation_mode);
77  $ret =& $this->ctrl->forwardCommand($this->gui_obj);
78  break;
79 
80  case "ilcolumngui":
81  $this->checkPermission("read");
82  $this->prepareOutput();
83  include_once("./Services/Style/classes/class.ilObjStyleSheet.php");
84  $this->tpl->setVariable("LOCATION_CONTENT_STYLESHEET",
85  ilObjStyleSheet::getContentStylePath($this->object->getStyleSheetId()));
86  $this->renderObject();
87  break;
88 
89  case 'ilpermissiongui':
90  $this->prepareOutput();
91  $this->tabs_gui->setTabActive('perm_settings');
92  include_once("Services/AccessControl/classes/class.ilPermissionGUI.php");
93  $perm_gui =& new ilPermissionGUI($this);
94  $ret =& $this->ctrl->forwardCommand($perm_gui);
95  break;
96 
97  case 'ilinfoscreengui':
98  $this->prepareOutput();
99  $this->infoScreen();
100  break;
101 
102  case 'ilcontainerlinklistgui':
103  include_once("Services/Container/classes/class.ilContainerLinkListGUI.php");
104  $link_list_gui =& new ilContainerLinkListGUI();
105  $ret =& $this->ctrl->forwardCommand($link_list_gui);
106  break;
107 
108  // container page editing
109  case "ilpageobjectgui":
110  $this->prepareOutput(false);
111  $ret = $this->forwardToPageObject();
112  if ($ret != "")
113  {
114  $this->tpl->setContent($ret);
115  }
116  break;
117 
118  case 'ilobjectcopygui':
119  $this->prepareOutput();
120 
121  include_once './Services/Object/classes/class.ilObjectCopyGUI.php';
122  $cp = new ilObjectCopyGUI($this);
123  $cp->setType('cat');
124  $this->ctrl->forwardCommand($cp);
125  break;
126 
127  case "ilobjstylesheetgui":
128  $this->forwardToStyleSheet();
129  break;
130 
131  case 'ilusertablegui':
132  include_once './Services/User/classes/class.ilUserTableGUI.php';
133  $u_table = new ilUserTableGUI($this, "listUsers");
134  $u_table->initFilter();
135  $this->ctrl->setReturn($this,'listUsers');
136  $this->ctrl->forwardCommand($u_table);
137  break;
138 
139  case "ilcommonactiondispatchergui":
140  $this->prepareOutput();
141  include_once("Services/Object/classes/class.ilCommonActionDispatcherGUI.php");
143  $this->ctrl->forwardCommand($gui);
144  break;
145 
146  case 'ildidactictemplategui':
147  $this->ctrl->setReturn($this,'edit');
148  include_once './Services/DidacticTemplate/classes/class.ilDidacticTemplateGUI.php';
149  $did = new ilDidacticTemplateGUI($this);
150  $this->ctrl->forwardCommand($did);
151  break;
152 
153  case 'ilexportgui':
154  $this->prepareOutput();
155  $this->tabs_gui->setTabActive('export');
156  include_once './Services/Export/classes/class.ilExportGUI.php';
157  $exp = new ilExportGUI($this);
158  $exp->addFormat('xml');
159  $this->ctrl->forwardCommand($exp);
160  break;
161 
162  default:
163  if ($cmd == "infoScreen")
164  {
165  $this->checkPermission("visible");
166  }
167  else
168  {
169  $this->checkPermission("read");
170  }
171 
172  // add entry to navigation history
173  if (!$this->getCreationMode() &&
174  $ilAccess->checkAccess("read", "", $_GET["ref_id"]))
175  {
176  $ilNavigationHistory->addItem($_GET["ref_id"],
177  $ilCtrl->getLinkTargetByClass("ilrepositorygui", "frameset"), "cat");
178  }
179 
180  $this->prepareOutput();
181  include_once("./Services/Style/classes/class.ilObjStyleSheet.php");
182  if (is_object($this->object))
183  {
184  $this->tpl->setVariable("LOCATION_CONTENT_STYLESHEET",
185  ilObjStyleSheet::getContentStylePath($this->object->getStyleSheetId()));
186  }
187 
188  if(!$cmd)
189  {
190  $cmd = "render";
191  }
192  $cmd .= "Object";
193  $this->$cmd();
194 
195  break;
196  }
197 
198  $this->addHeaderAction();
199 
200  return true;
201  }
202 
206  function getTabs(&$tabs_gui)
207  {
208  global $rbacsystem, $lng, $ilHelp, $ilAccess;
209 
210  if ($this->ctrl->getCmd() == "editPageContent")
211  {
212  return;
213  }
214  #$this->ctrl->setParameter($this,"ref_id",$this->ref_id);
215 
216  $ilHelp->setScreenIdComponent("cat");
217 
218  if ($rbacsystem->checkAccess('read',$this->ref_id))
219  {
220  $force_active = ($_GET["cmd"] == "" || $_GET["cmd"] == "render")
221  ? true
222  : false;
223  $tabs_gui->addTab("view_content", $lng->txt("content"),
224  $this->ctrl->getLinkTarget($this, ""));
225 
226  //BEGIN ChangeEvent add info tab to category object
227  $force_active = ($this->ctrl->getNextClass() == "ilinfoscreengui"
228  || strtolower($_GET["cmdClass"]) == "ilnotegui")
229  ? true
230  : false;
231  $tabs_gui->addTarget("info_short",
232  $this->ctrl->getLinkTargetByClass(
233  array("ilobjcategorygui", "ilinfoscreengui"), "showSummary"),
234  array("showSummary","", "infoScreen"),
235  "", "", $force_active);
236  //END ChangeEvent add info tab to category object
237  }
238 
239  if ($rbacsystem->checkAccess('write',$this->ref_id))
240  {
241  $force_active = ($_GET["cmd"] == "edit")
242  ? true
243  : false;
244  $tabs_gui->addTarget("settings",
245  $this->ctrl->getLinkTarget($this, "edit"), "edit", get_class($this)
246  , "", $force_active);
247  }
248 
249  include_once './Services/User/classes/class.ilUserAccountSettings.php';
250  if(
251  ilUserAccountSettings::getInstance()->isLocalUserAdministrationEnabled() and
252  $rbacsystem->checkAccess('cat_administrate_users',$this->ref_id))
253  {
254  $tabs_gui->addTarget("administrate_users",
255  $this->ctrl->getLinkTarget($this, "listUsers"), "listUsers", get_class($this));
256  }
257 
258  if($ilAccess->checkAccess('write','',$this->object->getRefId()))
259  {
260  $tabs_gui->addTarget(
261  'export',
262  $this->ctrl->getLinkTargetByClass('ilexportgui',''),
263  'export',
264  'ilexportgui'
265  );
266  }
267 
268  // parent tabs (all container: edit_permission, clipboard, trash
269  parent::getTabs($tabs_gui);
270 
271  }
272 
276  function renderObject()
277  {
278  global $ilTabs;
279 
280  $ilTabs->activateTab("view_content");
282  return $ret;
283 
284  }
285 
286  protected function initCreationForms($a_new_type)
287  {
288  $forms = parent::initCreationForms($a_new_type);
289  //unset($forms[self::CFORM_IMPORT]);
290  return $forms;
291  }
292 
293  protected function afterSave(ilObject $a_new_object)
294  {
295  global $ilUser, $tree;
296 
297  // add default translation
298  $a_new_object->addTranslation($a_new_object->getTitle(),
299  $a_new_object->getDescription(), $ilUser->getPref("language"), true);
300 
301  // default: sort by title
302  include_once('Services/Container/classes/class.ilContainerSortingSettings.php');
303  $settings = new ilContainerSortingSettings($a_new_object->getId());
305  $settings->save();
306 
307  // inherit parents content style, if not individual
308  $parent_ref_id = $tree->getParentId($a_new_object->getRefId());
309  $parent_id = ilObject::_lookupObjId($parent_ref_id);
310  include_once("./Services/Style/classes/class.ilObjStyleSheet.php");
311  $style_id = ilObjStyleSheet::lookupObjectStyle($parent_id);
312  if ($style_id > 0)
313  {
314  if (ilObjStyleSheet::_lookupStandard($style_id))
315  {
316  ilObjStyleSheet::writeStyleUsage($a_new_object->getId(), $style_id);
317  }
318  }
319 
320  // always send a message
321  ilUtil::sendSuccess($this->lng->txt("cat_added"),true);
322  $this->ctrl->setParameter($this, "ref_id", $a_new_object->getRefId());
323  $this->redirectToRefId($a_new_object->getRefId(), "");
324  }
325 
331  function infoScreenObject()
332  {
333  $this->ctrl->setCmd("showSummary");
334  $this->ctrl->setCmdClass("ilinfoscreengui");
335  $this->infoScreen();
336  }
337 
341  function infoScreen()
342  {
343  global $ilAccess, $ilCtrl;
344 
345  if (!$ilAccess->checkAccess("visible", "", $this->ref_id))
346  {
347  $this->ilias->raiseError($this->lng->txt("msg_no_perm_read"),$this->ilias->error_obj->MESSAGE);
348  }
349 
350  // #10986
351  $this->tabs_gui->setTabActive('info_short');
352 
353  include_once("./Services/InfoScreen/classes/class.ilInfoScreenGUI.php");
354  $info = new ilInfoScreenGUI($this);
355 
356  $info->enablePrivateNotes();
357 
358  if ($ilAccess->checkAccess("read", "", $_GET["ref_id"]))
359  {
360  $info->enableNews();
361  }
362 
363  // no news editing for files, just notifications
364  $info->enableNewsEditing(false);
365  if ($ilAccess->checkAccess("write", "", $_GET["ref_id"]))
366  {
367  $news_set = new ilSetting("news");
368  $enable_internal_rss = $news_set->get("enable_rss_for_internal");
369 
370  if ($enable_internal_rss)
371  {
372  $info->setBlockProperty("news", "settings", true);
373  $info->setBlockProperty("news", "public_notifications_option", true);
374  }
375  }
376 
377  include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDRecordGUI.php');
378  $record_gui = new ilAdvancedMDRecordGUI(ilAdvancedMDRecordGUI::MODE_INFO,'cat',$this->object->getId());
379  $record_gui->setInfoObject($info);
380  $record_gui->parse();
381 
382 
383  // standard meta data
384  $info->addMetaDataSections($this->object->getId(),0, $this->object->getType());
385 
386  // forward the command
387  if ($ilCtrl->getNextClass() == "ilinfoscreengui")
388  {
389  $ilCtrl->forwardCommand($info);
390  }
391  else
392  {
393  return $ilCtrl->getHTML($info);
394  }
395  }
396 
402  protected function editInfoObject()
403  {
404  $this->checkPermission("write");
405  $this->setEditTabs();
406  $this->tabs_gui->activateTab('settings');
407  $this->tabs_gui->setSubTabActive('edit_cat_settings');
408 
409  $this->initExtendedSettings();
410  $this->tpl->setContent($this->form->getHTML());
411  }
412 
418  protected function updateInfoObject()
419  {
420  $this->checkPermission("write");
421  include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDRecordGUI.php');
423  'cat',$this->object->getId());
424  $record_gui->loadFromPost();
425  $record_gui->saveValues();
426 
427  ilUtil::sendSuccess($this->lng->txt("settings_saved"));
428  $this->editInfoObject();
429  return true;
430  }
431 
432 
438  protected function initExtendedSettings()
439  {
440  if(is_object($this->form))
441  {
442  return true;
443  }
444 
445  include_once('Services/Form/classes/class.ilPropertyFormGUI.php');
446  $this->form = new ilPropertyFormGUI();
447  $this->form->setFormAction($this->ctrl->getFormAction($this));
448  $this->form->setTitle($this->lng->txt('ext_cat_settings'));
449  $this->form->addCommandButton('updateInfo',$this->lng->txt('save'));
450  $this->form->addCommandButton('editInfo',$this->lng->txt('cancel'));
451 
452  include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDRecordGUI.php');
453  $record_gui = new ilAdvancedMDRecordGUI(ilAdvancedMDRecordGUI::MODE_EDITOR,'cat',$this->object->getId());
454  $record_gui->setPropertyForm($this->form);
455  $record_gui->parse();
456 
457  return true;
458  }
459 
460  protected function setEditTabs($active_tab = "settings_misc")
461  {
462  $this->tabs_gui->addSubTab("settings_misc",
463  $this->lng->txt("settings"),
464  $this->ctrl->getLinkTarget($this, "edit"));
465 
466  $this->tabs_gui->addSubTab("settings_trans",
467  $this->lng->txt("title_and_translations"),
468  $this->ctrl->getLinkTarget($this, "editTranslations"));
469 
470  $this->tabs_gui->activateTab("settings");
471  $this->tabs_gui->activateSubTab($active_tab);
472 
473  include_once('Services/AdvancedMetaData/classes/class.ilAdvancedMDRecord.php');
474  if(in_array('cat',ilAdvancedMDRecord::_getActivatedObjTypes()))
475  {
476  $this->tabs_gui->addSubTabTarget("edit_cat_settings",
477  $this->ctrl->getLinkTarget($this,'editInfo'),
478  "editInfo", get_class($this));
479  }
480  }
481 
482  function initEditForm()
483  {
484  $this->lng->loadLanguageModule($this->object->getType());
485  $this->setEditTabs();
486 
487  include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
488  $form = new ilPropertyFormGUI();
489  $form->setFormAction($this->ctrl->getFormAction($this));
490  $form->setTitle($this->lng->txt($this->object->getType()."_edit"));
491 
492 
493  // Show didactic template type
494  $this->initDidacticTemplate($form);
495 
496  // sorting
497  include_once('Services/Container/classes/class.ilContainerSortingSettings.php');
498  $settings = new ilContainerSortingSettings($this->object->getId());
499 
500  $sort = new ilRadioGroupInputGUI($this->lng->txt('sorting_header'), "sorting");
501  $sort_title = new ilRadioOption($this->lng->txt('sorting_title_header'),
503  $sort_title->setInfo($this->lng->txt('sorting_info_title'));
504  $sort->addOption($sort_title);
505 
506  $sort_manual = new ilRadioOption($this->lng->txt('sorting_manual_header'),
508  $sort_manual->setInfo($this->lng->txt('sorting_info_manual'));
509  $sort->addOption($sort_manual);
510 
511  $sort->setValue($settings->getSortMode());
512  $form->addItem($sort);
513 
514 
515  $this->showCustomIconsEditing(1, $form, false);
516 
517 
518  // Edit ecs export settings
519  include_once 'Modules/Category/classes/class.ilECSCategorySettings.php';
520  $ecs = new ilECSCategorySettings($this->object);
521  $ecs->addSettingsToForm($form, 'cat');
522 
523 
524  $form->addCommandButton("update", $this->lng->txt("save"));
525  $form->addCommandButton("addTranslation", $this->lng->txt("add_translation"));
526 
527  return $form;
528  }
529 
530  function getEditFormValues()
531  {
532  // values are set in initEditForm()
533  }
534 
540  function updateObject()
541  {
542  if (!$this->checkPermissionBool("write"))
543  {
544  $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
545  }
546  else
547  {
548  $form = $this->initEditForm();
549  if($form->checkInput())
550  {
551  include_once('Services/Container/classes/class.ilContainerSortingSettings.php');
552  $settings = new ilContainerSortingSettings($this->object->getId());
553  $settings->setSortMode($form->getInput("sorting"));
554  $settings->update();
555 
556  // save custom icons
557  if ($this->ilias->getSetting("custom_icons"))
558  {
559  if($form->getItemByPostVar("cont_big_icon")->getDeletionFlag())
560  {
561  $this->object->removeBigIcon();
562  }
563  if($form->getItemByPostVar("cont_small_icon")->getDeletionFlag())
564  {
565  $this->object->removeSmallIcon();
566  }
567  if($form->getItemByPostVar("cont_tiny_icon")->getDeletionFlag())
568  {
569  $this->object->removeTinyIcon();
570  }
571 
572  $this->object->saveIcons($_FILES["cont_big_icon"]['tmp_name'],
573  $_FILES["cont_small_icon"]['tmp_name'],
574  $_FILES["cont_tiny_icon"]['tmp_name']);
575  }
576 
577  // BEGIN ChangeEvent: Record update
578  global $ilUser;
579  require_once('Services/Tracking/classes/class.ilChangeEvent.php');
580  ilChangeEvent::_recordWriteEvent($this->object->getId(), $ilUser->getId(), 'update');
581  ilChangeEvent::_catchupWriteEvents($this->object->getId(), $ilUser->getId());
582  // END ChangeEvent: Record update
583 
584  // Update ecs export settings
585  include_once 'Modules/Category/classes/class.ilECSCategorySettings.php';
586  $ecs = new ilECSCategorySettings($this->object);
587  if($ecs->handleSettingsUpdate())
588  {
589  return $this->afterUpdate();
590  }
591  }
592 
593  // display form to correct errors
594  $this->setEditTabs();
595  $form->setValuesByPost();
596  $this->tpl->setContent($form->getHTML());
597  }
598  }
599 
603  function editTranslationsObject($a_get_post_values = false, $a_add = false)
604  {
605  global $tpl;
606 
607  $this->lng->loadLanguageModule($this->object->getType());
608  $this->setEditTabs("settings_trans");
609 
610  include_once("./Services/Object/classes/class.ilObjectTranslationTableGUI.php");
611  $table = new ilObjectTranslationTableGUI($this, "editTranslations", true,
612  "Translation");
613  if ($a_get_post_values)
614  {
615  $vals = array();
616  foreach($_POST["title"] as $k => $v)
617  {
618  $vals[] = array("title" => $v,
619  "desc" => $_POST["desc"][$k],
620  "lang" => $_POST["lang"][$k],
621  "default" => ($_POST["default"] == $k));
622  }
623  $table->setData($vals);
624  }
625  else
626  {
627  $data = $this->object->getTranslations();
628  foreach($data["Fobject"] as $k => $v)
629  {
630  $data["Fobject"][$k]["default"] = ($k == $data["default_language"]);
631  }
632  if($a_add)
633  {
634  $data["Fobject"][++$k]["title"] = "";
635  }
636  $table->setData($data["Fobject"]);
637  }
638  $tpl->setContent($table->getHTML());
639  }
640 
645  {
646  if (!$this->checkPermissionBool("write"))
647  {
648  $this->ilias->raiseError($this->lng->txt("permission_denied"),$this->ilias->error_obj->MESSAGE);
649  }
650 
651  // default language set?
652  if (!isset($_POST["default"]))
653  {
654  ilUtil::sendFailure($this->lng->txt("msg_no_default_language"));
655  return $this->editTranslationsObject(true);
656  }
657 
658  // all languages set?
659  if (array_key_exists("",$_POST["lang"]))
660  {
661  ilUtil::sendFailure($this->lng->txt("msg_no_language_selected"));
662  return $this->editTranslationsObject(true);
663  }
664 
665  // no single language is selected more than once?
666  if (count(array_unique($_POST["lang"])) < count($_POST["lang"]))
667  {
668  ilUtil::sendFailure($this->lng->txt("msg_multi_language_selected"));
669  return $this->editTranslationsObject(true);
670  }
671 
672  // save the stuff
673  $this->object->removeTranslations();
674  foreach($_POST["title"] as $k => $v)
675  {
676  // update object data if default
677  $is_default = ($_POST["default"] == $k);
678  if($is_default)
679  {
680  $this->object->setTitle(ilUtil::stripSlashes($v));
681  $this->object->setDescription(ilUtil::stripSlashes($_POST["desc"][$k]));
682  $this->object->update();
683  }
684 
685  $this->object->addTranslation(
687  ilUtil::stripSlashes($_POST["desc"][$k]),
688  ilUtil::stripSlashes($_POST["lang"][$k]),
689  $is_default);
690  }
691 
692  ilUtil::sendSuccess($this->lng->txt("msg_obj_modified"), true);
693  $this->ctrl->redirect($this, "editTranslations");
694  }
695 
700  {
701  if($_POST["title"])
702  {
703  $k = max(array_keys($_POST["title"]));
704  $k++;
705  $_POST["title"][$k] = "";
706  $this->editTranslationsObject(true);
707  }
708  else
709  {
710  $this->editTranslationsObject(false, true);
711  }
712  }
713 
718  {
719  foreach($_POST["title"] as $k => $v)
720  {
721  if ($_POST["check"][$k])
722  {
723  // default translation cannot be deleted
724  if($k != $_POST["default"])
725  {
726  unset($_POST["title"][$k]);
727  unset($_POST["desc"][$k]);
728  unset($_POST["lang"][$k]);
729  }
730  else
731  {
732  ilUtil::sendFailure($this->lng->txt("msg_no_default_language"));
733  return $this->editTranslationsObject();
734  }
735  }
736  }
737  $this->saveTranslationsObject();
738  }
739 
744  {
745  ilObjCategoryGUI::_importCategoriesForm($this->ref_id, $this->tpl);
746  }
747 
751  function _importCategoriesForm ($a_ref_id, &$a_tpl)
752  {
753  global $lng, $rbacreview;
754 
755  $a_tpl->addBlockfile("ADM_CONTENT", "adm_content", "tpl.cat_import_form.html",
756  "Modules/Category");
757 
758  $a_tpl->setVariable("FORMACTION", $this->ctrl->getFormAction($this));
759 
760  $a_tpl->setVariable("TXT_IMPORT_CATEGORIES", $lng->txt("import_categories"));
761  $a_tpl->setVariable("TXT_HIERARCHY_OPTION", $lng->txt("import_cat_localrol"));
762  $a_tpl->setVariable("TXT_IMPORT_FILE", $lng->txt("import_file"));
763  $a_tpl->setVariable("TXT_IMPORT_TABLE", $lng->txt("import_cat_table"));
764 
765  $a_tpl->setVariable("BTN_IMPORT", $lng->txt("import"));
766  $a_tpl->setVariable("BTN_CANCEL", $lng->txt("cancel"));
767 
768  // NEED TO FILL ADOPT_PERMISSIONS HTML FORM....
769  $parent_role_ids = $rbacreview->getParentRoleIds($a_ref_id,true);
770 
771  // sort output for correct color changing
772  ksort($parent_role_ids);
773 
774  foreach ($parent_role_ids as $key => $par)
775  {
776  if ($par["obj_id"] != SYSTEM_ROLE_ID)
777  {
778  $check = ilUtil::formCheckbox(0,"adopt[]",$par["obj_id"],1);
779  $output["adopt"][$key]["css_row_adopt"] = ilUtil::switchColor($key, "tblrow1", "tblrow2");
780  $output["adopt"][$key]["check_adopt"] = $check;
781  $output["adopt"][$key]["role_id"] = $par["obj_id"];
782  $output["adopt"][$key]["type"] = ($par["type"] == 'role' ? 'Role' : 'Template');
783  $output["adopt"][$key]["role_name"] = $par["title"];
784  }
785  }
786 
787  //var_dump($output);
788 
789  // BEGIN ADOPT PERMISSIONS
790  foreach ($output["adopt"] as $key => $value)
791  {
792  $a_tpl->setCurrentBlock("ADOPT_PERM_ROW");
793  $a_tpl->setVariable("CSS_ROW_ADOPT",$value["css_row_adopt"]);
794  $a_tpl->setVariable("CHECK_ADOPT",$value["check_adopt"]);
795  $a_tpl->setVariable("LABEL_ID",$value["role_id"]);
796  $a_tpl->setVariable("TYPE",$value["type"]);
797  $a_tpl->setVariable("ROLE_NAME",$value["role_name"]);
798  $a_tpl->parseCurrentBlock();
799  }
800  }
801 
802 
809  {
810  $this->ctrl->redirect($this);
811  }
812 
816  function _getImportDir()
817  {
818  return ilUtil::getDataDir()."/cat_import";
819  }
820 
825  {
827  // call to importCategories with $withrol = 0
829  }
830 
835  {
836 
837  //echo "entra aqui";
838  // call to importCategories with $withrol = 1
840  }
841 
846  function _importCategories($a_ref_id, $withrol_tmp)
847  {
848  global $lng;
849 
850  require_once("./Modules/Category/classes/class.ilCategoryImportParser.php");
851 
852  $import_dir = ilObjCategoryGUI::_getImportDir();
853 
854  // create user import directory if necessary
855  if (!@is_dir($import_dir))
856  {
857  ilUtil::createDirectory($import_dir);
858  }
859 
860  // move uploaded file to user import directory
861 
862  $file_name = $_FILES["importFile"]["name"];
863 
864  // added to prevent empty file names
865  if (!strcmp($file_name,"")) {
866  ilUtil::sendFailure($lng->txt("no_import_file_found"), true);
867  $this->ctrl->redirect($this);
868  }
869 
870  $parts = pathinfo($file_name);
871  $full_path = $import_dir."/".$file_name;
872  //move_uploaded_file($_FILES["importFile"]["tmp_name"], $full_path);
873  ilUtil::moveUploadedFile($_FILES["importFile"]["tmp_name"], $file_name, $full_path);
874 
875  // unzip file
876  ilUtil::unzip($full_path);
877 
878  $subdir = basename($parts["basename"],".".$parts["extension"]);
879  $xml_file = $import_dir."/".$subdir."/".$subdir.".xml";
880  // CategoryImportParser
881  //var_dump($_POST);
882  $importParser = new ilCategoryImportParser($xml_file, $a_ref_id, $withrol_tmp);
883  $importParser->startParsing();
884 
885  ilUtil::sendSuccess($lng->txt("categories_imported"), true);
886  $this->ctrl->redirect($this);
887  }
888 
893  protected function resetFilterObject()
894  {
895  include_once("./Services/User/classes/class.ilUserTableGUI.php");
896  $utab = new ilUserTableGUI($this, "listUsers",ilUserTableGUI::MODE_LOCAL_USER);
897  $utab->resetOffset();
898  $utab->resetFilter();
899 
900  // from "old" implementation
901  $this->listUsersObject();
902  }
903 
908  protected function applyFilterObject()
909  {
910  global $ilTabs;
911 
912  include_once("./Services/User/classes/class.ilUserTableGUI.php");
913  $utab = new ilUserTableGUI($this, "listUsers", ilUserTableGUI::MODE_LOCAL_USER);
914  $utab->resetOffset();
915  $utab->writeFilterToSession();
916  $this->listUsersObject();
917  }
918 
919  // METHODS for local user administration
920  function listUsersObject($show_delete = false)
921  {
922  global $ilUser,$rbacreview, $ilToolbar;
923 
924  include_once './Services/User/classes/class.ilLocalUser.php';
925  include_once './Services/User/classes/class.ilObjUserGUI.php';
926 
927  global $rbacsystem,$rbacreview;
928 
929  if(!$rbacsystem->checkAccess("cat_administrate_users",$this->object->getRefId()))
930  {
931  $this->ilias->raiseError($this->lng->txt("msg_no_perm_admin_users"),$this->ilias->error_obj->MESSAGE);
932  }
933  $this->tabs_gui->setTabActive('administrate_users');
934 
935 
936 
937  $this->tpl->addBlockfile('ADM_CONTENT','adm_content','tpl.cat_admin_users.html',
938  "Modules/Category");
939 
940  if(count($rbacreview->getGlobalAssignableRoles()) or in_array(SYSTEM_ROLE_ID,$rbacreview->assignedRoles($ilUser->getId())))
941  {
942  $ilToolbar->addButton(
943  $this->lng->txt('add_user'),
944  $this->ctrl->getLinkTargetByClass('ilobjusergui','create')
945  );
946 
947  $ilToolbar->addButton(
948  $this->lng->txt('import_users'),
949  $this->ctrl->getLinkTargetByClass('ilobjuserfoldergui','importUserForm')
950  );
951  }
952  else
953  {
954  ilUtil::sendInfo($this->lng->txt('no_roles_user_can_be_assigned_to'));
955  }
956 
957  if($show_delete)
958  {
959  $this->tpl->setCurrentBlock("confirm_delete");
960  $this->tpl->setVariable("CONFIRM_FORMACTION",$this->ctrl->getFormAction($this));
961  $this->tpl->setVariable("TXT_CANCEL",$this->lng->txt('cancel'));
962  $this->tpl->setVariable("CONFIRM_CMD",'performDeleteUsers');
963  $this->tpl->setVariable("TXT_CONFIRM",$this->lng->txt('delete'));
964  $this->tpl->parseCurrentBlock();
965  }
966 
967  $this->lng->loadLanguageModule('user');
968 
969  include_once("./Services/User/classes/class.ilUserTableGUI.php");
970  $utab = new ilUserTableGUI($this, 'listUsers',ilUserTableGUI::MODE_LOCAL_USER);
971  $this->tpl->setVariable('USERS_TABLE',$utab->getHTML());
972 
973  return true;
974  }
975 
979  protected function addUserAutoCompleteObject()
980  {
981  include_once './Services/User/classes/class.ilUserAutoComplete.php';
982  $auto = new ilUserAutoComplete();
983  $auto->setSearchFields(array('login','firstname','lastname','email'));
984  $auto->enableFieldSearchableCheck(true);
985  echo $auto->getList($_REQUEST['term']);
986  exit();
987  }
988 
989 
991  {
992  include_once './Services/User/classes/class.ilLocalUser.php';
993  $this->checkPermission("cat_administrate_users");
994 
995  foreach($_POST['user_ids'] as $user_id)
996  {
997  if(!in_array($user_id,ilLocalUser::_getAllUserIds($this->object->getRefId())))
998  {
999  die('user id not valid');
1000  }
1001  if(!$tmp_obj =& ilObjectFactory::getInstanceByObjId($user_id,false))
1002  {
1003  continue;
1004  }
1005  $tmp_obj->delete();
1006  }
1007  ilUtil::sendSuccess($this->lng->txt('deleted_users'));
1008  $this->listUsersObject();
1009 
1010  return true;
1011  }
1012 
1014  {
1015  $this->checkPermission("cat_administrate_users");
1016  if(!count($_POST['id']))
1017  {
1018  ilUtil::sendFailure($this->lng->txt('no_users_selected'));
1019  $this->listUsersObject();
1020 
1021  return true;
1022  }
1023 
1024  include_once './Services/Utilities/classes/class.ilConfirmationGUI.php';
1025  $confirm = new ilConfirmationGUI();
1026  $confirm->setFormAction($this->ctrl->getFormAction($this));
1027  $confirm->setHeaderText($this->lng->txt('sure_delete_selected_users'));
1028  $confirm->setConfirm($this->lng->txt('delete'), 'performDeleteUsers');
1029  $confirm->setCancel($this->lng->txt('cancel'), 'listUsers');
1030 
1031  foreach($_POST['id'] as $user)
1032  {
1033  $name = ilObjUser::_lookupName($user);
1034 
1035  $confirm->addItem(
1036  'user_ids[]',
1037  $user,
1038  $name['lastname'].', '.$name['firstname'].' ['.$name['login'].']'
1039  );
1040  }
1041  $this->tpl->setContent($confirm->getHTML());
1042  }
1043 
1045  {
1046  global $rbacreview,$ilTabs;
1047 
1048  $this->checkPermission("cat_administrate_users");
1049 
1050  include_once './Services/User/classes/class.ilLocalUser.php';
1051 
1052  if(!isset($_GET['obj_id']))
1053  {
1054  ilUtil::sendFailure('no_user_selected');
1055  $this->listUsersObject();
1056 
1057  return true;
1058  }
1059 
1060  $ilTabs->clearTargets();
1061  $ilTabs->setBackTarget($this->lng->txt('backto_lua'), $this->ctrl->getLinkTarget($this,'listUsers'));
1062 
1063  $roles = $this->__getAssignableRoles();
1064 
1065  if(!count($roles))
1066  {
1067  #ilUtil::sendInfo($this->lng->txt('no_roles_user_can_be_assigned_to'));
1068  #$this->listUsersObject();
1069 
1070  #return true;
1071  }
1072 
1073  $this->tpl->addBlockfile('ADM_CONTENT','adm_content','tpl.cat_role_assignment.html',
1074  "Modules/Category");
1075 
1076  $ass_roles = $rbacreview->assignedRoles($_GET['obj_id']);
1077 
1078  $counter = 0;
1079  foreach($roles as $role)
1080  {
1081  $role_obj =& ilObjectFactory::getInstanceByObjId($role['obj_id']);
1082 
1083  $disabled = false;
1084  $f_result[$counter][] = ilUtil::formCheckbox(in_array($role['obj_id'],$ass_roles) ? 1 : 0,
1085  'role_ids[]',
1086  $role['obj_id'],
1087  $disabled);
1088  $f_result[$counter][] = $role_obj->getTitle() ? $role_obj->getTitle() : "";
1089  $f_result[$counter][] = $role_obj->getDescription() ? $role_obj->getDescription() : "";
1090  $f_result[$counter][] = $role['role_type'] == 'global' ?
1091  $this->lng->txt('global') :
1092  $this->lng->txt('local');
1093 
1094  unset($role_obj);
1095  ++$counter;
1096  }
1097  $this->__showRolesTable($f_result,"assignRolesObject");
1098  }
1099 
1100  function assignSaveObject()
1101  {
1102  global $rbacreview,$rbacadmin;
1103  $this->checkPermission("cat_administrate_users");
1104 
1105  include_once './Services/User/classes/class.ilLocalUser.php';
1106  // check hack
1107  if(!isset($_GET['obj_id']) or !in_array($_REQUEST['obj_id'],ilLocalUser::_getAllUserIds()))
1108  {
1109  ilUtil::sendFailure('no_user_selected');
1110  $this->listUsersObject();
1111 
1112  return true;
1113  }
1114  $roles = $this->__getAssignableRoles();
1115 
1116  // check minimum one global role
1117  if(!$this->__checkGlobalRoles($_POST['role_ids']))
1118  {
1119  ilUtil::sendFailure($this->lng->txt('no_global_role_left'));
1120  $this->assignRolesObject();
1121 
1122  return false;
1123  }
1124 
1125  $new_role_ids = $_POST['role_ids'] ? $_POST['role_ids'] : array();
1126  $assigned_roles = $rbacreview->assignedRoles((int) $_REQUEST['obj_id']);
1127  foreach($roles as $role)
1128  {
1129  if(in_array($role['obj_id'],$new_role_ids) and !in_array($role['obj_id'],$assigned_roles))
1130  {
1131  $rbacadmin->assignUser($role['obj_id'],(int) $_REQUEST['obj_id']);
1132  }
1133  if(in_array($role['obj_id'],$assigned_roles) and !in_array($role['obj_id'],$new_role_ids))
1134  {
1135  $rbacadmin->deassignUser($role['obj_id'],(int) $_REQUEST['obj_id']);
1136  }
1137  }
1138  ilUtil::sendSuccess($this->lng->txt('role_assignment_updated'));
1139  $this->assignRolesObject();
1140 
1141  return true;
1142  }
1143 
1144  // PRIVATE
1146  {
1147  global $rbacreview,$ilUser;
1148 
1149  // check local user
1150  $tmp_obj =& ilObjectFactory::getInstanceByObjId($_REQUEST['obj_id']);
1151  // Admin => all roles
1152  if(in_array(SYSTEM_ROLE_ID,$rbacreview->assignedRoles($ilUser->getId())))
1153  {
1154  $global_roles = $rbacreview->getGlobalRolesArray();
1155  }
1156  elseif($tmp_obj->getTimeLimitOwner() == $this->object->getRefId())
1157  {
1158  $global_roles = $rbacreview->getGlobalAssignableRoles();
1159  }
1160  else
1161  {
1162  $global_roles = array();
1163  }
1164  return $roles = array_merge($global_roles,
1165  $rbacreview->getAssignableChildRoles($this->object->getRefId()));
1166  }
1167 
1168  function __checkGlobalRoles($new_assigned)
1169  {
1170  global $rbacreview,$ilUser;
1171 
1172  $this->checkPermission("cat_administrate_users");
1173 
1174  // return true if it's not a local user
1175  $tmp_obj =& ilObjectFactory::getInstanceByObjId($_REQUEST['obj_id']);
1176  if($tmp_obj->getTimeLimitOwner() != $this->object->getRefId() and
1177  !in_array(SYSTEM_ROLE_ID,$rbacreview->assignedRoles($ilUser->getId())))
1178  {
1179  return true;
1180  }
1181 
1182  // new assignment by form
1183  $new_assigned = $new_assigned ? $new_assigned : array();
1184  $assigned = $rbacreview->assignedRoles((int) $_GET['obj_id']);
1185 
1186  // all assignable globals
1187  if(!in_array(SYSTEM_ROLE_ID,$rbacreview->assignedRoles($ilUser->getId())))
1188  {
1189  $ga = $rbacreview->getGlobalAssignableRoles();
1190  }
1191  else
1192  {
1193  $ga = $rbacreview->getGlobalRolesArray();
1194  }
1195  $global_assignable = array();
1196  foreach($ga as $role)
1197  {
1198  $global_assignable[] = $role['obj_id'];
1199  }
1200 
1201  $new_visible_assigned_roles = array_intersect($new_assigned,$global_assignable);
1202  $all_assigned_roles = array_intersect($assigned,$rbacreview->getGlobalRoles());
1203  $main_assigned_roles = array_diff($all_assigned_roles,$global_assignable);
1204 
1205  if(!count($new_visible_assigned_roles) and !count($main_assigned_roles))
1206  {
1207  return false;
1208  }
1209  return true;
1210  }
1211 
1212 
1213  function __showRolesTable($a_result_set,$a_from = "")
1214  {
1215  $this->checkPermission("cat_administrate_users");
1216 
1217  $tbl =& $this->__initTableGUI();
1218  $tpl =& $tbl->getTemplateObject();
1219 
1220  // SET FORMAACTION
1221  $tpl->setCurrentBlock("tbl_form_header");
1222 
1223  $this->ctrl->setParameter($this,'obj_id',$_GET['obj_id']);
1224  $tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
1225  $tpl->parseCurrentBlock();
1226 
1227  // SET FOOTER BUTTONS
1228  $tpl->setVariable("COLUMN_COUNTS",4);
1229  $tpl->setVariable("IMG_ARROW", ilUtil::getImagePath("arrow_downright.png"));
1230 
1231  $tpl->setCurrentBlock("tbl_action_button");
1232  $tpl->setVariable("BTN_NAME","assignSave");
1233  $tpl->setVariable("BTN_VALUE",$this->lng->txt("change_assignment"));
1234  $tpl->parseCurrentBlock();
1235 
1236  $tpl->setCurrentBlock("tbl_action_row");
1237  $tpl->setVariable("TPLPATH",$this->tpl->tplPath);
1238  $tpl->parseCurrentBlock();
1239 
1240  $tmp_obj =& ilObjectFactory::getInstanceByObjId($_GET['obj_id']);
1241  $title = $this->lng->txt('role_assignment').' ('.$tmp_obj->getFullname().')';
1242 
1243  $tbl->setTitle($title,"icon_role.png",$this->lng->txt("role_assignment"));
1244  $tbl->setHeaderNames(array('',
1245  $this->lng->txt("title"),
1246  $this->lng->txt('description'),
1247  $this->lng->txt("type")));
1248  $tbl->setHeaderVars(array("",
1249  "title",
1250  "description",
1251  "type"),
1252  array("ref_id" => $this->object->getRefId(),
1253  "cmd" => "assignRoles",
1254  "obj_id" => $_GET['obj_id'],
1255  "cmdClass" => "ilobjcategorygui",
1256  "cmdNode" => $_GET["cmdNode"]));
1257  $tbl->setColumnWidth(array("4%","35%","45%","16%"));
1258 
1259  $this->set_unlimited = true;
1260  $this->__setTableGUIBasicData($tbl,$a_result_set,$a_from,true);
1261  $tbl->render();
1262 
1263  $this->tpl->setVariable("ROLES_TABLE",$tbl->tpl->get());
1264 
1265  return true;
1266  }
1267 
1268  function __showUsersTable($a_result_set,$a_from = "",$a_footer = true)
1269  {
1270  $this->checkPermission("cat_administrate_users");
1271 
1272  $tbl =& $this->__initTableGUI();
1273  $tpl =& $tbl->getTemplateObject();
1274 
1275  // SET FORMAACTION
1276  $tpl->setCurrentBlock("tbl_form_header");
1277 
1278  $this->ctrl->setParameter($this,'sort_by',$_GET['sort_by']);
1279  $this->ctrl->setParameter($this,'sort_order',$_GET['sort_order']);
1280  $this->ctrl->setParameter($this,'offset',$_GET['offset']);
1281  $tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
1282  $tpl->parseCurrentBlock();
1283 
1284 
1285  if($a_footer)
1286  {
1287  // SET FOOTER BUTTONS
1288  $tpl->setVariable("COLUMN_COUNTS",6);
1289  $tpl->setVariable("IMG_ARROW", ilUtil::getImagePath("arrow_downright.png"));
1290 
1291  $tpl->setCurrentBlock("tbl_action_button");
1292  $tpl->setVariable("BTN_NAME","deleteUser");
1293  $tpl->setVariable("BTN_VALUE",$this->lng->txt("delete"));
1294  $tpl->parseCurrentBlock();
1295 
1296  $tpl->setCurrentBlock("tbl_action_row");
1297  $tpl->setVariable("TPLPATH",$this->tpl->tplPath);
1298  $tpl->parseCurrentBlock();
1299 
1300  $tbl->setFormName('cmd');
1301  $tbl->enable('select_all');
1302  }
1303 
1304  $tbl->setTitle($this->lng->txt("users"),"icon_usr.png",$this->lng->txt("users"));
1305  $tbl->setHeaderNames(array('',
1306  $this->lng->txt("username"),
1307  $this->lng->txt("firstname"),
1308  $this->lng->txt("lastname"),
1309  $this->lng->txt('context'),
1310  $this->lng->txt('role_assignment')));
1311  $tbl->setHeaderVars(array("",
1312  "login",
1313  "firstname",
1314  "lastname",
1315  "context",
1316  "role_assignment"),
1317  array("ref_id" => $this->object->getRefId(),
1318  "cmd" => "listUsers",
1319  "cmdClass" => "ilobjcategorygui",
1320  "cmdNode" => $_GET["cmdNode"]));
1321  $tbl->setColumnWidth(array("1px","20%","20%","20%","20%","20%"));
1322  $tbl->setSelectAllCheckbox('user_ids');
1323 
1324  $this->__setTableGUIBasicData($tbl,$a_result_set,$a_from,true);
1325  $tbl->render();
1326 
1327  $this->tpl->setVariable("USERS_TABLE",$tbl->tpl->get());
1328 
1329  return true;
1330  }
1331 
1332  function __setTableGUIBasicData(&$tbl,&$result_set,$a_from = "",$a_footer = true)
1333  {
1334  global $ilUser;
1335 
1336  switch ($a_from)
1337  {
1338  case "listUsersObject":
1339  $tbl->setOrderColumn($_GET["sort_by"]);
1340  $tbl->setOrderDirection($_GET["sort_order"]);
1341  $tbl->setOffset($_GET["offset"]);
1342  $tbl->setMaxCount($this->all_users_count);
1343  $tbl->setLimit($ilUser->getPref('hits_per_page'));
1344  $tbl->setFooter("tblfooter",$this->lng->txt("previous"),$this->lng->txt("next"));
1345  $tbl->setData($result_set);
1346  $tbl->disable('auto_sort');
1347 
1348  return true;
1349 
1350 
1351  case "assignRolesObject":
1352  $offset = $_GET["offset"];
1353  // init sort_by (unfortunatly sort_by is preset with 'title'
1354  if ($_GET["sort_by"] == "title" or empty($_GET["sort_by"]))
1355  {
1356  $_GET["sort_by"] = "login";
1357  }
1358  $order = $_GET["sort_by"];
1359  $direction = $_GET["sort_order"];
1360  break;
1361 
1362  case "clipboardObject":
1363  $offset = $_GET["offset"];
1364  $order = $_GET["sort_by"];
1365  $direction = $_GET["sort_order"];
1366  $tbl->disable("footer");
1367  break;
1368 
1369  default:
1370  $offset = $_GET["offset"];
1371  $order = $_GET["sort_by"];
1372  $direction = $_GET["sort_order"];
1373  break;
1374  }
1375 
1376  $tbl->setOrderColumn($order);
1377  $tbl->setOrderDirection($direction);
1378  $tbl->setOffset($offset);
1379  if($this->set_unlimited)
1380  {
1381  $tbl->setLimit($_GET["limit"]*100);
1382  }
1383  else
1384  {
1385  $tbl->setLimit($_GET['limit']);
1386  }
1387  $tbl->setMaxCount(count($result_set));
1388 
1389  if($a_footer)
1390  {
1391  $tbl->setFooter("tblfooter",$this->lng->txt("previous"),$this->lng->txt("next"));
1392  }
1393  else
1394  {
1395  $tbl->disable('footer');
1396  }
1397  $tbl->setData($result_set);
1398  }
1399 
1400  function &__initTableGUI()
1401  {
1402  include_once "./Services/Table/classes/class.ilTableGUI.php";
1403 
1404  return new ilTableGUI(0,false);
1405  }
1406 
1407  function __buildFilterSelect($a_parent_ids)
1408  {
1409  $action[0] = $this->lng->txt('all_users');
1410  $action[$this->object->getRefId()] = $this->lng->txt('users').
1411  ' ('.ilObject::_lookupTitle(ilObject::_lookupObjId($this->object->getRefId())).')';
1412 
1413  foreach($a_parent_ids as $parent)
1414  {
1415  if($parent == $this->object->getRefId())
1416  {
1417  continue;
1418  }
1419  switch($parent)
1420  {
1422  $action[ilLocalUser::_getUserFolderId()] = $this->lng->txt('global_user');
1423 
1424  break;
1425 
1426  default:
1427  $action[$parent] = $this->lng->txt('users').' ('.ilObject::_lookupTitle(ilObject::_lookupObjId($parent)).')';
1428 
1429  break;
1430  }
1431  }
1432  return ilUtil::formSelect($_SESSION['filtered_users'][$this->object->getRefId()],"filter",$action,false,true);
1433  }
1434 
1435  function _goto($a_target)
1436  {
1437  global $ilAccess, $ilErr, $lng;
1438 
1439  if ($ilAccess->checkAccess("read", "", $a_target))
1440  {
1442  }
1443  else if ($ilAccess->checkAccess("read", "", ROOT_FOLDER_ID))
1444  {
1445  ilUtil::sendFailure(sprintf($lng->txt("msg_no_perm_read_item"),
1446  ilObject::_lookupTitle(ilObject::_lookupObjId($a_target))), true);
1448  }
1449 
1450  $ilErr->raiseError($lng->txt("msg_no_perm_read"), $ilErr->FATAL);
1451 
1452  }
1453 
1454 
1455 } // END class.ilObjCategoryGUI
1456 ?>