ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
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
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 protected $tmp_import_dir; // directory used during import
74
78 var $omit_locator = false;
79
80 const CFORM_NEW = 1;
81 const CFORM_IMPORT = 2;
82 const CFORM_CLONE = 3;
83
91 function ilObjectGUI($a_data, $a_id = 0, $a_call_by_reference = true, $a_prepare_output = true)
92 {
93 global $ilias, $objDefinition, $tpl, $tree, $ilCtrl, $ilErr, $lng, $ilTabs;
94
95 $this->tabs_gui =& $ilTabs;
96
97 if (!isset($ilErr))
98 {
99 $ilErr = new ilErrorHandling();
100 $ilErr->setErrorHandling(PEAR_ERROR_CALLBACK,array($ilErr,'errorHandler'));
101 }
102 else
103 {
104 $this->ilErr =& $ilErr;
105 }
106
107 $this->ilias =& $ilias;
108 $this->objDefinition =& $objDefinition;
109 $this->tpl =& $tpl;
110 $this->html = "";
111 $this->ctrl =& $ilCtrl;
112
113 $params = array("ref_id");
114
115 if (!$a_call_by_reference)
116 {
117 $params = array("ref_id","obj_id");
118 }
119
120 $this->ctrl->saveParameter($this, $params);
121
122 $this->lng = $lng;
123 $this->tree =& $tree;
124 $this->formaction = array();
125 $this->return_location = array();
126 $this->target_frame = array();
127 $this->actions = "";
128 $this->sub_objects = "";
129
130 $this->data = $a_data;
131 $this->id = $a_id;
132 $this->call_by_reference = $a_call_by_reference;
133 $this->prepare_output = $a_prepare_output;
134 $this->creation_mode = false;
135
136 $this->ref_id = ($this->call_by_reference) ? $this->id : $_GET["ref_id"];
137 $this->obj_id = ($this->call_by_reference) ? $_GET["obj_id"] : $this->id;
138
139 if ($this->id != 0)
140 {
141 $this->link_params = "ref_id=".$this->ref_id;
142 }
143
144 // get the object
145 $this->assignObject();
146
147 // set context
148 if (is_object($this->object))
149 {
150 if ($this->call_by_reference && $this->ref_id == $_GET["ref_id"])
151 {
152 $this->ctrl->setContext($this->object->getId(),
153 $this->object->getType());
154 }
155 }
156
157 // use global $lng instead, when creating new objects object is not available
158 //$this->lng =& $this->object->lng;
159
160 //prepare output
161 if ($a_prepare_output)
162 {
163 $this->prepareOutput();
164 }
165 }
166
167
171 function &executeCommand()
172 {
173 $next_class = $this->ctrl->getNextClass($this);
174 $cmd = $this->ctrl->getCmd();
175
176 switch($next_class)
177 {
178 default:
179 $this->prepareOutput();
180 if(!$cmd)
181 {
182 $cmd = "view";
183 }
184 $cmd .= "Object";
185 $this->$cmd();
186
187 break;
188 }
189
190 return true;
191 }
192
193
197 public function withReferences()
198 {
199 return $this->call_by_reference;
200 }
201
208 public function setCreationMode($a_mode = true)
209 {
210 $this->creation_mode = $a_mode;
211 }
212
216 public function getCreationMode()
217 {
218 return $this->creation_mode;
219 }
220
221 protected function assignObject()
222 {
223 // TODO: it seems that we always have to pass only the ref_id
224//echo "<br>ilObjectGUIassign:".get_class($this).":".$this->id.":<br>";
225 if ($this->id != 0)
226 {
227 if ($this->call_by_reference)
228 {
229 $this->object = ilObjectFactory::getInstanceByRefId($this->id);
230 }
231 else
232 {
233 $this->object = ilObjectFactory::getInstanceByObjId($this->id);
234 }
235 }
236 }
237
241 protected function prepareOutput()
242 {
243 global $ilLocator, $tpl, $ilUser;
244
245 $this->tpl->getStandardTemplate();
246 // administration prepare output
247 if (strtolower($_GET["baseClass"]) == "iladministrationgui")
248 {
249 $this->addAdminLocatorItems();
250 $tpl->setLocator();
251
252// ilUtil::sendInfo();
254
255 $this->setTitleAndDescription();
256
257 if ($this->getCreationMode() != true)
258 {
259 $this->setAdminTabs();
260 }
261
262 return false;
263 }
264 // set locator
265 $this->setLocator();
266 // catch feedback message
267// ilUtil::sendInfo();
269
270 // in creation mode (parent) object and gui object
271 // do not fit
272 if ($this->getCreationMode() == true)
273 {
274 // repository vs. workspace
275 if($this->call_by_reference)
276 {
277 // get gui class of parent and call their title and description method
278 $obj_type = ilObject::_lookupType($_GET["ref_id"],true);
279 $class_name = $this->objDefinition->getClassName($obj_type);
280 $class = strtolower("ilObj".$class_name."GUI");
281 $class_path = $this->ctrl->lookupClassPath($class);
282 include_once($class_path);
283 $class_name = $this->ctrl->getClassForClasspath($class_path);
284//echo "<br>instantiating parent for title and description";
285 $this->parent_gui_obj = new $class_name("", $_GET["ref_id"], true, false);
286 // the next line prevents the header action menu being shown
287 $this->parent_gui_obj->setCreationMode(true);
288 $this->parent_gui_obj->setTitleAndDescription();
289 }
290 }
291 else
292 {
293 // set title and description and title icon
294 $this->setTitleAndDescription();
295
296 // set tabs
297 $this->setTabs();
298
299 // BEGIN WebDAV: Display Mount Webfolder icon.
300 require_once 'Services/WebDAV/classes/class.ilDAVServer.php';
301 if (ilDAVServer::_isActive() &&
302 $ilUser->getId() != ANONYMOUS_USER_ID)
303 {
304 $this->showMountWebfolderIcon();
305 }
306 // END WebDAV: Display Mount Webfolder icon.
307
308 // fileupload support
309 require_once './Services/FileUpload/classes/class.ilFileUploadUtil.php';
310 if (ilFileUploadUtil::isUploadAllowed($this->ref_id, $this->object->getType()))
311 {
312 $this->enableDragDropFileUpload();
313 }
314 }
315
316 return true;
317 }
318
322 protected function setTitleAndDescription()
323 {
324 if (!is_object($this->object))
325 {
326 if ((int) $_REQUEST["crtptrefid"] > 0)
327 {
328 $cr_obj_id = ilObject::_lookupObjId((int) $_REQUEST["crtcb"]);
329 $this->tpl->setTitle(ilObject::_lookupTitle($cr_obj_id));
330 $this->tpl->setTitleIcon(ilObject::_getIcon($cr_obj_id));
331 }
332 return;
333 }
334 $this->tpl->setTitle($this->object->getPresentationTitle());
335 $this->tpl->setDescription($this->object->getLongDescription());
336
337 if (strtolower($_GET["baseClass"]) == "iladministrationgui")
338 {
339 // alt text would be same as heading -> empty alt text
340 $this->tpl->setTitleIcon(ilObject::_getIcon("", "big", $this->object->getType()));
341 }
342 else
343 {
344 $this->tpl->setTitleIcon(ilObject::_getIcon("", "big", $this->object->getType()),
345 $this->lng->txt("obj_" . $this->object->getType()));
346 }
347
348 include_once './Services/Object/classes/class.ilObjectListGUIFactory.php';
349 $lgui = ilObjectListGUIFactory::_getListGUIByType($this->object->getType());
350 $lgui->initItem($this->object->getRefId(), $this->object->getId());
351 $this->tpl->setAlertProperties($lgui->getAlertProperties());
352 }
353
361 protected function initHeaderAction($a_sub_type = null, $a_sub_id = null)
362 {
363 global $ilAccess;
364
365 if(!$this->creation_mode && $this->object)
366 {
367 include_once "Services/Object/classes/class.ilCommonActionDispatcherGUI.php";
369 $ilAccess, $this->object->getType(), $this->ref_id, $this->object->getId());
370
371 $dispatcher->setSubObject($a_sub_type, $a_sub_id);
372
373 include_once "Services/Object/classes/class.ilObjectListGUI.php";
374 ilObjectListGUI::prepareJSLinks($this->ctrl->getLinkTarget($this, "redrawHeaderAction", "", true),
375 $this->ctrl->getLinkTargetByClass(array("ilcommonactiondispatchergui", "ilnotegui"), "", "", true, false),
376 $this->ctrl->getLinkTargetByClass(array("ilcommonactiondispatchergui", "iltagginggui"), "", "", true, false));
377
378 $lg = $dispatcher->initHeaderAction();
379
380 if (is_object($lg))
381 {
382 // to enable add to desktop / remove from desktop
383 if($this instanceof ilDesktopItemHandling)
384 {
385 $lg->setContainerObject($this);
386 }
387
388 // enable multi download
389 $lg->enableMultiDownload(true);
390
391 // comments settings are always on (for the repository)
392 // should only be shown if active or permission to toggle
393 include_once "Services/Notes/classes/class.ilNote.php";
394 if($ilAccess->checkAccess("write", "", $this->ref_id) ||
395 $ilAccess->checkAccess("edit_permissions", "", $this->ref_id) ||
396 ilNote::commentsActivated($this->object->getId(), 0, $this->object->getType()))
397 {
398 $lg->enableComments(true);
399 }
400
401 $lg->enableNotes(true);
402 $lg->enableTags(true);
403 }
404
405 return $lg;
406 }
407 }
408
414 protected function insertHeaderAction($a_list_gui)
415 {
416 if(is_object($a_list_gui))
417 {
418 $this->tpl->setHeaderActionMenu($a_list_gui->getHeaderAction());
419 }
420 }
421
425 protected function addHeaderAction()
426 {
427 $this->insertHeaderAction($this->initHeaderAction());
428 }
429
433 protected function redrawHeaderActionObject()
434 {
435 global $tpl;
436
437 $lg = $this->initHeaderAction();
438 echo $lg->getHeaderAction();
439
440 // we need to add onload code manually (rating, comments, etc.)
441 echo $tpl->getOnLoadCodeForAsynch();
442
443 exit;
444 }
445
446 // BEGIN WebDAV: Show Mount Webfolder Icon.
447 protected function showMountWebfolderIcon()
448 {
449 global $tree, $tpl, $objDefinition;
450
451 if ($this->object->getRefId() == "")
452 {
453 return;
454 }
455
456 $tpl->setMountWebfolderIcon($this->object->getRefId());
457 }
458 // END WebDAV: Show Mount Webfolder Icon.
459
460
465 protected function setTabs()
466 {
467 $this->getTabs($this->tabs_gui);
468 }
469
474 protected final function setAdminTabs()
475 {
476 $this->getAdminTabs($this->tabs_gui);
477 }
478
482 function getAdminTabs(&$tabs_gui)
483 {
484 global $tree;
485
486/* if ($_GET["admin_mode"] == "repository")
487 {
488 $this->ctrl->setParameterByClass("iladministrationgui", "admin_mode", "settings");
489 $tabs_gui->setBackTarget($this->lng->txt("administration"),
490 $this->ctrl->getLinkTargetByClass("iladministrationgui", "frameset"),
491 ilFrameTargetInfo::_getFrame("MainContent"));
492 $this->ctrl->setParameterByClass("iladministrationgui", "admin_mode", "repository");
493 }*/
494
495 if ($this->checkPermissionBool("visible,read"))
496 {
497 $tabs_gui->addTarget("view",
498 $this->ctrl->getLinkTarget($this, "view"), array("", "view"), get_class($this));
499
500 }
501
502 if ($this->checkPermissionBool("edit_permission"))
503 {
504 $tabs_gui->addTarget("perm_settings",
505 $this->ctrl->getLinkTargetByClass(array(get_class($this),'ilpermissiongui'), "perm"), "", "ilpermissiongui");
506 }
507
508 if ($tree->getSavedNodeData($this->object->getRefId()))
509 {
510 $tabs_gui->addTarget("trash",
511 $this->ctrl->getLinkTarget($this, "trash"), "trash", get_class($this));
512 }
513 }
514
515
516 function getHTML()
517 {
518 return $this->html;
519 }
520
521
528 final private function setActions($a_actions = "")
529 {
530 if (is_array($a_actions))
531 {
532 foreach ($a_actions as $name => $lng)
533 {
534 $this->actions[$name] = array("name" => $name, "lng" => $lng);
535 }
536 }
537 else
538 {
539 $this->actions = "";
540 }
541 }
542
549 final private function setSubObjects($a_sub_objects = "")
550 {
551 if (is_array($a_sub_objects))
552 {
553 foreach ($a_sub_objects as $name => $options)
554 {
555 $this->sub_objects[$name] = array("name" => $name, "max" => $options["max"]);
556 }
557 }
558 else
559 {
560 $this->sub_objects = "";
561 }
562 }
563
572 protected function setLocator()
573 {
574 global $ilLocator, $tpl;
575
576 if ($this->omit_locator)
577 {
578 return;
579 }
580
581 // repository vs. workspace
582 if($this->call_by_reference)
583 {
584 // todo: admin workaround
585 // in the future, objectgui classes should not be called in
586 // admin section anymore (rbac/trash handling in own classes)
587 $ref_id = ($_GET["ref_id"] != "")
588 ? $_GET["ref_id"]
589 : $this->object->getRefId();
590 $ilLocator->addRepositoryItems($ref_id);
591 }
592
593 if(!$this->creation_mode)
594 {
595 $this->addLocatorItems();
596 }
597
598 // not so nice workaround: todo: handle $ilLocator as tabs in ilTemplate
599 if ($_GET["admin_mode"] == "" &&
600 strtolower($this->ctrl->getCmdClass()) == "ilobjrolegui")
601 {
602 $this->ctrl->setParameterByClass("ilobjrolegui",
603 "rolf_ref_id", $_GET["rolf_ref_id"]);
604 $this->ctrl->setParameterByClass("ilobjrolegui",
605 "obj_id", $_GET["obj_id"]);
606 $ilLocator->addItem($this->lng->txt("role"),
607 $this->ctrl->getLinkTargetByClass(array("ilpermissiongui",
608 "ilobjrolegui"), "perm"));
609 }
610
611 $tpl->setLocator();
612 }
613
618 protected function addLocatorItems()
619 {
620 }
621
622 protected function omitLocator($a_omit = true)
623 {
624 $this->omit_locator = $a_omit;
625 }
626
633 protected function addAdminLocatorItems($a_do_not_add_object = false)
634 {
635 global $ilLocator;
636
637 if ($_GET["admin_mode"] == "settings") // system settings
638 {
639 $this->ctrl->setParameterByClass("ilobjsystemfoldergui",
640 "ref_id", SYSTEM_FOLDER_ID);
641 $ilLocator->addItem($this->lng->txt("administration"),
642 $this->ctrl->getLinkTargetByClass(array("iladministrationgui", "ilobjsystemfoldergui"), "")
643 );
644 if ($this->object->getRefId() != SYSTEM_FOLDER_ID && !$a_do_not_add_object)
645 {
646 $ilLocator->addItem($this->object->getTitle(),
647 $this->ctrl->getLinkTarget($this, "view"));
648 }
649 }
650 else // repository administration
651 {
652 $this->ctrl->setParameterByClass("iladministrationgui",
653 "ref_id", "");
654 $this->ctrl->setParameterByClass("iladministrationgui",
655 "admin_mode", "settings");
656 //$ilLocator->addItem($this->lng->txt("administration"),
657 // $this->ctrl->getLinkTargetByClass("iladministrationgui", "frameset"),
658 // ilFrameTargetInfo::_getFrame("MainContent"));
659 $this->ctrl->clearParametersByClass("iladministrationgui");
660 $ilLocator->addAdministrationItems();
661 }
662
663 }
664
669 public function confirmedDeleteObject()
670 {
671 global $ilSetting, $lng;
672
673 if(isset($_POST["mref_id"]))
674 {
675 $_SESSION["saved_post"] = array_unique(array_merge($_SESSION["saved_post"], $_POST["mref_id"]));
676 }
677
678 include_once("./Services/Repository/classes/class.ilRepUtilGUI.php");
679 $ru = new ilRepUtilGUI($this);
680 $ru->deleteObjects($_GET["ref_id"], ilSession::get("saved_post"));
681 ilSession::clear("saved_post");
682 $this->ctrl->returnToParent($this);
683 }
684
690 public function cancelDeleteObject()
691 {
692 ilSession::clear("saved_post");
693 $this->ctrl->returnToParent($this);
694 }
695
696
702 public function cancelObject($in_rep = false)
703 {
704 ilSession::clear("saved_post");
705 $this->ctrl->returnToParent($this);
706 }
707
713 public function createObject()
714 {
715 global $tpl, $ilErr;
716
717 $new_type = $_REQUEST["new_type"];
718
719
720 // add new object to custom parent container
721 $this->ctrl->saveParameter($this, "crtptrefid");
722 // use forced callback after object creation
723 $this->ctrl->saveParameter($this, "crtcb");
724
725 if (!$this->checkPermissionBool("create", "", $new_type))
726 {
727 $ilErr->raiseError($this->lng->txt("permission_denied"),$ilErr->MESSAGE);
728 }
729 else
730 {
731 $this->lng->loadLanguageModule($new_type);
732 $this->ctrl->setParameter($this, "new_type", $new_type);
733
734 $forms = $this->initCreationForms($new_type);
735
736 // copy form validation error: do not show other creation forms
737 if($_GET["cpfl"] && isset($forms[self::CFORM_CLONE]))
738 {
739 $forms = array(self::CFORM_CLONE => $forms[self::CFORM_CLONE]);
740 }
741 $tpl->setContent($this->getCreationFormsHTML($forms));
742 }
743 }
744
753 protected function initCreationForms($a_new_type)
754 {
755 $forms = array(
756 self::CFORM_NEW => $this->initCreateForm($a_new_type),
757 self::CFORM_IMPORT => $this->initImportForm($a_new_type),
758 self::CFORM_CLONE => $this->fillCloneTemplate(null, $a_new_type)
759 );
760
761 return $forms;
762 }
763
769 final protected function getCreationFormsHTML(array $a_forms)
770 {
771 global $tpl;
772
773 // #13168- sanity check
774 foreach($a_forms as $id => $form)
775 {
776 if(!$form instanceof ilPropertyFormGUI)
777 {
778 unset($a_forms[$id]);
779 }
780 }
781
782 // no accordion if there is just one form
783 if(sizeof($a_forms) == 1)
784 {
785 $form_type = key($a_forms);
786 $a_forms = array_shift($a_forms);
787
788 // see bug #0016217
789 if(method_exists($this, "getCreationFormTitle"))
790 {
791 $form_title = $this->getCreationFormTitle($form_type);
792 if ($form_title != "")
793 {
794 $a_forms->setTitle($form_title);
795 }
796 }
797 return $a_forms->getHTML();
798 }
799 else
800 {
801 include_once("./Services/Accordion/classes/class.ilAccordionGUI.php");
802
803 $acc = new ilAccordionGUI();
804 $acc->setBehaviour(ilAccordionGUI::FIRST_OPEN);
805 $cnt = 1;
806 foreach ($a_forms as $form_type => $cf)
807 {
808 $htpl = new ilTemplate("tpl.creation_acc_head.html", true, true, "Services/Object");
809
810 // using custom form titles (used for repository plugins)
811 $form_title = "";
812 if(method_exists($this, "getCreationFormTitle"))
813 {
814 $form_title = $this->getCreationFormTitle($form_type);
815 }
816 if(!$form_title)
817 {
818 $form_title = $cf->getTitle();
819 }
820
821 // move title from form to accordion
822 $htpl->setVariable("TITLE", $this->lng->txt("option")." ".$cnt.": ".
823 $form_title);
824 $cf->setTitle(null);
825 $cf->setTitleIcon(null);
826 $cf->setTableWidth("100%");
827
828 $acc->addItem($htpl->get(), $cf->getHTML());
829
830 $cnt++;
831 }
832
833 return "<div class='ilCreationFormSection'>".$acc->getHTML()."</div>";
834 }
835 }
836
843 protected function initCreateForm($a_new_type)
844 {
845 include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
846 $form = new ilPropertyFormGUI();
847 $form->setTarget("_top");
848 $form->setFormAction($this->ctrl->getFormAction($this, "save"));
849 $form->setTitle($this->lng->txt($a_new_type."_new"));
850
851 // title
852 $ti = new ilTextInputGUI($this->lng->txt("title"), "title");
853 $ti->setSize(min(40, ilObject::TITLE_LENGTH));
854 $ti->setMaxLength(ilObject::TITLE_LENGTH);
855 $ti->setRequired(true);
856 $form->addItem($ti);
857
858 // description
859 $ta = new ilTextAreaInputGUI($this->lng->txt("description"), "desc");
860 $ta->setCols(40);
861 $ta->setRows(2);
862 $form->addItem($ta);
863
864 $form = $this->initDidacticTemplate($form);
865
866 $form->addCommandButton("save", $this->lng->txt($a_new_type."_add"));
867 $form->addCommandButton("cancel", $this->lng->txt("cancel"));
868
869 return $form;
870 }
871
877 protected function initDidacticTemplate(ilPropertyFormGUI $form)
878 {
879 global $lng;
880
881 $lng->loadLanguageModule('didactic');
882
883 $options = array();
884 $options['dtpl_0'] = array($this->lng->txt('didactic_default_type'),
885 sprintf(
886 $this->lng->txt('didactic_default_type_info'),
887 $this->lng->txt('objs_'.$this->type)
888 ));
889
890 include_once './Services/DidacticTemplate/classes/class.ilDidacticTemplateSettings.php';
891 $templates = ilDidacticTemplateSettings::getInstanceByObjectType($this->type)->getTemplates();
892 if($templates)
893 {
894 foreach($templates as $template)
895 {
896 $options["dtpl_".$template->getId()] = array($template->getTitle(),
897 $template->getDescription());
898 }
899 }
900
902
903 if(sizeof($options) > 1)
904 {
905 $type = new ilRadioGroupInputGUI(
906 $this->lng->txt('type'),
907 'didactic_type'
908 );
909 // workaround for containers in edit mode
910 if(!$this->getCreationMode())
911 {
912 include_once './Services/DidacticTemplate/classes/class.ilDidacticTemplateObjSettings.php';
913 $type->setValue(
914 'dtpl_'.ilDidacticTemplateObjSettings::lookupTemplateId($this->object->getRefId())
915 );
916 }
917 else
918 {
919 $type->setValue('dtpl_0');
920 }
921 $form->addItem($type);
922
924 foreach($options as $id => $data)
925 {
926 $option = new ilRadioOption($data[0], $id, $data[1]);
927 $type->addOption($option);
928 }
929 }
930
931 return $form;
932 }
933
939 protected function addDidacticTemplateOptions(array &$a_options)
940 {
941
942 }
943
947 public function cancelCreation()
948 {
949 global $ilCtrl;
950
951 $ilCtrl->redirectByClass("ilrepositorygui", "frameset");
952 }
953
959 public function saveObject()
960 {
961 global $objDefinition, $tpl;
962
963 $new_type = $_REQUEST["new_type"];
964
965 // create permission is already checked in createObject. This check here is done to prevent hacking attempts
966 if (!$this->checkPermissionBool("create", "", $new_type))
967 {
968 $this->ilias->raiseError($this->lng->txt("no_create_permission"), $this->ilias->error_obj->MESSAGE);
969 }
970
971 $this->lng->loadLanguageModule($new_type);
972 $this->ctrl->setParameter($this, "new_type", $new_type);
973
974 $form = $this->initCreateForm($new_type);
975 if ($form->checkInput())
976 {
977 $this->ctrl->setParameter($this, "new_type", "");
978
979 // create instance
980 $class_name = "ilObj".$objDefinition->getClassName($new_type);
981 $location = $objDefinition->getLocation($new_type);
982 include_once($location."/class.".$class_name.".php");
983 $newObj = new $class_name();
984 $newObj->setType($new_type);
985 $newObj->setTitle($form->getInput("title"));
986 $newObj->setDescription($form->getInput("desc"));
987 $newObj->create();
988
989 $this->putObjectInTree($newObj);
990
991 // apply didactic template?
992 $dtpl = $this->getDidacticTemplateVar("dtpl");
993 if($dtpl)
994 {
995 $newObj->applyDidacticTemplate($dtpl);
996 }
997
998 // auto rating
999 $this->handleAutoRating($newObj);
1000
1001 // additional paramters are added to afterSave()
1002 $args = func_get_args();
1003 if($args)
1004 {
1005 $this->afterSave($newObj, $args);
1006 }
1007 else
1008 {
1009 $this->afterSave($newObj);
1010 }
1011 return;
1012 }
1013
1014 // display only this form to correct input
1015 $form->setValuesByPost();
1016 $tpl->setContent($form->getHtml());
1017 }
1018
1025 protected function getDidacticTemplateVar($a_type)
1026 {
1027 $tpl = $_POST["didactic_type"];
1028 if($tpl && substr($tpl, 0, strlen($a_type)+1) == $a_type."_")
1029 {
1030 return (int)substr($tpl, strlen($a_type)+1);
1031 }
1032 }
1033
1040 protected function putObjectInTree(ilObject $a_obj, $a_parent_node_id = null)
1041 {
1042 global $rbacreview, $ilUser, $objDefinition;
1043
1044 if(!$a_parent_node_id)
1045 {
1046 $a_parent_node_id = $_GET["ref_id"];
1047 }
1048
1049 // add new object to custom parent container
1050 if((int)$_REQUEST["crtptrefid"])
1051 {
1052 $a_parent_node_id = (int)$_REQUEST["crtptrefid"];
1053 }
1054
1055 $a_obj->createReference();
1056 $a_obj->putInTree($a_parent_node_id);
1057 $a_obj->setPermissions($a_parent_node_id);
1058
1059 $this->obj_id = $a_obj->getId();
1060 $this->ref_id = $a_obj->getRefId();
1061
1062 // BEGIN ChangeEvent: Record save object.
1063 require_once('Services/Tracking/classes/class.ilChangeEvent.php');
1064 ilChangeEvent::_recordWriteEvent($this->obj_id, $ilUser->getId(), 'create');
1065 // END ChangeEvent: Record save object.
1066
1067 // rbac log
1068 include_once "Services/AccessControl/classes/class.ilRbacLog.php";
1069 $rbac_log_roles = $rbacreview->getParentRoleIds($this->ref_id, false);
1070 $rbac_log = ilRbacLog::gatherFaPa($this->ref_id, array_keys($rbac_log_roles), true);
1071 ilRbacLog::add(ilRbacLog::CREATE_OBJECT, $this->ref_id, $rbac_log);
1072
1073 // use forced callback after object creation
1074 if($_REQUEST["crtcb"])
1075 {
1076 $callback_type = ilObject::_lookupType((int)$_REQUEST["crtcb"], true);
1077 $class_name = "ilObj".$objDefinition->getClassName($callback_type)."GUI";
1078 $location = $objDefinition->getLocation($callback_type);
1079 include_once($location."/class.".$class_name.".php");
1080 if (in_array(strtolower($class_name), array("ilobjitemgroupgui")))
1081 {
1082 $callback_obj = new $class_name((int)$_REQUEST["crtcb"]);
1083 }
1084 else
1085 {
1086 // #10368
1087 $callback_obj = new $class_name(null, (int)$_REQUEST["crtcb"], true, false);
1088 }
1089 $callback_obj->afterSaveCallback($a_obj);
1090 }
1091 }
1092
1098 protected function afterSave(ilObject $a_new_object)
1099 {
1100 ilUtil::sendSuccess($this->lng->txt("object_added"), true);
1101 $this->ctrl->returnToParent($this);
1102 }
1103
1109 public function editObject()
1110 {
1111 global $tpl, $ilTabs;
1112
1113 if (!$this->checkPermissionBool("write"))
1114 {
1115 $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
1116 }
1117
1118 $ilTabs->activateTab("settings");
1119
1120 $form = $this->initEditForm();
1121 $values = $this->getEditFormValues();
1122 if($values)
1123 {
1124 $form->setValuesByArray($values);
1125 }
1126
1127 $this->addExternalEditFormCustom($form);
1128
1129 $tpl->setContent($form->getHTML());
1130 }
1131
1133 {
1134 // has to be done AFTER setValuesByArray() ...
1135 }
1136
1142 protected function initEditForm()
1143 {
1144 global $lng, $ilCtrl;
1145
1146 $lng->loadLanguageModule($this->object->getType());
1147
1148 include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
1149 $form = new ilPropertyFormGUI();
1150 $form->setFormAction($this->ctrl->getFormAction($this, "update"));
1151 $form->setTitle($this->lng->txt($this->object->getType()."_edit"));
1152
1153 // title
1154 $ti = new ilTextInputGUI($this->lng->txt("title"), "title");
1155 $ti->setSize(min(40, ilObject::TITLE_LENGTH));
1156 $ti->setMaxLength(ilObject::TITLE_LENGTH);
1157 $ti->setRequired(true);
1158 $form->addItem($ti);
1159
1160 // description
1161 $ta = new ilTextAreaInputGUI($this->lng->txt("description"), "desc");
1162 $ta->setCols(40);
1163 $ta->setRows(2);
1164 $form->addItem($ta);
1165
1166 $this->initEditCustomForm($form);
1167
1168 $form->addCommandButton("update", $this->lng->txt("save"));
1169 //$this->form->addCommandButton("cancelUpdate", $lng->txt("cancel"));
1170
1171 return $form;
1172 }
1173
1179 protected function initEditCustomForm(ilPropertyFormGUI $a_form)
1180 {
1181
1182 }
1183
1189 protected function getEditFormValues()
1190 {
1191 $values["title"] = $this->object->getTitle();
1192 $values["desc"] = $this->object->getLongDescription();
1193 $this->getEditFormCustomValues($values);
1194 return $values;
1195 }
1196
1202 protected function getEditFormCustomValues(array &$a_values)
1203 {
1204
1205 }
1206
1210 public function updateObject()
1211 {
1212 global $ilTabs, $tpl;
1213
1214 if (!$this->checkPermissionBool("write"))
1215 {
1216 $this->ilias->raiseError($this->lng->txt("permission_denied"),$this->ilias->error_obj->MESSAGE);
1217 }
1218
1219 $form = $this->initEditForm();
1220 if($form->checkInput() &&
1221 $this->validateCustom($form))
1222 {
1223 $this->object->setTitle($form->getInput("title"));
1224 $this->object->setDescription($form->getInput("desc"));
1225 $this->updateCustom($form);
1226 $this->object->update();
1227
1228 $this->afterUpdate();
1229 return;
1230 }
1231
1232 // display form again to correct errors
1233 $ilTabs->activateTab("settings");
1234 $form->setValuesByPost();
1235 $tpl->setContent($form->getHtml());
1236 }
1237
1244 protected function validateCustom(ilPropertyFormGUI $a_form)
1245 {
1246 return true;
1247 }
1248
1254 protected function updateCustom(ilPropertyFormGUI $a_form)
1255 {
1256
1257 }
1258
1262 protected function afterUpdate()
1263 {
1264 ilUtil::sendSuccess($this->lng->txt("msg_obj_modified"),true);
1265 $this->ctrl->redirect($this, "edit");
1266 }
1267
1274 protected function initImportForm($a_new_type)
1275 {
1276 include_once("Services/Form/classes/class.ilPropertyFormGUI.php");
1277 $form = new ilPropertyFormGUI();
1278 $form->setTarget("_top");
1279 $form->setFormAction($this->ctrl->getFormAction($this, "importFile"));
1280 $form->setTitle($this->lng->txt($a_new_type."_import"));
1281
1282 include_once("./Services/Form/classes/class.ilFileInputGUI.php");
1283 $fi = new ilFileInputGUI($this->lng->txt("import_file"), "importfile");
1284 $fi->setSuffixes(array("zip"));
1285 $fi->setRequired(true);
1286 $form->addItem($fi);
1287
1288 $form->addCommandButton("importFile", $this->lng->txt("import"));
1289 $form->addCommandButton("cancel", $this->lng->txt("cancel"));
1290
1291 return $form;
1292 }
1293
1297 protected function importFileObject($parent_id = null, $a_catch_errors = true)
1298 {
1299 global $objDefinition, $tpl, $ilErr;
1300
1301 if(!$parent_id)
1302 {
1303 $parent_id = $_GET["ref_id"];
1304 }
1305 $new_type = $_REQUEST["new_type"];
1306
1307 // create permission is already checked in createObject. This check here is done to prevent hacking attempts
1308 if (!$this->checkPermissionBool("create", "", $new_type))
1309 {
1310 $ilErr->raiseError($this->lng->txt("no_create_permission"));
1311 }
1312
1313 $this->lng->loadLanguageModule($new_type);
1314 $this->ctrl->setParameter($this, "new_type", $new_type);
1315
1316 $form = $this->initImportForm($new_type);
1317 if ($form->checkInput())
1318 {
1319 // :todo: make some check on manifest file
1320
1321 if($objDefinition->isContainer($new_type))
1322 {
1323 include_once './Services/Export/classes/class.ilImportContainer.php';
1324 $imp = new ilImportContainer((int)$parent_id);
1325 }
1326 else
1327 {
1328 include_once("./Services/Export/classes/class.ilImport.php");
1329 $imp = new ilImport((int)$parent_id);
1330 }
1331
1332 try
1333 {
1334 $new_id = $imp->importObject(null, $_FILES["importfile"]["tmp_name"],
1335 $_FILES["importfile"]["name"], $new_type);
1336 }
1337 catch (ilException $e)
1338 {
1339 $this->tmp_import_dir = $imp->getTemporaryImportDir();
1340 if (!$a_catch_errors)
1341 {
1342 throw $e;
1343 }
1344 // display message and form again
1345 ilUtil::sendFailure($this->lng->txt("obj_import_file_error")." <br />".$e->getMessage());
1346 $form->setValuesByPost();
1347 $tpl->setContent($form->getHtml());
1348 return;
1349 }
1350
1351 if ($new_id > 0)
1352 {
1353 $this->ctrl->setParameter($this, "new_type", "");
1354
1355 $newObj = ilObjectFactory::getInstanceByObjId($new_id);
1356
1357 // put new object id into tree - already done in import for containers
1358 if(!$objDefinition->isContainer($new_type))
1359 {
1360 $this->putObjectInTree($newObj);
1361 }
1362
1363 $this->afterImport($newObj);
1364 }
1365 // import failed
1366 else
1367 {
1368 if($objDefinition->isContainer($new_type))
1369 {
1370 ilUtil::sendFailure($this->lng->txt("container_import_zip_file_invalid"));
1371 }
1372 else
1373 {
1374 // not enough information here...
1375 return;
1376 }
1377 }
1378 }
1379
1380 // display form to correct errors
1381 $form->setValuesByPost();
1382 $tpl->setContent($form->getHtml());
1383 }
1384
1390 protected function afterImport(ilObject $a_new_object)
1391 {
1392 ilUtil::sendSuccess($this->lng->txt("object_added"), true);
1393 $this->ctrl->returnToParent($this);
1394 }
1395
1404 public function getFormAction($a_cmd, $a_formaction = "")
1405 {
1406 if ($this->formaction[$a_cmd] != "")
1407 {
1408 return $this->formaction[$a_cmd];
1409 }
1410 else
1411 {
1412 return $a_formaction;
1413 }
1414 }
1415
1424 protected function setFormAction($a_cmd, $a_formaction)
1425 {
1426 $this->formaction[$a_cmd] = $a_formaction;
1427 }
1428
1436 protected function getReturnLocation($a_cmd, $a_location ="")
1437 {
1438 if ($this->return_location[$a_cmd] != "")
1439 {
1440 return $this->return_location[$a_cmd];
1441 }
1442 else
1443 {
1444 return $a_location;
1445 }
1446 }
1447
1455 protected function setReturnLocation($a_cmd, $a_location)
1456 {
1457//echo "-".$a_cmd."-".$a_location."-";
1458 $this->return_location[$a_cmd] = $a_location;
1459 }
1460
1468 protected function getTargetFrame($a_cmd, $a_target_frame = "")
1469 {
1470 if ($this->target_frame[$a_cmd] != "")
1471 {
1472 return $this->target_frame[$a_cmd];
1473 }
1474 elseif (!empty($a_target_frame))
1475 {
1476 return "target=\"".$a_target_frame."\"";
1477 }
1478 else
1479 {
1480 return;
1481 }
1482 }
1483
1491 protected function setTargetFrame($a_cmd, $a_target_frame)
1492 {
1493 $this->target_frame[$a_cmd] = "target=\"".$a_target_frame."\"";
1494 }
1495
1496 // BEGIN Security: Hide objects which aren't accessible by the user.
1497 public function isVisible($a_ref_id,$a_type)
1498 {
1499 global $ilBench;
1500
1501 $ilBench->start("Explorer", "setOutput_isVisible");
1502 $visible = $this->checkPermissionBool("visible,read", "", "", $a_ref_id);
1503
1504 if ($visible && $a_type == 'crs') {
1505 global $tree;
1506 if($crs_id = $tree->checkForParentType($a_ref_id,'crs'))
1507 {
1508 if(!$this->checkPermissionBool("write", "", "", $crs_id))
1509 {
1510 // Show only activated courses
1511 $tmp_obj =& ilObjectFactory::getInstanceByRefId($crs_id,false);
1512
1513 if(!$tmp_obj->isActivated())
1514 {
1515 unset($tmp_obj);
1516 $visible = false;
1517 }
1518 if(($crs_id != $a_ref_id) and $tmp_obj->isArchived())
1519 {
1520 $visible = false;
1521 }
1522 }
1523 }
1524 }
1525
1526 $ilBench->stop("Explorer", "setOutput_isVisible");
1527
1528 return $visible;
1529 }
1530 // END Security: Hide objects which aren't accessible by the user.
1531
1537 public function viewObject()
1538 {
1539 global$tpl;
1540
1541 if (!$this->checkPermissionBool("visible,read"))
1542 {
1543 $this->ilias->raiseError($this->lng->txt("permission_denied"),$this->ilias->error_obj->MESSAGE);
1544 }
1545
1546 // BEGIN ChangeEvent: record read event.
1547 require_once('Services/Tracking/classes/class.ilChangeEvent.php');
1548 global $ilUser;
1550 $this->object->getType(),
1551 $this->object->getRefId(),
1552 $this->object->getId(), $ilUser->getId());
1553 // END ChangeEvent: record read event.
1554
1555 include_once("./Services/Repository/classes/class.ilAdminSubItemsTableGUI.php");
1556 if (!$this->call_by_reference)
1557 {
1558 $this->ctrl->setParameter($this, "obj_id", $this->obj_id);
1559 }
1560 $itab = new ilAdminSubItemsTableGUI($this, "view", $_GET["ref_id"]);
1561
1562 $tpl->setContent($itab->getHTML());
1563 }
1564
1572 public function deleteObject($a_error = false)
1573 {
1574 global $ilCtrl;
1575
1576 if ($_GET["item_ref_id"] != "")
1577 {
1578 $_POST["id"] = array($_GET["item_ref_id"]);
1579 }
1580
1581 if(is_array($_POST["id"]))
1582 {
1583 foreach($_POST["id"] as $idx => $id)
1584 {
1585 $_POST["id"][$idx] = (int)$id;
1586 }
1587 }
1588
1589 // SAVE POST VALUES (get rid of this
1590 ilSession::set("saved_post", $_POST["id"]);
1591
1592 include_once("./Services/Repository/classes/class.ilRepUtilGUI.php");
1593 $ru = new ilRepUtilGUI($this);
1594 if (!$ru->showDeleteConfirmation($_POST["id"], $a_error))
1595 {
1596 $ilCtrl->returnToParent($this);
1597 }
1598 }
1599
1605 protected function showPossibleSubObjects()
1606 {
1607 if ($this->sub_objects == "")
1608 {
1609 $d = $this->objDefinition->getCreatableSubObjects($this->object->getType(), ilObjectDefinition::MODE_REPOSITORY, $this->ref_id);
1610 }
1611 else
1612 {
1614 }
1615
1616 $import = false;
1617
1618 if (count($d) > 0)
1619 {
1620 foreach ($d as $row)
1621 {
1622 $count = 0;
1623
1624 if ($row["max"] > 0)
1625 {
1626 //how many elements are present?
1627 for ($i=0; $i<count($this->data["ctrl"]); $i++)
1628 {
1629 if ($this->data["ctrl"][$i]["type"] == $row["name"])
1630 {
1631 $count++;
1632 }
1633 }
1634 }
1635
1636 if ($row["max"] == "" || $count < $row["max"])
1637 {
1638 $subobj[] = $row["name"];
1639 }
1640 }
1641 }
1642
1643 if (is_array($subobj))
1644 {
1645
1646 //build form
1647 $opts = ilUtil::formSelect(12,"new_type",$subobj);
1648 $this->tpl->setCurrentBlock("add_object");
1649 $this->tpl->setVariable("SELECT_OBJTYPE", $opts);
1650 $this->tpl->setVariable("BTN_NAME", "create");
1651 $this->tpl->setVariable("TXT_ADD", $this->lng->txt("add"));
1652 $this->tpl->parseCurrentBlock();
1653 }
1654 }
1655
1664 final protected function getTemplateFile($a_cmd,$a_type = "")
1665 {
1666 mk(); die("ilObjectGUI::getTemplateFile() is deprecated.");
1667 }
1668
1677 protected function getTitlesByRefId($a_ref_ids)
1678 {
1679 foreach ($a_ref_ids as $id)
1680 {
1681 // GET OBJECT TITLE
1682 $tmp_obj =& $this->ilias->obj_factory->getInstanceByRefId($id);
1683 $title[] = $tmp_obj->getTitle();
1684 unset($tmp_obj);
1685 }
1686
1687 return $title ? $title : array();
1688 }
1689
1697 protected function getTabs(&$tabs_gui)
1698 {
1699 // please define your tabs here
1700
1701 }
1702
1703 // PROTECTED
1704 protected function __showButton($a_cmd,$a_text,$a_target = '')
1705 {
1706 global $ilToolbar;
1707
1708 $ilToolbar->addButton($a_text, $this->ctrl->getLinkTarget($this, $a_cmd), $a_target);
1709 }
1710
1711 protected function hitsperpageObject()
1712 {
1713 ilSession::set("tbl_limit", $_POST["hitsperpage"]);
1714 $_GET["limit"] = $_POST["hitsperpage"];
1715 }
1716
1717
1718 protected function &__initTableGUI()
1719 {
1720 include_once "./Services/Table/classes/class.ilTableGUI.php";
1721
1722 return new ilTableGUI(0,false);
1723 }
1724
1730 protected function __setTableGUIBasicData(&$tbl,&$result_set,$a_from = "")
1731 {
1732 switch ($a_from)
1733 {
1734 case "clipboardObject":
1735 $offset = $_GET["offset"];
1736 $order = $_GET["sort_by"];
1737 $direction = $_GET["sort_order"];
1738 $tbl->disable("footer");
1739 break;
1740
1741 default:
1742 $offset = $_GET["offset"];
1743 $order = $_GET["sort_by"];
1744 $direction = $_GET["sort_order"];
1745 break;
1746 }
1747
1748 $tbl->setOrderColumn($order);
1749 $tbl->setOrderDirection($direction);
1750 $tbl->setOffset($offset);
1751 $tbl->setLimit($_GET["limit"]);
1752 $tbl->setFooter("tblfooter",$this->lng->txt("previous"),$this->lng->txt("next"));
1753 $tbl->setData($result_set);
1754 }
1755
1765 protected function redirectToRefId($a_ref_id, $a_cmd = "")
1766 {
1767 $obj_type = ilObject::_lookupType($a_ref_id,true);
1768 $class_name = $this->objDefinition->getClassName($obj_type);
1769 $class = strtolower("ilObj".$class_name."GUI");
1770 $this->ctrl->setParameterByClass("ilrepositorygui", "ref_id", $a_ref_id);
1771 $this->ctrl->redirectByClass(array("ilrepositorygui", $class), $a_cmd);
1772 }
1773
1774 // Object Cloning
1784 protected function fillCloneTemplate($a_tpl_varname,$a_type)
1785 {
1786 include_once './Services/Object/classes/class.ilObjectCopyGUI.php';
1787 $cp = new ilObjectCopyGUI($this);
1788 $cp->setType($a_type);
1789 $cp->setTarget($_GET['ref_id']);
1790 if($a_tpl_varname)
1791 {
1792 $cp->showSourceSearch($a_tpl_varname);
1793 }
1794 else
1795 {
1796 return $cp->showSourceSearch(null);
1797 }
1798 }
1799
1806 public function cloneAllObject()
1807 {
1808 include_once('./Services/Link/classes/class.ilLink.php');
1809 include_once('Services/CopyWizard/classes/class.ilCopyWizardOptions.php');
1810
1811 global $ilErr,$ilUser;
1812
1813 $new_type = $_REQUEST['new_type'];
1814 if(!$this->checkPermissionBool("create", "", $new_type))
1815 {
1816 $ilErr->raiseError($this->lng->txt('permission_denied'));
1817 }
1818 if(!(int) $_REQUEST['clone_source'])
1819 {
1820 ilUtil::sendFailure($this->lng->txt('select_one'));
1821 $this->createObject();
1822 return false;
1823 }
1824 if(!$this->checkPermissionBool("write", "", $new_type, (int)$_REQUEST['clone_source']))
1825 {
1826 $ilErr->raiseError($this->lng->txt('permission_denied'));
1827 }
1828
1829 // Save wizard options
1831 $wizard_options = ilCopyWizardOptions::_getInstance($copy_id);
1832 $wizard_options->saveOwner($ilUser->getId());
1833 $wizard_options->saveRoot((int) $_REQUEST['clone_source']);
1834
1835 $options = $_POST['cp_options'] ? $_POST['cp_options'] : array();
1836 foreach($options as $source_id => $option)
1837 {
1838 $wizard_options->addEntry($source_id,$option);
1839 }
1840 $wizard_options->read();
1841
1842 $orig = ilObjectFactory::getInstanceByRefId((int) $_REQUEST['clone_source']);
1843 $new_obj = $orig->cloneObject((int) $_GET['ref_id'],$copy_id);
1844
1845 // Delete wizard options
1846 $wizard_options->deleteAll();
1847
1848 ilUtil::sendSuccess($this->lng->txt("object_duplicated"),true);
1849 ilUtil::redirect(ilLink::_getLink($new_obj->getRefId()));
1850 }
1851
1852
1856 protected function getCenterColumnHTML()
1857 {
1858 global $ilCtrl;
1859
1860 include_once("Services/Block/classes/class.ilColumnGUI.php");
1861
1862 $obj_id = ilObject::_lookupObjId($this->object->getRefId());
1863 $obj_type = ilObject::_lookupType($obj_id);
1864
1865 if ($ilCtrl->getNextClass() != "ilcolumngui")
1866 {
1867 // normal command processing
1868 return $this->getContent();
1869 }
1870 else
1871 {
1872 if (!$ilCtrl->isAsynch())
1873 {
1874 //if ($column_gui->getScreenMode() != IL_SCREEN_SIDE)
1876 {
1877 // right column wants center
1879 {
1880 $column_gui = new ilColumnGUI($obj_type, IL_COL_RIGHT);
1881 $this->setColumnSettings($column_gui);
1882 $this->html = $ilCtrl->forwardCommand($column_gui);
1883 }
1884 // left column wants center
1886 {
1887 $column_gui = new ilColumnGUI($obj_type, IL_COL_LEFT);
1888 $this->setColumnSettings($column_gui);
1889 $this->html = $ilCtrl->forwardCommand($column_gui);
1890 }
1891 }
1892 else
1893 {
1894 // normal command processing
1895 return $this->getContent();
1896 }
1897 }
1898 }
1899 }
1900
1904 protected function getRightColumnHTML()
1905 {
1906 global $ilUser, $lng, $ilCtrl;
1907
1908 $obj_id = ilObject::_lookupObjId($this->object->getRefId());
1909 $obj_type = ilObject::_lookupType($obj_id);
1910
1911 include_once("Services/Block/classes/class.ilColumnGUI.php");
1912 $column_gui = new ilColumnGUI($obj_type, IL_COL_RIGHT);
1913
1914 if ($column_gui->getScreenMode() == IL_SCREEN_FULL)
1915 {
1916 return "";
1917 }
1918
1919 $this->setColumnSettings($column_gui);
1920
1921 if ($ilCtrl->getNextClass() == "ilcolumngui" &&
1922 $column_gui->getCmdSide() == IL_COL_RIGHT &&
1923 $column_gui->getScreenMode() == IL_SCREEN_SIDE)
1924 {
1925 $html = $ilCtrl->forwardCommand($column_gui);
1926 }
1927 else
1928 {
1929 if (!$ilCtrl->isAsynch())
1930 {
1931 $html = $ilCtrl->getHTML($column_gui);
1932 }
1933 }
1934
1935 return $html;
1936 }
1937
1941 protected function setColumnSettings($column_gui)
1942 {
1943 $column_gui->setRepositoryMode(true);
1944 $column_gui->setEnableEdit(false);
1945 if ($this->checkPermissionBool("write"))
1946 {
1947 $column_gui->setEnableEdit(true);
1948 }
1949 }
1950
1960 protected function checkPermission($a_perm, $a_cmd = "", $a_type = "", $a_ref_id = null)
1961 {
1962 if (!$this->checkPermissionBool($a_perm, $a_cmd, $a_type, $a_ref_id))
1963 {
1964 if (!is_int(strpos($_SERVER["PHP_SELF"], "goto.php")))
1965 {
1966 // create: redirect to parent
1967 if($a_perm == "create")
1968 {
1969 if(!$a_ref_id)
1970 {
1971 $a_ref_id = $_GET["ref_id"];
1972 }
1973 $type = ilObject::_lookupType($a_ref_id, true);
1974 }
1975 else
1976 {
1977 // does this make sense?
1978 if (!is_object($this->object))
1979 {
1980 return;
1981 }
1982 if (!$a_ref_id)
1983 {
1984 $a_ref_id = $this->object->getRefId();
1985 }
1986 $type = $this->object->getType();
1987 }
1988
1989 ilSession::clear("il_rep_ref_id");
1990 ilUtil::sendFailure($this->lng->txt("permission_denied"), true);
1991 ilUtil::redirect("goto.php?target=".$type."_".$a_ref_id);
1992 }
1993 // we should never be here
1994 else
1995 {
1996 die("Permission Denied.");
1997 }
1998 }
1999 }
2000
2010 protected function checkPermissionBool($a_perm, $a_cmd = "", $a_type = "", $a_ref_id = null)
2011 {
2012 global $ilAccess;
2013
2014 if($a_perm == "create")
2015 {
2016 if(!$a_ref_id)
2017 {
2018 $a_ref_id = $_GET["ref_id"];
2019 }
2020 return $ilAccess->checkAccess($a_perm."_".$a_type, $a_cmd, $a_ref_id);
2021 }
2022 else
2023 {
2024 // does this make sense?
2025 if (!is_object($this->object))
2026 {
2027 return false;
2028 }
2029 if (!$a_ref_id)
2030 {
2031 $a_ref_id = $this->object->getRefId();
2032 }
2033 return $ilAccess->checkAccess($a_perm, $a_cmd, $a_ref_id);
2034 }
2035 }
2036
2043 static function _gotoRepositoryRoot($a_raise_error = false)
2044 {
2045 global $ilAccess, $ilErr;
2046
2047 if ($ilAccess->checkAccess("read", "", ROOT_FOLDER_ID))
2048 {
2049 $_GET["cmd"] = "frameset";
2050 $_GET["target"] = "";
2051 $_GET["ref_id"] = ROOT_FOLDER_ID;
2052 $_GET["baseClass"] = "ilRepositoryGUI";
2053 include("ilias.php");
2054 exit;
2055 }
2056
2057 if ($a_raise_error)
2058 {
2059 $ilErr->raiseError($lng->txt("msg_no_perm_read"), $ilErr->FATAL);
2060 }
2061 }
2062
2069 static function _gotoRepositoryNode($a_ref_id, $a_cmd = "frameset")
2070 {
2071 global $ilAccess, $ilErr;
2072
2073 $_GET["cmd"] = $a_cmd;
2074 $_GET["target"] = "";
2075 $_GET["ref_id"] = $a_ref_id;
2076 $_GET["baseClass"] = "ilRepositoryGUI";
2077 include("ilias.php");
2078 exit;
2079 }
2080
2084 protected function enableDragDropFileUpload()
2085 {
2086 include_once("./Services/FileUpload/classes/class.ilFileUploadGUI.php");
2088
2089 $this->tpl->enableDragDropFileUpload($this->ref_id);
2090 }
2091
2097 protected function handleAutoRating(ilObject $a_new_obj)
2098 {
2099 if(ilObject::hasAutoRating($a_new_obj->getType(), $a_new_obj->getRefId()) &&
2100 method_exists($a_new_obj, "setRating"))
2101 {
2102 $a_new_obj->setRating(true);
2103 $a_new_obj->update();
2104 }
2105 }
2106} // END class.ilObjectGUI (3.10: 2896 loc)
2107
2108?>
const PEAR_ERROR_CALLBACK
Definition: PEAR.php:35
$location
Definition: buildRTE.php:44
$_GET["client_id"]
$_SESSION["AccountId"]
const IL_SCREEN_SIDE
const IL_COL_RIGHT
const IL_SCREEN_FULL
const IL_COL_LEFT
Accordion user interface class.
TableGUI class for sub items listed in repository administration.
_recordWriteEvent($obj_id, $usr_id, $action, $parent_obj_id=null)
Records a write event.
_recordReadEvent($a_type, $a_ref_id, $obj_id, $usr_id, $isCatchupWriteEvents=true, $a_ext_rc=false, $a_ext_time=false)
Records a read event and catches up with write events.
Column user interface class.
static getScreenMode()
Get Screen Mode for current command.
static getCmdSide()
Get Column Side of Current Command.
Class ilCommonActionDispatcherGUI.
static _allocateCopyId()
Allocate a copy for further entries.
static _getInstance($a_copy_id)
Get instance of copy wizard options.
static _isActive()
Static getter.
static lookupTemplateId($a_ref_id)
Lookup template id @global ilDB $ilDB.
static getInstanceByObjectType($a_obj_type)
Get instance by obj type.
Base class for ILIAS Exception handling.
This class represents a file property in a property form.
static initFileUpload()
Initializes the file upload and loads the needed javascripts and styles.
static isUploadAllowed($a_ref_id, $a_type="")
Determines whether files can be uploaded to the object with the specified reference id.
Import class.
static commentsActivated($a_rep_obj_id, $a_obj_id, $a_obj_type)
Are comments activated for object?
GUI class for the workflow of copying objects.
getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
getInstanceByRefId($a_ref_id, $stop_on_error=true)
get an instance of an Ilias object by reference id
Class ilObjectGUI Basic methods of all Output classes.
addDidacticTemplateOptions(array &$a_options)
Add custom templates.
__showButton($a_cmd, $a_text, $a_target='')
confirmedDeleteObject()
confirmed deletion of object -> objects are moved to trash or deleted immediately,...
validateCustom(ilPropertyFormGUI $a_form)
Validate custom values (if not possible with checkInput())
cancelCreation()
cancel create action and go back to repository parent
ilObjectGUI($a_data, $a_id=0, $a_call_by_reference=true, $a_prepare_output=true)
Constructor @access public.
checkPermission($a_perm, $a_cmd="", $a_type="", $a_ref_id=null)
Check permission and redirect on error.
getDidacticTemplateVar($a_type)
Get didactic template setting from creation screen.
initImportForm($a_new_type)
Init object import form.
setColumnSettings($column_gui)
May be overwritten in subclasses.
afterImport(ilObject $a_new_object)
Post (successful) object import hook.
withReferences()
determines wether objects are referenced or not (got ref ids or not)
importFileObject($parent_id=null, $a_catch_errors=true)
Import.
handleAutoRating(ilObject $a_new_obj)
Activate rating automatically if parent container setting.
cancelObject($in_rep=false)
cancel action and go back to previous page @access public
putObjectInTree(ilObject $a_obj, $a_parent_node_id=null)
Add object to tree at given position.
initCreateForm($a_new_type)
Init object creation form.
getFormAction($a_cmd, $a_formaction="")
get form action for command (command is method name without "Object", e.g.
afterUpdate()
Post (successful) object update hook.
isVisible($a_ref_id, $a_type)
getRightColumnHTML()
Display right column.
static _gotoRepositoryNode($a_ref_id, $a_cmd="frameset")
Goto repository root.
omitLocator($a_omit=true)
addLocatorItems()
should be overwritten to add object specific items (repository items are preloaded)
setSubObjects($a_sub_objects="")
set possible subobjects for this object.
enableDragDropFileUpload()
Enables the file upload into this object by dropping files.
getTitlesByRefId($a_ref_ids)
get Titles of objects this method is used for error messages in methods cut/copy/paste
const COPY_WIZARD_NEEDS_PAGE
updateCustom(ilPropertyFormGUI $a_form)
Insert custom update form values into object.
getTemplateFile($a_cmd, $a_type="")
get a template blockfile format: tpl.
setAdminTabs()
set admin tabs @access public
viewObject()
list childs of current object
getReturnLocation($a_cmd, $a_location="")
get return location for command (command is method name without "Object", e.g.
getCenterColumnHTML()
Get center column.
editObject()
edit object
prepareOutput()
prepare output
static _gotoRepositoryRoot($a_raise_error=false)
Goto repository root.
fillCloneTemplate($a_tpl_varname, $a_type)
Fill object clone template This method can be called from any object GUI class that wants to offer ob...
getCreationMode()
get creation mode
checkPermissionBool($a_perm, $a_cmd="", $a_type="", $a_ref_id=null)
Check permission.
insertHeaderAction($a_list_gui)
Insert header action into main template.
getEditFormValues()
Get values for edit form.
afterSave(ilObject $a_new_object)
Post (successful) object creation hook.
saveObject()
save object
getAdminTabs(&$tabs_gui)
administration tabs show only permissions and trash folder
setTargetFrame($a_cmd, $a_target_frame)
set specific target frame for command
initDidacticTemplate(ilPropertyFormGUI $form)
Show didactic template types.
addHeaderAction()
Add header action menu.
__setTableGUIBasicData(&$tbl, &$result_set, $a_from="")
standard implementation for tables use 'from' variable use different initial setting of table
createObject()
create new object form
getCreationFormsHTML(array $a_forms)
Get HTML for creation forms (accordion)
setFormAction($a_cmd, $a_formaction)
set specific form action for command
getEditFormCustomValues(array &$a_values)
Add values to custom edit fields.
setTabs()
set admin tabs @access public
initEditForm()
Init object edit form.
setLocator()
set Locator
addAdminLocatorItems($a_do_not_add_object=false)
should be overwritten to add object specific items (repository items are preloaded)
getTabs(&$tabs_gui)
get tabs abstract method.
addExternalEditFormCustom(ilPropertyFormGUI $a_form)
setTitleAndDescription()
called by prepare output
cancelDeleteObject()
cancel deletion of object
getTargetFrame($a_cmd, $a_target_frame="")
get target frame for command (command is method name without "Object", e.g.
& executeCommand()
execute command
initEditCustomForm(ilPropertyFormGUI $a_form)
Add custom fields to update form.
setReturnLocation($a_cmd, $a_location)
set specific return location for command
showPossibleSubObjects()
show possible subobjects (pulldown menu)
updateObject()
updates object entry in object_data
redirectToRefId($a_ref_id, $a_cmd="")
redirects to (repository) view per ref id usually to a container and usually used at the end of a sav...
setActions($a_actions="")
set possible actions for objects in list.
redrawHeaderActionObject()
Ajax call: redraw action header only.
setCreationMode($a_mode=true)
if true, a creation screen is displayed the current $_GET[ref_id] don't belong to the current class!...
initCreationForms($a_new_type)
Init creation froms.
deleteObject($a_error=false)
Display deletion confirmation screen.
cloneAllObject()
Clone single (not container object) Method is overwritten in ilContainerGUI.
initHeaderAction($a_sub_type=null, $a_sub_id=null)
Add header action menu.
Class ilObject Basic functions for all objects.
getType()
get object type @access public
static hasAutoRating($a_type, $a_ref_id)
Check if auto rating is active for parent group/course.
static _lookupObjId($a_id)
createReference()
creates reference for object
const TITLE_LENGTH
max length of object title
update()
update object in db
static _lookupTitle($a_id)
lookup object title
setPermissions($a_parent_ref)
set permissions of object
getRefId()
get reference id @access public
static _getIcon($a_obj_id="", $a_size="big", $a_type="", $a_offline=false)
Get icon for repository item.
getId()
get object id @access public
putInTree($a_parent_ref)
maybe this method should be in tree object!?
static _lookupType($a_id, $a_reference=false)
lookup object type
This class represents a property form user interface.
addItem($a_item)
Add Item (Property, SectionHeader).
This class represents a property in a property form.
This class represents an option in a radio group.
static add($a_action, $a_ref_id, array $a_diff, $a_source_ref_id=false)
static gatherFaPa($a_ref_id, array $a_role_ids, $a_add_action=false)
const CREATE_OBJECT
Repository GUI Utilities.
static set($a_var, $a_val)
Set a value.
static clear($a_var)
Unset a value.
static get($a_var)
Get a value.
Class ilTableGUI.
special template class to simplify handling of ITX/PEAR
This class represents a text area property in a property form.
This class represents a text property in a property form.
static sortArray($array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
static sendSuccess($a_info="", $a_keep=false)
Send Success Message to Screen.
static redirect($a_script)
http redirect to other script
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static formSelect($selected, $varname, $options, $multiple=false, $direct_text=false, $size="0", $style_class="", $attribs="", $disabled=false)
Builds a select form field with options and shows the selected option first.
static infoPanel($a_keep=true)
$_POST['username']
Definition: cron.php:12
$html
Definition: example_001.php:87
$lg
Definition: example_018.php:62
$tbl
Definition: example_048.php:81
$params
Definition: example_049.php:96
global $ilBench
Definition: ilias.php:18
global $ilCtrl
Definition: ilias.php:18
Interface for gui classes (e.g ilLuceneSearchGUI) that offer add/remove to/from desktop.
exit
Definition: login.php:54
redirection script todo: (a better solution should control the processing via a xml file)
global $ilSetting
Definition: privfeed.php:40
$cmd
Definition: sahs_server.php:35
if($_REQUEST['ilias_path']) define('ILIAS_HTTP_PATH' $_REQUEST['ilias_path']
Definition: index.php:7
if(!is_array($argv)) $options
if((!isset($_SERVER['DOCUMENT_ROOT'])) OR(empty($_SERVER['DOCUMENT_ROOT']))) $_SERVER['DOCUMENT_ROOT']
global $ilUser
Definition: imgupload.php:15