ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilDclFieldEditGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
18{
19
23 protected $obj_id;
27 protected $table_id;
31 protected $parent_obj;
35 protected $table;
39 protected $form;
43 protected $field_obj;
44
45
53 public function __construct(ilDclTableListGUI $a_parent_obj)
54 {
55 global $DIC;
56 $ilCtrl = $DIC['ilCtrl'];
57
58 $this->obj_id = $a_parent_obj->obj_id;
59 $this->parent_obj = $a_parent_obj;
60
61 $this->table_id = $_GET["table_id"];
62 $this->field_id = $_GET['field_id'];
63
64 if ($this->field_id) {
65 $this->field_obj = ilDclCache::getFieldCache($this->field_id);
66 } else {
67 $datatype = null;
68 if (isset($_POST['datatype']) && in_array($_POST['datatype'], array_keys(ilDclDatatype::getAllDatatype()))) {
69 $datatype = $_POST['datatype'];
70 }
71 $this->field_obj = ilDclFieldFactory::getFieldModelInstance($this->field_id, $datatype);
72 if (!$this->table_id) {
73 $ilCtrl->redirectByClass("ilDclTableListGUI", "listFields");
74 }
75 $this->field_obj->setTableId($this->table_id);
76 $ilCtrl->saveParameter($this, "table_id");
77 }
78
79 $this->table = ilDclCache::getTableCache($this->table_id);
80 }
81
82
86 public function executeCommand()
87 {
88 global $DIC;
89 $ilCtrl = $DIC['ilCtrl'];
90 $ilCtrl->saveParameter($this, 'field_id');
91
92 $cmd = $ilCtrl->getCmd();
93
94 if (!$this->checkAccess()) {
95 $this->permissionDenied();
96
97 return;
98 }
99
100 switch ($cmd) {
101 case "update":
102 $this->save("update");
103 break;
104 default:
105 $this->$cmd();
106 break;
107 }
108
109 return true;
110 }
111
112
116 public function create()
117 {
118 global $DIC;
119 $tpl = $DIC['tpl'];
120
121 $this->initForm();
122 $tpl->setContent($this->form->getHTML());
123 }
124
125
129 public function edit()
130 {
131 global $DIC;
132 $tpl = $DIC['tpl'];
133
134 $this->initForm("edit");
135
136 $this->field_obj->fillPropertiesForm($this->form);
137
138 $tpl->setContent($this->form->getHTML());
139 }
140
141
142 /*
143 * permissionDenied
144 */
145 public function permissionDenied()
146 {
147 global $DIC;
148 $tpl = $DIC['tpl'];
149 $tpl->setContent("Permission denied");
150 }
151
152
156 public function confirmDelete()
157 {
158 global $DIC;
159 $ilCtrl = $DIC['ilCtrl'];
160 $lng = $DIC['lng'];
161 $tpl = $DIC['tpl'];
162
163 include_once './Services/Utilities/classes/class.ilConfirmationGUI.php';
164 $conf = new ilConfirmationGUI();
165 $conf->setFormAction($ilCtrl->getFormAction($this));
166 $conf->setHeaderText($lng->txt('dcl_confirm_delete_field'));
167
168 $conf->addItem('field_id', (int) $this->field_obj->getId(), $this->field_obj->getTitle());
169
170 $conf->setConfirm($lng->txt('delete'), 'delete');
171 $conf->setCancel($lng->txt('cancel'), 'cancelDelete');
172
173 $tpl->setContent($conf->getHTML());
174 }
175
176
180 public function cancelDelete()
181 {
182 global $DIC;
183 $ilCtrl = $DIC['ilCtrl'];
184
185 $ilCtrl->redirectByClass("ildclfieldlistgui", "listFields");
186 }
187
188
189 /*
190 * delete
191 */
192 public function delete()
193 {
194 global $DIC;
195 $ilCtrl = $DIC['ilCtrl'];
196
197 $this->table->deleteField($this->field_obj->getId());
198 $ilCtrl->redirectByClass("ildclfieldlistgui", "listFields");
199 }
200
201
202 /*
203 * cancel
204 */
205 public function cancel()
206 {
207 global $DIC;
208 $ilCtrl = $DIC['ilCtrl'];
209 $ilCtrl->redirectByClass("ildclfieldlistgui", "listFields");
210 }
211
212
218 public function initForm($a_mode = "create")
219 {
220 global $DIC;
221 $ilCtrl = $DIC['ilCtrl'];
222 $lng = $DIC['lng'];
223
224 include_once("./Services/Form/classes/class.ilPropertyFormGUI.php");
225 $this->form = new ilPropertyFormGUI();
226
227 if ($a_mode == "edit") {
228 $this->form->setTitle($lng->txt('dcl_edit_field'));
229 $hidden_prop = new ilHiddenInputGUI("field_id");
230 $this->form->addItem($hidden_prop);
231
232 $this->form->setFormAction($ilCtrl->getFormAction($this), "update");
233
234 $this->form->addCommandButton('update', $lng->txt('dcl_update_field'));
235 } else {
236 $this->form->setTitle($lng->txt('dcl_new_field'));
237 $hidden_prop = new ilHiddenInputGUI("table_id");
238 $hidden_prop->setValue($this->field_obj->getTableId());
239 $this->form->addItem($hidden_prop);
240
241 $this->form->setFormAction($ilCtrl->getFormAction($this), "save");
242
243 $this->form->addCommandButton('save', $lng->txt('dcl_create_field'));
244 }
245 $this->form->addCommandButton('cancel', $lng->txt('cancel'));
246
247 $text_prop = new ilTextInputGUI($lng->txt("title"), "title");
248 $text_prop->setRequired(true);
249 $text_prop->setInfo(sprintf($lng->txt('fieldtitle_allow_chars'), ilDclBaseFieldModel::_getTitleInvalidChars(false)));
250 $text_prop->setValidationRegexp(ilDclBaseFieldModel::_getTitleInvalidChars(true));
251 $this->form->addItem($text_prop);
252
253 // Description
254 $text_prop = new ilTextAreaInputGUI($lng->txt("dcl_field_description"), "description");
255 $this->form->addItem($text_prop);
256
257 $edit_datatype = new ilRadioGroupInputGUI($lng->txt('dcl_datatype'), 'datatype');
258
259 foreach (ilDclDatatype::getAllDatatype() as $datatype) {
260 $model = new ilDclBaseFieldModel();
261 $model->setDatatypeId($datatype->getId());
262
263 if ($a_mode == 'edit' && $datatype->getId() == $this->field_obj->getDatatypeId()) {
264 $model = $this->field_obj;
265 }
266
267 $field_representation = ilDclFieldFactory::getFieldRepresentationInstance($model);
268 $field_representation->addFieldCreationForm($edit_datatype, $this->getDataCollectionObject(), $a_mode);
269 }
270 $edit_datatype->setRequired(true);
271
272 //you can't change type but we still need it in POST
273 if ($a_mode == "edit") {
274 $edit_datatype->setDisabled(true);
275 }
276 $this->form->addItem($edit_datatype);
277
278 // Required
279 $cb = new ilCheckboxInputGUI($lng->txt("dcl_field_required"), "required");
280 $this->form->addItem($cb);
281
282 //Unique
283 $cb = new ilCheckboxInputGUI($lng->txt("dcl_unique"), "unique");
284 $cb->setInfo($lng->txt('dcl_unique_desc'));
285 $this->form->addItem($cb);
286 }
287
288
294 public function save($a_mode = "create")
295 {
296 global $DIC;
297 $ilCtrl = $DIC['ilCtrl'];
298 $lng = $DIC['lng'];
299 $tpl = $DIC['tpl'];
300
301 $this->initForm($a_mode == "update" ? "edit" : "create");
302
303 if ($this->checkInput($a_mode)) {
304
305 // check if confirmation is needed and if so, fetch and render confirmationGUI
306 if (($a_mode == "update") && !($this->form->getInput('confirmed')) && $this->field_obj->isConfirmationRequired($this->form)) {
307 $ilConfirmationGUI = $this->field_obj->getConfirmationGUI($this->form);
308 $tpl->setContent($ilConfirmationGUI->getHTML());
309
310 return;
311 }
312
313 $title = $this->form->getInput("title");
314 if ($a_mode != "create" && $title != $this->field_obj->getTitle()) {
315 ilUtil::sendInfo($lng->txt("dcl_field_title_change_warning"), true);
316 }
317
318 $this->field_obj->setTitle($title);
319 $this->field_obj->setDescription($this->form->getInput("description"));
320 $this->field_obj->setDatatypeId($this->form->getInput("datatype"));
321 $this->field_obj->setRequired($this->form->getInput("required"));
322 $this->field_obj->setUnique($this->form->getInput("unique"));
323
324 if ($a_mode == "update") {
325 $this->field_obj->doUpdate();
326 } else {
327 $this->field_obj->setOrder($this->table->getNewFieldOrder());
328 $this->field_obj->doCreate();
329 }
330
331 // Get possible properties and save them
332 $this->field_obj->storePropertiesFromForm($this->form);
333
334 $ilCtrl->setParameter($this, "field_id", $this->field_obj->getId());
335
336 if ($a_mode == "update") {
337 ilUtil::sendSuccess($lng->txt("dcl_msg_field_modified"), true);
338 } else {
339 $this->table->addField($this->field_obj);
340 $this->table->buildOrderFields();
341 ilUtil::sendSuccess($lng->txt("msg_field_created"), false);
342 }
343 $ilCtrl->redirectByClass(strtolower("ilDclFieldListGUI"), "listFields");
344 } else {
345 $this->form->setValuesByPost();
346 $tpl->setContent($this->form->getHTML());
347 }
348 }
349
350
358 protected function checkInput($a_mode)
359 {
360 global $DIC;
361 $lng = $DIC['lng'];
362 $return = $this->form->checkInput();
363
364 // load specific model for input checking
365 $datatype_id = $this->form->getInput('datatype');
366 if ($datatype_id != null && is_numeric($datatype_id)) {
367 $base_model = new ilDclBaseFieldModel();
368 $base_model->setDatatypeId($datatype_id);
369 $field_validation_class = ilDclFieldFactory::getFieldModelInstanceByClass($base_model);
370
371 if (!$field_validation_class->checkFieldCreationInput($this->form)) {
372 $return = false;
373 }
374 }
375
376 // Don't allow multiple fields with the same title in this table
377 if ($a_mode == 'create') {
378 if ($title = $this->form->getInput('title')) {
379 if (ilDclTable::_hasFieldByTitle($title, $this->table_id)) {
380 $inputObj = $this->form->getItemByPostVar('title');
381 $inputObj->setAlert($lng->txt("dcl_field_title_unique"));
382 $return = false;
383 }
384 }
385 }
386
387 if (!$return) {
388 ilUtil::sendFailure($lng->txt("form_input_not_valid"));
389 }
390
391 return $return;
392 }
393
394
398 protected function checkAccess()
399 {
400 if ($field_id = $this->field_obj->getId()) {
401 return ilObjDataCollectionAccess::hasAccessToField($this->getDataCollectionObject()->ref_id, $this->table_id, $field_id);
402 } else {
403 return ilObjDataCollectionAccess::hasAccessToFields($this->getDataCollectionObject()->ref_id, $this->table_id);
404 }
405 }
406
410 public function getDataCollectionObject()
411 {
412 return $this->parent_obj->getDataCollectionObject();
413 }
414}
$tpl
Definition: ilias.php:10
$_GET["client_id"]
$_POST["username"]
An exception for terminatinating execution or to throw for unit testing.
This class represents a checkbox property in a property form.
Confirmation screen class.
Class ilDclBaseFieldModel.
static _getTitleInvalidChars($a_as_regex=true)
All valid chars for filed titles.
static getTableCache($table_id=0)
static getFieldCache($field_id=0)
static getAllDatatype()
Get all possible Datatypes.
Class ilDclFieldEditGUI.
save($a_mode="create")
save Field
edit()
create field edit form
create()
create field add form
__construct(ilDclTableListGUI $a_parent_obj)
Constructor.
initForm($a_mode="create")
initEditCustomForm
executeCommand()
execute command
checkInput($a_mode)
Check input of form.
static getFieldModelInstance($field_id, $datatype=null)
Get FieldModel from field-id and datatype.
static getFieldRepresentationInstance(ilDclBaseFieldModel $field)
Returns FieldRepresentation from BaseFieldModel.
static getFieldModelInstanceByClass(ilDclBaseFieldModel $field, $field_id=null)
Gets the correct instance of a fieldModel class Checks if a field is a plugin a replaces the fieldMod...
Class ilDclTableListGUI.
static _hasFieldByTitle($title, $obj_id)
Checks if a table has a field with the given title.
This class represents a hidden form property in a property form.
static hasAccessToFields($ref_id, $table_id)
static hasAccessToField($ref_id, $table_id, $field_id)
This class represents a property form user interface.
This class represents a property in a property form.
This class represents a text area property in a property form.
This class represents a text property in a property form.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
global $ilCtrl
Definition: ilias.php:18
global $DIC
Definition: saml.php:7
$lng