ILIAS  release_4-3 Revision
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilCustomUserFieldsGUI.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 include_once './Services/User/classes/class.ilUserDefinedFields.php';
5 
17 {
18  protected $confirm_change; // [bool]
19  protected $field_id; // [int]
20  protected $field_definition; // [array]
21 
22  function __construct()
23  {
24  global $lng, $ilCtrl;
25 
26  $lng->loadLanguageModule("user");
27  $lng->loadLanguageModule("administration");
28 
29  $this->field_id = $_REQUEST["field_id"];
30  $ilCtrl->saveParameter($this, "field_id", $this->field_id);
31 
32  if($this->field_id)
33  {
34  $user_field_definitions = ilUserDefinedFields::_getInstance();
35  $this->field_definition = $user_field_definitions->getDefinition($this->field_id);
36  }
37  }
38 
39  function &executeCommand()
40  {
41  global $ilCtrl;
42 
43  $next_class = $ilCtrl->getNextClass($this);
44  $cmd = $ilCtrl->getCmd();
45 
46  switch($next_class)
47  {
48  default:
49  if(!$cmd)
50  {
51  $cmd = "listUserDefinedFields";
52  }
53  $this->$cmd();
54  break;
55  }
56  return true;
57  }
58 
63  {
64  global $lng, $tpl, $ilToolbar, $ilCtrl;
65 
66  $ilToolbar->addButton($lng->txt("add_user_defined_field"),
67  $ilCtrl->getLinkTarget($this, "addField"));
68 
69  include_once("./Services/User/classes/class.ilCustomUserFieldSettingsTableGUI.php");
70  $tab = new ilCustomUserFieldSettingsTableGUI($this, "listUserDefinedFields");
71  if($this->confirm_change)
72  {
73  $tab->setConfirmChange();
74  }
75  $tpl->setContent($tab->getHTML());
76  }
77 
83  function addField($a_form = null)
84  {
85  global $tpl;
86 
87  if(!$a_form)
88  {
89  $a_form = $this->initForm();
90  }
91 
92  $tpl->setContent($a_form->getHTML());
93  }
94 
100  function getAccessOptions()
101  {
102  global $lng;
103 
104  $opts = array();
105  $opts["visible"] = $lng->txt("user_visible_in_profile");
106  $opts["visib_reg"] = $lng->txt("visible_registration");
107  $opts["visib_lua"] = $lng->txt("usr_settings_visib_lua");
108  $opts["course_export"] = $lng->txt("course_export");
109  $opts["group_export"] = $lng->txt("group_export");
110  $opts["changeable"] = $lng->txt("changeable");
111  $opts["changeable_lua"] = $lng->txt("usr_settings_changeable_lua");
112  $opts["required"] = $lng->txt("required_field");
113  $opts["export"] = $lng->txt("export");
114  $opts["searchable"] = $lng->txt("header_searchable");
115  $opts["certificate"] = $lng->txt("certificate");
116  return $opts;
117  }
118 
125  function initForm($a_mode = "create")
126  {
127  global $ilCtrl, $lng;
128 
129  include_once("Services/Membership/classes/class.ilMemberAgreement.php");
131  {
132  $lng->loadLanguageModule("ps");
133  ilUtil::sendInfo($lng->txt("ps_warning_modify"));
134  }
135 
136  include_once("./Services/Form/classes/class.ilPropertyFormGUI.php");
137  $form = new ilPropertyFormGUI();
138  $form->setFormAction($ilCtrl->getFormAction($this));
139 
140  $name = new ilTextInputGUI($lng->txt("field_name"), "name");
141  $name->setRequired(true);
142  $form->addItem($name);
143 
144  // type
145  $radg = new ilRadioGroupInputGUI($lng->txt("field_type"), "field_type");
146  $radg->setRequired(true);
147  $op1 = new ilRadioOption($lng->txt("udf_type_text"), UDF_TYPE_TEXT);
148  $radg->addOption($op1);
149  $op2 = new ilRadioOption($lng->txt("udf_type_select"), UDF_TYPE_SELECT);
150  $radg->addOption($op2);
151  $op3 = new ilRadioOption($lng->txt("udf_type_wysiwyg"), UDF_TYPE_WYSIWYG);
152  $radg->addOption($op3);
153  $form->addItem($radg);
154 
155  // select values
156  $se_mu = new ilTextWizardInputGUI($lng->txt("value"), "selvalue");
157  $se_mu->setRequired(true);
158  $se_mu->setSize(32);
159  $se_mu->setMaxLength(128);
160  $se_mu->setValues(array(''));
161  $op2->addSubItem($se_mu);
162 
163  // access
164  $acc = new ilCheckboxGroupInputGUI($lng->txt("access"), "access");
165 
166  $acc_values = array();
167  foreach($this->getAccessOptions() as $id => $caption)
168  {
169  $opt = new ilCheckboxOption($caption, $id);
170  $acc->addOption($opt);
171 
172  if($this->field_definition && $this->field_definition[$id])
173  {
174  $acc_values[] = $id;
175  }
176  }
177 
178  $form->addItem($acc);
179 
180  if($a_mode == "create")
181  {
182  $radg->setValue(UDF_TYPE_TEXT);
183 
184 
185  $form->setTitle($lng->txt('add_new_user_defined_field'));
186 
187  $form->addCommandButton("create", $lng->txt("save"));
188  $form->addCommandButton("listUserDefinedFields", $lng->txt("cancel"));
189  }
190  else
191  {
192  $name->setValue($this->field_definition["field_name"]);
193  $radg->setValue($this->field_definition["field_type"]);
194  $radg->setDisabled(true);
195  $acc->setValue($acc_values);
196 
197  switch($this->field_definition["field_type"])
198  {
199  case UDF_TYPE_SELECT:
200  $se_mu->setValue($this->field_definition["field_values"]);
201  $form->setTitle($lng->txt("udf_update_select_field"));
202  break;
203 
204  case UDF_TYPE_TEXT:
205  $form->setTitle($lng->txt("udf_update_text_field"));
206  break;
207 
208  case UDF_TYPE_WYSIWYG:
209  $form->setTitle($lng->txt("udf_update_wysiwyg_field"));
210  break;
211  }
212 
213  $form->addCommandButton("update", $lng->txt("save"));
214  $form->addCommandButton("listUserDefinedFields", $lng->txt("cancel"));
215  }
216 
217  return $form;
218  }
219 
228  protected function validateForm($form, $user_field_definitions, array &$access)
229  {
230  global $lng;
231 
232  if($form->checkInput())
233  {
234  $valid = true;
235 
236  $incoming = (array)$form->getInput("access");
237  $access = array();
238  foreach(array_keys($this->getAccessOptions()) as $id)
239  {
240  $access[$id] = in_array($id, $incoming);
241  }
242 
243  if($access['required'] && !$access['visib_reg'])
244  {
245  $this->confirm_change = true;
246  $form->getItemByPostVar("access")->setAlert($lng->txt('udf_required_requires_visib_reg'));
247  $valid = false;
248  }
249 
250  if(!$this->field_id && $user_field_definitions->nameExists($form->getInput("name")))
251  {
252  $form->getItemByPostVar("name")->setAlert($lng->txt('udf_name_already_exists'));
253  $valid = false;
254  }
255 
256  if($form->getInput("field_type") == UDF_TYPE_SELECT)
257  {
258  $user_field_definitions->setFieldValues($form->getInput("selvalue"));
259  if($error = $user_field_definitions->validateValues())
260  {
261  switch($error)
262  {
264  $form->getItemByPostVar("selvalue")->setAlert($lng->txt('udf_duplicate_entries'));
265  $valid = false;
266  break;
267  }
268  }
269  }
270 
271  if(!$valid)
272  {
273  ilUtil::sendFailure($lng->txt("form_input_not_valid"));
274  }
275  return $valid;
276  }
277 
278  return false;
279  }
280 
281  function create()
282  {
283  global $lng, $ilCtrl;
284 
285  $user_field_definitions = ilUserDefinedFields::_getInstance();
286  $user_field_definitions->setFieldType($_POST["field_type"]);
287 
288  $access = array();
289  $form = $this->initForm();
290  if($this->validateForm($form, $user_field_definitions, $access))
291  {
292  $user_field_definitions->setFieldName($form->getInput("name"));
293  $user_field_definitions->enableVisible($access['visible']);
294  $user_field_definitions->enableVisibleRegistration((int)$access['visib_reg']);
295  $user_field_definitions->enableVisibleLocalUserAdministration($access['visib_lua']);
296  $user_field_definitions->enableCourseExport($access['course_export']);
297  $user_field_definitions->enableGroupExport($access['group_export']);
298  $user_field_definitions->enableChangeable($access['changeable']);
299  $user_field_definitions->enableChangeableLocalUserAdministration($access['changeable_lua']);
300  $user_field_definitions->enableRequired($access['required']);
301  $user_field_definitions->enableExport($access['export']);
302  $user_field_definitions->enableSearchable($access['searchable']);
303  $user_field_definitions->enableCertificate($access['certificate']);
304  $user_field_definitions->add();
305 
306  if ($access['course_export'])
307  {
308  include_once('Services/Membership/classes/class.ilMemberAgreement.php');
310  }
311 
312  ilUtil::sendSuccess($lng->txt('udf_added_field'), true);
313  $ilCtrl->redirect($this);
314  }
315 
316  $form->setValuesByPost();
317  $this->addField($form);
318  }
319 
325  function edit($a_form = null)
326  {
327  global $tpl;
328 
329  if(!$a_form)
330  {
331  $a_form = $this->initForm("edit");
332  }
333 
334  $tpl->setContent($a_form->getHTML());
335  }
336 
337  function update()
338  {
339  global $lng, $ilCtrl;
340 
341  $user_field_definitions = ilUserDefinedFields::_getInstance();
342  $user_field_definitions->setFieldType($this->field_definition["field_type"]);
343 
344  $access = array();
345  $form = $this->initForm("edit");
346  if($this->validateForm($form, $user_field_definitions, $access) && $this->field_id)
347  {
348  // field values are set in validateForm()...
349 
350  $user_field_definitions->setFieldName($form->getInput("name"));
351  $user_field_definitions->enableVisible($access['visible']);
352  $user_field_definitions->enableVisibleRegistration((int)$access['visib_reg']);
353  $user_field_definitions->enableVisibleLocalUserAdministration($access['visib_lua']);
354  $user_field_definitions->enableCourseExport($access['course_export']);
355  $user_field_definitions->enableGroupExport($access['group_export']);
356  $user_field_definitions->enableChangeable($access['changeable']);
357  $user_field_definitions->enableChangeableLocalUserAdministration($access['changeable_lua']);
358  $user_field_definitions->enableRequired($access['required']);
359  $user_field_definitions->enableExport($access['export']);
360  $user_field_definitions->enableSearchable($access['searchable']);
361  $user_field_definitions->enableCertificate($access['certificate']);
362  $user_field_definitions->update($this->field_id);
363 
364  if ($access['course_export'])
365  {
366  include_once('Services/Membership/classes/class.ilMemberAgreement.php');
368  }
369 
370  ilUtil::sendSuccess($lng->txt('udf_added_field'), true);
371  $ilCtrl->redirect($this);
372  }
373 
374  $form->setValuesByPost();
375  $this->edit($form);
376  }
377 
378  function askDeleteField()
379  {
380  global $ilCtrl, $lng, $tpl;
381 
382  if(!$_POST["fields"])
383  {
384  ilUtil::sendFailure($lng->txt("select_one"));
385  return $this->listUserDefinedFields();
386  }
387 
388  include_once("./Services/Utilities/classes/class.ilConfirmationGUI.php");
389  $confirmation_gui = new ilConfirmationGUI();
390  $confirmation_gui->setFormAction($ilCtrl->getFormAction($this));
391  $confirmation_gui->setHeaderText($lng->txt("udf_delete_sure"));
392  $confirmation_gui->setCancel($lng->txt("cancel"), "listUserDefinedFields");
393  $confirmation_gui->setConfirm($lng->txt("delete"), "deleteField");
394 
395  $user_field_definitions = ilUserDefinedFields::_getInstance();
396  foreach($_POST["fields"] as $id)
397  {
398  $definition = $user_field_definitions->getDefinition($id);
399  $confirmation_gui->addItem("fields[]", $id, $definition["field_name"]);
400  }
401 
402  $tpl->setContent($confirmation_gui->getHTML());
403 
404  return true;
405  }
406 
407  function deleteField()
408  {
409  global $lng, $ilCtrl;
410 
411  $user_field_definitions = ilUserDefinedFields::_getInstance();
412  foreach($_POST["fields"] as $id)
413  {
414  $user_field_definitions->delete($id);
415  }
416 
417  ilUtil::sendSuccess($lng->txt('udf_field_deleted'), true);
418  $ilCtrl->redirect($this);
419  }
420 
424  function updateFields($action = "")
425  {
426  global $lng, $ilCtrl;
427 
428  $user_field_definitions = ilUserDefinedFields::_getInstance();
429  $a_fields = $user_field_definitions->getDefinitions();
430 
431  foreach($a_fields as $field_id => $definition)
432  {
433  if( isset($_POST['chb']['required_'.$field_id]) && (int)$_POST['chb']['required_'.$field_id] &&
434  (!isset($_POST['chb']['visib_reg_'.$field_id]) || !(int)$_POST['chb']['visib_reg_'.$field_id]))
435  {
436  $this->confirm_change = true;
437 
438  ilUtil::sendFailure($lng->txt('invalid_visible_required_options_selected'));
439  $this->listUserDefinedFields();
440  return false;
441  }
442  }
443 
444  foreach($a_fields as $field_id => $definition)
445  {
446  $user_field_definitions->setFieldName($definition['field_name']);
447  $user_field_definitions->setFieldType($definition['field_type']);
448  $user_field_definitions->setFieldValues($definition['field_values']);
449  $user_field_definitions->enableVisible((int)$_POST['chb']['visible_'.$field_id]);
450  $user_field_definitions->enableChangeable((int)$_POST['chb']['changeable_'.$field_id]);
451  $user_field_definitions->enableRequired((int)$_POST['chb']['required_'.$field_id]);
452  $user_field_definitions->enableSearchable((int)$_POST['chb']['searchable_'.$field_id]);
453  $user_field_definitions->enableExport((int)$_POST['chb']['export_'.$field_id]);
454  $user_field_definitions->enableCourseExport((int)$_POST['chb']['course_export_'.$field_id]);
455  $user_field_definitions->enableVisibleLocalUserAdministration((int)$_POST['chb']['visib_lua_'.$field_id]);
456  $user_field_definitions->enableChangeableLocalUserAdministration((int)$_POST['chb']['changeable_lua_'.$field_id]);
457  $user_field_definitions->enableGroupExport((int)$_POST['chb']['group_export_'.$field_id]);
458  $user_field_definitions->enableVisibleRegistration((int)$_POST['chb']['visib_reg_'.$field_id]);
459  $user_field_definitions->enableCertificate((int)$_POST['chb']['certificate_'.$field_id]);
460 
461  $user_field_definitions->update($field_id);
462  }
463 
464  ilUtil::sendSuccess($lng->txt('settings_saved'), true);
465  $ilCtrl->redirect($this);
466  }
467 }
468 
469 ?>