19declare(strict_types=1);
48 private bool $visible_in_registration =
false,
49 private bool $visible_to_user =
false,
50 private bool $visible_in_local_user_administration =
false,
51 private bool $visible_in_courses =
false,
52 private bool $visible_in_groups =
false,
53 private bool $visible_in_study_programmes =
false,
54 private bool $changeable_by_user =
false,
55 private bool $changeable_in_local_user_administration =
false,
56 private bool $required =
false,
57 private bool $export =
false,
58 private bool $searchable =
false,
59 private bool $available_in_certificates =
false
65 return $this->definition->getIdentifier();
70 return $this->definition;
75 return $this->definition->getLabel(
$lng);
80 return $this->definition instanceof CustomField;
85 return $this->definition->hiddenInLists();
90 return $this->definition->visibleInRegistrationForcedTo()
91 ?? $this->visible_in_registration;
96 return $this->definition->visibleToUserForcedTo()
97 ?? $this->visible_to_user;
102 return $this->definition->visibleInLocalUserAdministrationForcedTo()
103 ?? $this->visible_in_local_user_administration;
108 return $this->definition->visibleInCoursesForcedTo()
109 ?? $this->visible_in_courses;
114 return $this->definition->visibleInGroupsForcedTo()
115 ?? $this->visible_in_groups;
120 return $this->definition->visibleInStudyProgrammesForcedTo()
121 ?? $this->visible_in_study_programmes;
126 return $this->definition->changeableByUserForcedTo()
127 ?? $this->changeable_by_user;
132 return $this->definition->changeableInLocalUserAdministrationForcedTo()
133 ?? $this->changeable_in_local_user_administration;
138 return $this->definition->requiredForcedTo()
144 return $this->definition->exportForcedTo()
150 return $this->definition->searchableForcedTo()
151 ?? $this->searchable;
156 return $this->definition->availableInCertificatesForcedTo()
157 ?? $this->available_in_certificates;
162 return $this->definition->getSection();
168 UIFactory $ui_factory,
169 UIRenderer $ui_renderer
171 return $row_builder->buildDataRow(
175 'type' => $this->definition instanceof CustomField
176 ?
"{$lng->txt('field_type_custom')}: {$this->definition->getTypeLabel($lng)}"
177 :
$lng->txt(
'default'),
181 'export' => $this->
export(),
185 )->withDisabledAction(
'delete', !$this->
isCustom());
192 array $custom_field_types,
193 array $available_custom_fields
196 if ($this->definition instanceof CustomField) {
197 $fields[
'edit_field'] = $ff->section(
198 $this->getCustomFieldInputs(
$lng, $ff,
$refinery, $available_custom_fields),
199 $lng->txt(
'properties')
202 $fields[
'configuration'] = $this->getBaseInputs(
$lng, $ff,
$refinery);
204 'field' => $ff->group($fields)
205 ->withAdditionalTransformation(
206 $this->buildCreateFieldTransformation(
$refinery, $custom_field_types)
215 array $custom_field_types,
216 array $available_custom_fields
219 if ($this->definition instanceof CustomField) {
220 $fields[
'edit_field'] = $ff->section(
221 $this->getHiddenCustomFieldInputs(
$lng, $ff,
$refinery, $available_custom_fields),
222 $lng->txt(
'properties')
225 $fields[
'configuration'] = $this->getHiddenBaseInputs($ff,
$refinery);
227 'field' => $ff->group($fields)
228 ->withAdditionalTransformation(
229 $this->buildCreateFieldTransformation(
$refinery, $custom_field_types)
238 array $custom_field_types,
239 array $available_custom_fields
242 'field' => $ff->group([
243 'edit_field' => $ff->section(
245 'label' => $ff->text(
$lng->txt(
'field_name'))
247 $this->buildLabelConstraint(
$lng,
$refinery, $available_custom_fields)
248 )->withRequired(
true),
249 'type' => $ff->switchableGroup(
250 $this->buildCustomTypeSelectionGroups(
257 )->withRequired(
true),
258 'section' => $ff->select(
259 $lng->txt(
'profile_section'),
263 $c[$v->value] =
$lng->txt($v->value);
268 )->withRequired(
true)
270 $lng->txt(
'properties')
272 'configuration' => $this->getBaseInputs(
$lng, $ff,
$refinery)
274 $this->buildCreateFieldTransformation(
$refinery, $custom_field_types)
282 PropertyAttributes::cases(),
283 function (array
$c, PropertyAttributes $v) use ($new_field): array {
284 $old_value = $this->retrieveValueByPropertyAttribute($v);
285 $new_value = $new_field->retrieveValueByPropertyAttribute($v);
286 if ($old_value !== $new_value) {
300 PropertyAttributes $attribute
302 return match ($attribute) {
303 PropertyAttributes::VisibleInRegistration => $this->isVisibleInRegistration(),
304 PropertyAttributes::VisibleToUser => $this->isVisibleToUser(),
305 PropertyAttributes::VisibleInLocalUserAdministration => $this->isVisibleInLocalUserAdministration(),
306 PropertyAttributes::VisibleInCourses => $this->isVisibleInCourses(),
307 PropertyAttributes::VisibleInGroups => $this->isVisibleInGroups(),
308 PropertyAttributes::VisibleInStudyProgrammes => $this->isVisibleInStudyProgrammes(),
309 PropertyAttributes::ChangeableByUser => $this->isChangeableByUser(),
310 PropertyAttributes::ChangeableInLocalUserAdministration => $this->isChangeableInLocalUserAdministration(),
311 PropertyAttributes::Required => $this->isRequired(),
312 PropertyAttributes::Export => $this->export(),
313 PropertyAttributes::Searchable => $this->isSearchable(),
314 PropertyAttributes::AvailableInCertificates => $this->isAvailableInCertificates()
323 $input = $this->definition->getLegacyInput(
$lng,
$context, $user);
324 $input->
setPostVar($this->definition->getIdentifier());
325 $input->setRequired($this->required);
335 if (!
$context->isFieldChangeableInType($this, $user)) {
336 throw new \Exception(
'It is not possible to Change this from here!');
338 return $this->definition->addValueToUserObject($user, $input, $form);
343 return $this->definition->retrieveValueFromUser($user);
351 "public_{$this->definition->getIdentifier()}",
359 return $this->isVisibleToUser()
360 && $user->
getPref(
"public_{$this->definition->getIdentifier()}") ===
'y';
365 UIFactory $ui_factory
366 ): UnorderedListing {
367 $granted_accesses = [];
368 if ($this->isVisibleInRegistration()) {
369 $granted_accesses[] =
$lng->txt(
370 PropertyAttributes::VisibleInRegistration->value
374 if ($this->isVisibleToUser()) {
375 $granted_accesses[] =
$lng->txt(
376 PropertyAttributes::VisibleToUser->value
380 if ($this->isVisibleInLocalUserAdministration()) {
381 $granted_accesses[] =
$lng->txt(
382 PropertyAttributes::VisibleInLocalUserAdministration->value
386 if ($this->isVisibleInCourses()) {
387 $granted_accesses[] =
$lng->txt(
388 PropertyAttributes::VisibleInCourses->value
392 if ($this->isVisibleInGroups()) {
393 $granted_accesses[] =
$lng->txt(
394 PropertyAttributes::VisibleInGroups->value
398 if ($this->isVisibleInStudyProgrammes()) {
399 $granted_accesses[] =
$lng->txt(
400 PropertyAttributes::VisibleInStudyProgrammes->value
404 if ($this->isChangeableByUser()) {
405 $granted_accesses[] =
$lng->txt(
406 PropertyAttributes::ChangeableByUser->value
410 if ($this->isChangeableInLocalUserAdministration()) {
411 $granted_accesses[] =
$lng->txt(
412 PropertyAttributes::ChangeableInLocalUserAdministration->value
416 return $ui_factory->listing()->unordered($granted_accesses);
423 array $available_custom_fields
426 'label' => $ff->text(
$lng->txt(
'field_name'))
428 $this->buildLabelConstraint(
431 $available_custom_fields
433 )->withRequired(
true)
435 'type' => $ff->select(
$lng->txt(
'type'), [
'0' => $this->definition->getTypeLabel(
$lng)])
438 'data' => $this->definition->getAdditionalEditFormInputs(
$lng, $ff,
$refinery),
439 'section' => $ff->select(
440 $lng->txt(
'profile_section'),
444 $c[$v->value] =
$lng->txt($v->value);
449 )->withRequired(
true)
450 ->withValue($this->definition->getSection()->value)
461 'access' => $ff->section(
463 'visible_in_registration' => $ff->checkbox(
464 $lng->txt(PropertyAttributes::VisibleInRegistration->value)
465 )->withDisabled($this->definition->visibleInRegistrationForcedTo() !== null)
466 ->
withValue($this->isVisibleInRegistration()),
467 'visible_in_personal_data' => $ff->checkbox(
468 $lng->txt(PropertyAttributes::VisibleToUser->value)
469 )->withDisabled($this->definition->visibleToUserForcedTo() !== null)
471 'visible_in_local_user_administration' => $ff->checkbox(
472 $lng->txt(PropertyAttributes::VisibleInLocalUserAdministration->value)
473 )->withDisabled($this->definition->visibleInLocalUserAdministrationForcedTo() !== null)
474 ->
withValue($this->isVisibleInLocalUserAdministration()),
475 'visible_in_courses' => $ff->checkbox(
476 $lng->txt(PropertyAttributes::VisibleInCourses->value)
477 )->withDisabled($this->definition->visibleInCoursesForcedTo() !== null)
478 ->
withValue($this->isVisibleInCourses()),
479 'visible_in_groups' => $ff->checkbox(
480 $lng->txt(PropertyAttributes::VisibleInGroups->value)
481 )->withDisabled($this->definition->visibleInGroupsForcedTo() !== null)
483 'visible_in_study_programmes' => $ff->checkbox(
484 $lng->txt(PropertyAttributes::VisibleInStudyProgrammes->value)
485 )->withDisabled($this->definition->visibleInStudyProgrammesForcedTo() !== null)
486 ->
withValue($this->isVisibleInStudyProgrammes()),
487 'changeable_by_user' => $ff->checkbox(
488 $lng->txt(PropertyAttributes::ChangeableByUser->value)
489 )->withDisabled($this->definition->changeableByUserForcedTo() !== null)
490 ->
withValue($this->isChangeableByUser()),
491 'changeable_in_local_user_administration' => $ff->checkbox(
492 $lng->txt(PropertyAttributes::ChangeableInLocalUserAdministration->value)
493 )->withDisabled($this->definition->changeableInLocalUserAdministrationForcedTo() !== null)
494 ->
withValue($this->isChangeableInLocalUserAdministration())
498 'settings' => $ff->section(
500 'required' => $ff->checkbox(
501 $lng->txt(PropertyAttributes::Required->value)
502 )->withDisabled($this->definition->requiredForcedTo() !== null)
504 'export' => $ff->checkbox(
506 )->withDisabled($this->definition->exportForcedTo() !== null)
508 'searchable' => $ff->checkbox(
509 $lng->txt(PropertyAttributes::Searchable->value)
510 )->withDisabled($this->definition->searchableForcedTo() !== null)
512 'available_in_certificates' => $ff->checkbox(
513 $lng->txt(PropertyAttributes::AvailableInCertificates->value)
514 )->withDisabled($this->definition->availableInCertificatesForcedTo() !== null)
515 ->
withValue($this->isAvailableInCertificates())
517 $lng->txt(
'settings')
520 $lng->txt(
'configuration')
522 $this->buildRequiredMustByVisibleInRegistrationConstraint(
$lng,
$refinery)
530 array $available_custom_fields
533 'label' => $ff->hidden()
535 $this->buildLabelConstraint(
$lng,
$refinery, $available_custom_fields)
537 'data' => $ff->hidden()->
withValue($this->definition->getAdditionalEditFormData()),
538 'section' => $ff->hidden()->
withValue($this->getSection())
547 'access' => $ff->group(
549 'visible_in_registration' => $ff->hidden()
550 ->withDisabled($this->definition->requiredForcedTo() ===
true)
552 ->
withValue($this->isVisibleInRegistration() ?
'1' :
'0'),
553 'visible_in_personal_data' => $ff->hidden()
554 ->withDisabled($this->definition->visibleToUserForcedTo() !== null)
556 ->
withValue($this->isVisibleToUser() ?
'1' :
'0'),
557 'visible_in_local_user_administration' => $ff->hidden()
558 ->withDisabled($this->definition->visibleInLocalUserAdministrationForcedTo() !== null)
560 ->
withValue($this->isVisibleInLocalUserAdministration() ?
'1' :
'0'),
561 'visible_in_courses' => $ff->hidden()
562 ->withDisabled($this->definition->visibleInCoursesForcedTo() !== null)
564 ->
withValue($this->isVisibleInCourses() ?
'1' :
'0'),
565 'visible_in_groups' => $ff->hidden()
566 ->withDisabled($this->definition->visibleInGroupsForcedTo() !== null)
568 ->
withValue($this->isVisibleInGroups() ?
'1' :
'0'),
569 'visible_in_study_programmes' => $ff->hidden()
570 ->withDisabled($this->definition->visibleInStudyProgrammesForcedTo() !== null)
572 ->
withValue($this->isVisibleInStudyProgrammes() ?
'1' :
'0'),
573 'changeable_by_user' => $ff->hidden()
574 ->withDisabled($this->definition->changeableByUserForcedTo() !== null)
576 ->
withValue($this->isChangeableByUser() ?
'1' :
'0'),
577 'changeable_in_local_user_administration' => $ff->hidden()
578 ->withDisabled($this->definition->changeableInLocalUserAdministrationForcedTo() !== null)
580 ->
withValue($this->isChangeableInLocalUserAdministration() ?
'1' :
'0')
583 'settings' => $ff->group(
585 'required' => $ff->hidden()
586 ->withDisabled($this->definition->requiredForcedTo() !== null)
588 ->
withValue($this->isRequired() ?
'1' :
'0'),
589 'export' => $ff->hidden()
590 ->withDisabled($this->definition->exportForcedTo() !== null)
592 ->
withValue($this->export() ?
'1' :
'0'),
593 'searchable' => $ff->hidden()
594 ->withDisabled($this->definition->searchableForcedTo() !== null)
596 ->
withValue($this->isSearchable() ?
'1' :
'0'),
606 array $custom_field_types
611 $edit_inputs = $v->getAdditionalEditFormInputs(
$lng, $ff,
$refinery, null);
612 $c[$v::class] = $ff->group(
613 $edit_inputs ===
null ? [] : [
'data' => $edit_inputs],
625 array $available_custom_fields
628 fn(string $label): bool => array_filter(
629 $available_custom_fields,
631 && $v->getIdentifier() !== $this->getIdentifier()
633 $lng->txt(
'udf_name_already_exists')
642 static fn(array $vs): bool => !$vs[
'settings'][
'required'] || $vs[
'access'][
'visible_in_registration'],
643 $lng->txt(
'invalid_visible_required_options_selected')
649 array $custom_field_types
652 static fn(CustomType $v): string => $v::class,
655 return $refinery->custom()->transformation(
656 function (array $vs) use ($cts, $custom_field_types):
self {
657 $access = $vs[
'configuration'][
'access'];
658 $settings = $vs[
'configuration'][
'settings'];
659 $clone = clone $this;
660 $clone->visible_in_registration = $this->definition->requiredForcedTo() ===
true
662 : $access[
'visible_in_registration'];
663 $clone->visible_to_user = $this->definition->visibleToUserForcedTo()
664 ?? $access[
'visible_in_personal_data'];
665 $clone->visible_in_local_user_administration = $this->definition->visibleInLocalUserAdministrationForcedTo()
666 ?? $access[
'visible_in_local_user_administration'];
667 $clone->visible_in_courses = $this->definition->visibleInCoursesForcedTo()
668 ?? $access[
'visible_in_courses'];
669 $clone->visible_in_groups = $this->definition->visibleInGroupsForcedTo()
670 ?? $access[
'visible_in_groups'];
671 $clone->visible_in_study_programmes = $this->definition->visibleInStudyProgrammesForcedTo()
672 ?? $access[
'visible_in_study_programmes'];
673 $clone->changeable_by_user = $this->definition->changeableByUserForcedTo()
674 ?? $access[
'changeable_by_user'];
675 $clone->changeable_in_local_user_administration = $this->definition->changeableInLocalUserAdministrationForcedTo()
676 ?? $access[
'changeable_in_local_user_administration'];
677 $clone->required = $this->definition->requiredForcedTo()
678 ?? $settings[
'required'];
679 $clone->export = $this->definition->exportForcedTo()
680 ?? $settings[
'export'];
681 $clone->searchable = $this->definition->searchableForcedTo()
682 ?? $settings[
'searchable'];
683 $clone->available_in_certificates = $this->definition->availableInCertificatesForcedTo()
684 ?? $settings[
'available_in_certificates'];
686 if (!$clone->isCustom()) {
690 $definition = clone $this->definition
691 ->withLabel($vs[
'edit_field'][
'label'])
692 ->withSection(AvailableSections::tryFrom($vs[
'edit_field'][
'section']))
693 ->withAdditionalEditFormData(
694 $vs[
'edit_field'][
'data']
695 ?? $vs[
'edit_field'][
'type'][1][
'data']
698 if ($definition->isUnspecific()
699 && ($field_type = array_search($vs[
'edit_field'][
'type'][0], $cts)) !==
false) {
700 $definition = $definition->withType($custom_field_types[$field_type]);
702 $clone->definition = $definition;
Builds a Color from either hex- or rgb values.
Class ChangedUserFieldAttribute.
getTableRow(DataRowBuilder $row_builder, Language $lng, UIFactory $ui_factory, UIRenderer $ui_renderer)
setPublishedOnUser(\ilObjUser $user, bool $value)
getHiddenBaseInputs(FieldFactory $ff, Refinery $refinery)
getLegacyInput(Language $lng, Context $context, ?\ilObjUser $user=null)
isVisibleInStudyProgrammes()
buildCustomTypeSelectionGroups(Language $lng, FieldFactory $ff, Refinery $refinery, array $custom_field_types)
getChangedAttributes(self $new_field)
isVisibleInRegistration()
retrieveValueFromUser(\ilObjUser $user)
getCustomFieldInputs(Language $lng, FieldFactory $ff, Refinery $refinery, array $available_custom_fields)
buildAccessibilityListing(Language $lng, UIFactory $ui_factory)
isPublishedByUser(\ilObjUser $user)
retrieveValueByPropertyAttribute(PropertyAttributes $attribute)
getHiddenCustomFieldInputs(Language $lng, FieldFactory $ff, Refinery $refinery, array $available_custom_fields)
addValueToUserObject(\ilObjUser $user, Context $context, mixed $input, ?\ilPropertyFormGUI $form=null)
getEditForm(Language $lng, FieldFactory $ff, Refinery $refinery, array $custom_field_types, array $available_custom_fields)
__construct(private FieldDefinition $definition, private bool $visible_in_registration=false, private bool $visible_to_user=false, private bool $visible_in_local_user_administration=false, private bool $visible_in_courses=false, private bool $visible_in_groups=false, private bool $visible_in_study_programmes=false, private bool $changeable_by_user=false, private bool $changeable_in_local_user_administration=false, private bool $required=false, private bool $export=false, private bool $searchable=false, private bool $available_in_certificates=false)
getCreateCustomFieldForm(Language $lng, FieldFactory $ff, Refinery $refinery, array $custom_field_types, array $available_custom_fields)
isChangeableInLocalUserAdministration()
buildCreateFieldTransformation(Refinery $refinery, array $custom_field_types)
isVisibleInLocalUserAdministration()
buildRequiredMustByVisibleInRegistrationConstraint(Language $lng, Refinery $refinery)
isAvailableInCertificates()
getBaseInputs(Language $lng, FieldFactory $ff, Refinery $refinery)
getHiddenForm(Language $lng, FieldFactory $ff, Refinery $refinery, array $custom_field_types, array $available_custom_fields)
buildLabelConstraint(Language $lng, Refinery $refinery, array $available_custom_fields)
getPref(string $a_keyword)
return['delivery_method'=> 'php',]
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
A constraint encodes some resrtictions on values.
An entity that renders components to a string output.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
if(!file_exists('../ilias.ini.php'))