ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilObjectGUI.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 
14 {
16 
17 
18 
24  var $ilias;
25 
32 
38  var $tpl;
39 
45  var $tree;
46 
52  var $lng;
53 
59  var $data;
60 
66  var $object;
67  var $ref_id;
68  var $obj_id;
69  var $maxcount; // contains number of child objects
70  var $formaction; // special formation (array "cmd" => "formaction")
71  var $return_location; // special return location (array "cmd" => "location")
72  var $target_frame; // special target frame (array "cmd" => "location")
73 
75  var $actions;
77  var $omit_locator = false;
78 
79  const CFORM_NEW = 1;
80  const CFORM_IMPORT = 2;
81  const CFORM_CLONE = 3;
82 
90  function ilObjectGUI($a_data, $a_id = 0, $a_call_by_reference = true, $a_prepare_output = true)
91  {
92  global $ilias, $objDefinition, $tpl, $tree, $ilCtrl, $ilErr, $lng, $ilTabs;
93 
94  $this->tabs_gui =& $ilTabs;
95 
96  if (!isset($ilErr))
97  {
98  $ilErr = new ilErrorHandling();
99  $ilErr->setErrorHandling(PEAR_ERROR_CALLBACK,array($ilErr,'errorHandler'));
100  }
101  else
102  {
103  $this->ilErr =& $ilErr;
104  }
105 
106  $this->ilias =& $ilias;
107  $this->objDefinition =& $objDefinition;
108  $this->tpl =& $tpl;
109  $this->html = "";
110  $this->ctrl =& $ilCtrl;
111 
112  $params = array("ref_id");
113 
114  if (!$a_call_by_reference)
115  {
116  $params = array("ref_id","obj_id");
117  }
118 
119  $this->ctrl->saveParameter($this, $params);
120 
121  $this->lng =& $lng;
122  $this->tree =& $tree;
123  $this->formaction = array();
124  $this->return_location = array();
125  $this->target_frame = array();
126  $this->actions = "";
127  $this->sub_objects = "";
128 
129  $this->data = $a_data;
130  $this->id = $a_id;
131  $this->call_by_reference = $a_call_by_reference;
132  $this->prepare_output = $a_prepare_output;
133  $this->creation_mode = false;
134 
135  $this->ref_id = ($this->call_by_reference) ? $this->id : $_GET["ref_id"];
136  $this->obj_id = ($this->call_by_reference) ? $_GET["obj_id"] : $this->id;
137 
138  if ($this->id != 0)
139  {
140  $this->link_params = "ref_id=".$this->ref_id;
141  }
142 
143  // get the object
144  $this->assignObject();
145 
146  // set context
147  if (is_object($this->object))
148  {
149  if ($this->call_by_reference && $this->ref_id == $_GET["ref_id"])
150  {
151  $this->ctrl->setContext($this->object->getId(),
152  $this->object->getType());
153  }
154  }
155 
156  // use global $lng instead, when creating new objects object is not available
157  //$this->lng =& $this->object->lng;
158 
159  //prepare output
160  if ($a_prepare_output)
161  {
162  $this->prepareOutput();
163  }
164  }
165 
166 
170  function &executeCommand()
171  {
172  $next_class = $this->ctrl->getNextClass($this);
173  $cmd = $this->ctrl->getCmd();
174 
175  switch($next_class)
176  {
177  default:
178  $this->prepareOutput();
179  if(!$cmd)
180  {
181  $cmd = "view";
182  }
183  $cmd .= "Object";
184  $this->$cmd();
185 
186  break;
187  }
188 
189  return true;
190  }
191 
192 
196  public function withReferences()
197  {
198  return $this->call_by_reference;
199  }
200 
207  public function setCreationMode($a_mode = true)
208  {
209  $this->creation_mode = $a_mode;
210  }
211 
215  public function getCreationMode()
216  {
217  return $this->creation_mode;
218  }
219 
220  protected function assignObject()
221  {
222  // TODO: it seems that we always have to pass only the ref_id
223 //echo "<br>ilObjectGUIassign:".get_class($this).":".$this->id.":<br>";
224  if ($this->id != 0)
225  {
226  if ($this->call_by_reference)
227  {
228  $this->object = ilObjectFactory::getInstanceByRefId($this->id);
229  }
230  else
231  {
232  $this->object = ilObjectFactory::getInstanceByObjId($this->id);
233  }
234  }
235  }
236 
240  protected function prepareOutput()
241  {
242  global $ilLocator, $tpl, $ilUser;
243 
244  $this->tpl->getStandardTemplate();
245  // administration prepare output
246  if (strtolower($_GET["baseClass"]) == "iladministrationgui")
247  {
248  $this->addAdminLocatorItems();
249  $tpl->setLocator();
250 
251 // ilUtil::sendInfo();
253 
254  $this->setTitleAndDescription();
255 
256  if ($this->getCreationMode() != true)
257  {
258  $this->setAdminTabs();
259  }
260 
261  return false;
262  }
263  // set locator
264  $this->setLocator();
265  // catch feedback message
266 // ilUtil::sendInfo();
268 
269  // in creation mode (parent) object and gui object
270  // do not fit
271  if ($this->getCreationMode() == true)
272  {
273  // repository vs. workspace
274  if($this->call_by_reference)
275  {
276  // get gui class of parent and call their title and description method
277  $obj_type = ilObject::_lookupType($_GET["ref_id"],true);
278  $class_name = $this->objDefinition->getClassName($obj_type);
279  $class = strtolower("ilObj".$class_name."GUI");
280  $class_path = $this->ctrl->lookupClassPath($class);
281  include_once($class_path);
282  $class_name = $this->ctrl->getClassForClasspath($class_path);
283 //echo "<br>instantiating parent for title and description";
284  $this->parent_gui_obj = new $class_name("", $_GET["ref_id"], true, false);
285  // the next line prevents the header action menu being shown
286  $this->parent_gui_obj->setCreationMode(true);
287  $this->parent_gui_obj->setTitleAndDescription();
288  }
289  }
290  else
291  {
292  // set title and description and title icon
293  $this->setTitleAndDescription();
294 
295  // set tabs
296  $this->setTabs();
297 
298  // BEGIN WebDAV: Display Mount Webfolder icon.
299  require_once 'Services/WebDAV/classes/class.ilDAVServer.php';
300  if (ilDAVServer::_isActive() &&
301  $ilUser->getId() != ANONYMOUS_USER_ID)
302  {
303  $this->showMountWebfolderIcon();
304  }
305  // END WebDAV: Display Mount Webfolder icon.
306 
307  // fileupload support
308  require_once './Services/FileUpload/classes/class.ilFileUploadUtil.php';
309  if (ilFileUploadUtil::isUploadAllowed($this->ref_id, $this->object->getType()))
310  {
311  $this->enableDragDropFileUpload();
312  }
313  }
314 
315  return true;
316  }
317 
321  protected function setTitleAndDescription()
322  {
323  if (!is_object($this->object))
324  {
325  if ((int) $_REQUEST["crtptrefid"] > 0)
326  {
327  $cr_obj_id = ilObject::_lookupObjId((int) $_REQUEST["crtcb"]);
328  $this->tpl->setTitle(ilObject::_lookupTitle($cr_obj_id));
329  $this->tpl->setTitleIcon(ilObject::_getIcon($cr_obj_id));
330  }
331  return;
332  }
333  $this->tpl->setTitle($this->object->getPresentationTitle());
334  $this->tpl->setDescription($this->object->getLongDescription());
335 
336  if (strtolower($_GET["baseClass"]) == "iladministrationgui")
337  {
338  // alt text would be same as heading -> empty alt text
339  $this->tpl->setTitleIcon(ilObject::_getIcon("", "big", $this->object->getType()));
340  }
341  else
342  {
343  $this->tpl->setTitleIcon(ilObject::_getIcon("", "big", $this->object->getType()),
344  $this->lng->txt("obj_" . $this->object->getType()));
345  }
346 
347  include_once './Services/Object/classes/class.ilObjectListGUIFactory.php';
348  $lgui = ilObjectListGUIFactory::_getListGUIByType($this->object->getType());
349  $lgui->initItem($this->object->getRefId(), $this->object->getId());
350  $this->tpl->setAlertProperties($lgui->getAlertProperties());
351  }
352 
360  protected function initHeaderAction($a_sub_type = null, $a_sub_id = null)
361  {
362  global $ilAccess;
363 
364  if(!$this->creation_mode && $this->object)
365  {
366  include_once "Services/Object/classes/class.ilCommonActionDispatcherGUI.php";
368  $ilAccess, $this->object->getType(), $this->ref_id, $this->object->getId());
369 
370  $dispatcher->setSubObject($a_sub_type, $a_sub_id);
371 
372  include_once "Services/Object/classes/class.ilObjectListGUI.php";
373  ilObjectListGUI::prepareJSLinks($this->ctrl->getLinkTarget($this, "redrawHeaderAction", "", true),
374  $this->ctrl->getLinkTargetByClass(array("ilcommonactiondispatchergui", "ilnotegui"), "", "", true, false),
375  $this->ctrl->getLinkTargetByClass(array("ilcommonactiondispatchergui", "iltagginggui"), "", "", true, false));
376 
377  $lg = $dispatcher->initHeaderAction();
378 
379  if (is_object($lg))
380  {
381  // to enable add to desktop / remove from desktop
382  if($this instanceof ilDesktopItemHandling)
383  {
384  $lg->setContainerObject($this);
385  }
386 
387  // enable multi download
388  $lg->enableMultiDownload(true);
389 
390  // comments settings are always on (for the repository)
391  // should only be shown if active or permission to toggle
392  include_once "Services/Notes/classes/class.ilNote.php";
393  if($ilAccess->checkAccess("write", "", $this->ref_id) ||
394  $ilAccess->checkAccess("edit_permissions", "", $this->ref_id) ||
395  ilNote::commentsActivated($this->object->getId(), 0, $this->object->getType()))
396  {
397  $lg->enableComments(true);
398  }
399 
400  $lg->enableNotes(true);
401  $lg->enableTags(true);
402  }
403 
404  return $lg;
405  }
406  }
407 
413  protected function insertHeaderAction($a_list_gui)
414  {
415  if(is_object($a_list_gui))
416  {
417  $this->tpl->setHeaderActionMenu($a_list_gui->getHeaderAction());
418  }
419  }
420 
424  protected function addHeaderAction()
425  {
426  $this->insertHeaderAction($this->initHeaderAction());
427  }
428 
432  protected function redrawHeaderActionObject()
433  {
434  global $tpl;
435 
436  $lg = $this->initHeaderAction();
437  echo $lg->getHeaderAction();
438 
439  // we need to add onload code manually (rating, comments, etc.)
440  echo $tpl->getOnLoadCodeForAsynch();
441 
442  exit;
443  }
444 
445  // BEGIN WebDAV: Show Mount Webfolder Icon.
446  protected function showMountWebfolderIcon()
447  {
448  global $tree, $tpl, $objDefinition;
449 
450  if ($this->object->getRefId() == "")
451  {
452  return;
453  }
454 
455  $tpl->setMountWebfolderIcon($this->object->getRefId());
456  }
457  // END WebDAV: Show Mount Webfolder Icon.
458 
459 
464  protected function setTabs()
465  {
466  $this->getTabs($this->tabs_gui);
467  }
468 
473  protected final function setAdminTabs()
474  {
475  $this->getAdminTabs($this->tabs_gui);
476  }
477 
481  function getAdminTabs(&$tabs_gui)
482  {
483  global $tree;
484 
485 /* if ($_GET["admin_mode"] == "repository")
486  {
487  $this->ctrl->setParameterByClass("iladministrationgui", "admin_mode", "settings");
488  $tabs_gui->setBackTarget($this->lng->txt("administration"),
489  $this->ctrl->getLinkTargetByClass("iladministrationgui", "frameset"),
490  ilFrameTargetInfo::_getFrame("MainContent"));
491  $this->ctrl->setParameterByClass("iladministrationgui", "admin_mode", "repository");
492  }*/
493 
494  if ($this->checkPermissionBool("visible,read"))
495  {
496  $tabs_gui->addTarget("view",
497  $this->ctrl->getLinkTarget($this, "view"), array("", "view"), get_class($this));
498 
499  }
500 
501  if ($this->checkPermissionBool("edit_permission"))
502  {
503  $tabs_gui->addTarget("perm_settings",
504  $this->ctrl->getLinkTargetByClass(array(get_class($this),'ilpermissiongui'), "perm"), "", "ilpermissiongui");
505  }
506 
507  if ($tree->getSavedNodeData($this->object->getRefId()))
508  {
509  $tabs_gui->addTarget("trash",
510  $this->ctrl->getLinkTarget($this, "trash"), "trash", get_class($this));
511  }
512  }
513 
514 
515  function getHTML()
516  {
517  return $this->html;
518  }
519 
520 
527  final private function setActions($a_actions = "")
528  {
529  if (is_array($a_actions))
530  {
531  foreach ($a_actions as $name => $lng)
532  {
533  $this->actions[$name] = array("name" => $name, "lng" => $lng);
534  }
535  }
536  else
537  {
538  $this->actions = "";
539  }
540  }
541 
548  final private function setSubObjects($a_sub_objects = "")
549  {
550  if (is_array($a_sub_objects))
551  {
552  foreach ($a_sub_objects as $name => $options)
553  {
554  $this->sub_objects[$name] = array("name" => $name, "max" => $options["max"]);
555  }
556  }
557  else
558  {
559  $this->sub_objects = "";
560  }
561  }
562 
571  protected function setLocator()
572  {
573  global $ilLocator, $tpl;
574 
575  if ($this->omit_locator)
576  {
577  return;
578  }
579 
580  // repository vs. workspace
581  if($this->call_by_reference)
582  {
583  // todo: admin workaround
584  // in the future, objectgui classes should not be called in
585  // admin section anymore (rbac/trash handling in own classes)
586  $ref_id = ($_GET["ref_id"] != "")
587  ? $_GET["ref_id"]
588  : $this->object->getRefId();
589  $ilLocator->addRepositoryItems($ref_id);
590  }
591 
592  if(!$this->creation_mode)
593  {
594  $this->addLocatorItems();
595  }
596 
597  // not so nice workaround: todo: handle $ilLocator as tabs in ilTemplate
598  if ($_GET["admin_mode"] == "" &&
599  strtolower($this->ctrl->getCmdClass()) == "ilobjrolegui")
600  {
601  $this->ctrl->setParameterByClass("ilobjrolegui",
602  "rolf_ref_id", $_GET["rolf_ref_id"]);
603  $this->ctrl->setParameterByClass("ilobjrolegui",
604  "obj_id", $_GET["obj_id"]);
605  $ilLocator->addItem($this->lng->txt("role"),
606  $this->ctrl->getLinkTargetByClass(array("ilpermissiongui",
607  "ilobjrolegui"), "perm"));
608  }
609 
610  $tpl->setLocator();
611  }
612 
617  protected function addLocatorItems()
618  {
619  }
620 
621  protected function omitLocator($a_omit = true)
622  {
623  $this->omit_locator = $a_omit;
624  }
625 
632  protected function addAdminLocatorItems($a_do_not_add_object = false)
633  {
634  global $ilLocator;
635 
636  if ($_GET["admin_mode"] == "settings") // system settings
637  {
638  $this->ctrl->setParameterByClass("ilobjsystemfoldergui",
639  "ref_id", SYSTEM_FOLDER_ID);
640  $ilLocator->addItem($this->lng->txt("administration"),
641  $this->ctrl->getLinkTargetByClass(array("iladministrationgui", "ilobjsystemfoldergui"), "")
642  );
643  if ($this->object->getRefId() != SYSTEM_FOLDER_ID && !$a_do_not_add_object)
644  {
645  $ilLocator->addItem($this->object->getTitle(),
646  $this->ctrl->getLinkTarget($this, "view"));
647  }
648  }
649  else // repository administration
650  {
651  $this->ctrl->setParameterByClass("iladministrationgui",
652  "ref_id", "");
653  $this->ctrl->setParameterByClass("iladministrationgui",
654  "admin_mode", "settings");
655  //$ilLocator->addItem($this->lng->txt("administration"),
656  // $this->ctrl->getLinkTargetByClass("iladministrationgui", "frameset"),
657  // ilFrameTargetInfo::_getFrame("MainContent"));
658  $this->ctrl->clearParametersByClass("iladministrationgui");
659  $ilLocator->addAdministrationItems();
660  }
661 
662  }
663 
668  public function confirmedDeleteObject()
669  {
670  global $ilSetting, $lng;
671 
672  if(isset($_POST["mref_id"]))
673  {
674  $_SESSION["saved_post"] = array_unique(array_merge($_SESSION["saved_post"], $_POST["mref_id"]));
675  }
676 
677  include_once("./Services/Repository/classes/class.ilRepUtilGUI.php");
678  $ru = new ilRepUtilGUI($this);
679  $ru->deleteObjects($_GET["ref_id"], ilSession::get("saved_post"));
680  ilSession::clear("saved_post");
681  $this->ctrl->returnToParent($this);
682  }
683 
689  public function cancelDeleteObject()
690  {
691  ilSession::clear("saved_post");
692  $this->ctrl->returnToParent($this);
693  }
694 
695 
701  public function cancelObject($in_rep = false)
702  {
703  ilSession::clear("saved_post");
704  $this->ctrl->returnToParent($this);
705  }
706 
712  public function createObject()
713  {
714  global $tpl, $ilErr;
715 
716  $new_type = $_REQUEST["new_type"];
717 
718 
719  // add new object to custom parent container
720  $this->ctrl->saveParameter($this, "crtptrefid");
721  // use forced callback after object creation
722  $this->ctrl->saveParameter($this, "crtcb");
723 
724  if (!$this->checkPermissionBool("create", "", $new_type))
725  {
726  $ilErr->raiseError($this->lng->txt("permission_denied"),$ilErr->MESSAGE);
727  }
728  else
729  {
730  $this->lng->loadLanguageModule($new_type);
731  $this->ctrl->setParameter($this, "new_type", $new_type);
732 
733  $forms = $this->initCreationForms($new_type);
734 
735  // copy form validation error: do not show other creation forms
736  if($_GET["cpfl"] && isset($forms[self::CFORM_CLONE]))
737  {
738  $forms = array(self::CFORM_CLONE => $forms[self::CFORM_CLONE]);
739  }
740  $tpl->setContent($this->getCreationFormsHTML($forms));
741  }
742  }
743 
752  protected function initCreationForms($a_new_type)
753  {
754  $forms = array(
755  self::CFORM_NEW => $this->initCreateForm($a_new_type),
756  self::CFORM_IMPORT => $this->initImportForm($a_new_type),
757  self::CFORM_CLONE => $this->fillCloneTemplate(null, $a_new_type)
758  );
759 
760  return $forms;
761  }
762 
768  final protected function getCreationFormsHTML(array $a_forms)
769  {
770  global $tpl;
771 
772  // #13168- sanity check
773  foreach($a_forms as $id => $form)
774  {
775  if(!$form instanceof ilPropertyFormGUI)
776  {
777  unset($a_forms[$id]);
778  }
779  }
780 
781  // no accordion if there is just one form
782  if(sizeof($a_forms) == 1)
783  {
784  $form_type = key($a_forms);
785  $a_forms = array_shift($a_forms);
786 
787  // see bug #0016217
788  if(method_exists($this, "getCreationFormTitle"))
789  {
790  $form_title = $this->getCreationFormTitle($form_type);
791  if ($form_title != "")
792  {
793  $a_forms->setTitle($form_title);
794  }
795  }
796  return $a_forms->getHTML();
797  }
798  else
799  {
800  include_once("./Services/Accordion/classes/class.ilAccordionGUI.php");
801 
802  $acc = new ilAccordionGUI();
803  $acc->setBehaviour(ilAccordionGUI::FIRST_OPEN);
804  $cnt = 1;
805  foreach ($a_forms as $form_type => $cf)
806  {
807  $htpl = new ilTemplate("tpl.creation_acc_head.html", true, true, "Services/Object");
808 
809  // using custom form titles (used for repository plugins)
810  $form_title = "";
811  if(method_exists($this, "getCreationFormTitle"))
812  {
813  $form_title = $this->getCreationFormTitle($form_type);
814  }
815  if(!$form_title)
816  {
817  $form_title = $cf->getTitle();
818  }
819 
820  // move title from form to accordion
821  $htpl->setVariable("TITLE", $this->lng->txt("option")." ".$cnt.": ".
822  $form_title);
823  $cf->setTitle(null);
824  $cf->setTitleIcon(null);
825  $cf->setTableWidth("100%");
826 
827  $acc->addItem($htpl->get(), $cf->getHTML());
828 
829  $cnt++;
830  }
831 
832  return "<div class='ilCreationFormSection'>".$acc->getHTML()."</div>";
833  }
834  }
835 
842  protected function initCreateForm($a_new_type)
843  {
844  include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
845  $form = new ilPropertyFormGUI();
846  $form->setTarget("_top");
847  $form->setFormAction($this->ctrl->getFormAction($this, "save"));
848  $form->setTitle($this->lng->txt($a_new_type."_new"));
849 
850  // title
851  $ti = new ilTextInputGUI($this->lng->txt("title"), "title");
852  $ti->setSize(min(40, ilObject::TITLE_LENGTH));
853  $ti->setMaxLength(ilObject::TITLE_LENGTH);
854  $ti->setRequired(true);
855  $form->addItem($ti);
856 
857  // description
858  $ta = new ilTextAreaInputGUI($this->lng->txt("description"), "desc");
859  $ta->setCols(40);
860  $ta->setRows(2);
861  $form->addItem($ta);
862 
863  $form = $this->initDidacticTemplate($form);
864 
865  $form->addCommandButton("save", $this->lng->txt($a_new_type."_add"));
866  $form->addCommandButton("cancel", $this->lng->txt("cancel"));
867 
868  return $form;
869  }
870 
876  protected function initDidacticTemplate(ilPropertyFormGUI $form)
877  {
878  global $lng;
879 
880  $lng->loadLanguageModule('didactic');
881 
882  $options = array();
883  $options['dtpl_0'] = array($this->lng->txt('didactic_default_type'),
884  sprintf(
885  $this->lng->txt('didactic_default_type_info'),
886  $this->lng->txt('objs_'.$this->type)
887  ));
888 
889  include_once './Services/DidacticTemplate/classes/class.ilDidacticTemplateSettings.php';
890  $templates = ilDidacticTemplateSettings::getInstanceByObjectType($this->type)->getTemplates();
891  if($templates)
892  {
893  foreach($templates as $template)
894  {
895  $options["dtpl_".$template->getId()] = array($template->getTitle(),
896  $template->getDescription());
897  }
898  }
899 
901 
902  if(sizeof($options) > 1)
903  {
904  $type = new ilRadioGroupInputGUI(
905  $this->lng->txt('type'),
906  'didactic_type'
907  );
908  // workaround for containers in edit mode
909  if(!$this->getCreationMode())
910  {
911  include_once './Services/DidacticTemplate/classes/class.ilDidacticTemplateObjSettings.php';
912  $type->setValue(
913  'dtpl_'.ilDidacticTemplateObjSettings::lookupTemplateId($this->object->getRefId())
914  );
915  }
916  else
917  {
918  $type->setValue('dtpl_0');
919  }
920  $form->addItem($type);
921 
923  foreach($options as $id => $data)
924  {
925  $option = new ilRadioOption($data[0], $id, $data[1]);
926  $type->addOption($option);
927  }
928  }
929 
930  return $form;
931  }
932 
938  protected function addDidacticTemplateOptions(array &$a_options)
939  {
940 
941  }
942 
946  public function cancelCreation()
947  {
948  global $ilCtrl;
949 
950  $ilCtrl->redirectByClass("ilrepositorygui", "frameset");
951  }
952 
958  public function saveObject()
959  {
960  global $objDefinition, $tpl;
961 
962  $new_type = $_REQUEST["new_type"];
963 
964  // create permission is already checked in createObject. This check here is done to prevent hacking attempts
965  if (!$this->checkPermissionBool("create", "", $new_type))
966  {
967  $this->ilias->raiseError($this->lng->txt("no_create_permission"), $this->ilias->error_obj->MESSAGE);
968  }
969 
970  $this->lng->loadLanguageModule($new_type);
971  $this->ctrl->setParameter($this, "new_type", $new_type);
972 
973  $form = $this->initCreateForm($new_type);
974  if ($form->checkInput())
975  {
976  $this->ctrl->setParameter($this, "new_type", "");
977 
978  // create instance
979  $class_name = "ilObj".$objDefinition->getClassName($new_type);
980  $location = $objDefinition->getLocation($new_type);
981  include_once($location."/class.".$class_name.".php");
982  $newObj = new $class_name();
983  $newObj->setType($new_type);
984  $newObj->setTitle($form->getInput("title"));
985  $newObj->setDescription($form->getInput("desc"));
986  $newObj->create();
987 
988  $this->putObjectInTree($newObj);
989 
990  // apply didactic template?
991  $dtpl = $this->getDidacticTemplateVar("dtpl");
992  if($dtpl)
993  {
994  $newObj->applyDidacticTemplate($dtpl);
995  }
996 
997  // auto rating
998  $this->handleAutoRating($newObj);
999 
1000  // additional paramters are added to afterSave()
1001  $args = func_get_args();
1002  if($args)
1003  {
1004  $this->afterSave($newObj, $args);
1005  }
1006  else
1007  {
1008  $this->afterSave($newObj);
1009  }
1010  return;
1011  }
1012 
1013  // display only this form to correct input
1014  $form->setValuesByPost();
1015  $tpl->setContent($form->getHtml());
1016  }
1017 
1024  protected function getDidacticTemplateVar($a_type)
1025  {
1026  $tpl = $_POST["didactic_type"];
1027  if($tpl && substr($tpl, 0, strlen($a_type)+1) == $a_type."_")
1028  {
1029  return (int)substr($tpl, strlen($a_type)+1);
1030  }
1031  }
1032 
1039  protected function putObjectInTree(ilObject $a_obj, $a_parent_node_id = null)
1040  {
1041  global $rbacreview, $ilUser, $objDefinition;
1042 
1043  if(!$a_parent_node_id)
1044  {
1045  $a_parent_node_id = $_GET["ref_id"];
1046  }
1047 
1048  // add new object to custom parent container
1049  if((int)$_REQUEST["crtptrefid"])
1050  {
1051  $a_parent_node_id = (int)$_REQUEST["crtptrefid"];
1052  }
1053 
1054  $a_obj->createReference();
1055  $a_obj->putInTree($a_parent_node_id);
1056  $a_obj->setPermissions($a_parent_node_id);
1057 
1058  $this->obj_id = $a_obj->getId();
1059  $this->ref_id = $a_obj->getRefId();
1060 
1061  // BEGIN ChangeEvent: Record save object.
1062  require_once('Services/Tracking/classes/class.ilChangeEvent.php');
1063  ilChangeEvent::_recordWriteEvent($this->obj_id, $ilUser->getId(), 'create');
1064  // END ChangeEvent: Record save object.
1065 
1066  // rbac log
1067  include_once "Services/AccessControl/classes/class.ilRbacLog.php";
1068  $rbac_log_roles = $rbacreview->getParentRoleIds($this->ref_id, false);
1069  $rbac_log = ilRbacLog::gatherFaPa($this->ref_id, array_keys($rbac_log_roles), true);
1070  ilRbacLog::add(ilRbacLog::CREATE_OBJECT, $this->ref_id, $rbac_log);
1071 
1072  // use forced callback after object creation
1073  if($_REQUEST["crtcb"])
1074  {
1075  $callback_type = ilObject::_lookupType((int)$_REQUEST["crtcb"], true);
1076  $class_name = "ilObj".$objDefinition->getClassName($callback_type)."GUI";
1077  $location = $objDefinition->getLocation($callback_type);
1078  include_once($location."/class.".$class_name.".php");
1079  if (in_array(strtolower($class_name), array("ilobjitemgroupgui")))
1080  {
1081  $callback_obj = new $class_name((int)$_REQUEST["crtcb"]);
1082  }
1083  else
1084  {
1085  // #10368
1086  $callback_obj = new $class_name(null, (int)$_REQUEST["crtcb"], true, false);
1087  }
1088  $callback_obj->afterSaveCallback($a_obj);
1089  }
1090  }
1091 
1097  protected function afterSave(ilObject $a_new_object)
1098  {
1099  ilUtil::sendSuccess($this->lng->txt("object_added"), true);
1100  $this->ctrl->returnToParent($this);
1101  }
1102 
1108  public function editObject()
1109  {
1110  global $tpl, $ilTabs;
1111 
1112  if (!$this->checkPermissionBool("write"))
1113  {
1114  $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
1115  }
1116 
1117  $ilTabs->activateTab("settings");
1118 
1119  $form = $this->initEditForm();
1120  $values = $this->getEditFormValues();
1121  if($values)
1122  {
1123  $form->setValuesByArray($values);
1124  }
1125  $tpl->setContent($form->getHTML());
1126  }
1127 
1133  protected function initEditForm()
1134  {
1135  global $lng, $ilCtrl;
1136 
1137  $lng->loadLanguageModule($this->object->getType());
1138 
1139  include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
1140  $form = new ilPropertyFormGUI();
1141  $form->setFormAction($this->ctrl->getFormAction($this, "update"));
1142  $form->setTitle($this->lng->txt($this->object->getType()."_edit"));
1143 
1144  // title
1145  $ti = new ilTextInputGUI($this->lng->txt("title"), "title");
1146  $ti->setSize(min(40, ilObject::TITLE_LENGTH));
1147  $ti->setMaxLength(ilObject::TITLE_LENGTH);
1148  $ti->setRequired(true);
1149  $form->addItem($ti);
1150 
1151  // description
1152  $ta = new ilTextAreaInputGUI($this->lng->txt("description"), "desc");
1153  $ta->setCols(40);
1154  $ta->setRows(2);
1155  $form->addItem($ta);
1156 
1157  $this->initEditCustomForm($form);
1158 
1159  $form->addCommandButton("update", $this->lng->txt("save"));
1160  //$this->form->addCommandButton("cancelUpdate", $lng->txt("cancel"));
1161 
1162  return $form;
1163  }
1164 
1170  protected function initEditCustomForm(ilPropertyFormGUI $a_form)
1171  {
1172 
1173  }
1174 
1180  protected function getEditFormValues()
1181  {
1182  $values["title"] = $this->object->getTitle();
1183  $values["desc"] = $this->object->getLongDescription();
1184  $this->getEditFormCustomValues($values);
1185  return $values;
1186  }
1187 
1193  protected function getEditFormCustomValues(array &$a_values)
1194  {
1195 
1196  }
1197 
1201  public function updateObject()
1202  {
1203  global $ilTabs, $tpl;
1204 
1205  if (!$this->checkPermissionBool("write"))
1206  {
1207  $this->ilias->raiseError($this->lng->txt("permission_denied"),$this->ilias->error_obj->MESSAGE);
1208  }
1209 
1210  $form = $this->initEditForm();
1211  if($form->checkInput() &&
1212  $this->validateCustom($form))
1213  {
1214  $this->object->setTitle($form->getInput("title"));
1215  $this->object->setDescription($form->getInput("desc"));
1216  $this->updateCustom($form);
1217  $this->object->update();
1218 
1219  $this->afterUpdate();
1220  return;
1221  }
1222 
1223  // display form again to correct errors
1224  $ilTabs->activateTab("settings");
1225  $form->setValuesByPost();
1226  $tpl->setContent($form->getHtml());
1227  }
1228 
1235  protected function validateCustom(ilPropertyFormGUI $a_form)
1236  {
1237  return true;
1238  }
1239 
1245  protected function updateCustom(ilPropertyFormGUI $a_form)
1246  {
1247 
1248  }
1249 
1253  protected function afterUpdate()
1254  {
1255  ilUtil::sendSuccess($this->lng->txt("msg_obj_modified"),true);
1256  $this->ctrl->redirect($this, "edit");
1257  }
1258 
1265  protected function initImportForm($a_new_type)
1266  {
1267  include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
1268  $form = new ilPropertyFormGUI();
1269  $form->setTarget("_top");
1270  $form->setFormAction($this->ctrl->getFormAction($this, "importFile"));
1271  $form->setTitle($this->lng->txt($a_new_type."_import"));
1272 
1273  include_once("./Services/Form/classes/class.ilFileInputGUI.php");
1274  $fi = new ilFileInputGUI($this->lng->txt("import_file"), "importfile");
1275  $fi->setSuffixes(array("zip"));
1276  $fi->setRequired(true);
1277  $form->addItem($fi);
1278 
1279  $form->addCommandButton("importFile", $this->lng->txt("import"));
1280  $form->addCommandButton("cancel", $this->lng->txt("cancel"));
1281 
1282  return $form;
1283  }
1284 
1288  protected function importFileObject($parent_id = null)
1289  {
1290  global $objDefinition, $tpl, $ilErr;
1291 
1292  if(!$parent_id)
1293  {
1294  $parent_id = $_GET["ref_id"];
1295  }
1296  $new_type = $_REQUEST["new_type"];
1297 
1298  // create permission is already checked in createObject. This check here is done to prevent hacking attempts
1299  if (!$this->checkPermissionBool("create", "", $new_type))
1300  {
1301  $ilErr->raiseError($this->lng->txt("no_create_permission"));
1302  }
1303 
1304  $this->lng->loadLanguageModule($new_type);
1305  $this->ctrl->setParameter($this, "new_type", $new_type);
1306 
1307  $form = $this->initImportForm($new_type);
1308  if ($form->checkInput())
1309  {
1310  // :todo: make some check on manifest file
1311 
1312  if($objDefinition->isContainer($new_type))
1313  {
1314  include_once './Services/Export/classes/class.ilImportContainer.php';
1315  $imp = new ilImportContainer((int)$parent_id);
1316  }
1317  else
1318  {
1319  include_once("./Services/Export/classes/class.ilImport.php");
1320  $imp = new ilImport((int)$parent_id);
1321  }
1322 
1323  $new_id = $imp->importObject(null, $_FILES["importfile"]["tmp_name"],
1324  $_FILES["importfile"]["name"], $new_type);
1325 
1326  if ($new_id > 0)
1327  {
1328  $this->ctrl->setParameter($this, "new_type", "");
1329 
1330  $newObj = ilObjectFactory::getInstanceByObjId($new_id);
1331 
1332  // put new object id into tree - already done in import for containers
1333  if(!$objDefinition->isContainer($new_type))
1334  {
1335  $this->putObjectInTree($newObj);
1336  }
1337 
1338  $this->afterImport($newObj);
1339  }
1340  // import failed
1341  else
1342  {
1343  if($objDefinition->isContainer($new_type))
1344  {
1345  ilUtil::sendFailure($this->lng->txt("container_import_zip_file_invalid"));
1346  }
1347  else
1348  {
1349  // not enough information here...
1350  return;
1351  }
1352  }
1353  }
1354 
1355  // display form to correct errors
1356  $form->setValuesByPost();
1357  $tpl->setContent($form->getHtml());
1358  }
1359 
1365  protected function afterImport(ilObject $a_new_object)
1366  {
1367  ilUtil::sendSuccess($this->lng->txt("object_added"), true);
1368  $this->ctrl->returnToParent($this);
1369  }
1370 
1379  public function getFormAction($a_cmd, $a_formaction = "")
1380  {
1381  if ($this->formaction[$a_cmd] != "")
1382  {
1383  return $this->formaction[$a_cmd];
1384  }
1385  else
1386  {
1387  return $a_formaction;
1388  }
1389  }
1390 
1399  protected function setFormAction($a_cmd, $a_formaction)
1400  {
1401  $this->formaction[$a_cmd] = $a_formaction;
1402  }
1403 
1411  protected function getReturnLocation($a_cmd, $a_location ="")
1412  {
1413  if ($this->return_location[$a_cmd] != "")
1414  {
1415  return $this->return_location[$a_cmd];
1416  }
1417  else
1418  {
1419  return $a_location;
1420  }
1421  }
1422 
1430  protected function setReturnLocation($a_cmd, $a_location)
1431  {
1432 //echo "-".$a_cmd."-".$a_location."-";
1433  $this->return_location[$a_cmd] = $a_location;
1434  }
1435 
1443  protected function getTargetFrame($a_cmd, $a_target_frame = "")
1444  {
1445  if ($this->target_frame[$a_cmd] != "")
1446  {
1447  return $this->target_frame[$a_cmd];
1448  }
1449  elseif (!empty($a_target_frame))
1450  {
1451  return "target=\"".$a_target_frame."\"";
1452  }
1453  else
1454  {
1455  return;
1456  }
1457  }
1458 
1466  protected function setTargetFrame($a_cmd, $a_target_frame)
1467  {
1468  $this->target_frame[$a_cmd] = "target=\"".$a_target_frame."\"";
1469  }
1470 
1471  // BEGIN Security: Hide objects which aren't accessible by the user.
1472  public function isVisible($a_ref_id,$a_type)
1473  {
1474  global $ilBench;
1475 
1476  $ilBench->start("Explorer", "setOutput_isVisible");
1477  $visible = $this->checkPermissionBool("visible,read", "", "", $a_ref_id);
1478 
1479  if ($visible && $a_type == 'crs') {
1480  global $tree;
1481  if($crs_id = $tree->checkForParentType($a_ref_id,'crs'))
1482  {
1483  if(!$this->checkPermissionBool("write", "", "", $crs_id))
1484  {
1485  // Show only activated courses
1486  $tmp_obj =& ilObjectFactory::getInstanceByRefId($crs_id,false);
1487 
1488  if(!$tmp_obj->isActivated())
1489  {
1490  unset($tmp_obj);
1491  $visible = false;
1492  }
1493  if(($crs_id != $a_ref_id) and $tmp_obj->isArchived())
1494  {
1495  $visible = false;
1496  }
1497  }
1498  }
1499  }
1500 
1501  $ilBench->stop("Explorer", "setOutput_isVisible");
1502 
1503  return $visible;
1504  }
1505  // END Security: Hide objects which aren't accessible by the user.
1506 
1512  public function viewObject()
1513  {
1514  global$tpl;
1515 
1516  if (!$this->checkPermissionBool("visible,read"))
1517  {
1518  $this->ilias->raiseError($this->lng->txt("permission_denied"),$this->ilias->error_obj->MESSAGE);
1519  }
1520 
1521  // BEGIN ChangeEvent: record read event.
1522  require_once('Services/Tracking/classes/class.ilChangeEvent.php');
1523  global $ilUser;
1525  $this->object->getType(),
1526  $this->object->getRefId(),
1527  $this->object->getId(), $ilUser->getId());
1528  // END ChangeEvent: record read event.
1529 
1530  include_once("./Services/Repository/classes/class.ilAdminSubItemsTableGUI.php");
1531  if (!$this->call_by_reference)
1532  {
1533  $this->ctrl->setParameter($this, "obj_id", $this->obj_id);
1534  }
1535  $itab = new ilAdminSubItemsTableGUI($this, "view", $_GET["ref_id"]);
1536 
1537  $tpl->setContent($itab->getHTML());
1538  }
1539 
1547  public function deleteObject($a_error = false)
1548  {
1549  global $ilCtrl;
1550 
1551  if ($_GET["item_ref_id"] != "")
1552  {
1553  $_POST["id"] = array($_GET["item_ref_id"]);
1554  }
1555 
1556  if(is_array($_POST["id"]))
1557  {
1558  foreach($_POST["id"] as $idx => $id)
1559  {
1560  $_POST["id"][$idx] = (int)$id;
1561  }
1562  }
1563 
1564  // SAVE POST VALUES (get rid of this
1565  ilSession::set("saved_post", $_POST["id"]);
1566 
1567  include_once("./Services/Repository/classes/class.ilRepUtilGUI.php");
1568  $ru = new ilRepUtilGUI($this);
1569  if (!$ru->showDeleteConfirmation($_POST["id"], $a_error))
1570  {
1571  $ilCtrl->returnToParent($this);
1572  }
1573  }
1574 
1580  protected function showPossibleSubObjects()
1581  {
1582  if ($this->sub_objects == "")
1583  {
1584  $d = $this->objDefinition->getCreatableSubObjects($this->object->getType());
1585  }
1586  else
1587  {
1589  }
1590 
1591  $import = false;
1592 
1593  if (count($d) > 0)
1594  {
1595  foreach ($d as $row)
1596  {
1597  $count = 0;
1598 
1599  if ($row["max"] > 0)
1600  {
1601  //how many elements are present?
1602  for ($i=0; $i<count($this->data["ctrl"]); $i++)
1603  {
1604  if ($this->data["ctrl"][$i]["type"] == $row["name"])
1605  {
1606  $count++;
1607  }
1608  }
1609  }
1610 
1611  if ($row["max"] == "" || $count < $row["max"])
1612  {
1613  $subobj[] = $row["name"];
1614  }
1615  }
1616  }
1617 
1618  if (is_array($subobj))
1619  {
1620 
1621  //build form
1622  $opts = ilUtil::formSelect(12,"new_type",$subobj);
1623  $this->tpl->setCurrentBlock("add_object");
1624  $this->tpl->setVariable("SELECT_OBJTYPE", $opts);
1625  $this->tpl->setVariable("BTN_NAME", "create");
1626  $this->tpl->setVariable("TXT_ADD", $this->lng->txt("add"));
1627  $this->tpl->parseCurrentBlock();
1628  }
1629  }
1630 
1639  final protected function getTemplateFile($a_cmd,$a_type = "")
1640  {
1641  mk(); die("ilObjectGUI::getTemplateFile() is deprecated.");
1642  }
1643 
1652  protected function getTitlesByRefId($a_ref_ids)
1653  {
1654  foreach ($a_ref_ids as $id)
1655  {
1656  // GET OBJECT TITLE
1657  $tmp_obj =& $this->ilias->obj_factory->getInstanceByRefId($id);
1658  $title[] = $tmp_obj->getTitle();
1659  unset($tmp_obj);
1660  }
1661 
1662  return $title ? $title : array();
1663  }
1664 
1672  protected function getTabs(&$tabs_gui)
1673  {
1674  // please define your tabs here
1675 
1676  }
1677 
1678  // PROTECTED
1679  protected function __showButton($a_cmd,$a_text,$a_target = '')
1680  {
1681  global $ilToolbar;
1682 
1683  $ilToolbar->addButton($a_text, $this->ctrl->getLinkTarget($this, $a_cmd), $a_target);
1684  }
1685 
1686  protected function hitsperpageObject()
1687  {
1688  ilSession::set("tbl_limit", $_POST["hitsperpage"]);
1689  $_GET["limit"] = $_POST["hitsperpage"];
1690  }
1691 
1692 
1693  protected function &__initTableGUI()
1694  {
1695  include_once "./Services/Table/classes/class.ilTableGUI.php";
1696 
1697  return new ilTableGUI(0,false);
1698  }
1699 
1705  protected function __setTableGUIBasicData(&$tbl,&$result_set,$a_from = "")
1706  {
1707  switch ($a_from)
1708  {
1709  case "clipboardObject":
1710  $offset = $_GET["offset"];
1711  $order = $_GET["sort_by"];
1712  $direction = $_GET["sort_order"];
1713  $tbl->disable("footer");
1714  break;
1715 
1716  default:
1717  $offset = $_GET["offset"];
1718  $order = $_GET["sort_by"];
1719  $direction = $_GET["sort_order"];
1720  break;
1721  }
1722 
1723  $tbl->setOrderColumn($order);
1724  $tbl->setOrderDirection($direction);
1725  $tbl->setOffset($offset);
1726  $tbl->setLimit($_GET["limit"]);
1727  $tbl->setFooter("tblfooter",$this->lng->txt("previous"),$this->lng->txt("next"));
1728  $tbl->setData($result_set);
1729  }
1730 
1740  protected function redirectToRefId($a_ref_id, $a_cmd = "")
1741  {
1742  $obj_type = ilObject::_lookupType($a_ref_id,true);
1743  $class_name = $this->objDefinition->getClassName($obj_type);
1744  $class = strtolower("ilObj".$class_name."GUI");
1745  $this->ctrl->setParameterByClass("ilrepositorygui", "ref_id", $a_ref_id);
1746  $this->ctrl->redirectByClass(array("ilrepositorygui", $class), $a_cmd);
1747  }
1748 
1749  // Object Cloning
1759  protected function fillCloneTemplate($a_tpl_varname,$a_type)
1760  {
1761  include_once './Services/Object/classes/class.ilObjectCopyGUI.php';
1762  $cp = new ilObjectCopyGUI($this);
1763  $cp->setType($a_type);
1764  $cp->setTarget($_GET['ref_id']);
1765  if($a_tpl_varname)
1766  {
1767  $cp->showSourceSearch($a_tpl_varname);
1768  }
1769  else
1770  {
1771  return $cp->showSourceSearch(null);
1772  }
1773  }
1774 
1781  public function cloneAllObject()
1782  {
1783  include_once('./Services/Link/classes/class.ilLink.php');
1784  include_once('Services/CopyWizard/classes/class.ilCopyWizardOptions.php');
1785 
1786  global $ilErr,$ilUser;
1787 
1788  $new_type = $_REQUEST['new_type'];
1789  if(!$this->checkPermissionBool("create", "", $new_type))
1790  {
1791  $ilErr->raiseError($this->lng->txt('permission_denied'));
1792  }
1793  if(!(int) $_REQUEST['clone_source'])
1794  {
1795  ilUtil::sendFailure($this->lng->txt('select_one'));
1796  $this->createObject();
1797  return false;
1798  }
1799  if(!$this->checkPermissionBool("write", "", $new_type, (int)$_REQUEST['clone_source']))
1800  {
1801  $ilErr->raiseError($this->lng->txt('permission_denied'));
1802  }
1803 
1804  // Save wizard options
1806  $wizard_options = ilCopyWizardOptions::_getInstance($copy_id);
1807  $wizard_options->saveOwner($ilUser->getId());
1808  $wizard_options->saveRoot((int) $_REQUEST['clone_source']);
1809 
1810  $options = $_POST['cp_options'] ? $_POST['cp_options'] : array();
1811  foreach($options as $source_id => $option)
1812  {
1813  $wizard_options->addEntry($source_id,$option);
1814  }
1815  $wizard_options->read();
1816 
1817  $orig = ilObjectFactory::getInstanceByRefId((int) $_REQUEST['clone_source']);
1818  $new_obj = $orig->cloneObject((int) $_GET['ref_id'],$copy_id);
1819 
1820  // Delete wizard options
1821  $wizard_options->deleteAll();
1822 
1823  ilUtil::sendSuccess($this->lng->txt("object_duplicated"),true);
1824  ilUtil::redirect(ilLink::_getLink($new_obj->getRefId()));
1825  }
1826 
1827 
1831  protected function getCenterColumnHTML()
1832  {
1833  global $ilCtrl;
1834 
1835  include_once("Services/Block/classes/class.ilColumnGUI.php");
1836 
1837  $obj_id = ilObject::_lookupObjId($this->object->getRefId());
1838  $obj_type = ilObject::_lookupType($obj_id);
1839 
1840  if ($ilCtrl->getNextClass() != "ilcolumngui")
1841  {
1842  // normal command processing
1843  return $this->getContent();
1844  }
1845  else
1846  {
1847  if (!$ilCtrl->isAsynch())
1848  {
1849  //if ($column_gui->getScreenMode() != IL_SCREEN_SIDE)
1851  {
1852  // right column wants center
1854  {
1855  $column_gui = new ilColumnGUI($obj_type, IL_COL_RIGHT);
1856  $this->setColumnSettings($column_gui);
1857  $this->html = $ilCtrl->forwardCommand($column_gui);
1858  }
1859  // left column wants center
1861  {
1862  $column_gui = new ilColumnGUI($obj_type, IL_COL_LEFT);
1863  $this->setColumnSettings($column_gui);
1864  $this->html = $ilCtrl->forwardCommand($column_gui);
1865  }
1866  }
1867  else
1868  {
1869  // normal command processing
1870  return $this->getContent();
1871  }
1872  }
1873  }
1874  }
1875 
1879  protected function getRightColumnHTML()
1880  {
1881  global $ilUser, $lng, $ilCtrl;
1882 
1883  $obj_id = ilObject::_lookupObjId($this->object->getRefId());
1884  $obj_type = ilObject::_lookupType($obj_id);
1885 
1886  include_once("Services/Block/classes/class.ilColumnGUI.php");
1887  $column_gui = new ilColumnGUI($obj_type, IL_COL_RIGHT);
1888 
1889  if ($column_gui->getScreenMode() == IL_SCREEN_FULL)
1890  {
1891  return "";
1892  }
1893 
1894  $this->setColumnSettings($column_gui);
1895 
1896  if ($ilCtrl->getNextClass() == "ilcolumngui" &&
1897  $column_gui->getCmdSide() == IL_COL_RIGHT &&
1898  $column_gui->getScreenMode() == IL_SCREEN_SIDE)
1899  {
1900  $html = $ilCtrl->forwardCommand($column_gui);
1901  }
1902  else
1903  {
1904  if (!$ilCtrl->isAsynch())
1905  {
1906  $html = $ilCtrl->getHTML($column_gui);
1907  }
1908  }
1909 
1910  return $html;
1911  }
1912 
1916  protected function setColumnSettings($column_gui)
1917  {
1918  $column_gui->setRepositoryMode(true);
1919  $column_gui->setEnableEdit(false);
1920  if ($this->checkPermissionBool("write"))
1921  {
1922  $column_gui->setEnableEdit(true);
1923  }
1924  }
1925 
1935  protected function checkPermission($a_perm, $a_cmd = "", $a_type = "", $a_ref_id = null)
1936  {
1937  if (!$this->checkPermissionBool($a_perm, $a_cmd, $a_type, $a_ref_id))
1938  {
1939  if (!is_int(strpos($_SERVER["PHP_SELF"], "goto.php")))
1940  {
1941  // create: redirect to parent
1942  if($a_perm == "create")
1943  {
1944  if(!$a_ref_id)
1945  {
1946  $a_ref_id = $_GET["ref_id"];
1947  }
1948  $type = ilObject::_lookupType($a_ref_id, true);
1949  }
1950  else
1951  {
1952  // does this make sense?
1953  if (!is_object($this->object))
1954  {
1955  return;
1956  }
1957  if (!$a_ref_id)
1958  {
1959  $a_ref_id = $this->object->getRefId();
1960  }
1961  $type = $this->object->getType();
1962  }
1963 
1964  ilSession::clear("il_rep_ref_id");
1965  ilUtil::sendFailure($this->lng->txt("permission_denied"), true);
1966  ilUtil::redirect("goto.php?target=".$type."_".$a_ref_id);
1967  }
1968  // we should never be here
1969  else
1970  {
1971  die("Permission Denied.");
1972  }
1973  }
1974  }
1975 
1985  protected function checkPermissionBool($a_perm, $a_cmd = "", $a_type = "", $a_ref_id = null)
1986  {
1987  global $ilAccess;
1988 
1989  if($a_perm == "create")
1990  {
1991  if(!$a_ref_id)
1992  {
1993  $a_ref_id = $_GET["ref_id"];
1994  }
1995  return $ilAccess->checkAccess($a_perm."_".$a_type, $a_cmd, $a_ref_id);
1996  }
1997  else
1998  {
1999  // does this make sense?
2000  if (!is_object($this->object))
2001  {
2002  return false;
2003  }
2004  if (!$a_ref_id)
2005  {
2006  $a_ref_id = $this->object->getRefId();
2007  }
2008  return $ilAccess->checkAccess($a_perm, $a_cmd, $a_ref_id);
2009  }
2010  }
2011 
2018  static function _gotoRepositoryRoot($a_raise_error = false)
2019  {
2020  global $ilAccess, $ilErr;
2021 
2022  if ($ilAccess->checkAccess("read", "", ROOT_FOLDER_ID))
2023  {
2024  $_GET["cmd"] = "frameset";
2025  $_GET["target"] = "";
2026  $_GET["ref_id"] = ROOT_FOLDER_ID;
2027  $_GET["baseClass"] = "ilRepositoryGUI";
2028  include("ilias.php");
2029  exit;
2030  }
2031 
2032  if ($a_raise_error)
2033  {
2034  $ilErr->raiseError($lng->txt("msg_no_perm_read"), $ilErr->FATAL);
2035  }
2036  }
2037 
2044  static function _gotoRepositoryNode($a_ref_id, $a_cmd = "frameset")
2045  {
2046  global $ilAccess, $ilErr;
2047 
2048  $_GET["cmd"] = $a_cmd;
2049  $_GET["target"] = "";
2050  $_GET["ref_id"] = $a_ref_id;
2051  $_GET["baseClass"] = "ilRepositoryGUI";
2052  include("ilias.php");
2053  exit;
2054  }
2055 
2059  protected function enableDragDropFileUpload()
2060  {
2061  include_once("./Services/FileUpload/classes/class.ilFileUploadGUI.php");
2063 
2064  $this->tpl->enableDragDropFileUpload($this->ref_id);
2065  }
2066 
2072  protected function handleAutoRating(ilObject $a_new_obj)
2073  {
2074  if(ilObject::hasAutoRating($a_new_obj->getType(), $a_new_obj->getRefId()) &&
2075  method_exists($a_new_obj, "setRating"))
2076  {
2077  $a_new_obj->setRating(true);
2078  $a_new_obj->update();
2079  }
2080  }
2081 
2082 } // END class.ilObjectGUI (3.10: 2896 loc)
2083 
2084 ?>