<?PHP
/**
 * Contains a class for building the list of available fields.
 *
 * @author Joshua Ramon Enslin <joshua@museum-digital.de>
 */
declare(strict_types = 1);

/**
 * Class building the list of available fields for CSVXML.
 */
final class CsvxmlAvailableFields {

    const GENERAL_FIELD_MULTIPLIER = 1;
    const EVENT_MULTIPLIER = 3;

    /** @var array<string, array<string, FieldEntry>>
     */
    private array $_availableFields;

    /**
     * Getter for available fields.
     *
     * @return array<string, array<string, FieldEntry>>
     */
    public function getFields():array {

        return $this->_availableFields;

    }

    /**
     * Function for getting a simple array definition of an available field.
     *
     * @param string        $nameTL        Translation of the field name. Optional.
     * @param string        $explica       Explanation of the field (from musdb). Optional.
     * @param array<string> $dependsOn     Dependent fields. Optional.
     * @param array<string> $allowedValues Allowed values. Optional.
     * @param string        $remark        Explanation of the field (for importer). Optional.
     * @param boolean       $required      Determines whether the field is required.
     *                                     Optional, defaults to false.
     *
     * @return FieldEntry
     */
    private function _getSimpleAvailableFieldEntry(string $nameTL = "", string $explica = "", array $dependsOn = [], array $allowedValues = [], string $remark = "", bool $required = false):FieldEntry {
        return new FieldEntry(
            $required,
            $allowedValues,
            $dependsOn,
            $remark,
            $nameTL,
            $explica
        );

    }

    /**
     * Function for building a generic event type definition.
     *
     * @param MDTlLoader $tlLoader Translation loader.
     * @param string     $typeName Translated name of event type.
     * @param string     $type     Event type name (e.g. production).
     * @param integer    $number   Number of event of this type.
     *
     * @return array<string, FieldEntry>
     */
    private function _generateGenericFullEvent(MDTlLoader $tlLoader, string $typeName, string $type, int $number):array {

        return [
            $type . '_when' . $number         => $this->_getSimpleAvailableFieldEntry($typeName . ': ' . $tlLoader->tl("event", "event", 'when'), "", [$type . '_when_sure' . $number]),
            $type . '_when_sure' . $number    => $this->_getSimpleAvailableFieldEntry($typeName . ': ' . $tlLoader->tl("event", "event", 'when') . " [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]", "", [$type . '_when' . $number], ["y", "n"]),
            $type . '_who' . $number          => $this->_getSimpleAvailableFieldEntry($typeName . ': ' . $tlLoader->tl("event", "event", 'who'), "", [$type . '_who_sure' . $number]),
            $type . '_who_sure' . $number     => $this->_getSimpleAvailableFieldEntry($typeName . ': ' . $tlLoader->tl("event", "event", 'who') . " [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]", "", [$type . '_who' . $number], ["y", "n"]),
            $type . '_who_gnd' . $number      => $this->_getSimpleAvailableFieldEntry($typeName . ': ' . $tlLoader->tl("event", "event", 'who') . ' (' . $tlLoader->tl("event", "event", 'gnd') . ')', "", [$type . '_who_sure' . $number, $type . '_who' . $number]),
            $type . '_where' . $number        => $this->_getSimpleAvailableFieldEntry($typeName . ': ' . $tlLoader->tl("event", "event", 'where'), "", [$type . '_where_sure' . $number]),
            $type . '_where_sure' . $number   => $this->_getSimpleAvailableFieldEntry($typeName . ': ' . $tlLoader->tl("event", "event", 'where') . " [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]", "", [$type . '_where' . $number], ["y", "n"]),
            $type . '_annotation' . $number   => $this->_getSimpleAvailableFieldEntry($typeName . ': ' . $tlLoader->tl("event", "event", 'classic_annotation_intro'), ""),
        ];

    }

