ILIAS  Release_4_4_x_branch Revision 61816
 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  // gather old select options
345  $old_options = null;
346  if($this->field_id)
347  {
348  $old_values = $user_field_definitions->getDefinition($this->field_id);
349  if($old_values["field_type"] == UDF_TYPE_SELECT)
350  {
351  $old_options = $old_values["field_values"];
352  }
353  }
354 
355  $access = array();
356  $form = $this->initForm("edit");
357  if($this->validateForm($form, $user_field_definitions, $access) && $this->field_id)
358  {
359  // field values are set in validateForm()...
360 
361  // diff old select options against new to handle deleted values properly
362  if(is_array($old_options))
363  {
364  foreach($old_options as $old_option)
365  {
366  if(!in_array($old_option, $user_field_definitions->getFieldValues()))
367  {
368  ilUserDefinedData::deleteFieldValue($this->field_id, $old_option);
369  }
370  }
371  }
372 
373  $user_field_definitions->setFieldName($form->getInput("name"));
374  $user_field_definitions->enableVisible($access['visible']);
375  $user_field_definitions->enableVisibleRegistration((int)$access['visib_reg']);
376  $user_field_definitions->enableVisibleLocalUserAdministration($access['visib_lua']);
377  $user_field_definitions->enableCourseExport($access['course_export']);
378  $user_field_definitions->enableGroupExport($access['group_export']);
379  $user_field_definitions->enableChangeable($access['changeable']);
380  $user_field_definitions->enableChangeableLocalUserAdministration($access['changeable_lua']);
381  $user_field_definitions->enableRequired($access['required']);
382  $user_field_definitions->enableExport($access['export']);
383  $user_field_definitions->enableSearchable($access['searchable']);
384  $user_field_definitions->enableCertificate($access['certificate']);
385  $user_field_definitions->update($this->field_id);
386 
387  if ($access['course_export'])
388  {
389  include_once('Services/Membership/classes/class.ilMemberAgreement.php');
391  }
392 
393  ilUtil::sendSuccess($lng->txt('udf_added_field'), true);
394  $ilCtrl->redirect($this);
395  }
396 
397  $form->setValuesByPost();
398  $this->edit($form);
399  }
400 
401  function askDeleteField()
402  {
403  global $ilCtrl, $lng, $tpl;
404 
405  if(!$_POST["fields"])
406  {
407  ilUtil::sendFailure($lng->txt("select_one"));
408  return $this->listUserDefinedFields();
409  }
410 
411  include_once("./Services/Utilities/classes/class.ilConfirmationGUI.php");
412  $confirmation_gui = new ilConfirmationGUI();
413  $confirmation_gui->setFormAction($ilCtrl->getFormAction($this));
414  $confirmation_gui->setHeaderText($lng->txt("udf_delete_sure"));
415  $confirmation_gui->setCancel($lng->txt("cancel"), "listUserDefinedFields");
416  $confirmation_gui->setConfirm($lng->txt("delete"), "deleteField");
417 
418  $user_field_definitions = ilUserDefinedFields::_getInstance();
419  foreach($_POST["fields"] as $id)
420  {
421  $definition = $user_field_definitions->getDefinition($id);
422  $confirmation_gui->addItem("fields[]", $id, $definition["field_name"]);
423  }
424 
425  $tpl->setContent($confirmation_gui->getHTML());
426 
427  return true;
428  }
429 
430  function deleteField()
431  {
432  global $lng, $ilCtrl;
433 
434  $user_field_definitions = ilUserDefinedFields::_getInstance();
435  foreach($_POST["fields"] as $id)
436  {
437  $user_field_definitions->delete($id);
438  }
439 
440  ilUtil::sendSuccess($lng->txt('udf_field_deleted'), true);
441  $ilCtrl->redirect($this);
442  }
443 
447  function updateFields($action = "")
448  {
449  global $lng, $ilCtrl;
450 
451  $user_field_definitions = ilUserDefinedFields::_getInstance();
452  $a_fields = $user_field_definitions->getDefinitions();
453 
454  foreach($a_fields as $field_id => $definition)
455  {
456  if( isset($_POST['chb']['required_'.$field_id]) && (int)$_POST['chb']['required_'.$field_id] &&
457  (!isset($_POST['chb']['visib_reg_'.$field_id]) || !(int)$_POST['chb']['visib_reg_'.$field_id]))
458  {
459  $this->confirm_change = true;
460 
461  ilUtil::sendFailure($lng->txt('invalid_visible_required_options_selected'));
462  $this->listUserDefinedFields();
463  return false;
464  }
465  }
466 
467  foreach($a_fields as $field_id => $definition)
468  {
469  $user_field_definitions->setFieldName($definition['field_name']);
470  $user_field_definitions->setFieldType($definition['field_type']);
471  $user_field_definitions->setFieldValues($definition['field_values']);
472  $user_field_definitions->enableVisible((int)$_POST['chb']['visible_'.$field_id]);
473  $user_field_definitions->enableChangeable((int)$_POST['chb']['changeable_'.$field_id]);
474  $user_field_definitions->enableRequired((int)$_POST['chb']['required_'.$field_id]);
475  $user_field_definitions->enableSearchable((int)$_POST['chb']['searchable_'.$field_id]);
476  $user_field_definitions->enableExport((int)$_POST['chb']['export_'.$field_id]);
477  $user_field_definitions->enableCourseExport((int)$_POST['chb']['course_export_'.$field_id]);
478  $user_field_definitions->enableVisibleLocalUserAdministration((int)$_POST['chb']['visib_lua_'.$field_id]);
479  $user_field_definitions->enableChangeableLocalUserAdministration((int)$_POST['chb']['changeable_lua_'.$field_id]);
480  $user_field_definitions->enableGroupExport((int)$_POST['chb']['group_export_'.$field_id]);
481  $user_field_definitions->enableVisibleRegistration((int)$_POST['chb']['visib_reg_'.$field_id]);
482  $user_field_definitions->enableCertificate((int)$_POST['chb']['certificate_'.$field_id]);
483 
484  $user_field_definitions->update($field_id);
485  }
486 
487  ilUtil::sendSuccess($lng->txt('settings_saved'), true);
488  $ilCtrl->redirect($this);
489  }
490 }
491 
492 ?>