19 declare(strict_types=1);
49 int $requested_field_id
52 $this->main_tpl = $DIC->ui()->mainTemplate();
53 $this->
ctrl = $DIC[
'ilCtrl'];
54 $this->
lng = $DIC[
'lng'];
55 $this->ui_factory = $DIC[
'ui.factory'];
56 $this->
toolbar = $DIC[
'ilToolbar'];
58 $this->
lng->loadLanguageModule(
'user');
59 $this->
lng->loadLanguageModule(
'administration');
63 $this->field_id = $requested_field_id;
64 $this->
ctrl->saveParameter($this,
'field_id', $this->field_id);
66 if ($this->field_id) {
68 $this->field_definition = $user_field_definitions->getDefinition($this->field_id);
72 $DIC->user()->getId(),
88 $next_class = $this->
ctrl->getNextClass($this);
89 $cmd = $this->
ctrl->getCmd();
91 switch ($next_class) {
94 $cmd =
'listUserDefinedFields';
105 (
string) $this->ref_id,
109 $this->ui_factory->link()->standard(
110 $this->
lng->txt(
'add_user_defined_field'),
111 $this->
ctrl->getLinkTarget($this,
'addField')
117 if ($this->confirm_change) {
118 $tab->setConfirmChange();
120 $this->main_tpl->setContent($tab->getHTML());
126 $a_form = $this->
initForm(
'create');
129 $this->main_tpl->setContent($a_form->getHTML());
139 $opts[
'visible'] = $this->
lng->txt(
'user_visible_in_profile');
140 $opts[
'visib_reg'] = $this->
lng->txt(
'visible_registration');
141 $opts[
'visib_lua'] = $this->
lng->txt(
'usr_settings_visib_lua');
142 $opts[
'course_export'] = $this->
lng->txt(
'course_export');
143 $opts[
'group_export'] = $this->
lng->txt(
'group_export');
144 $opts[
"prg_export"] = $this->
lng->txt(
"prg_export");
145 $opts[
'changeable'] = $this->
lng->txt(
'changeable');
146 $opts[
'changeable_lua'] = $this->
lng->txt(
'usr_settings_changeable_lua');
147 $opts[
'required'] = $this->
lng->txt(
'required_field');
148 $opts[
'export'] = $this->
lng->txt(
'export');
149 $opts[
'searchable'] = $this->
lng->txt(
'header_searchable');
150 $opts[
'certificate'] = $this->
lng->txt(
'certificate');
178 $this->
lng->loadLanguageModule(
'ps');
179 $this->main_tpl->setOnScreenMessage(
'info', $this->
lng->txt(
'ps_warning_modify'));
183 if ($this->field_definition) {
184 $perms = $this->permissions->hasPermissions(
186 (
string) $this->field_definition[
'field_id'],
258 $this->
lng->loadLanguageModule(
'ps');
259 $this->main_tpl->setOnScreenMessage(
'info', $this->
lng->txt(
'ps_warning_modify'));
262 if ($this->field_definition) {
264 $perm_map = self::getAccessPermissions();
268 $form->setFormAction($this->
ctrl->getFormAction($this));
271 $name->setRequired(
true);
272 $form->addItem($name);
275 $name->setDisabled(
true);
283 $radg->addOption($op);
295 $se_mu->setMaxLength(128);
296 $se_mu->setValues([
'']);
297 $op->addSubItem($se_mu);
303 $plugin->addDefinitionTypeOptionsToRadioOption($op, $this->field_id);
309 $form->addItem($radg);
312 $se_mu->setDisabled(
true);
313 $se_mu->setRequired(
false);
323 $acc->addOption($opt);
325 if ($this->field_definition && $this->field_definition[$id]) {
330 $opt->setDisabled(
true);
334 $form->addItem($acc);
337 if ($a_mode ==
'create') {
339 $form->setTitle($this->
lng->txt(
'add_new_user_defined_field'));
340 $form->addCommandButton(
'create', $this->
lng->txt(
'save'));
342 $name->setValue($this->field_definition[
'field_name']);
343 $radg->setValue((
string) $this->field_definition[
'field_type']);
344 $radg->setDisabled(
true);
345 $acc->setValue($acc_values);
347 switch ($this->field_definition[
'field_type']) {
349 $values = $this->field_definition[
'field_values'];
350 if (!is_array($values) || $values === []) {
353 $se_mu->setValue($values);
354 $form->setTitle($this->
lng->txt(
'udf_update_select_field'));
358 $form->setTitle($this->
lng->txt(
'udf_update_text_field'));
362 $form->setTitle($this->
lng->txt(
'udf_update_wysiwyg_field'));
368 $form->setTitle(
$plugin->getDefinitionUpdateFormTitle());
372 $form->addCommandButton(
'update', $this->
lng->txt(
'save'));
374 $form->addCommandButton(
'listUserDefinedFields', $this->
lng->txt(
'cancel'));
382 array $a_field_permissions = null
389 $incoming = (array) $form->
getInput(
'access');
391 if ($a_field_permissions) {
392 $perm_map = self::getAccessPermissions();
397 $access[
$id] = in_array($id, $incoming);
401 $access[
$id] = $this->field_definition[
$id];
405 if ($access[
'required'] && !$access[
'visib_reg']) {
406 $this->confirm_change =
true;
407 $form->
getItemByPostVar(
'access')->setAlert($this->
lng->txt(
'udf_required_requires_visib_reg'));
411 if (!$this->field_id && $user_field_definitions->
nameExists($form->
getInput(
'name'))) {
430 $this->main_tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'form_input_not_valid'));
441 $user_field_definitions->setFieldType(
442 $this->request->getFieldType()
447 if ($this->
validateForm($form, $user_field_definitions, $access)) {
448 $user_field_definitions->setFieldName($form->getInput(
'name'));
449 $user_field_definitions->enableVisible($access[
'visible']);
450 $user_field_definitions->enableVisibleRegistration((
bool) $access[
'visib_reg']);
451 $user_field_definitions->enableVisibleLocalUserAdministration($access[
'visib_lua']);
452 $user_field_definitions->enableCourseExport($access[
'course_export']);
453 $user_field_definitions->enableGroupExport($access[
'group_export']);
454 $user_field_definitions->enablePrgExport($access[
'prg_export']);
455 $user_field_definitions->enableChangeable($access[
'changeable']);
456 $user_field_definitions->enableChangeableLocalUserAdministration($access[
'changeable_lua']);
457 $user_field_definitions->enableRequired($access[
'required']);
458 $user_field_definitions->enableExport($access[
'export']);
459 $user_field_definitions->enableSearchable($access[
'searchable']);
460 $user_field_definitions->enableCertificate($access[
'certificate']);
461 $new_id = $user_field_definitions->add();
463 if ($user_field_definitions->isPluginType()) {
466 $plugin->updateDefinitionFromForm($form, $new_id);
469 if ($access[
'course_export']) {
473 $this->main_tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'udf_added_field'),
true);
474 $this->
ctrl->redirect($this);
477 $form->setValuesByPost();
487 $this->main_tpl->setContent($a_form->getHTML());
495 $user_field_definitions->setFieldType($this->field_definition[
'field_type']);
499 if ($this->field_id) {
500 $old_values = $user_field_definitions->getDefinition($this->field_id);
502 $old_options = $old_values[
'field_values'];
505 $perms = $this->permissions->hasPermissions(
507 (
string) $this->field_id,
571 if ($this->
validateForm($form, $user_field_definitions, $access, $perms) && $this->field_id) {
576 if (is_array($old_options)) {
577 foreach ($old_options as $old_option) {
578 if (!in_array($old_option, $user_field_definitions->getFieldValues())) {
585 elseif (is_array($old_options)) {
586 $user_field_definitions->setFieldValues($old_options);
590 $user_field_definitions->setFieldName($form->getInput(
'name'));
592 $user_field_definitions->setFieldName($this->field_definition[
'field_name']);
595 $user_field_definitions->enableVisible($access[
'visible']);
596 $user_field_definitions->enableVisibleRegistration($access[
'visib_reg']);
597 $user_field_definitions->enableVisibleLocalUserAdministration($access[
'visib_lua']);
598 $user_field_definitions->enableCourseExport($access[
'course_export']);
599 $user_field_definitions->enableGroupExport($access[
'group_export']);
600 $user_field_definitions->enablePrgExport($access[
'prg_export']);
601 $user_field_definitions->enableChangeable($access[
'changeable']);
602 $user_field_definitions->enableChangeableLocalUserAdministration($access[
'changeable_lua']);
603 $user_field_definitions->enableRequired($access[
'required']);
604 $user_field_definitions->enableExport($access[
'export']);
605 $user_field_definitions->enableSearchable($access[
'searchable']);
606 $user_field_definitions->enableCertificate($access[
'certificate']);
607 $user_field_definitions->update($this->field_id);
609 if ($user_field_definitions->isPluginType()) {
612 $plugin->updateDefinitionFromForm($form, $this->field_id);
616 if ($access[
'course_export']) {
620 $this->main_tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'settings_saved'),
true);
621 $this->
ctrl->redirect($this);
624 $form->setValuesByPost();
630 $fields = $this->request->getFields();
631 if (count($fields) == 0) {
632 $this->main_tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'select_one'));
638 $confirmation_gui->setFormAction($this->
ctrl->getFormAction($this));
639 $confirmation_gui->setHeaderText($this->
lng->txt(
'udf_delete_sure'));
640 $confirmation_gui->setCancel($this->
lng->txt(
'cancel'),
'listUserDefinedFields');
641 $confirmation_gui->setConfirm($this->
lng->txt(
'delete'),
'deleteField');
644 foreach ($fields as
$id) {
645 $definition = $user_field_definitions->getDefinition($id);
646 $confirmation_gui->addItem(
'fields[]', (
string) $id, $definition[
'field_name']);
649 $this->main_tpl->setContent($confirmation_gui->getHTML());
657 $fields = $this->request->getFields();
661 foreach ($fields as
$id) {
667 $field = $user_field_definitions->getDefinition($id);
668 $fail[] = $field[
'field_name'];
672 $this->main_tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'msg_no_perm_delete') .
' ' . implode(
', ', $fail),
true);
673 $this->
ctrl->redirect($this,
'listUserDefinedFields');
676 foreach ($fields as $id) {
677 $user_field_definitions->delete($id);
680 $this->main_tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'udf_field_deleted'),
true);
681 $this->
ctrl->redirect($this);
690 $a_fields = $user_field_definitions->getDefinitions();
692 $checked = $this->request->getChecked();
694 $perm_map = self::getAccessPermissions();
696 foreach ($a_fields as $field_id => $definition) {
697 $perms = $this->permissions->hasPermissions(
753 foreach ($perm_map as $prop => $perm) {
755 $checked[$prop .
'_' .
$field_id] = $definition[$prop];
761 foreach ($a_fields as $field_id => $definition) {
762 if (isset($checked[
'required_' . $field_id]) && (
int) $checked[
'required_' . $field_id] &&
763 (!isset($checked[
'visib_reg_' . $field_id]) || !(
int) $checked[
'visib_reg_' . $field_id])) {
764 $this->confirm_change =
true;
766 $this->main_tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'invalid_visible_required_options_selected'));
776 foreach ($a_fields as $field_id => $definition) {
777 $user_field_definitions->setFieldName($definition[
'field_name']);
778 $user_field_definitions->setFieldType($definition[
'field_type']);
779 $user_field_definitions->setFieldValues($definition[
'field_values']);
780 $user_field_definitions->enableVisible((
bool) ($checked[
'visible_' . $field_id] ??
false));
781 $user_field_definitions->enableChangeable((
bool) ($checked[
'changeable_' . $field_id] ??
false));
782 $user_field_definitions->enableRequired((
bool) ($checked[
'required_' . $field_id] ??
false));
783 $user_field_definitions->enableSearchable((
bool) ($checked[
'searchable_' . $field_id] ??
false));
784 $user_field_definitions->enableExport((
bool) ($checked[
'export_' . $field_id] ??
false));
785 $user_field_definitions->enableCourseExport((
bool) ($checked[
'course_export_' . $field_id] ??
false));
786 $user_field_definitions->enableVisibleLocalUserAdministration((
bool) ($checked[
'visib_lua_' . $field_id] ??
false));
787 $user_field_definitions->enableChangeableLocalUserAdministration((
bool) ($checked[
'changeable_lua_' . $field_id] ??
false));
788 $user_field_definitions->enableGroupExport((
bool) ($checked[
'group_export_' . $field_id] ??
false));
789 $user_field_definitions->enableVisibleRegistration((
bool) ($checked[
'visib_reg_' . $field_id] ??
false));
790 $user_field_definitions->enableCertificate((
bool) ($checked[
'certificate_' . $field_id] ??
false));
791 $user_field_definitions->enablePrgExport((
bool) ($checked[
'prg_export_' . $field_id] ??
false));
793 $user_field_definitions->update($field_id);
796 $this->main_tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'settings_saved'),
true);
797 $this->
ctrl->redirect($this);
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
const SUBACTION_FIELD_ACCESS_VISIBLE_GROUPS
const SUBACTION_FIELD_ACCESS_SEARCHABLE
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Additional user data fields definition.
ilGlobalTemplateInterface $main_tpl
ilClaimingPermissionHelper $permissions
const SUBACTION_FIELD_ACCESS_VISIBLE_COURSES
const ACTION_FIELD_DELETE
edit(ilPropertyFormGUI $a_form=null)
const SUBACTION_FIELD_ACCESS_EXPORT
static _reset()
Reset all.
getAccessOptions()
Get all access options, order is kept in forms.
const SUBACTION_FIELD_ACCESS_CERTIFICATE
const SUBACTION_FIELD_ACCESS_CHANGEABLE_PERSONAL
Class ilCustomUserFieldsGUI.
const SUBACTION_FIELD_ACCESS_REQUIRED
const ACTION_FIELD_EDIT_ACCESS
TableGUI class for custom defined user fields.
const ACTION_FIELD_EDIT_PROPERTY
const SUBACTION_FIELD_ACCESS_VISIBLE_PERSONAL
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
const SUBACTION_FIELD_PROPERTIES
nameExists(string $a_field_name)
const UDF_TYPE_TEXT
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static getAccessPermissions()
__construct(int $ref_id, int $requested_field_id)
validateForm(ilPropertyFormGUI $form, ilUserDefinedFields $user_field_definitions, array &$access, array $a_field_permissions=null)
static _hasAgreements()
Check if there is any user agreement.
static deleteFieldValue(int $a_field_id, string $a_value)
Delete data of particular value of a (selection) field.
const SUBACTION_FIELD_TITLE
addField(ilPropertyFormGUI $a_form=null)
initForm(string $a_mode='create')
const SUBACTION_FIELD_ACCESS_VISIBLE_LOCAL
const ACTION_UDF_CREATE_FIELD
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
static getInstance(int $a_user_id, int $a_ref_id)
const SUBACTION_FIELD_ACCESS_VISIBLE_REGISTRATION
This class represents a text wizard property in a property form.
const UDF_DUPLICATE_VALUES
const SUBACTION_FIELD_ACCESS_VISIBLE_PRG
const SUBACTION_FIELD_ACCESS_CHANGEABLE_LOCAL
setFieldValues(array $a_values)
updateFields(string $action='')
Update custom fields properties (from table gui)