    /**
     * Constructor.
     *
     * @param string $lang User language.
     *
     * @return void
     */
    public function __construct(string $lang) {

        $tlLoader = new MDTlLoader("available_fields", $lang);

        $currencies = MDCurrenciesSet::getSortedList($tlLoader);

        $availableFields = [

            $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'object_base_data') => [
                "inventory_number" => new FieldEntry(
                    true,
                    [],
                    [],
                    'Only unique values allowed',
                    $tlLoader->tl("object_basis", "object_basis", 'inventory_number'),
                    $tlLoader->tl("object_basis", "object_basis", 'inv_explica')
                ),
                "object_type" => new FieldEntry(
                    true,
                    [],
                    [],
                    'Keep it short! Field is needed to create valid LIDO from museum-digital entries',
                    $tlLoader->tl("object_basis", "object_basis", 'object_type'),
                    $tlLoader->tl("object_basis", "object_basis", 'oart_explica')
                ),
                "object_title" => new FieldEntry(
                    true,
                    [],
                    [],
                    'Best is not to repeat the title again and again for many objects, e.g. vase, vase, vase ... better: Green vase, Blue vase, Yellow vase, ...',
                    $tlLoader->tl("object_basis", "object_basis", 'object_name'),
                    $tlLoader->tl("object_basis", "object_basis", 'oname_explica')
                ),
                "object_description" => new FieldEntry(
                    true,
                    [],
                    [],
                    'A good description of the objects is fundamental to make the objects searchable in the internet',
                    $tlLoader->tl("object_basis", "object_basis", 'description'),
                    $tlLoader->tl("object_basis", "object_basis", 'obesch_explica')
                ),
                "object_material_technique" => new FieldEntry(
                    false,
                    [],
                    [],
                    'This is a cummulative field for material and technique. It is also possible to additionally save the information separate in the fields: <i>material_separate</i> and <i>technique_separate</i>',
                    $tlLoader->tl("object_basis", "object_basis", 'mattech'),
                    $tlLoader->tl("object_basis", "object_basis", 'mattech_explica')
                ),
                "object_dimensions" => new FieldEntry(
                    false,
                    [],
                    [],
                    'This is a cummulative field for dimensions (values and units). It is also possible to additionally save the information separate. See the block: <i>separate dimensions</i>',
                    $tlLoader->tl("object_basis", "object_basis", 'measurements'),
                    $tlLoader->tl("object_basis", "object_basis", 'ausmass_explica')
                ),
                "object_publication" => new FieldEntry(
                    false,
                    ["y", "n"],
                    [],
                    'Shall the object be visible directly after import?',
                    $tlLoader->tl("object", "objekt", 'visibility'),
                    $tlLoader->tl("object", "objekt", 'visibility_explica'),
                ),
                "institution_name" => new FieldEntry(
                    false,
                    [],
                    [],
                    'If name of institution is given it has to be exactly the same as already known in museum-digital',
                    $tlLoader->tl("museum", "museum", 'museum_name'),
                    $tlLoader->tl("museum", "museum", 'musnam_explica'),
                ),
            ],
            $tlLoader->tl("object_addendum", "object_add", "other_object_name") => [
                "object_other_title" => new FieldEntry(
                    false,
                    [],
                    ['object_other_title_kind_of'],
                    'If the field <i>object_other_title</i> is used. It has to be specified where this alternative title is used. Specification should be done within the field: <i>object_other_title_kind_of</i>',
                    $tlLoader->tl("object_addendum", "object_add", "other_object_name"),
                    $tlLoader->tl("object_addendum", "object_add", "other_object_name_explica"),
                ),
                "object_other_title_kind_of" => new FieldEntry(
                    false,
                    array_values(MDTitleTypesSet::TITLE_TYPES),
                    ['object_other_title'],
                    'This field has to be used togehter with <i>object_other_title</i>',
                    $tlLoader->tl("object_addendum", "object_add", "other_object_name_type"),
                    $tlLoader->tl("object_addendum", "object_add", "other_object_name_type_explica"),
                ),
            ],
            $tlLoader->tl("object_addendum", "object_add", "detailed_description") => [
                "detailed_description" => new FieldEntry(
                    false,
                    [],
                    ['detailed_description_md', 'detailed_description_extern'],
                    'If <i>detailed_desription</i> is made available for an object, <i>detailed_description_md</i> and <i>detailed_description_extern</i> have to have values too',
                    $tlLoader->tl("object_addendum", "object_add", "detailed_description"),
                    $tlLoader->tl("object_addendum", "object_add", "ddesc_inhalt"),
                ),
                "detailed_description_md" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['detailed_description', 'detailed_description_extern'],
                    'Shall detailed description be visible at museum-digital? If <i>detailed_description</i> is available for an object, <i>detailed_description_md</i> and <i>detailed_description_extern</i> have to have values too',
                    $tlLoader->tl("object_addendum", "object_add", 'ddesc_visibility_md'),
                    ""
                ),
                "detailed_description_extern" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['detailed_description_md', 'detailed_description'],
                    'Shall later exports from museum-digital include the detailed_description?</br>If <i>detailed_description</i> is available for an object, <i>detailed_description_md</i> and <i>detailed_description_extern</i> have to have values too',
                    $tlLoader->tl("object_addendum", "object_add", 'ddesc_visibility_extern'),
                    "",
                ),
            ],

            $tlLoader->tl("object_addendum", "object_add", "inscription") => [
                "inscription" => new FieldEntry(
                    false,
                    [],
                    ['inscription_md', 'inscription_extern'],
                    'If <i>inscription</i> is made available for an object, <i>inscription_md></i> and <i>inscription_extern</i> have to have values too',
                    $tlLoader->tl("object_addendum", "object_add", "inscription"),
                    $tlLoader->tl("object_addendum", "object_add", "besch_inhalt"),
                ),
                "inscription_md" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['inscription_md', 'inscription_extern'],
                    'Shall a given inscription be displayed at museum-digital? If <i>inscription</i> is available for an object, <i>inscription_md></i> and <i>inscription_extern</i> have to have values too',
                    $tlLoader->tl("object_addendum", "object_add", 'besch_visibility_md'),
                    "",
                ),
                "inscription_extern" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['inscription_md', 'inscription_extern'],
                    'Shall later exports from museum-digital inlude inscription? If <i>inscription</i> is available for an object, <i>inscription_md></i> and <i>inscription_extern</i> have to have values too',
                    $tlLoader->tl("object_addendum", "object_add", 'besch_visibility_extern'),
                    "",
                ),
            ],
            $tlLoader->tl("basis", "basis", "language") => [
                "content_language" => new FieldEntry(
                    false,
                    MDLanguagesSet::AVAILABLE_LANGUAGES_SHORT,
                    ['content_language_md', 'content_language_extern'],
                    'If <i>content_language</i> is made available for an object, <i>content_language_md></i> and <i>content_language_extern</i> have to have values too',
                    $tlLoader->tl("basis", "basis", "language"),
                    $tlLoader->tl("object_addendum", "object_add", "content_language_explica"),
                ),
                "content_language_md" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['content_language_md', 'content_language_extern'],
                    'Shall a given content_language be displayed at museum-digital? If <i>content_language</i> is available for an object, <i>content_language_md></i> and <i>content_language_extern</i> have to have values too',
                    $tlLoader->tl("basis", "basis", "language") . ' (md)',
                    "",
                ),
                "content_language_extern" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['content_language_md', 'content_language_extern'],
                    'Shall later exports from museum-digital inlude content_language? If <i>content_language</i> is available for an object, <i>content_language_md></i> and <i>content_language_extern</i> have to have values too',
                    $tlLoader->tl("basis", "basis", "language") . ' (extern)',
                    "",
                ),
            ],
            $tlLoader->tl("basis", "basis", "color") => [
                "color" => new FieldEntry(
                    false,
                    MDColorsSet::COLOR_NAMES,
                    ['color_md', 'color_extern'],
                    'If <i>color</i> is made available for an object, <i>color_md></i> and <i>color_extern</i> have to have values too',
                    $tlLoader->tl("basis", "basis", "color"),
                    $tlLoader->tl("object_addendum", "object_add", "color_explica"),
                ),
                "color_md" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['color_md', 'color_extern'],
                    'Shall a given color be displayed at museum-digital? If <i>color</i> is available for an object, <i>color_md></i> and <i>color_extern</i> have to have values too',
                    $tlLoader->tl("basis", "basis", "color") . ' (md)',
                    "",
                ),
                "color_extern" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['color_md', 'color_extern'],
                    'Shall later exports from museum-digital inlude color? If <i>color</i> is available for an object, <i>color_md></i> and <i>color_extern</i> have to have values too',
                    $tlLoader->tl("basis", "basis", "color") . ' (extern)',
                    "",
                ),
            ],
            $tlLoader->tl("basis", "basis", "sex") => [
                "sex" => new FieldEntry(
                    false,
                    MDGenderSet::GENDERS,
                    ['sex_md', 'sex_extern'],
                    'If <i>sex</i> is made available for an object, <i>sex_md></i> and <i>sex_extern</i> have to have values too',
                    $tlLoader->tl("basis", "basis", "sex"),
                    $tlLoader->tl("object_addendum", "object_add", "sex_explica"),
                ),
                "sex_md" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['sex_md', 'sex_extern'],
                    'Shall a given sex be displayed at museum-digital? If <i>sex</i> is available for an object, <i>sex_md></i> and <i>sex_extern</i> have to have values too',
                    $tlLoader->tl("basis", "basis", "sex") . ' (md)',
                    "",
                ),
                "sex_extern" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['sex_md', 'sex_extern'],
                    'Shall later exports from museum-digital inlude sex? If <i>sex</i> is available for an object, <i>sex_md></i> and <i>sex_extern</i> have to have values too',
                    $tlLoader->tl("basis", "basis", "sex") . ' (extern)',
                    "",
                ),
            ],
            $tlLoader->tl("object_addendum", "object_add", "form") => [
                "form" => new FieldEntry(
                    false,
                    MDObjectFormSet::FORMS,
                    ['form_md', 'form_extern'],
                    'If <i>form</i> is made available for an object, <i>form_md></i> and <i>form_extern</i> have to have values too',
                    $tlLoader->tl("object_addendum", "object_add", "form"),
                    $tlLoader->tl("object_addendum", "object_add", "form_explica"),
                ),
                "form_md" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['form_md', 'form_extern'],
                    'Shall a given form be displayed at museum-digital? If <i>form</i> is available for an object, <i>form_md></i> and <i>form_extern</i> have to have values too',
                    $tlLoader->tl("object_addendum", "object_add", "form") . ' (md)',
                    "",
                ),
                "form_extern" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['form_md', 'form_extern'],
                    'Shall later exports from museum-digital inlude form? If <i>form</i> is available for an object, <i>form_md></i> and <i>form_extern</i> have to have values too',
                    $tlLoader->tl("object_addendum", "object_add", "form") . ' (extern)',
                    "",
                ),
            ],

            $tlLoader->tl("object_addendum", "object_add", "material") . " / " . $tlLoader->tl("object_addendum", "object_add", "technique") => [
                "material_separate" => new FieldEntry(
                    false,
                    [],
                    [],
                    'Additional to collecting material and technique in a combined field (see above), the material(s) can be given here separately',
                    $tlLoader->tl("object_addendum", "object_add", "material"),
                    $tlLoader->tl("object_addendum", "object_add", "separate_material_explica"),
                ),
                "technique_separate" => new FieldEntry(
                    false,
                    [],
                    [],
                    'Additional to collecting material and technique in a combined field (see above), the technique(s) can be given here separately',
                    $tlLoader->tl("object_addendum", "object_add", "technique"),
                    $tlLoader->tl("object_addendum", "object_add", "separate_technique_explica"),
                ),
            ],
            $tlLoader->tl("object_addendum", "object_add", 'separated_measurements') => [
                "dimensions_separate_length_value" => new FieldEntry(
                    false,
                    [],
                    ['dimensions_separate_length_unit', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $tlLoader->tl("export", "export", 'exact_measurements_length_value'),
                    ""
                ),
                "dimensions_separate_length_unit" => new FieldEntry(
                    false,
                    MDUnitsSet::UNITS_LENGTH,
                    ['dimensions_separate_length_value', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $tlLoader->tl("export", "export", 'exact_measurements_length_unit'),
                    ""
                ),
                "dimensions_separate_width_value" => new FieldEntry(
                    false,
                    [],
                    ['dimensions_separate_width_unit', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $tlLoader->tl("export", "export", 'exact_measurements_width_value'),
                    ""
                ),
                "dimensions_separate_width_unit" => new FieldEntry(
                    false,
                    MDUnitsSet::UNITS_LENGTH,
                    ['dimensions_separate_width_value', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $tlLoader->tl("export", "export", 'exact_measurements_width_unit'),
                    ""
                ),
                "dimensions_separate_height_value" => new FieldEntry(
                    false,
                    [],
                    ['dimensions_separate_height_unit', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $tlLoader->tl("export", "export", 'exact_measurements_height_value'),
                    ""
                ),
                "dimensions_separate_height_unit" => new FieldEntry(
                    false,
                    MDUnitsSet::UNITS_LENGTH,
                    ['dimensions_separate_height_value', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $tlLoader->tl("export", "export", 'exact_measurements_height_unit'),
                    ""
                ),
                "dimensions_separate_weight_value" => new FieldEntry(
                    false,
                    [],
                    ['dimensions_separate_weight_unit', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $tlLoader->tl("export", "export", 'exact_measurements_weight_value'),
                    ""
                ),
                "dimensions_separate_weight_unit" => new FieldEntry(
                    false,
                    MDUnitsSet::UNITS_WEIGHT,
                    ['dimensions_separate_width_value', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $tlLoader->tl("export", "export", 'exact_measurements_weight_unit'),
                    $tlLoader->tl("object_basis", "object_basis", 'inv_explica')
                ),
                "dimensions_separate_diameter_value" => new FieldEntry(
                    false,
                    [],
                    ['dimensions_separate_diameter_unit', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $tlLoader->tl("export", "export", 'exact_measurements_diameter_value'),
                    ""
                ),
                "dimensions_separate_diameter_unit" => new FieldEntry(
                    false,
                    MDUnitsSet::UNITS_LENGTH,
                    ['dimensions_separate_diameter_value', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $tlLoader->tl("export", "export", 'exact_measurements_diameter_unit'),
                    ""
                ),
                "dimensions_separate_wall_thickness_value" => new FieldEntry(
                    false,
                    [],
                    ['dimensions_separate_wall_thickness_unit', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $tlLoader->tl("export", "export", 'exact_measurements_wall_size_value'),
                    ""
                ),
                "dimensions_separate_wall_thickness_unit" => new FieldEntry(
                    false,
                    MDUnitsSet::UNITS_LENGTH,
                    ['dimensions_separate_wall_thickness_value', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $tlLoader->tl("export", "export", 'exact_measurements_wall_size_unit'),
                    ""
                ),
                "dimensions_separate_show_md" => new FieldEntry(
                    false,
                    ["y", "n"],
                    [],
                    'If one or more separate dimension-value (and -unit) is given it has to be specified if the separated entries should be made visible at museum-digital',
                    $tlLoader->tl("object_addendum", "object_add", 'ausm_visibility_md'),
                    ""
                ),
                "dimensions_separate_show_extern" => new FieldEntry(
                    false,
                    ["y", "n"],
                    [],
                    'If one or more separate dimension-value (and -unit) is given it has to be specified if the separated entries should be included in a later export from museum-digital',
                    $tlLoader->tl("object_addendum", "object_add", 'ausm_visibility_extern'),
                    ""
                ),
                "number_of_pieces" => new FieldEntry(
                    false,
                    [],
                    ['dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'Only to be given if more than one copies of an object are available and catalogued with the same inventory number',
                    $tlLoader->tl("export", "export", 'exact_measurements_number_pieces'),
                    ""
                ),
                "number_of_pages" => new FieldEntry(
                    false,
                    [],
                    ['dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'Only to be given for books (etc.)',
                    $tlLoader->tl("export", "export", 'exact_measurements_number_pages'),
                    ""
                ),
                "dimensions_separate_stamp_position" => new FieldEntry(
                    false,
                    [],
                    ['dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    '',
                    $tlLoader->tl("export", "export", 'exact_measurements_stamp_position'),
                    ""
                ),
            ],
            $tlLoader->tl("object_addendum", "object_add", "similar_objects") => [
                "comparable_objects_other_museums" => new FieldEntry(
                    false,
                    [],
                    ['comparable_objects_other_museums_show_md', 'comparable_objects_other_museums_show_extern'],
                    'Name of other museum and if available the inventory number of the respective object. If <i>comparable_objects_other_museums</i> is given <i>comparable_objects_other_museums_show_md</i> and <i>comparable_objects_other_museums_show_extern</i> have to be given too',
                    $tlLoader->tl("object_addendum", "object_add", "similar_objects"),
                    $tlLoader->tl("object_addendum", "object_add", 'vergl_inhalt'),
                ),
                "comparable_objects_other_museums_show_md" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['comparable_objects_other_museums', 'comparable_objects_other_museums_show_extern'],
                    'Necessary if <i>comparable_objects_other_museums</i> is given. Should the information about comparable objects be displayed at museum-digital?',
                    $tlLoader->tl("object_addendum", "object_add", 'vergl_visibility_md'),
                    ""
                ),
                "comparable_objects_other_museums_show_extern" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['comparable_objects_other_museums', 'comparable_objects_other_museums_show_md'],
                    'Necessary if <i>comparable_objects_other_museums</i> is given. Should the information about comparable objects be part of later exports from museum-digital?',
                    $tlLoader->tl("object_addendum", "object_add", 'vergl_visibility_extern'),
                    ""
                ),
            ],
            $tlLoader->tl("object_addendum", "object_add", "closer_location") => [
                "closer_location" => new FieldEntry(
                    false,
                    [],
                    ['closer_location_as'],
                    'A place in a special relation to the object. The kind of relation has to specified in <i>closer_location_as</i>',
                    $tlLoader->tl("object_addendum", "object_add", "closer_location"),
                    $tlLoader->tl("object_addendum", "object_add", 'loka_inhalt'),
                ),
                "closer_location_as" => new FieldEntry(
                    false,
                    MDCloserLocationTypesSet::getSortedList($tlLoader),
                    ['closer_location'],
                    'A place in a special relation to the object can be given in closer_location. Here the kind of relation between object and place has to specified',
                    $tlLoader->tl("object_addendum", "object_add", "closer_location") . ", " . $tlLoader->tl("object_addendum", "object_add", 'as'),
                    $tlLoader->tl("object_addendum", "object_add", "closer_location_kind_explica"),
                ),
            ],
            $tlLoader->tl("object_addendum", "object_add", 'classification') => [
                "entry_number" => new FieldEntry(
                    false,
                    [],
                    [],
                    'The entry number of the object if available',
                    $tlLoader->tl("object_addendum", "object_add", "entry_number"),
                    $tlLoader->tl("object_addendum", "object_add", 'einu_inhalt'),
                ),
                "other_inventory_number" => new FieldEntry(
                    false,
                    [],
                    [],
                    'All other inventory numbers (older ones presumably) in one field',
                    $tlLoader->tl("object_addendum", "object_add", "additional_invent_no"),
                    $tlLoader->tl("object_addendum", "object_add", 'invp_inhalt'),
                ),
                "subject_group" => new FieldEntry(
                    false,
                    [],
                    [],
                    'If the object is part of an subject group this information should be given here',
                    $tlLoader->tl("object_addendum", "object_add", "subject_group"),
                    ""
                ),
                "systematic" => new FieldEntry(
                    false,
                    [],
                    [],
                    'If the object is put into a museum-systematic the place it has there',
                    $tlLoader->tl("object_addendum", "object_add", "classification"),
                    ""
                ),
                "bundle" => new FieldEntry(
                    false,
                    [],
                    [],
                    'The bundle the object belongs to',
                    $tlLoader->tl("object_addendum", "object_add", "konvolut"),
                    ""
                ),
                "part_of" => new FieldEntry(
                    false,
                    [],
                    [],
                    'If the object is part of something it can be given here',
                    $tlLoader->tl("object_addendum", "object_add", "part_of"),
                    $tlLoader->tl("object_addendum", "object_add", "konv_inhalt"),
                ),
            ],
            $tlLoader->tl("object_addendum", "object_add", "acknowledgements") => [
                "acknowledgements" => new FieldEntry(
                    false,
                    [],
                    ['acknowledgements_md', 'acknowledgements_extern'],
                    '', # 'If <i>acknowledgements</i> is made available for an object, <i>acknowledgements_md></i> and <i>acknowledgements_extern</i> have to have values too',
                    $tlLoader->tl("object_addendum", "object_add", "acknowledgements"),
                    $tlLoader->tl("object_addendum", "object_add", "acknowledgements_explica"),
                ),
                "acknowledgements_md" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['acknowledgements_md', 'acknowledgements_extern'],
                    'Shall a given acknowledgement be displayed at museum-digital? If <i>acknowledgements</i> is available for an object, <i>acknowledgements_md></i> and <i>acknowledgements_extern</i> have to have values too',
                    $tlLoader->tl("object_addendum", "object_add", 'besch_visibility_md'),
                    ""
                ),
                "acknowledgements_extern" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['acknowledgements_md', 'acknowledgements_extern'],
                    'Shall later exports from museum-digital inlude acknowledgements? If <i>acknowledgements</i> is available for an object, <i>acknowledgements_md></i> and <i>acknowledgements_extern</i> have to have values too',
                    $tlLoader->tl("object_addendum", "object_add", 'besch_visibility_extern'),
                    ""
                ),
            ],
            $tlLoader->tl("object_addendum", "object_add", "reception_notes") => [
                "reception_notes" => new FieldEntry(
                    false,
                    [],
                    ['reception_notes_md', 'reception_notes_extern'],
                    '', # 'If <i>reception_notes</i> is made available for an object, <i>reception_notes_md></i> and <i>reception_notes_extern</i> have to have values too',
                    $tlLoader->tl("object_addendum", "object_add", "reception_notes"),
                    "",
                ),
                "reception_notes_md" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['reception_notes_md', 'reception_notes_extern'],
                    'Shall a given note on reception be displayed at museum-digital? If <i>note on receptions</i> is available for an object, <i>note on receptions_md></i> and <i>note on receptions_extern</i> have to have values too',
                    $tlLoader->tl("object_addendum", "object_add", "reception_notes") . ' (visibility)',
                    ""
                ),
                "reception_notes_extern" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['reception_notes_md', 'reception_notes_extern'],
                    'Shall later exports from museum-digital inlude note on receptions? If <i>note on receptions</i> is available for an object, <i>note on receptions_md></i> and <i>note on receptions_extern</i> have to have values too',
                    $tlLoader->tl("object_addendum", "object_add", "reception_notes") . ' (visibility)',
                    ""
                ),
            ],
            $tlLoader->tl("basis", "basis", 'administration') => [
                "ownership_status" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("basis", "basis", "status"),
                    $tlLoader->tl("object_addendum", "object_add", "status_explica"),
                ),
                "owner" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("basis", "basis", "owner"),
                    $tlLoader->tl("object_addendum", "object_add", "owner_explica"),
                ),
                "inclusion_when" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "date_of_acquisition"),
                    $tlLoader->tl("object_basis", "object_basis", 'inv_explica')
                ),
                "inclusion_kind_of" => new FieldEntry(
                    false,
                    MDEntryTypesSet::getSortedList($tlLoader),
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "date_of_acquisition") . ", " . $tlLoader->tl("object_addendum", "object_add", 'as'),
                    ""
                ),
                "inclusion_who" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "acquirer"),
                    ""
                ),
                "inclusion_where" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "acquisition_place"),
                    ""
                ),
                "registration_first_who" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "first_registered_by"),
                    ""
                ),
                "registration_first_when" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "first_registered_at"),
                    ""
                ),
            ],
            $tlLoader->tl("object_addendum", "object_add", 'object_history') => [
                "owner_previous" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "previous_owner"),
                    $tlLoader->tl("object_addendum", "object_add", 'vorb_inhalt'),
                ),
                "object_history" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "object_history"),
                    $tlLoader->tl("object_addendum", "object_add", 'obge_inhalt'),
                ),
                "bought_for" => new FieldEntry(
                    false,
                    [],
                    ["bought_for_currency"],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "date_of_acquisition") . ", " . $tlLoader->tl("object_addendum", "object_add", 'for'),
                    $tlLoader->tl("object_basis", "object_basis", 'inv_explica')
                ),
                "bought_for_currency" => new FieldEntry(
                    false,
                    $currencies,
                    ["bought_for"],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "date_of_acquisition") . ", " . $tlLoader->tl("object_addendum", "object_add", 'for'),
                    ""
                ),
            ],
            $tlLoader->tl("object_addendum", "object_add", 'values') => [
                "worth_determiner" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "estimated_value_when") . "; " . $tlLoader->tl("object_addendum", "object_add", 'by'),
                    ""
                ),
                "worth_when" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "estimated_value_when"),
                    ""
                ),
                "worth_value" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "estimated_value_when") . "; " . $tlLoader->tl("object_addendum", "object_add", 'at'),
                    ""
                ),
                "worth_unit" => new FieldEntry(
                    false,
                    $currencies,
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "estimated_value_when") . "; Currency",
                    ""
                ),
                "worth_insurance_determiner" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "insurance_value_when") . "; " . $tlLoader->tl("object_addendum", "object_add", 'by'),
                    ""
                ),
                "worth_insurance_when" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "insurance_value_when"),
                    ""
                ),
                "worth_insurance_value" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "insurance_value_when") . "; " . $tlLoader->tl("object_addendum", "object_add", 'at'),
                    ""
                ),
                "worth_insurance_unit" => new FieldEntry(
                    false,
                    $currencies,
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "insurance_value_when") . "; Currency",
                    ""
                ),
            ],
            $tlLoader->tl("object_addendum", "object_add", 'state') => [
                "state" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", 'condition_short'),
                    $tlLoader->tl("object_addendum", "object_add", 'zust_inhalt'),
                ),
                "restauration" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "restauration"),
                    $tlLoader->tl("object_addendum", "object_add", 'rest_inhalt'),
                ),
            ],
            $tlLoader->tl("basis", "basis", 'abode') => [
                "abode_actual" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "current_location"),
                    $tlLoader->tl("object_addendum", "object_add", 'aktu_inhalt'),
                ),
                "abode_regular" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "home_location"),
                    $tlLoader->tl("object_addendum", "object_add", 'stan_inhalt'),
                ),
                "exhibition" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "exhibition_when_where"),
                    $tlLoader->tl("object_addendum", "object_add", 'aust_inhalt'),
                ),
                "on_loan_to" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "momentarily_on_load_at"),
                    $tlLoader->tl("object_addendum", "object_add", 'verl_inhalt'),
                ),
                "on_loan_contact" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "contact_person_loan"),
                    $tlLoader->tl("object_addendum", "object_add", 'ansp_inhalt'),
                ),
                "on_loan_when" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "on_loan_from_until"),
                    $tlLoader->tl("object_addendum", "object_add", 'vher_inhalt'),
                ),
                "on_loan_insurance_value" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "insurance_value_loan"),
                    $tlLoader->tl("object_addendum", "object_add", 'vlei_inhalt'),
                ),
                "on_loan_annotation" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "loan_remarks"),
                    $tlLoader->tl("object_addendum", "object_add", 'alei_inhalt'),
                ),
            ],
            $tlLoader->tl("basis", "basis", 'rights') => [
                "rights_object" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "copyright"),
                    $tlLoader->tl("object_addendum", "object_add", 'urhe_inhalt'),
                ),
                "rights_of_use" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "rights_of_use"),
                    $tlLoader->tl("object_addendum", "object_add", 'nure_inhalt'),
                ),
                "rights_annotation" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "rights_remarks"),
                    $tlLoader->tl("object_addendum", "object_add", 'arec_inhalt')
                ),
                "rights_metadata_holder" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", 'metadata_rights_holder'),
                    ""
                ),
                "rights_metadata_license" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", 'metadata_rights_status'),
                    ""
                ),
            ],
            $tlLoader->tl("basis", "basis", 'remarks') => [
                "remarks_short" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "short_remark"),
                    $tlLoader->tl("object_addendum", "object_add", 'kurz_inhalt'),
                ),
                "remarks_long" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("basis", "basis", "remarks"),
                    $tlLoader->tl("object_addendum", "object_add", 'noti_inhalt')
                ),
                "images_in_museum" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "images_at_museum"),
                    $tlLoader->tl("object_addendum", "object_add", 'oaim_inhalt')
                ),
                "negative_id" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "negative_id"),
                    $tlLoader->tl("object_addendum", "object_add", 'negative_id_explica')
                ),
                "documents_in_museum" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "documents_in_the_museum"),
                    $tlLoader->tl("object_addendum", "object_add", 'odim_inhalt')
                ),
                "handling_recommendations" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "handling_recommendations"),
                    $tlLoader->tl("object_addendum", "object_add", 'handling_recommendations_explica')
                ),
                "shipping_note" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "shipping_note"),
                    $tlLoader->tl("object_addendum", "object_add", 'shipping_note_explica')
                ),
                "hazards_note" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "hazards_note"),
                    $tlLoader->tl("object_addendum", "object_add", 'hazards_note_explica')
                ),
                "condition_checking_requirements" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "condition_checking_requirements"),
                    $tlLoader->tl("object_addendum", "object_add", 'condition_checking_requirements_explica')
                ),
                "installation_note" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "installation_note"),
                    $tlLoader->tl("object_addendum", "object_add", 'installation_note_explica')
                ),
                "display_recommendations" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "display_recommendations"),
                    $tlLoader->tl("object_addendum", "object_add", 'display_recommendations_explica')
                ),
                "security_requirements" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $tlLoader->tl("object_addendum", "object_add", "security_requirements"),
                    $tlLoader->tl("object_addendum", "object_add", 'security_requirements_explica')
                ),
            ],
            $tlLoader->tl("overview", "overview", 'links') => [],
            $tlLoader->tl("overview", "overview", 'links') . ": " . $tlLoader->tl("basis", "basis", 'single_object') => [],
            "translations" => [],
            $tlLoader->tl("basis", "basis", 'literature') => [],
            $tlLoader->tl("basis", "basis", 'objectgroup') => [],
            $tlLoader->tl("overview", "overview", 'tags') => [],
            $tlLoader->tl("eventtype_name", "eventname", "22") => [],
            $tlLoader->tl("eventtype_name", "eventname", "23") => [],
            $tlLoader->tl("eventtype_name", "eventname", "24") => [],
            $tlLoader->tl("overview", "overview", 'images') => [],
            $tlLoader->tl("basis", "basis", 'resource') => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "1") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "2") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "3") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "4") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "5") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "36") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "6") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "7") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "8") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "9") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "10") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "11") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "12") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "13") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "14") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "15") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "16") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "19") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "20") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "21") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "25") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "26") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "27") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "28") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "29") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "30") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "31") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "32") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "33") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "34") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "35") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "37") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "38") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "39") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "40") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "44") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "45") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "46") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "47") => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $tlLoader->tl("eventtype_name", "eventname", "48") => [],
            $tlLoader->tl("basis", "basis", 'exhibitions') => [],
        ];

        /*
         * Repeat fields
         */

        for ($i = 1; $i <= 2 * self::GENERAL_FIELD_MULTIPLIER; $i++) {

            $availableFields[$tlLoader->tl("overview", "overview", 'links')] = array_merge(
                $availableFields[$tlLoader->tl("overview", "overview", 'links')],
                [
                    "link_url{$i}" => new FieldEntry(
                        false,
                        [],
                        ["link_show{$i}"],
                        '',
                        $tlLoader->tl("link", "link", 'url'),
                        $tlLoader->tl("link", "link", 'linklink_explica'),
                    ),
                    "link_show{$i}" => new FieldEntry(
                        false,
                        [],
                        ["link_url{$i}"],
                        '',
                        $tlLoader->tl("link", "link", 'text'),
                        $tlLoader->tl("link", "link", 'linkname_explica'),
                    )
                ]
            );

        }

        for ($i = 1; $i <= 2 * self::GENERAL_FIELD_MULTIPLIER; $i++) {

            $availableFields[$tlLoader->tl("overview", "overview", 'links') . ": " . $tlLoader->tl("basis", "basis", 'single_object')] = array_merge(
                $availableFields[$tlLoader->tl("overview", "overview", 'links') . ": " . $tlLoader->tl("basis", "basis", 'single_object')],
                [
                    "linked_obj_invno{$i}" => new FieldEntry(
                        false,
                        [],
                        ["linked_obj_show{$i}"],
                        '',
                        "Inventarnummer des verknüpften Objektes",
                        ""
                    ),
                    "linked_obj_show{$i}" => new FieldEntry(
                        false,
                        [],
                        ["linked_obj_invno{$i}"],
                        '',
                        "Verknüpftes Objekt: Text",
                        ""
                    )
                ]
            );

        }

        for ($i = 1; $i <= 2 * self::GENERAL_FIELD_MULTIPLIER; $i++) {

            $availableFields["translations"] = array_merge(
                $availableFields["translations"],
                [
                    "obj_trans_language{$i}" => new FieldEntry(
                        false,
                        [],
                        ["obj_trans_language{$i}", "obj_trans_object_type{$i}", "obj_trans_object_title{$i}", "obj_trans_object_description{$i}"],
                        '',
                        "Translation language",
                        ""
                    ),
                    "obj_trans_object_type{$i}" => new FieldEntry(
                        false,
                        [],
                        ["obj_trans_language{$i}", "obj_trans_object_type{$i}", "obj_trans_object_title{$i}", "obj_trans_object_description{$i}"],
                        '',
                        $tlLoader->tl("object_basis", "object_basis", 'object_type'),
                        $tlLoader->tl("object_basis", "object_basis", 'oart_explica')
                    ),
                    "obj_trans_object_title{$i}" => new FieldEntry(
                        false,
                        [],
                        ["obj_trans_language{$i}", "obj_trans_object_type{$i}", "obj_trans_object_title{$i}", "obj_trans_object_description{$i}"],
                        '',
                        $tlLoader->tl("object_basis", "object_basis", 'object_name'),
                        $tlLoader->tl("object_basis", "object_basis", 'oname_explica')
                    ),
                    "obj_trans_object_description{$i}" => new FieldEntry(
                        false,
                        [],
                        ["obj_trans_language{$i}", "obj_trans_object_type{$i}", "obj_trans_object_title{$i}", "obj_trans_object_description{$i}"],
                        '',
                        $tlLoader->tl("object_basis", "object_basis", 'description'),
                        $tlLoader->tl("object_basis", "object_basis", 'obesch_explica')
                    ),
                    "obj_trans_object_material_technique{$i}" => new FieldEntry(
                        false,
                        [],
                        ["obj_trans_language{$i}", "obj_trans_object_type{$i}", "obj_trans_object_title{$i}", "obj_trans_object_description{$i}"],
                        '',
                        $tlLoader->tl("object_basis", "object_basis", 'mattech'),
                        $tlLoader->tl("object_basis", "object_basis", 'mattech_explica')
                    ),
                    "obj_trans_object_dimensions{$i}" => new FieldEntry(
                        false,
                        [],
                        ["obj_trans_language{$i}", "obj_trans_object_type{$i}", "obj_trans_object_title{$i}", "obj_trans_object_description{$i}"],
                        '',
                        $tlLoader->tl("object_basis", "object_basis", 'measurements'),
                        $tlLoader->tl("object_basis", "object_basis", 'ausmass_explica')
                    ),
                ]
            );

        }

        for ($i = 1; $i <= 5 * self::GENERAL_FIELD_MULTIPLIER; $i++) {

            $availableFields[$tlLoader->tl("basis", "basis", 'literature')] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'literature')],
                [
                    "literature_author{$i}" => new FieldEntry(
                        false,
                        [],
                        ["literature_title{$i}"],
                        '',
                        $tlLoader->tl("literature", "literature", 'author'),
                        $tlLoader->tl("literature", "literature", 'autor_explica')
                    ),
                    "literature_year{$i}" => new FieldEntry(
                        false,
                        [],
                        ["literature_title{$i}"],
                        '',
                        $tlLoader->tl("literature", "literature", 'year'),
                        $tlLoader->tl("literature", "literature", 'jahr_explica')
                    ),
                    "literature_title{$i}" => new FieldEntry(
                        false,
                        [],
                        [],
                        '',
                        $tlLoader->tl("literature", "literature", 'title'),
                        $tlLoader->tl("literature", "literature", 'titel_explica')
                    ),
                    "literature_place{$i}" => new FieldEntry(
                        false,
                        [],
                        ["literature_title{$i}"],
                        '',
                        $tlLoader->tl("literature", "literature", 'place'),
                        $tlLoader->tl("literature", "literature", 'ort_explica')
                    ),
                    "literature_abbreviation{$i}" => new FieldEntry(
                        false,
                        [],
                        ["literature_title{$i}"],
                        '',
                        $tlLoader->tl("literature", "literature", 'abbr'),
                        $tlLoader->tl("literature", "literature", 'abbr_explica')
                    ),
                    "literature_gnd{$i}" => new FieldEntry(
                        false,
                        [],
                        ["literature_title{$i}"],
                        '',
                        $tlLoader->tl("literature", "literature", 'gnd'),
                        $tlLoader->tl("literature", "literature", 'gnd_explica')
                    ),
                    "literature_isbn{$i}" => new FieldEntry(
                        false,
                        [],
                        ["literature_title{$i}"],
                        '',
                        $tlLoader->tl("literature", "literature", 'isbn'),
                        $tlLoader->tl("literature", "literature", 'isbn_explica')
                    ),
                    "literature_signature{$i}" => new FieldEntry(
                        false,
                        [],
                        ["literature_title{$i}"],
                        '',
                        $tlLoader->tl("literature", "literature", 'id_in_museum'),
                        $tlLoader->tl("literature", "literature", 'id_in_museum_explica')
                    ),
                    "literature_online{$i}" => new FieldEntry(
                        false,
                        [],
                        ["literature_title{$i}"],
                        '',
                        $tlLoader->tl("literature", "literature", 'online'),
                        $tlLoader->tl("literature", "literature", 'online_explica')
                    ),
                    "literature_annotation{$i}" => new FieldEntry(
                        false,
                        [],
                        ["literature_title{$i}"],
                        '',
                        $tlLoader->tl("literature", "literature", 'annotation'),
                        $tlLoader->tl("literature", "literature", 'annotation_explica')
                    ),
                    "literature_inlit{$i}" => new FieldEntry(
                        false,
                        [],
                        ["literature_title{$i}"],
                        '',
                        $tlLoader->tl("literature", "literature", 'where_inside'),
                        $tlLoader->tl("literature", "literature", 'where_in_explica')
                    ),
                ]
            );

        }

        // Collection names

        for ($i = 1; $i <= 2 * self::GENERAL_FIELD_MULTIPLIER; $i++) {

            $availableFields[$tlLoader->tl('csvxml-overview', 'csvxml_overview', 'object_base_data')]["collection_name{$i}"] = new FieldEntry(
                false,
                [],
                [],
                'Use if object belongs to a collection. If collection is already in museum-digital, please use exactly the same name',
                $tlLoader->tl("collection", "collection", 'name'),
                $tlLoader->tl("collection", "collection", 'samnam_explica'),
            );

        }

        for ($i = 1; $i <= 5 * self::GENERAL_FIELD_MULTIPLIER; $i++) {

            $availableFields[$tlLoader->tl("basis", "basis", 'objectgroup')] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'objectgroup')],
                [
                    "object_group_name{$i}" => new FieldEntry(
                        false,
                        [],
                        [],
                        '',
                        $tlLoader->tl("link", "link", 'series_name'),
                        $tlLoader->tl("link", "link", 'seriename_explica'),
                    ),
                    "object_group_description{$i}" => new FieldEntry(
                        false,
                        [],
                        ["object_group_name{$i}"],
                        '',
                        $tlLoader->tl("link", "link", 'series_description'),
                        $tlLoader->tl("link", "link", 'series_description'),
                    ),
                    "object_group_show{$i}" => new FieldEntry(
                        false,
                        ["y", "n"],
                        ["object_group_name{$i}"],
                        '',
                        $tlLoader->tl("link", "link", 'hide_objectgroup'),
                        ""
                    ),
                ]
            );

        }

        for ($i = 1; $i <= 10 * self::GENERAL_FIELD_MULTIPLIER; $i++) {

            $availableFields[$tlLoader->tl("overview", "overview", 'tags')]["tag" . $i] = new FieldEntry(
                false,
                [],
                [],
                '',
                $tlLoader->tl("overview", "overview", 'tags'),
                "",
            );
            $availableFields[$tlLoader->tl("overview", "overview", 'tags')]["tag_relation_type" . $i] = new FieldEntry(
                false,
                MDTagRelationType::caseNames(),
                ["tag" . $i],
                '',
                $tlLoader->tl("object_addendum", "object_add", 'tag_relation_type'),
                $tlLoader->tl("object_addendum", "object_add", 'tag_relation_type_explica'),
            );

        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {

            $availableFields[$tlLoader->tl("eventtype_name", "eventname", "22")] = array_merge(
                $availableFields[$tlLoader->tl("eventtype_name", "eventname", "22")],
                [
                    "related_place{$i}" => new FieldEntry(
                        false,
                        [],
                        ["related_place_sure{$i}"],
                        '',
                        $tlLoader->tl("event", "event", 'where'),
                        ""
                    ),
                    "related_place_sure{$i}" => new FieldEntry(
                        false,
                        ["y", "n"],
                        ["related_place{$i}"],
                        '',
                        $tlLoader->tl("event", "event", 'where') . " [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]",
                        ""
                    ),
                ]
            );

        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {

            $availableFields[$tlLoader->tl("eventtype_name", "eventname", "23")] = array_merge(
                $availableFields[$tlLoader->tl("eventtype_name", "eventname", "23")],
                [
                    "related_actor{$i}" => new FieldEntry(
                        false,
                        [],
                        ["related_actor_sure{$i}"],
                        '',
                        $tlLoader->tl("event", "event", 'who'),
                        ""
                    ),
                    "related_actor_sure{$i}" => new FieldEntry(
                        false,
                        ["y", "n"],
                        ["related_actor{$i}"],
                        '',
                        $tlLoader->tl("event", "event", 'who') . " [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]",
                        ""
                    ),
                    "related_actor_gnd{$i}" => new FieldEntry(
                        false,
                        [],
                        ["related_actor{$i}", "related_actor_sure{$i}"],
                        '',
                        $tlLoader->tl("event", "event", 'who') . " (" . $tlLoader->tl("event", "event", 'gnd') . ")",
                        ""
                    ),
                ]
            );

        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {

            $availableFields[$tlLoader->tl("eventtype_name", "eventname", "24")] = array_merge(
                $availableFields[$tlLoader->tl("eventtype_name", "eventname", "24")],
                [
                    "related_time{$i}" => new FieldEntry(
                        false,
                        [],
                        ["related_time_sure{$i}"],
                        '',
                        $tlLoader->tl("event", "event", 'when'),
                        ""
                    ),
                    "related_time_sure{$i}" => new FieldEntry(
                        false,
                        ["y", "n"],
                        ["related_time{$i}"],
                        '',
                        $tlLoader->tl("event", "event", 'when') . " [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]",
                        ""
                    ),
                ]
            );

        }

        for ($i = 1; $i <= 10 * self::GENERAL_FIELD_MULTIPLIER; $i++) {

            $availableFields[$tlLoader->tl('overview', 'overview', 'images')] = array_merge(
                $availableFields[$tlLoader->tl('overview', 'overview', 'images')],
                [
                    "image_name{$i}" => new FieldEntry(
                        false,
                        [],
                        [
                            "image_owner{$i}", "image_rights{$i}", "image_visible{$i}", "image_main{$i}"
                        ],
                        '',
                        $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'image_filename'),
                        ""
                    ),
                    "image_description{$i}" => new FieldEntry(
                        false,
                        [],
                        [
                            "image_name{$i}", "image_owner{$i}", "image_rights{$i}", "image_visible{$i}", "image_main{$i}"
                        ],
                        '',
                        $tlLoader->tl('image_incha', 'image_incha', 'image_description'),
                        $tlLoader->tl('image_incha', 'image_incha', 'bildbesch_explica'),
                    ),
                    "image_owner{$i}" => new FieldEntry(
                        false,
                        [],
                        [
                            "image_name{$i}", "image_rights{$i}", "image_visible{$i}", "image_main{$i}"
                        ],
                        '',
                        $tlLoader->tl('image_incha', 'image_incha', 'image_rightsholder'),
                        $tlLoader->tl('image_incha', 'image_incha', 'owner_explica'),
                    ),
                    "image_creator{$i}" => new FieldEntry(
                        false,
                        [],
                        [
                            "image_name{$i}", "image_owner{$i}", "image_rights{$i}", "image_visible{$i}", "image_main{$i}"
                        ],
                        '',
                        $tlLoader->tl('image_incha', 'image_incha', 'photographer'),
                        $tlLoader->tl('image_incha', 'image_incha', 'creator_explica'),
                    ),
                    "image_rights{$i}" => new FieldEntry(
                        false,
                        array_keys(MDLicensesSet::AVAILABLE_LICENSES),
                        [
                            "image_name{$i}", "image_owner{$i}", "image_visible{$i}", "image_main{$i}"
                        ],
                        '',
                        $tlLoader->tl('image_incha', 'image_incha', 'rights_status'),
                        $tlLoader->tl('image_incha', 'image_incha', 'rechte_explica'),
                    ),
                    "image_visible{$i}" => new FieldEntry(
                        false,
                        ["y", "n"],
                        [
                            "image_name{$i}", "image_owner{$i}", "image_rights{$i}", "image_main{$i}"
                        ],
                        '',
                        $tlLoader->tl("basis", "basis", 'image') . ": " . $tlLoader->tl("object", "objekt", 'visibility'),
                        ""
                    ),
                    "image_main{$i}" => new FieldEntry(
                        false,
                        ["y", "n"],
                        [
                            "image_name{$i}", "image_owner{$i}", "image_rights{$i}", "image_visible{$i}"
                        ],
                        '',
                        $tlLoader->tl("object", "object", 'main_image'),
                        ""
                    ),
                    "image_master_filename{$i}" => new FieldEntry(
                        false,
                        [],
                        [
                            "image_name{$i}", "image_owner{$i}", "image_rights{$i}", "image_visible{$i}", "image_main{$i}"
                        ],
                        '',
                        $tlLoader->tl('image_incha', 'image_incha', 'master_filename'),
                        $tlLoader->tl('image_incha', 'image_incha', 'master_filename_explica'),
                    ),
                ]
            );

        }

        for ($i = 1; $i <= 10 * self::GENERAL_FIELD_MULTIPLIER; $i++) {

            $availableFields[$tlLoader->tl("basis", "basis", 'resource')] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'resource')],
                [
                    "resource_media_type{$i}" => new FieldEntry(
                        false,
                        ['image', 'text', 'video', 'audio'],
                        [
                            "resource_fileformat{$i}", "resource_location{$i}", "resource_name{$i}", "resource_owner{$i}", "resource_rights{$i}", "resource_visible{$i}",
                        ],
                        'Allowed values: image, text, video, audio',
                        $tlLoader->tl("basis", "basis", 'resource') . ', ' . $tlLoader->tl("sources", "tlSources", 'type'),
                        ""
                    ),
                    "resource_fileformat{$i}" => new FieldEntry(
                        false,
                        [],
                        [
                            "resource_media_type{$i}", "resource_location{$i}", "resource_name{$i}", "resource_owner{$i}", "resource_rights{$i}", "resource_visible{$i}",
                        ],
                        'e.g. pdf, mp3',
                        $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'file_format'),
                        ""
                    ),
                    "resource_location{$i}" => new FieldEntry(
                        false,
                        [],
                        [
                            "resource_media_type{$i}", "resource_fileformat{$i}", "resource_name{$i}", "resource_owner{$i}", "resource_rights{$i}", "resource_visible{$i}",
                        ],
                        'In case the resource is stored externally: please include the whole path (incl. http or https) to the file. If the resource is uploaded to museum-digital: please put the filename here (e.g. file.pdf)',
                        $tlLoader->tl("resource_incha", "resource_incha", 'image_filename'),
                        ""
                    ),
                    "resource_name{$i}" => new FieldEntry(
                        false,
                        [],
                        [
                            "resource_media_type{$i}", "resource_fileformat{$i}", "resource_location{$i}", "resource_owner{$i}", "resource_rights{$i}", "resource_visible{$i}",
                        ],
                        'Use, if you want to give the resource an own name. If not, you might want to repeat the object_title',
                        $tlLoader->tl("resource_incha", "resource_incha", 'resource_name'),
                        $tlLoader->tl("resource_incha", "resource_incha", 'bildname_explica'),
                    ),
                    "resource_description{$i}" => new FieldEntry(
                        false,
                        ['Use if you want to describe the resource. Might be left empty.'],
                        [
                            "resource_media_type{$i}", "resource_fileformat{$i}", "resource_location{$i}", "resource_name{$i}", "resource_owner{$i}", "resource_rights{$i}", "resource_visible{$i}",
                        ],
                        '',
                        $tlLoader->tl("resource_incha", "resource_incha", 'resource_description'),
                        $tlLoader->tl("resource_incha", "resource_incha", 'bildbesch_explica'),
                    ),
                    "resource_owner{$i}" => new FieldEntry(
                        false,
                        [],
                        [
                            "resource_media_type{$i}", "resource_fileformat{$i}", "resource_location{$i}", "resource_name{$i}", "resource_rights{$i}", "resource_visible{$i}",
                        ],
                        'The owner should be named. Usually it is the institution uploading the resource.',
                        $tlLoader->tl("resource_incha", "resource_incha", 'resource_rightsholder'),
                        $tlLoader->tl("resource_incha", "resource_incha", 'owner_explica'),
                    ),
                    "resource_creator{$i}" => new FieldEntry(
                        false,
                        [],
                        [
                            "resource_media_type{$i}", "resource_fileformat{$i}", "resource_location{$i}", "resource_name{$i}", "resource_owner{$i}", "resource_rights{$i}", "resource_visible{$i}",
                        ],
                        'Name of the person that created the resource. Might be left empty.',
                        $tlLoader->tl("resource_incha", "resource_incha", 'creator'),
                        $tlLoader->tl("resource_incha", "resource_incha", 'creator_explica')
                    ),
                    "resource_rights{$i}" => new FieldEntry(
                        false,
                        array_keys(MDLicensesSet::AVAILABLE_LICENSES),
                        [
                            "resource_media_type{$i}", "resource_fileformat{$i}", "resource_location{$i}", "resource_name{$i}", "resource_owner{$i}", "resource_visible{$i}",
                        ],
                        '',
                        $tlLoader->tl("resource_incha", "resource_incha", 'rights_status'),
                        $tlLoader->tl("resource_incha", "resource_incha", 'rechte_explica'),
                    ),
                    "resource_visible{$i}" => new FieldEntry(
                        false,
                        ["y", "n"],
                        [
                            "resource_media_type{$i}", "resource_fileformat{$i}", "resource_location{$i}", "resource_name{$i}", "resource_owner{$i}", "resource_rights{$i}",
                        ],
                        'Should the resource be publicly visible? Allowed values are either y and n',
                        $tlLoader->tl("basis", "basis", 'resource') . ": " . $tlLoader->tl("object", "objekt", 'visibility'),
                        ""
                    ),
                ]
            );

        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "1")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "1")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "1"), "production", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "2")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "2")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "2"), "finding", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "3")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "3")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "3"), "publication", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "4")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "4")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "4"), "template_creation", $i)
            );
        }

        for ($i = 1; $i <= 5 * self::GENERAL_FIELD_MULTIPLIER; $i++) {

            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "5")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "5")],
                [
                    "was_depicted_who{$i}" => new FieldEntry(
                        false,
                        [],
                        ["was_depicted_who_sure{$i}"],
                        '',
                        $tlLoader->tl("event", "event", 'who'),
                        ""
                    ),
                    "was_depicted_who_sure{$i}" => new FieldEntry(
                        false,
                        ["y", "n"],
                        ["was_depicted_who{$i}"],
                        '',
                        $tlLoader->tl("event", "event", 'who') . " [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]",
                        ""
                    )
                ]
            );

        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {

            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "36")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "36")],
                [
                    "was_depicted_place{$i}" => new FieldEntry(
                        false,
                        [],
                        ["was_depicted_place_sure{$i}"],
                        '',
                        $tlLoader->tl("event", "event", 'where'),
                        ""
                    ),
                    "was_depicted_place_sure{$i}" => new FieldEntry(
                        false,
                        ["y", "n"],
                        ["was_depicted_place{$i}"],
                        '',
                        $tlLoader->tl("event", "event", 'where') . " [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]",
                        ""
                    ),
                ]
            );

        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "6")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "6")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "6"), "was_used", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "7")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "7")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "7"), "written", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "8")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "8")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "8"), "collected", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "9")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "9")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "9"), "painted", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "10")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "10")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "10"), "taken", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "11")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "11")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "11"), "received", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "12")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "12")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "12"), "printing_plate_produced", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "13")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "13")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "13"), "sent", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "14")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "14")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "14"), "issued", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "15")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "15")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "15"), "signed", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "16")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "16")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "16"), "type_described", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "19")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "19")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "19"), "drawn", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "20")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "20")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "20"), "copied", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "25")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "25")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "25"), "commissioned", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "26")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "26")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "26"), "printed", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "27")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "27")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "27"), "spoken", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "28")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "28")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "28"), "sung", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "29")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "29")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "29"), "decor_designed", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "30")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "30")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "30"), "form_designed", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "31")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "31")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "31"), "modelled", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "32")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "32")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "32"), "signed_artwork", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "33")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "33")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "33"), "was_mentioned", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "34")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "34")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "34"), "buried", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "35")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "35")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "35"), "intellectual_creation", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "37")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "37")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "37"), "painted_on", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "38")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "38")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "38"), "illustrated", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "39")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "39")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "39"), "assembled", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "40")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "40")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "40"), "auctioned", $i)
            );
        }

        // 41: Bought, and 42: Owned, and 43: Sold are skipped for now

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "44")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "44")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "44"), "restorated", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "45")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "45")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "45"), "damaged", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "46")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "46")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "46"), "destroyed", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "47")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "47")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "47"), "lost", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "48")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "48")],
                $this->_generateGenericFullEvent($tlLoader, $tlLoader->tl("eventtype_name", "eventname", "48"), "edited", $i)
            );
        }

        for ($i = 1; $i <= self::EVENT_MULTIPLIER * self::GENERAL_FIELD_MULTIPLIER; $i++) {

            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "21")] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $tlLoader->tl("eventtype_name", "eventname", "21")],
                [
                    "has_lived_when{$i}" => new FieldEntry(
                        false,
                        [],
                        ["has_lived_when_sure{$i}"],
                        '',
                        $tlLoader->tl("event", "event", 'when'),
                        ""
                    ),
                    "has_lived_when_sure{$i}" => new FieldEntry(
                        false,
                        ["y", "n"],
                        ["has_lived_when{$i}"],
                        '',
                        $tlLoader->tl("event", "event", 'when') . " [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]",
                        ""
                    ),
                    "has_lived_where{$i}" => new FieldEntry(
                        false,
                        [],
                        ["has_lived_where_sure{$i}"],
                        '',
                        $tlLoader->tl("event", "event", 'where'),
                        ""
                    ),
                    "has_lived_where_sure{$i}" => new FieldEntry(
                        false,
                        ["y", "n"],
                        ["has_lived_where{$i}"],
                        '',
                        $tlLoader->tl("event", "event", 'where') . " [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]",
                        ""
                    ),
                    "has_lived_annotation{$i}" => new FieldEntry(
                        false,
                        [],
                        [],
                        '',
                        $tlLoader->tl("event", "event", 'classic_annotation_intro'),
                        ""
                    ),
                ]
            );

        }

        for ($i = 1; $i <= 5 * self::GENERAL_FIELD_MULTIPLIER; $i++) {

            $availableFields[$tlLoader->tl("basis", "basis", "exhibitions")]["exhibition_name" . $i] = new FieldEntry(
                false,
                [],
                [],
                '',
                $tlLoader->tl("basis", "basis", "exhibitions"),
                "",
            );
            $availableFields[$tlLoader->tl("basis", "basis", "exhibitions")]["exhibition_description" . $i] = new FieldEntry(
                false,
                [],
                ["exhibition_name" . $i],
                '',
                $tlLoader->tl("basis", "basis", "exhibitions"),
                "",
            );
            $availableFields[$tlLoader->tl("basis", "basis", "exhibitions")]["exhibition_start" . $i] = new FieldEntry(
                false,
                [],
                ["exhibition_name" . $i],
                '',
                $tlLoader->tl("basis", "basis", "exhibitions"),
                "",
            );
            $availableFields[$tlLoader->tl("basis", "basis", "exhibitions")]["exhibition_end" . $i] = new FieldEntry(
                false,
                [],
                ["exhibition_name" . $i],
                '',
                $tlLoader->tl("basis", "basis", "exhibitions"),
                "",
            );

        }

        $this->_availableFields = $availableFields;

    }
}