ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
All Data Structures Namespaces Files Functions Variables Modules Pages
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  $conf = new ilConfirmationGUI();
164  $conf->setFormAction($ilCtrl->getFormAction($this));
165  $conf->setHeaderText($lng->txt('dcl_confirm_delete_field'));
166 
167  $conf->addItem('field_id', (int) $this->field_obj->getId(), $this->field_obj->getTitle());
168 
169  $conf->setConfirm($lng->txt('delete'), 'delete');
170  $conf->setCancel($lng->txt('cancel'), 'cancelDelete');
171 
172  $tpl->setContent($conf->getHTML());
173  }
174 
175 
179  public function cancelDelete()
180  {
181  global $DIC;
182  $ilCtrl = $DIC['ilCtrl'];
183 
184  $ilCtrl->redirectByClass("ildclfieldlistgui", "listFields");
185  }
186 
187 
188  /*
189  * delete
190  */
191  public function delete()
192  {
193  global $DIC;
194  $ilCtrl = $DIC['ilCtrl'];
195 
196  $this->table->deleteField($this->field_obj->getId());
197  $ilCtrl->redirectByClass("ildclfieldlistgui", "listFields");
198  }
199 
200 
201  /*
202  * cancel
203  */
204  public function cancel()
205  {
206  global $DIC;
207  $ilCtrl = $DIC['ilCtrl'];
208  $ilCtrl->redirectByClass("ildclfieldlistgui", "listFields");
209  }
210 
211 
217  public function initForm($a_mode = "create")
218  {
219  global $DIC;
220  $ilCtrl = $DIC['ilCtrl'];
221  $lng = $DIC['lng'];
222 
223  $this->form = new ilPropertyFormGUI();
224 
225  if ($a_mode == "edit") {
226  $this->form->setTitle($lng->txt('dcl_edit_field'));
227  $hidden_prop = new ilHiddenInputGUI("field_id");
228  $this->form->addItem($hidden_prop);
229 
230  $this->form->setFormAction($ilCtrl->getFormAction($this), "update");
231 
232  $this->form->addCommandButton('update', $lng->txt('dcl_update_field'));
233  } else {
234  $this->form->setTitle($lng->txt('dcl_new_field'));
235  $hidden_prop = new ilHiddenInputGUI("table_id");
236  $hidden_prop->setValue($this->field_obj->getTableId());
237  $this->form->addItem($hidden_prop);
238 
239  $this->form->setFormAction($ilCtrl->getFormAction($this), "save");
240 
241  $this->form->addCommandButton('save', $lng->txt('dcl_create_field'));
242  }
243  $this->form->addCommandButton('cancel', $lng->txt('cancel'));
244 
245  $text_prop = new ilTextInputGUI($lng->txt("title"), "title");
246  $text_prop->setRequired(true);
247  $text_prop->setInfo(sprintf($lng->txt('fieldtitle_allow_chars'), ilDclBaseFieldModel::_getTitleInvalidChars(false)));
248  $text_prop->setValidationRegexp(ilDclBaseFieldModel::_getTitleInvalidChars(true));
249  $this->form->addItem($text_prop);
250 
251  // Description
252  $text_prop = new ilTextAreaInputGUI($lng->txt("dcl_field_description"), "description");
253  $this->form->addItem($text_prop);
254 
255  $edit_datatype = new ilRadioGroupInputGUI($lng->txt('dcl_datatype'), 'datatype');
256 
257  foreach (ilDclDatatype::getAllDatatype() as $datatype) {
258  $model = new ilDclBaseFieldModel();
259  $model->setDatatypeId($datatype->getId());
260 
261  if ($a_mode == 'edit' && $datatype->getId() == $this->field_obj->getDatatypeId()) {
262  $model = $this->field_obj;
263  }
264 
265  $field_representation = ilDclFieldFactory::getFieldRepresentationInstance($model);
266  $field_representation->addFieldCreationForm($edit_datatype, $this->getDataCollectionObject(), $a_mode);
267  }
268  $edit_datatype->setRequired(true);
269 
270  //you can't change type but we still need it in POST
271  if ($a_mode == "edit") {
272  $edit_datatype->setDisabled(true);
273  }
274  $this->form->addItem($edit_datatype);
275 
276  // Required
277  $cb = new ilCheckboxInputGUI($lng->txt("dcl_field_required"), "required");
278  $this->form->addItem($cb);
279 
280  //Unique
281  $cb = new ilCheckboxInputGUI($lng->txt("dcl_unique"), "unique");
282  $cb->setInfo($lng->txt('dcl_unique_desc'));
283  $this->form->addItem($cb);
284  }
285 
286 
292  public function save($a_mode = "create")
293  {
294  global $DIC;
295  $ilCtrl = $DIC['ilCtrl'];
296  $lng = $DIC['lng'];
297  $tpl = $DIC['tpl'];
298 
299  $this->initForm($a_mode == "update" ? "edit" : "create");
300 
301  if ($this->checkInput($a_mode)) {
302 
303  // check if confirmation is needed and if so, fetch and render confirmationGUI
304  if (($a_mode == "update") && !($this->form->getInput('confirmed')) && $this->field_obj->isConfirmationRequired($this->form)) {
305  $ilConfirmationGUI = $this->field_obj->getConfirmationGUI($this->form);
306  $tpl->setContent($ilConfirmationGUI->getHTML());
307 
308  return;
309  }
310 
311  $title = $this->form->getInput("title");
312  if ($a_mode != "create" && $title != $this->field_obj->getTitle()) {
313  ilUtil::sendInfo($lng->txt("dcl_field_title_change_warning"), true);
314  }
315 
316  $this->field_obj->setTitle($title);
317  $this->field_obj->setDescription($this->form->getInput("description"));
318  $this->field_obj->setDatatypeId($this->form->getInput("datatype"));
319  $this->field_obj->setRequired($this->form->getInput("required"));
320  $this->field_obj->setUnique($this->form->getInput("unique"));
321 
322  if ($a_mode == "update") {
323  $this->field_obj->doUpdate();
324  } else {
325  $this->field_obj->setOrder($this->table->getNewFieldOrder());
326  $this->field_obj->doCreate();
327  }
328 
329  // Get possible properties and save them
330  $this->field_obj->storePropertiesFromForm($this->form);
331 
332  $ilCtrl->setParameter($this, "field_id", $this->field_obj->getId());
333 
334  if ($a_mode == "update") {
335  ilUtil::sendSuccess($lng->txt("dcl_msg_field_modified"), true);
336  } else {
337  $this->table->addField($this->field_obj);
338  $this->table->buildOrderFields();
339  ilUtil::sendSuccess($lng->txt("msg_field_created"), false);
340  }
341  $ilCtrl->redirectByClass(strtolower("ilDclFieldListGUI"), "listFields");
342  } else {
343  $this->form->setValuesByPost();
344  $tpl->setContent($this->form->getHTML());
345  }
346  }
347 
348 
356  protected function checkInput($a_mode)
357  {
358  global $DIC;
359  $lng = $DIC['lng'];
360  $return = $this->form->checkInput();
361 
362  // load specific model for input checking
363  $datatype_id = $this->form->getInput('datatype');
364  if ($datatype_id != null && is_numeric($datatype_id)) {
365  $base_model = new ilDclBaseFieldModel();
366  $base_model->setDatatypeId($datatype_id);
367  $field_validation_class = ilDclFieldFactory::getFieldModelInstanceByClass($base_model);
368 
369  if (!$field_validation_class->checkFieldCreationInput($this->form)) {
370  $return = false;
371  }
372  }
373 
374  // Don't allow multiple fields with the same title in this table
375  if ($a_mode == 'create') {
376  if ($title = $this->form->getInput('title')) {
377  if (ilDclTable::_hasFieldByTitle($title, $this->table_id)) {
378  $inputObj = $this->form->getItemByPostVar('title');
379  $inputObj->setAlert($lng->txt("dcl_field_title_unique"));
380  $return = false;
381  }
382  }
383  }
384 
385  if (!$return) {
386  ilUtil::sendFailure($lng->txt("form_input_not_valid"));
387  }
388 
389  return $return;
390  }
391 
392 
396  protected function checkAccess()
397  {
398  if ($field_id = $this->field_obj->getId()) {
399  return ilObjDataCollectionAccess::hasAccessToField($this->getDataCollectionObject()->ref_id, $this->table_id, $field_id);
400  } else {
401  return ilObjDataCollectionAccess::hasAccessToFields($this->getDataCollectionObject()->ref_id, $this->table_id);
402  }
403  }
404 
405 
409  public function getDataCollectionObject()
410  {
411  return $this->parent_obj->getDataCollectionObject();
412  }
413 }
Class ilDclBaseFieldModel.
if(isset($_FILES['img_file']['size']) && $_FILES['img_file']['size'] > 0) $tpl
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.
static _hasFieldByTitle($title, $obj_id)
Checks if a table has a field with the given title.
$_GET["client_id"]
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
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.
$DIC
Definition: xapitoken.php:46
static hasAccessToField($ref_id, $table_id, $field_id)
$_POST["username"]
Confirmation screen class.