ILIAS  release_7 Revision v7.30-3-g800a261c036
class.ilContainerReferenceGUI.php
Go to the documentation of this file.
1<?php
2/*
3 +-----------------------------------------------------------------------------+
4 | ILIAS open source |
5 +-----------------------------------------------------------------------------+
6 | Copyright (c) 1998-2006 ILIAS open source, University of Cologne |
7 | |
8 | This program is free software; you can redistribute it and/or |
9 | modify it under the terms of the GNU General Public License |
10 | as published by the Free Software Foundation; either version 2 |
11 | of the License, or (at your option) any later version. |
12 | |
13 | This program is distributed in the hope that it will be useful, |
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | GNU General Public License for more details. |
17 | |
18 | You should have received a copy of the GNU General Public License |
19 | along with this program; if not, write to the Free Software |
20 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21 +-----------------------------------------------------------------------------+
22*/
23
24include_once('./Services/Object/classes/class.ilObjectGUI.php');
25
36{
38
39 const MODE_CREATE = 1;
40 const MODE_EDIT = 2;
41
45 protected $tabs;
46
50 protected $locator;
51
55 protected $user;
56
60 protected $access;
61
65 protected $error;
66
70 protected $settings;
71
72
73 protected $existing_objects = array();
74
78 protected $target_type;
82 protected $reference_type;
83
87 protected $form;
88
93 public function __construct($a_data, $a_id, $a_call_by_reference = true, $a_prepare_output = true)
94 {
95 global $DIC;
96
97 $this->lng = $DIC->language();
98 $this->ctrl = $DIC->ctrl();
99 $this->tabs = $DIC->tabs();
100 $this->locator = $DIC["ilLocator"];
101 $this->user = $DIC->user();
102 $this->access = $DIC->access();
103 $this->error = $DIC["ilErr"];
104 $this->settings = $DIC->settings();
105 $lng = $DIC->language();
106 parent::__construct($a_data, $a_id, $a_call_by_reference, $a_prepare_output);
107
108 $lng->loadLanguageModule('objref');
109 }
110
119 public function executeCommand()
120 {
121 $ilCtrl = $this->ctrl;
122 $ilTabs = $this->tabs;
123
124
125 if (isset($_GET['creation_mode']) && $_GET['creation_mode'] == self::MODE_CREATE) {
126 $this->setCreationMode(true);
127 }
128
129 $next_class = $ilCtrl->getNextClass($this);
130 $cmd = $ilCtrl->getCmd();
131
132 $this->prepareOutput();
133
134 switch ($next_class) {
135 case "ilpropertyformgui":
136 $form = $this->initForm($this->creation_mode ? self::MODE_CREATE : self::MODE_EDIT);
137 $this->ctrl->forwardCommand($form);
138 break;
139
140 case 'ilpermissiongui':
141 $ilTabs->setTabActive('perm_settings');
142 include_once("Services/AccessControl/classes/class.ilPermissionGUI.php");
143 $ilCtrl->forwardCommand(new ilPermissionGUI($this));
144 break;
145
146 default:
147 if (!$cmd || $cmd == 'view') {
148 $cmd = "edit";
149 }
150 $cmd .= "Object";
151 $this->$cmd();
152 break;
153 }
154 return true;
155 }
159 protected function addLocatorItems()
160 {
161 $ilLocator = $this->locator;
162
163 if ($this->object instanceof ilObject) {
164 $ilLocator->addItem($this->object->getPresentationTitle(), $this->ctrl->getLinkTarget($this));
165 }
166 }
167
172 public function redirectObject()
173 {
174 $ilCtrl = $this->ctrl;
175
176 $ilCtrl->setParameterByClass("ilrepositorygui", "ref_id", $this->object->getTargetRefId());
177 $ilCtrl->redirectByClass("ilrepositorygui", "");
178 }
179
185 public function createObject()
186 {
188 $ilAccess = $this->access;
191
192 $new_type = $_REQUEST["new_type"];
193 $this->ctrl->saveParameter($this, "crtptrefid");
194 // use forced callback after object creation
195 $this->ctrl->saveParameter($this, "crtcb");
196 if (!$ilAccess->checkAccess("create_" . $this->getReferenceType(), '', $_GET["ref_id"], $new_type)) {
197 $ilErr->raiseError($this->lng->txt("permission_denied"), $ilErr->MESSAGE);
198 }
199 $form = $this->initForm(self::MODE_CREATE);
200 $this->tpl->setContent($form->getHTML());
201 }
202
203
211 public function saveObject()
212 {
213 $ilAccess = $this->access;
214
215 if (!(int) $_REQUEST['target_id']) {
216 ilUtil::sendFailure($this->lng->txt('select_one'));
217 $this->createObject();
218 return false;
219 }
220 if (!$ilAccess->checkAccess('visible', '', (int) $_REQUEST['target_id'])) {
221 ilUtil::sendFailure($this->lng->txt('permission_denied'));
222 $this->createObject();
223 return false;
224 }
225
226 parent::saveObject();
227 }
228
229 protected function initCreateForm($a_new_type)
230 {
231 return $this->initForm(self::MODE_CREATE);
232 }
233
237 protected function afterSave(ilObject $a_new_object)
238 {
239 $target_obj_id = ilObject::_lookupObjId((int) $this->form->getInput('target_id'));
240 $a_new_object->setTargetId($target_obj_id);
241
242 $a_new_object->setTitleType($this->form->getInput('title_type'));
243 if ($this->form->getInput('title_type') == ilContainerReference::TITLE_TYPE_CUSTOM) {
244 $a_new_object->setTitle($this->form->getInput('title'));
245 } elseif ($this->form->getInput('title_type') == ilContainerReference::TITLE_TYPE_REUSE) {
246 $a_new_object->setTitle(ilObject::_lookupTitle($a_new_object->getTargetId()));
247 }
248
249 $a_new_object->update();
250
251 ilUtil::sendSuccess($this->lng->txt("object_added"), true);
252 $this->ctrl->setParameter($this, 'ref_id', $a_new_object->getRefId());
253 $this->ctrl->setParameter($this, 'creation_mode', 0);
254 $this->ctrl->redirect($this, 'firstEdit');
255 }
256
260 protected function firstEditObject()
261 {
262 $this->editObject();
263 }
264
265 public function editReferenceObject()
266 {
267 $this->editObject();
268 }
269
275 public function editObject(ilPropertyFormGUI $form = null)
276 {
277 global $DIC;
278
279 $main_tpl = $DIC->ui()->mainTemplate();
280
281 $ilTabs = $this->tabs;
282
283 $ilTabs->setTabActive('settings');
284
285 if (!$form instanceof ilPropertyFormGUI) {
286 $form = $this->initForm();
287 }
288 $main_tpl->setContent($form->getHTML());
289 }
290
296 protected function initForm($a_mode = self::MODE_EDIT)
297 {
298 include_once './Services/Form/classes/class.ilPropertyFormGUI.php';
299 include_once './Services/ContainerReference/classes/class.ilContainerReference.php';
300 $form = new ilPropertyFormGUI();
301
302 if ($a_mode == self::MODE_CREATE) {
303 $form->setTitle($this->lng->txt($this->getReferenceType() . '_new'));
304
305 $this->ctrl->setParameter($this, 'creation_mode', $a_mode);
306 $this->ctrl->setParameter($this, 'new_type', $_REQUEST['new_type']);
307 } else {
308 $form->setTitle($this->lng->txt('edit'));
309 }
310
311 $form->setFormAction($this->ctrl->getFormAction($this));
312 if ($a_mode == self::MODE_CREATE) {
313 $form->addCommandButton('save', $this->lng->txt('create'));
314 $form->addCommandButton('cancel', $this->lng->txt('cancel'));
315 } else {
316 $form->addCommandButton('update', $this->lng->txt('save'));
317 }
318
319 // title type
320 $ttype = new ilRadioGroupInputGUI($this->lng->txt('title'), 'title_type');
321 if ($a_mode == self::MODE_EDIT) {
322 $ttype->setValue($this->object->getTitleType());
323 } else {
325 }
326
327 $reuse = new ilRadioOption($this->lng->txt('objref_reuse_title'));
329 $ttype->addOption($reuse);
330
331 $custom = new ilRadioOption($this->lng->txt('objref_custom_title'));
333
334 // title
335 $title = new ilTextInputGUI($this->lng->txt('title'), 'title');
336 $title->setSize(min(40, ilObject::TITLE_LENGTH));
337 $title->setMaxLength(ilObject::TITLE_LENGTH);
338 $title->setRequired(true);
339
340 if ($a_mode == self::MODE_EDIT) {
341 $title->setValue($this->object->getTitle());
342 }
343
344 $custom->addSubItem($title);
345 $ttype->addOption($custom);
346 $form->addItem($ttype);
347
348 include_once("./Services/Form/classes/class.ilRepositorySelector2InputGUI.php");
349 $repo = new ilRepositorySelector2InputGUI($this->lng->txt("objref_edit_ref"), "target_id");
350 //$repo->setParent($this);
351 $repo->setRequired(true);
352 $repo->getExplorerGUI()->setSelectableTypes(array($this->getTargetType()));
353 $repo->getExplorerGUI()->setTypeWhiteList(
354 array_merge(
355 array($this->getTargetType()),
356 array("root", "cat", "grp", "fold", "crs")
357 )
358 );
359 $repo->setInfo($this->lng->txt($this->getReferenceType() . '_edit_info'));
360
361 if ($a_mode == self::MODE_EDIT) {
362 $repo->getExplorerGUI()->setPathOpen($this->object->getTargetRefId());
363 $repo->setValue($this->object->getTargetRefId());
364 }
365
366 $form->addItem($repo);
367 $this->form = $form;
368 return $form;
369 }
370
371
377 {
378 global $DIC;
379
380 $ok = true;
381 $access = $DIC->access();
382
383 // check access
384 if (
385 !$access->checkAccess('visible', '', (int) $form->getInput('target_id'))
386 ) {
387 $ok = false;
388 $form->getItemByPostVar('target_id')->setAlert($this->lng->txt('permission_denied'));
389 }
390 // check target type
391 if (ilObject::_lookupType($form->getInput('target_id'), true) != $this->target_type) {
392 $ok = false;
393 $form->getItemByPostVar('target_id')->setAlert(
394 $this->lng->txt('objref_failure_target_type') .
395 ': ' .
396 $this->lng->txt('obj_' . $this->target_type)
397 );
398 }
399
400 $this->object->setTargetId(
401 \ilObject::_lookupObjId((int) $form->getInput('target_id'))
402 );
403
404 // set title after target id, so that the title can be reused immediately
405 $this->object->setTitleType($form->getInput('title_type'));
406 if ($form->getInput('title_type') == ilContainerReference::TITLE_TYPE_CUSTOM) {
407 $this->object->setTitle($form->getInput('title'));
408 } elseif ($form->getInput('title_type') == ilContainerReference::TITLE_TYPE_REUSE) {
409 $this->object->setTitle(ilObject::_lookupTitle($this->object->getTargetId()));
410 }
411
412 return $ok;
413 }
414
415
419 public function updateObject()
420 {
421 $this->checkPermission('write');
422
423 $ilAccess = $this->access;
424 $form = $this->initForm();
425 if (
426 $form->checkInput() &&
427 $this->loadPropertiesFromSettingsForm($form)
428 ) {
429 $this->object->update();
430 ilUtil::sendSuccess($this->lng->txt('settings_saved'), true);
431 $this->ctrl->redirect($this, 'edit');
432 }
433 $form->setValuesByPost();
434 ilUtil::sendFailure($this->lng->txt('err_check_input'));
435 $this->editObject($form);
436 return true;
437 }
438
445 public function getTargetType()
446 {
447 return $this->target_type;
448 }
449
456 public function getReferenceType()
457 {
459 }
460
467 public function getTabs()
468 {
469 global $DIC;
470
471 $ilHelp = $DIC['ilHelp'];
472 $ilHelp->setScreenIdComponent($this->getReferenceType());
473
474 if ($this->access->checkAccess('write', '', $this->object->getRefId())) {
475 $this->tabs_gui->addTarget(
476 "settings",
477 $this->ctrl->getLinkTarget($this, "edit"),
478 array(),
479 ""
480 );
481 }
482 if ($this->access->checkAccess('edit_permission', '', $this->object->getRefId())) {
483 $this->tabs_gui->addTarget(
484 "perm_settings",
485 $this->ctrl->getLinkTargetByClass(array(get_class($this),'ilpermissiongui'), "perm"),
486 array("perm","info","owner"),
487 'ilpermissiongui'
488 );
489 }
490 }
491
495 public function getId()
496 {
497 return $this->obj_id;
498 }
499}
user()
Definition: user.php:4
$_GET["client_id"]
An exception for terminatinating execution or to throw for unit testing.
error($a_errmsg)
set error message @access public
firstEditObject()
show edit screen without info message
initForm($a_mode=self::MODE_EDIT)
Init title form.
editObject(ilPropertyFormGUI $form=null)
edit title
__construct($a_data, $a_id, $a_call_by_reference=true, $a_prepare_output=true)
Constructor.
loadPropertiesFromSettingsForm(\ilPropertyFormGUI $form)
initCreateForm($a_new_type)
Init object creation form.
Class ilObjectGUI Basic methods of all Output classes.
checkPermission($a_perm, $a_cmd="", $a_type="", $a_ref_id=null)
Check permission and redirect on error.
prepareOutput($a_show_subobjects=true)
prepare output
editObject()
edit object
setCreationMode($a_mode=true)
if true, a creation screen is displayed the current $_GET[ref_id] don't belong to the current class!...
Class ilObject Basic functions for all objects.
static _lookupObjId($a_id)
const TITLE_LENGTH
max length of object title
update()
update object in db
static _lookupTitle($a_id)
lookup object title
setTitle($a_title)
set object title
getRefId()
get reference id @access public
static _lookupType($a_id, $a_reference=false)
lookup object type
New PermissionGUI (extends from old ilPermission2GUI) RBAC related output.
This class represents a property form user interface.
getInput($a_post_var, $ensureValidation=true)
Returns the value of a HTTP-POST variable, identified by the passed id.
This class represents a property in a property form.
This class represents an option in a radio group.
This class represents a text property in a property form.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
global $DIC
Definition: goto.php:24
$ilUser
Definition: imgupload.php:18
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
global $ilSetting
Definition: privfeed.php:17
settings()
Definition: settings.php:2