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 
66  var $object;
67  var $ref_id;
68  var $obj_id;
69  var $maxcount; // contains number of child objects
70  var $formaction; // special formation (array "cmd" => "formaction")
71  var $return_location; // special return location (array "cmd" => "location")
72  var $target_frame; // special target frame (array "cmd" => "location")
73  protected $tmp_import_dir; // directory used during import
74 
76  var $actions;
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 ?>
redrawHeaderActionObject()
Ajax call: redraw action header only.
static lookupTemplateId($a_ref_id)
Lookup template id ilDB $ilDB.
setSubObjects($a_sub_objects="")
set possible subobjects for this object.
static initFileUpload()
Initializes the file upload and loads the needed javascripts and styles.
static sendSuccess($a_info="", $a_keep=false)
Send Success Message to Screen.
This class represents an option in a radio group.
static _getIcon($a_obj_id="", $a_size="big", $a_type="", $a_offline=false)
Get icon for repository item.
$lg
Definition: example_018.php:62
addAdminLocatorItems($a_do_not_add_object=false)
should be overwritten to add object specific items (repository items are preloaded) ...
static getCmdSide()
Get Column Side of Current Command.
exit
Definition: login.php:54
Base class for ILIAS Exception handling.
if((!isset($_SERVER['DOCUMENT_ROOT'])) OR(empty($_SERVER['DOCUMENT_ROOT']))) $_SERVER['DOCUMENT_ROOT']
$_POST['username']
Definition: cron.php:12
setTargetFrame($a_cmd, $a_target_frame)
set specific target frame for command
const PEAR_ERROR_CALLBACK
Definition: PEAR.php:35
getTitlesByRefId($a_ref_ids)
get Titles of objects this method is used for error messages in methods cut/copy/paste ...
getInstanceByRefId($a_ref_id, $stop_on_error=true)
get an instance of an Ilias object by reference id
enableDragDropFileUpload()
Enables the file upload into this object by dropping files.
$_SESSION["AccountId"]
TableGUI class for sub items listed in repository administration.
cancelCreation()
cancel create action and go back to repository parent
This class represents a property form user interface.
GUI class for the workflow of copying objects.
initCreationForms($a_new_type)
Init creation froms.
const TITLE_LENGTH
max length of object title
$_GET["client_id"]
$tbl
Definition: example_048.php:81
$location
Definition: buildRTE.php:44
This class represents a file property in a property form.
__setTableGUIBasicData(&$tbl, &$result_set, $a_from="")
standard implementation for tables use &#39;from&#39; variable use different initial setting of table ...
Class ilObject Basic functions for all objects.
initHeaderAction($a_sub_type=null, $a_sub_id=null)
Add header action menu.
__showButton($a_cmd, $a_text, $a_target='')
setReturnLocation($a_cmd, $a_location)
set specific return location for command
$cmd
Definition: sahs_server.php:35
static get($a_var)
Get a value.
static _gotoRepositoryRoot($a_raise_error=false)
Goto repository root.
setFormAction($a_cmd, $a_formaction)
set specific form action for command
static set($a_var, $a_val)
Set a value.
Import class.
static _isActive()
Static getter.
cancelObject($in_rep=false)
cancel action and go back to previous page public
ilObjectGUI($a_data, $a_id=0, $a_call_by_reference=true, $a_prepare_output=true)
Constructor public.
static _lookupTitle($a_id)
lookup object title
setActions($a_actions="")
set possible actions for objects in list.
setCreationMode($a_mode=true)
if true, a creation screen is displayed the current $_GET[ref_id] don&#39;t belong to the current class! ...
const IL_COL_RIGHT
confirmedDeleteObject()
confirmed deletion of object -> objects are moved to trash or deleted immediately, if trash is disabled
addItem($a_item)
Add Item (Property, SectionHeader).
viewObject()
list childs of current object
createObject()
create new object form
Class ilTableGUI.
afterSave(ilObject $a_new_object)
Post (successful) object creation hook.
cloneAllObject()
Clone single (not container object) Method is overwritten in ilContainerGUI.
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...
static sortArray($array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
static gatherFaPa($a_ref_id, array $a_role_ids, $a_add_action=false)
addExternalEditFormCustom(ilPropertyFormGUI $a_form)
cancelDeleteObject()
cancel deletion of object
global $ilCtrl
Definition: ilias.php:18
static hasAutoRating($a_type, $a_ref_id)
Check if auto rating is active for parent group/course.
getCenterColumnHTML()
Get center column.
updateCustom(ilPropertyFormGUI $a_form)
Insert custom update form values into object.
createReference()
creates reference for object
initImportForm($a_new_type)
Init object import form.
const CREATE_OBJECT
getCreationFormsHTML(array $a_forms)
Get HTML for creation forms (accordion)
isVisible($a_ref_id, $a_type)
const IL_SCREEN_FULL
This class represents a property in a property form.
static _getInstance($a_copy_id)
Get instance of copy wizard options.
if(!is_array($argv)) $options
& executeCommand()
execute command
getId()
get object id public
getTargetFrame($a_cmd, $a_target_frame="")
get target frame for command (command is method name without "Object", e.g.
static _gotoRepositoryNode($a_ref_id, $a_cmd="frameset")
Goto repository root.
Column user interface class.
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.
saveObject()
save object
getTabs(&$tabs_gui)
get tabs abstract method.
initDidacticTemplate(ilPropertyFormGUI $form)
Show didactic template types.
Class ilObjectGUI Basic methods of all Output classes.
static _lookupObjId($a_id)
getAdminTabs(&$tabs_gui)
administration tabs show only permissions and trash folder
special template class to simplify handling of ITX/PEAR
omitLocator($a_omit=true)
getTemplateFile($a_cmd, $a_type="")
get a template blockfile format: tpl.
Repository GUI Utilities.
setSize($a_size)
Set Size.
This class represents a text property in a property form.
static infoPanel($a_keep=true)
redirection script todo: (a better solution should control the processing via a xml file) ...
importFileObject($parent_id=null, $a_catch_errors=true)
Import.
static _allocateCopyId()
Allocate a copy for further entries.
editObject()
edit object
static clear($a_var)
Unset a value.
getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
initCreateForm($a_new_type)
Init object creation form.
setTitleAndDescription()
called by prepare output
putInTree($a_parent_ref)
maybe this method should be in tree object!?
getType()
get object type public
initEditForm()
Init object edit form.
prepareOutput()
prepare output
static _lookupType($a_id, $a_reference=false)
lookup object type
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
const COPY_WIZARD_NEEDS_PAGE
getEditFormValues()
Get values for edit form.
getEditFormCustomValues(array &$a_values)
Add values to custom edit fields.
_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.
addDidacticTemplateOptions(array &$a_options)
Add custom templates.
validateCustom(ilPropertyFormGUI $a_form)
Validate custom values (if not possible with checkInput())
withReferences()
determines wether objects are referenced or not (got ref ids or not)
static commentsActivated($a_rep_obj_id, $a_obj_id, $a_obj_type)
Are comments activated for object?
static getScreenMode()
Get Screen Mode for current command.
getRightColumnHTML()
Display right column.
static getInstanceByObjectType($a_obj_type)
Get instance by obj type.
setColumnSettings($column_gui)
May be overwritten in subclasses.
handleAutoRating(ilObject $a_new_obj)
Activate rating automatically if parent container setting.
global $ilUser
Definition: imgupload.php:15
Interface for gui classes (e.g ilLuceneSearchGUI) that offer add/remove to/from desktop.
static isUploadAllowed($a_ref_id, $a_type="")
Determines whether files can be uploaded to the object with the specified reference id...
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...
showPossibleSubObjects()
show possible subobjects (pulldown menu)
global $ilSetting
Definition: privfeed.php:40
This class represents a text area property in a property form.
static add($a_action, $a_ref_id, array $a_diff, $a_source_ref_id=false)
global $ilBench
Definition: ilias.php:18
insertHeaderAction($a_list_gui)
Insert header action into main template.
getCreationMode()
get creation mode
getRefId()
get reference id public
updateObject()
updates object entry in object_data
putObjectInTree(ilObject $a_obj, $a_parent_node_id=null)
Add object to tree at given position.
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.
deleteObject($a_error=false)
Display deletion confirmation screen.
if($_REQUEST['ilias_path']) define('ILIAS_HTTP_PATH' $_REQUEST['ilias_path']
Definition: index.php:7
setTabs()
set admin tabs public
update()
update object in db
afterUpdate()
Post (successful) object update hook.
static redirect($a_script)
http redirect to other script
Accordion user interface class.
const IL_SCREEN_SIDE
getFormAction($a_cmd, $a_formaction="")
get form action for command (command is method name without "Object", e.g.
addHeaderAction()
Add header action menu.
setPermissions($a_parent_ref)
set permissions of object
checkPermissionBool($a_perm, $a_cmd="", $a_type="", $a_ref_id=null)
Check permission.
setSuffixes($a_suffixes)
Set Accepted Suffixes.
getReturnLocation($a_cmd, $a_location="")
get return location for command (command is method name without "Object", e.g.
$html
Definition: example_001.php:87
$params
Definition: example_049.php:96
initEditCustomForm(ilPropertyFormGUI $a_form)
Add custom fields to update form.
Class ilCommonActionDispatcherGUI.
setSubObject($a_sub_obj_type, $a_sub_obj_id)
Set sub object attributes.
_recordWriteEvent($obj_id, $usr_id, $action, $parent_obj_id=null)
Records a write event.
setAdminTabs()
set admin tabs public
addLocatorItems()
should be overwritten to add object specific items (repository items are preloaded) ...
setLocator()
set Locator
afterImport(ilObject $a_new_object)
Post (successful) object import hook.
const IL_COL_LEFT