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 }
Class ilDclBaseFieldModel.
static _getTitleInvalidChars($a_as_regex=true)
All valid chars for filed titles.
This class represents a property form user interface.
static getAllDatatype()
Get all possible Datatypes.
global $DIC
Definition: saml.php:7
static _hasFieldByTitle($title, $obj_id)
Checks if a table has a field with the given title.
$_GET["client_id"]
$tpl
Definition: ilias.php:10
static getFieldCache($field_id=0)
static getFieldRepresentationInstance(ilDclBaseFieldModel $field)
Returns FieldRepresentation from BaseFieldModel.
edit()
create field edit form
This class represents a checkbox property in a property form.
Class ilDclTableListGUI.
create()
create field add form
static getTableCache($table_id=0)
save($a_mode="create")
save Field
global $ilCtrl
Definition: ilias.php:18
initForm($a_mode="create")
initEditCustomForm
setInfo($a_info)
Set Information Text.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
This class represents a hidden form property in a property form.
__construct(ilDclTableListGUI $a_parent_obj)
Constructor.
executeCommand()
execute command
This class represents a property in a property form.
static getFieldModelInstance($field_id, $datatype=null)
Get FieldModel from field-id and datatype.
static hasAccessToFields($ref_id, $table_id)
$lng
This class represents a text property in a property form.
checkInput($a_mode)
Check input of form.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
Class ilDclFieldEditGUI.
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...
This class represents a text area property in a property form.
static hasAccessToField($ref_id, $table_id, $field_id)
$_POST["username"]
setRequired($a_required)
Set Required.
Confirmation screen class.