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,
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($input->getRequired() || $this->isRequired());
335 if (!$context->isFieldChangeable($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()
679 $clone->export = $this->definition->exportForcedTo()
681 $clone->searchable = $this->definition->searchableForcedTo()
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)
return['3gp', '7z', 'ai', 'aif', 'aifc', 'aiff', 'au', 'arw', 'avi', 'backup', 'bak', 'bas', 'bpmn', 'bpmn2', 'bmp', 'bib', 'bibtex', 'bz', 'bz2', 'c', 'c++', 'cc', 'cct', 'cdf', 'cer', 'class', 'cls', 'conf', 'cpp', 'crt', 'crs', 'crw', 'cr2', 'css', 'cst', 'csv', 'cur', 'db', 'dcr', 'des', 'dng', 'doc', 'docx', 'dot', 'dotx', 'dtd', 'dvi', 'el', 'eps', 'epub', 'f', 'f77', 'f90', 'flv', 'for', 'g3', 'gif', 'gl', 'gan', 'ggb', 'gsd', 'gsm', 'gtar', 'gz', 'gzip', 'h', 'hpp', 'htm', 'html', 'htmls', 'ibooks', 'ico', 'ics', 'ini', 'ipynb', 'java', 'jbf', 'jpeg', 'jpg', 'js', 'jsf', 'jso', 'json', 'latex', 'lang', 'less', 'log', 'lsp', 'ltx', 'm1v', 'm2a', 'm2v', 'm3u', 'm4a', 'm4v', 'markdown', 'm', 'mat', 'md', 'mdl', 'mdown', 'mid', 'min', 'midi', 'mobi', 'mod', 'mov', 'movie', 'mp2', 'mp3', 'mp4', 'mpa', 'mpeg', 'mpg', 'mph', 'mpga', 'mpp', 'mpt', 'mpv', 'mpx', 'mv', 'mw', 'mv4', 'nb', 'nbp', 'nef', 'nif', 'niff', 'obj', 'obm', 'odt', 'ods', 'odp', 'odg', 'odf', 'oga', 'ogg', 'ogv', 'old', 'p', 'pas', 'pbm', 'pcl', 'pct', 'pcx', 'pdf', 'pgm', 'pic', 'pict', 'png', 'por', 'pov', 'project', 'properties', 'ppa', 'ppm', 'pps', 'ppsx', 'ppt', 'pptx', 'ppz', 'ps', 'psd', 'pwz', 'qt', 'qtc', 'qti', 'qtif', 'r', 'ra', 'ram', 'rar', 'rast', 'rda', 'rev', 'rexx', 'ris', 'rf', 'rgb', 'rm', 'rmd', 'rmi', 'rmm', 'rmp', 'rt', 'rtf', 'rtx', 'rv', 's', 's3m', 'sav', 'sbs', 'sec', 'sdml', 'sgm', 'sgml', 'smi', 'smil', 'srt', 'sps', 'spv', 'stl', 'svg', 'swa', 'swf', 'swz', 'tar', 'tex', 'texi', 'texinfo', 'text', 'tgz', 'tif', 'tiff', 'ttf', 'txt', 'tmp', 'uvproj', 'vdf', 'vimeo', 'viv', 'vivo', 'vrml', 'vsdx', 'vtt', 'wav', 'webm', 'wmv', 'wmx', 'wmz', 'woff', 'wwd', 'xhtml', 'xif', 'xls', 'xlsx', 'xmind', 'xml', 'xsl', 'xsd', 'zip']
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.
readonly UIRenderer $ui_renderer
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
if(!file_exists('../ilias.ini.php'))