19declare(strict_types=1);
39 private readonly UUIDFactory $uuid_factory,
40 private readonly array $available_custom_field_types,
41 private readonly array $available_standard_profile_fields
48 return $this->db->fetchObject(
50 'SELECT COUNT(field_id) cnt FROM ' . self::USER_FIELD_CONFIGURATION_TABLE
55 public function get(): array
57 if ($this->fields_data === []) {
62 $this->available_profile_fields,
73 foreach ($this->available_profile_fields as $definition) {
74 if ($definition->getIdentifier() === $identifier) {
83 foreach ($this->available_profile_fields as $definition) {
84 if ($definition::class === $class) {
94 self::USER_FIELD_CONFIGURATION_TABLE,
97 'visible_in_registration' => [
101 'visible_to_user' => [
105 'visible_in_lua' => [
109 'visible_in_crss' => [
113 'visible_in_grps' => [
117 'visible_in_prgs' => [
121 'changeable_by_user' => [
125 'changeable_in_lua' => [
141 'available_in_certs' => [
150 self::UDF_DEFINITIONS_TABLE,
162 fn(
string $v): Custom\
Type =>
new $v(),
163 $this->available_custom_field_types
171 $this->uuid_factory->uuid4()
181 $this->db->manipulate(
182 'DELETE FROM ' . self::USER_FIELD_CONFIGURATION_TABLE
183 .
" WHERE field_id={$this->db->quote($field->getIdentifier(), \ilDBConstants::T_TEXT)}"
185 $this->db->manipulate(
186 'DELETE FROM ' . self::UDF_DEFINITIONS_TABLE
187 .
" WHERE field_id={$this->db->quote($field->getIdentifier(), \ilDBConstants::T_TEXT)}"
193 array $available_custom_field_types
195 $query_result = $this->db->query(
199 $custom_field_definitions = [];
200 while (($field = $this->db->fetchObject($query_result)) !==
null) {
201 $field_type = array_search($field->field_type, $available_custom_field_types);
202 if ($field_type ===
null) {
205 $custom_field_definitions[] =
new Custom\Custom(
206 $this->uuid_factory->fromString($field->field_id),
207 new $available_custom_field_types[$field_type](),
213 return $custom_field_definitions;
218 $query = $this->db->query(
219 'SELECT * FROM ' . self::USER_FIELD_CONFIGURATION_TABLE
222 while (($row = $this->db->fetchObject($query)) !==
null) {
223 $this->fields_data[$row->field_id] = $row;
230 $values_from_database = $this->fields_data[$definition->getIdentifier()]
231 ?? $this->db->fetchObject(
233 'SELECT * FROM ' . self::USER_FIELD_CONFIGURATION_TABLE .
" WHERE field_id ='{$definition->getIdentifier()}'"
237 if ($values_from_database ===
null) {
245 $values_from_database->visible_in_registration === 1,
246 $values_from_database->visible_to_user === 1,
247 $values_from_database->visible_in_lua === 1,
248 $values_from_database->visible_in_crss === 1,
249 $values_from_database->visible_in_grps === 1,
250 $values_from_database->visible_in_prgs === 1,
251 $values_from_database->changeable_by_user === 1,
252 $values_from_database->changeable_in_lua === 1,
253 $values_from_database->required === 1,
254 $values_from_database->export === 1,
255 $values_from_database->searchable === 1,
256 $values_from_database->available_in_certs === 1
263 $this->available_standard_profile_fields,
264 $this->buildCustomFieldDefinitions($this->available_custom_field_types)
const string USER_FIELD_CONFIGURATION_TABLE
storeConfiguration(Field $field)
const string UDF_DEFINITIONS_TABLE
generateAvailableProfielFields()
buildCustomFieldDefinitions(array $available_custom_field_types)
getByClass(string $class)
__construct(private readonly \ilDBInterface $db, private readonly UUIDFactory $uuid_factory, private readonly array $available_custom_field_types, private readonly array $available_standard_profile_fields)
deleteCustomField(Field $field)
getByIdentifier(string $identifier)
buildFieldFromDefinition(FieldDefinition $definition)
getUnspecifiedCustomField()
array $available_profile_fields
isVisibleInStudyProgrammes()
isVisibleInRegistration()
isChangeableInLocalUserAdministration()
isVisibleInLocalUserAdministration()
isAvailableInCertificates()
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...