19declare(strict_types=1);
45 private readonly UUIDFactory $uuid_factory,
46 private readonly array $available_custom_field_types,
47 private readonly array $available_standard_profile_fields
54 return $this->db->fetchObject(
56 'SELECT COUNT(field_id) cnt FROM ' . self::USER_FIELD_CONFIGURATION_TABLE
61 public function get(): array
63 if ($this->fields_data === []) {
68 $this->available_profile_fields,
79 foreach ($this->available_profile_fields as $definition) {
80 if ($definition->getIdentifier() === $identifier) {
89 foreach ($this->available_profile_fields as $definition) {
90 if ($definition::class === $class) {
100 self::USER_FIELD_CONFIGURATION_TABLE,
103 'visible_in_registration' => [
107 'visible_to_user' => [
111 'visible_in_lua' => [
115 'visible_in_crss' => [
119 'visible_in_grps' => [
123 'visible_in_prgs' => [
127 'changeable_by_user' => [
131 'changeable_in_lua' => [
147 'available_in_certs' => [
156 self::UDF_DEFINITIONS_TABLE,
168 static fn(
string $v): Custom\
Type =>
new $v(),
169 $this->available_custom_field_types
177 $this->uuid_factory->uuid4()
187 $this->db->manipulate(
188 'DELETE FROM ' . self::USER_FIELD_CONFIGURATION_TABLE
189 .
" WHERE field_id={$this->db->quote($field->getIdentifier(), \ilDBConstants::T_TEXT)}"
191 $this->db->manipulate(
192 'DELETE FROM ' . self::UDF_DEFINITIONS_TABLE
193 .
" WHERE field_id={$this->db->quote($field->getIdentifier(), \ilDBConstants::T_TEXT)}"
203 array $available_custom_field_types
205 $query_result = $this->db->query(
209 $custom_field_definitions = [];
210 while (($field = $this->db->fetchObject($query_result)) !==
null) {
211 $field_type = array_search($field->field_type, $available_custom_field_types);
212 if ($field_type ===
false) {
216 $custom_field_definitions[] =
new Custom\Custom(
217 $this->uuid_factory->fromString($field->field_id),
218 new $available_custom_field_types[$field_type](),
224 return $custom_field_definitions;
229 $query = $this->db->query(
230 'SELECT * FROM ' . self::USER_FIELD_CONFIGURATION_TABLE
233 while (($row = $this->db->fetchObject($query)) !==
null) {
234 $this->fields_data[$row->field_id] = $row;
241 $values_from_database = $this->fields_data[$definition->getIdentifier()]
242 ?? $this->db->fetchObject(
244 'SELECT * FROM ' . self::USER_FIELD_CONFIGURATION_TABLE .
" WHERE field_id ='{$definition->getIdentifier()}'"
248 if ($values_from_database ===
null) {
256 $values_from_database->visible_in_registration === 1,
257 $values_from_database->visible_to_user === 1,
258 $values_from_database->visible_in_lua === 1,
259 $values_from_database->visible_in_crss === 1,
260 $values_from_database->visible_in_grps === 1,
261 $values_from_database->visible_in_prgs === 1,
262 $values_from_database->changeable_by_user === 1,
263 $values_from_database->changeable_in_lua === 1,
264 $values_from_database->required === 1,
265 $values_from_database->export === 1,
266 $values_from_database->searchable === 1,
267 $values_from_database->available_in_certs === 1
274 $this->available_standard_profile_fields,
275 $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...