ILIAS  release_5-0 Revision 5.0.0-1144-gc4397b1f870
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
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?>
const PEAR_ERROR_CALLBACK
Definition: PEAR.php:35
$location
Definition: buildRTE.php:44
$_GET["client_id"]
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.
Error Handling & global info handling uses PEAR error class.
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)
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.
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
importFileObject($parent_id=null)
Import.
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
< a tabindex="-1" style="border-style: none;" href="#" title="Refresh Image" onclick="document.getElementById('siimage').src = './securimage_show.php?sid=' + Math.random(); this.blur(); return false">< img src="./images/refresh.png" alt="Reload Image" height="32" width="32" onclick="this.blur()" align="bottom" border="0"/></a >< br/>< strong > Enter Code *if($_SERVER['REQUEST_METHOD']=='POST' &&@ $_POST['do']=='contact') $_SESSION['ctform']['success']
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
global $ilUser
Definition: imgupload.php:15