ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilDclFieldEditGUI.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22{
23 protected int $obj_id;
24 protected int $table_id;
25
27 protected ilDclTable $table;
32 protected ilHelpGUI $help;
35 protected int $field_id;
36
40 public function __construct(ilDclTableListGUI $a_parent_obj)
41 {
42 global $DIC;
43 $this->main_tpl = $DIC->ui()->mainTemplate();
44 $ilCtrl = $DIC['ilCtrl'];
45
46 $this->obj_id = $a_parent_obj->getObjId();
47 $this->parent_obj = $a_parent_obj;
48 $this->help = $DIC->help();
49 $this->http = $DIC->http();
50 $this->refinery = $DIC->refinery();
51 $this->lng = $DIC->language();
52
53 $this->table_id = $this->http->wrapper()->query()->retrieve('table_id', $this->refinery->kindlyTo()->int());
54
55 $hasFieldId = $this->http->wrapper()->query()->has('field_id');
56 if ($hasFieldId) {
57 $this->field_id = $this->http->wrapper()->query()->retrieve('field_id', $this->refinery->kindlyTo()->int());
58 } else {
59 $this->field_id = 0;
60 }
61
62 if ($this->field_id) {
63 $this->field_obj = ilDclCache::getFieldCache($this->field_id);
64 } else {
65 $datatype = null;
66
67 $has_datatype = $this->http->wrapper()->post()->has('datatype');
68
69 if ($has_datatype) {
70 $datatype_value = $this->http->wrapper()->post()->retrieve(
71 'datatype',
72 $this->refinery->kindlyTo()->int()
73 );
74 if (in_array(
75 $datatype_value,
77 )) {
78 $datatype = $datatype_value;
79 }
80 }
81 $this->field_obj = ilDclFieldFactory::getFieldModelInstance($this->field_id, $datatype);
82 if (!$this->table_id) {
83 $ilCtrl->redirectByClass("ilDclTableListGUI", "listFields");
84 }
85 $this->field_obj->setTableId($this->table_id);
86 $ilCtrl->saveParameter($this, "table_id");
87 }
88
89 $this->table = ilDclCache::getTableCache($this->table_id);
90 }
91
95 public function executeCommand(): void
96 {
97 global $DIC;
98 $ilCtrl = $DIC['ilCtrl'];
99 $ilCtrl->saveParameter($this, 'field_id');
100
101 $cmd = $ilCtrl->getCmd();
102
103 if (!$this->checkAccess()) {
104 $this->permissionDenied();
105 return;
106 }
107
108 switch ($cmd) {
109 case "update":
110 $this->save("update");
111 break;
112 default:
113 $this->$cmd();
114 break;
115 }
116 }
117
121 public function create(): void
122 {
123 $this->help->setSubScreenId('create');
124
125 $this->initForm();
126 $this->main_tpl->setContent($this->form->getHTML());
127 }
128
132 public function edit(): void
133 {
134 $this->help->setSubScreenId('edit');
135
136 $this->initForm("edit");
137 $this->field_obj->fillPropertiesForm($this->form);
138 $this->main_tpl->setContent($this->form->getHTML());
139 }
140
141 /*
142 * permissionDenied
143 */
144 public function permissionDenied(): void
145 {
146 global $DIC;
147 $tpl = $DIC['tpl'];
148 $tpl->setContent("Permission denied");
149 }
150
154 public function confirmDelete(): void
155 {
156 global $DIC;
157 $ilCtrl = $DIC['ilCtrl'];
158 $lng = $DIC['lng'];
159 $tpl = $DIC['tpl'];
160
161 $conf = new ilConfirmationGUI();
162 $conf->setFormAction($ilCtrl->getFormAction($this));
163 $conf->setHeaderText($lng->txt('dcl_confirm_delete_field'));
164
165 $conf->addItem('field_id', $this->field_obj->getId(), $this->field_obj->getTitle());
166
167 $conf->setConfirm($lng->txt('delete'), 'delete');
168 $conf->setCancel($lng->txt('cancel'), 'cancelDelete');
169
170 $tpl->setContent($conf->getHTML());
171 }
172
176 public function cancelDelete(): void
177 {
178 global $DIC;
179 $ilCtrl = $DIC['ilCtrl'];
180
181 $ilCtrl->redirectByClass("ildclfieldlistgui", "listFields");
182 }
183
184 /*
185 * delete
186 */
187 public function delete(): void
188 {
189 global $DIC;
190 $ilCtrl = $DIC['ilCtrl'];
191
192 $this->table->deleteField((int) $this->field_obj->getId());
193 $ilCtrl->redirectByClass("ildclfieldlistgui", "listFields");
194 }
195
196 /*
197 * cancel
198 */
199 public function cancel(): void
200 {
201 global $DIC;
202 $ilCtrl = $DIC['ilCtrl'];
203 $ilCtrl->redirectByClass("ildclfieldlistgui", "listFields");
204 }
205
210 public function initForm(string $a_mode = "create"): void
211 {
212 global $DIC;
213 $ilCtrl = $DIC['ilCtrl'];
214 $lng = $DIC['lng'];
215
216 $this->form = new ilPropertyFormGUI();
217
218 if ($a_mode == "edit") {
219 $this->form->setTitle($lng->txt('dcl_edit_field'));
220 $hidden_prop = new ilHiddenInputGUI("field_id");
221 $this->form->addItem($hidden_prop);
222
223 $this->form->setFormAction($ilCtrl->getFormAction($this));
224
225 $this->form->addCommandButton('update', $lng->txt('dcl_update_field'));
226 } else {
227 $this->form->setTitle($lng->txt('dcl_new_field'));
228 $hidden_prop = new ilHiddenInputGUI("table_id");
229 $hidden_prop->setValue((string) $this->field_obj->getTableId());
230 $this->form->addItem($hidden_prop);
231
232 $this->form->setFormAction($ilCtrl->getFormAction($this));
233
234 $this->form->addCommandButton('save', $lng->txt('dcl_create_field'));
235 }
236 $this->form->addCommandButton('cancel', $lng->txt('cancel'));
237
238 $text_prop = new ilTextInputGUI($lng->txt("title"), "title");
239 $text_prop->setRequired(true);
240 $text_prop->setInfo(sprintf(
241 $lng->txt('fieldtitle_allow_chars'),
243 ));
244 $text_prop->setValidationRegexp(ilDclBaseFieldModel::_getTitleInvalidChars());
245 $this->form->addItem($text_prop);
246
247 // Description
248 $text_prop = new ilTextAreaInputGUI($lng->txt("dcl_field_description"), "description");
249 $text_prop->setInfo($lng->txt('dcl_field_description_desc'));
250 $this->form->addItem($text_prop);
251
252 $edit_datatype = new ilRadioGroupInputGUI($lng->txt('dcl_datatype'), 'datatype');
253
254 if ($a_mode === 'edit') {
255 $field_representation = ilDclFieldFactory::getFieldRepresentationInstance($this->field_obj);
256 $field_representation->addFieldCreationForm($edit_datatype, $this->getDataCollectionObject(), $a_mode);
257 $edit_datatype->setDisabled(true);
258 } else {
259 foreach (ilDclDatatype::getAllDatatype() as $datatype) {
260 $model = new ilDclBaseFieldModel();
261 $model->setDatatypeId($datatype->getId());
263 $field_representation = ilDclFieldFactory::getFieldRepresentationInstance($model);
264 $field_representation->addFieldCreationForm($edit_datatype, $this->getDataCollectionObject());
265 }
266 }
267 $edit_datatype->setRequired(true);
268 $this->form->addItem($edit_datatype);
269
270 }
271
276 public function save(string $a_mode = "create"): void
277 {
278 global $DIC;
279 $ilCtrl = $DIC['ilCtrl'];
280 $lng = $DIC['lng'];
281 $tpl = $DIC['tpl'];
282
283 $this->initForm($a_mode == "update" ? "edit" : "create");
284
285 if ($this->checkInput($a_mode)) {
286
287 // check if confirmation is needed and if so, fetch and render confirmationGUI
288 if (($a_mode == "update") && !($this->form->getInput('confirmed')) && $this->field_obj->isConfirmationRequired($this->form)) {
289 $ilConfirmationGUI = $this->field_obj->getConfirmationGUI($this->form);
290 $tpl->setContent($ilConfirmationGUI->getHTML());
291
292 return;
293 }
294
295 $title = $this->form->getInput("title");
296 if ($a_mode != "create" && $title != $this->field_obj->getTitle()) {
297 $this->main_tpl->setOnScreenMessage('info', $lng->txt("dcl_field_title_change_warning"), true);
298 }
299
300 $this->field_obj->setTitle($title);
301 $this->field_obj->setDescription($this->form->getInput("description"));
302 $this->field_obj->setDatatypeId((int) $this->form->getInput("datatype"));
303
304 if ($a_mode == "update") {
305 $this->field_obj->doUpdate();
306 } else {
307 $this->field_obj->setOrder($this->table->getNewFieldOrder());
308 $this->field_obj->doCreate();
309 }
310
311 // Get possible properties and save them
312 $this->field_obj->storePropertiesFromForm($this->form);
313
314 $ilCtrl->setParameter($this, "field_id", $this->field_obj->getId());
315
316 if ($a_mode == "update") {
317 $this->main_tpl->setOnScreenMessage('success', $lng->txt("dcl_msg_field_modified"), true);
318 } else {
319 $this->table->addField($this->field_obj);
320 $this->table->buildOrderFields();
321 $this->main_tpl->setOnScreenMessage('success', $lng->txt("msg_field_created"));
322 }
323 $ilCtrl->redirectByClass(strtolower("ilDclFieldListGUI"), "listFields");
324 } else {
325 $this->form->setValuesByPost();
326 $tpl->setContent($this->form->getHTML());
327 }
328 }
329
335 protected function checkInput(string $a_mode): bool
336 {
337 global $DIC;
338 $lng = $DIC['lng'];
339 $return = $this->form->checkInput();
340
341 if (!$this->field_obj->checkFieldCreationInput($this->form)) {
342 $return = false;
343 }
344
345 // Don't allow multiple fields with the same title in this table
346 if ($a_mode == 'create') {
347 if ($title = $this->form->getInput('title')) {
348 if (ilDclTable::_hasFieldByTitle($title, $this->table_id)) {
349 $inputObj = $this->form->getItemByPostVar('title');
350 $inputObj->setAlert($lng->txt("dcl_field_title_unique"));
351 $return = false;
352 }
353 }
354 }
355
356 if (!$return) {
357 $this->main_tpl->setOnScreenMessage('failure', $lng->txt("form_input_not_valid"));
358 }
359
360 return $return;
361 }
362
366 protected function checkAccess(): bool
367 {
368 if ($field_id = $this->field_obj->getId()) {
370 $this->getDataCollectionObject()->getRefId(),
371 $this->table_id,
372 (int) $field_id
373 );
374 } else {
376 $this->getDataCollectionObject()->getRefId(),
377 $this->table_id
378 );
379 }
380 }
381
386 {
387 return $this->parent_obj->getDataCollectionObject();
388 }
389}
Builds data types.
Definition: Factory.php:36
Class Services.
Definition: Services.php:38
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _getTitleInvalidChars(bool $a_as_regex=true)
All valid chars for filed titles.
static getTableCache(?int $table_id=null)
static getFieldCache(int $field_id=0)
static getAllDatatype(bool $force=false)
Get all possible Datatypes.
save(string $a_mode="create")
save Field
edit()
create field edit form
create()
create field add form
__construct(ilDclTableListGUI $a_parent_obj)
Constructor.
ilDclTableListGUI $parent_obj
ilDclBaseFieldModel $field_obj
executeCommand()
execute command
ilGlobalTemplateInterface $main_tpl
ILIAS HTTP Services $http
ILIAS Refinery Factory $refinery
initForm(string $a_mode="create")
initEditCustomForm
checkInput(string $a_mode)
Check input of form.
static getFieldRepresentationInstance(ilDclBaseFieldModel $field)
static getFieldModelInstanceByClass(ilDclBaseFieldModel $field, ?int $field_id=null)
Gets the correct instance of a fieldModel class Checks if a field is a plugin a replaces the fieldMod...
static getFieldModelInstance(int $field_id, ?int $datatype=null)
Get FieldModel from field-id and datatype.
@ilCtrl_Calls ilDclTableListGUI: ilDclFieldListGUI, ilDclFieldEditGUI, ilDclTableViewGUI,...
static _hasFieldByTitle(string $title, int $obj_id)
Checks if a table has a field with the given title.
Help GUI class.
This class represents a hidden form property in a property form.
language handling
txt(string $a_topic, string $a_default_lang_fallback_mod="")
gets the text for a given topic if the topic is not in the list, the topic itself with "-" will be re...
static hasAccessToFields(int $ref_id, int $table_id)
static hasAccessToField(int $ref_id, int $table_id, int $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 http()
Fetches the global http state from ILIAS.
form( $class_path, string $cmd, string $submit_caption="")
global $DIC
Definition: shib_login.php:26