<?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 {

    /** @var array<mixed> */
    private array $_availableFields;

    /**
     * Getter for available fields.
     *
     * @return array<mixed>
     */
    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   $dependsOn     Dependent fields. Optional.
     * @param array   $allowedValues Allowed values. Optional.
     * @param string  $remark        Explanation of the field (for importer). Optional.
     * @param boolean $required      Determines whether the field is required. Defaults
                                     to false.
     *
     * @return array
     */
    private function _getSimpleAvailableFieldEntry(string $nameTL = "", string $explica = "", array $dependsOn = [], array $allowedValues = [], string $remark = "", bool $required = false):array {
        return [
                "required"            => $required,
                "allowedValues"       => $allowedValues,
                "dependsOn"           => $dependsOn,
                "remark"              => $remark,
                "name_human_readable" => $nameTL,
                "explica"             => $explica,
        ];

    }

    /**
     * Function for building a generic event type definition.
     *
     * @param string[]   $event    Translation variable.
     * @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
     */
    private function _generateGenericFullEvent(array $event, MDTlLoader $tlLoader, string $typeName, string $type, int $number):array {

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

    }

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

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

        foreach (MD_STD::scandir(__DIR__ . "/../l10n/musdb/$lang/") as $fileName) {
            if (in_array($fileName, ['start.php', 'start2.php'])) continue;
            include __DIR__ . "/../l10n/musdb/{$lang}/{$fileName}";
        }

        include __DIR__ . "/../commonservices/$lang/search_all_fields.php";
        include __DIR__ . "/../commonservices/units.php";
        include __DIR__ . "/../classes/MDAllowedValueSets/l18n/$lang/eventtype_name.php";

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

        if (empty($fieldNoMultiplicator) or !is_numeric($fieldNoMultiplicator)) {
            $fieldNoMultiplicator = 1;
        }

        $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?',
                    $objekt['visibility'],
                    ''
                ),
                "institution_name" => new FieldEntry(
                    false,
                    [],
                    [],
                    'If name of institution is given it has to be exactly the same as already known in museum-digital',
                    $museum['museum_name'],
                    $museum['musnam_explica']
                ),
            ],
            $searchvar[0][0] => [
                "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>',
                    $searchvar[0][0],
                    ''
                ),
                "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>',
                    $searchvar[0][0] . ', in: ',
                    ''
                ),
            ],
            $searchvar[46][0] => [
                "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',
                    $searchvar[46][0],
                    $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_desription</i> is available for an object, <i>detailed_description_md</i> and <i>detailed_description_extern</i> have to have values too',
                    $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_desription</i> is available for an object, <i>detailed_description_md</i> and <i>detailed_description_extern</i> have to have values too',
                    $object_add['ddesc_visibility_extern'],
                    "",
                ),
            ],
            $searchvar[2][0] => [
                "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',
                    $searchvar[2][0],
                    $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',
                    $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',
                    $object_add['besch_visibility_extern'],
                    ""
                ),
            ],
            "{$searchvar[52][0]} / {$searchvar[53][0]}" => [
                "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',
                    $searchvar[52][0],
                    ""
                ),
                "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',
                    $searchvar[53][0],
                    ""
                ),
            ],
            $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.',
                    $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.',
                    $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.',
                    $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.',
                    $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.',
                    $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.',
                    $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.',
                    $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.',
                    $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.',
                    $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.',
                    $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.',
                    $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.',
                    $export['exact_measurements_wall_size_unit'],
                    ""
                ),
                "dimensions_separate_show_md" => new FieldEntry(
                    false,
                    ["y", "n"],
                    [
                        "dimensions_separate_length_value", "dimensions_separate_length_unit", "dimensions_separate_width_value",
                        "dimensions_separate_width_unit", "dimensions_separate_height_value", "dimensions_separate_height_unit",
                        "dimensions_separate_weight_value", "dimensions_separate_weight_unit", "dimensions_separate_diameter_value",
                        "dimensions_separate_diameter_unit", "dimensions_separate_wall_thickness_value", "dimensions_separate_wall_thickness_unit"
                    ],
                    '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_basis", "object_basis", 'inventory_number'),
                    ""
                ),
                "dimensions_separate_show_extern" => new FieldEntry(
                    false,
                    ["y", "n"],
                    [
                        "dimensions_separate_length_value", "dimensions_separate_length_unit", "dimensions_separate_width_value",
                        "dimensions_separate_width_unit", "dimensions_separate_height_value", "dimensions_separate_height_unit",
                        "dimensions_separate_weight_value", "dimensions_separate_weight_unit", "dimensions_separate_diameter_value",
                        "dimensions_separate_diameter_unit", "dimensions_separate_wall_thickness_value", "dimensions_separate_wall_thickness_unit"
                    ],
                    '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_basis", "object_basis", 'inventory_number'),
                    ""
                ),
                "number_of_pieces" => new FieldEntry(
                    false,
                    [],
                    [],
                    'Only to be given if more than one copies of an object are available and catalogued with the same inventory number',
                    $export['exact_measurements_number_pieces'],
                    ""
                ),
                "number_of_pages" => new FieldEntry(
                    false,
                    [],
                    [],
                    'Only to be given for books (etc.)',
                    $export['exact_measurements_number_pages'],
                    ""
                ),
                "dimensions_separate_stamp_position" => new FieldEntry(
                    false,
                    [],
                    ['dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    '',
                    $export['exact_measurements_stamp_position'],
                    ""
                ),
            ],
            $searchvar[11][0] => [
                "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',
                    $searchvar[11][0],
                    $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?',
                    $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?',
                    $object_add['vergl_visibility_extern'],
                    ""
                ),
            ],
            $searchvar[1][0] => [
                "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>',
                    $searchvar[1][0],
                    $object_add['loka_inhalt']
                ),
                "closer_location_as" => new FieldEntry(
                    false,
                    array_values($ortart),
                    ['closer_location'],
                    'A place in a special relation to the object can be given in <i>closer_location</i>. Here the kind of relation between object and place has to specified',
                    "{$searchvar[1][0]}, {$object_add['as']}",
                    ""
                ),
            ],
            $object_add['classification'] => [
                "entry_number" => new FieldEntry(
                    false,
                    [],
                    [],
                    'The entry number of the object if available',
                    $searchvar[12][0],
                    $object_add['einu_inhalt']
                ),
                "other_inventory_number" => new FieldEntry(
                    false,
                    [],
                    [],
                    'All other inventory numbers (older ones presumably) in one field',
                    $searchvar[13][0],
                    $object_add['invp_inhalt']
                ),
                "subject_group" => new FieldEntry(
                    false,
                    [],
                    [],
                    'If the object is part of an subject group this information should be given here',
                    $searchvar[16][0],
                    ""
                ),
                "systematic" => new FieldEntry(
                    false,
                    [],
                    [],
                    'If the object is put into a museum-systematic the place it has there',
                    $searchvar[17][0],
                    ""
                ),
                "bundle" => new FieldEntry(
                    false,
                    [],
                    [],
                    'The bundle the object belongs to',
                    $searchvar[14][0],
                    ""
                ),
                "part_of" => new FieldEntry(
                    false,
                    [],
                    [],
                    'If the object is part of something it can be given here',
                    $searchvar[15][0],
                    ""
                ),
            ],
            $tlLoader->tl("basis", "basis", 'administration') => [
                "inclusion_when" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[19][0],
                    $tlLoader->tl("object_basis", "object_basis", 'inv_explica')
                ),
                "inclusion_kind_of" => new FieldEntry(
                    false,
                    MDEntryTypesSet::getSortedList($tlLoader),
                    [],
                    '',
                    "{$searchvar[19][0]}, {$object_add['as']}",
                    ""
                ),
                "inclusion_who" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    "{$searchvar[47][0]}",
                    ""
                ),
                "inclusion_where" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[48][0],
                    ""
                ),
                "registration_first_who" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[49][0],
                    ""
                ),
                "registration_first_when" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[50][0],
                    ""
                ),
            ],
            $object_add['object_history'] => [
                "owner_previous" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[18][0],
                    $object_add['vorb_inhalt']
                ),
                "object_history" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[22][0],
                    $object_add['obge_inhalt']
                ),
                "bought_for" => new FieldEntry(
                    false,
                    [],
                    ["bought_for_currency"],
                    '',
                    "{$searchvar[19][0]}, {$object_add['for']}",
                    $tlLoader->tl("object_basis", "object_basis", 'inv_explica')
                ),
                "bought_for_currency" => new FieldEntry(
                    false,
                    $currencies,
                    ["bought_for"],
                    '',
                    "{$searchvar[19][0]}, {$object_add['for']}",
                    ""
                ),
            ],
            $object_add['values'] => [
                "worth_determiner" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    "{$searchvar[23][0]}; {$object_add['by']}",
                    ""
                ),
                "worth_when" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[23][0],
                    ""
                ),
                "worth_value" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    "{$searchvar[23][0]}; {$object_add['at']}",
                    ""
                ),
                "worth_unit" => new FieldEntry(
                    false,
                    $currencies,
                    [],
                    '',
                    "{$searchvar[23][0]}; Currency",
                    ""
                ),
                "worth_insurance_determiner" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    "{$searchvar[26][0]}; {$object_add['by']}",
                    ""
                ),
                "worth_insurance_when" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    "{$searchvar[26][0]}",
                    ""
                ),
                "worth_insurance_value" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    "{$searchvar[26][0]}; {$object_add['at']}",
                    ""
                ),
                "worth_insurance_unit" => new FieldEntry(
                    false,
                    $currencies,
                    [],
                    '',
                    "{$searchvar[26][0]}; Currency",
                    ""
                ),
            ],
            $object_add['state'] => [
                "state" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[29][0],
                    $object_add['zust_inhalt']
                ),
                "restauration" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[30][0],
                    $object_add['rest_inhalt']
                ),
            ],
            $tlLoader->tl("basis", "basis", 'abode') => [
                "abode_actual" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[31][0],
                    $object_add['aktu_inhalt']
                ),
                "abode_regular" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[32][0],
                    $object_add['stan_inhalt']
                ),
                "exhibition" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[33][0],
                    $object_add['aust_inhalt']
                ),
                "on_loan_to" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[34][0],
                    $object_add['verl_inhalt']
                ),
                "on_loan_contact" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[35][0],
                    $object_add['ansp_inhalt']
                ),
                "on_loan_when" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[36][0],
                    $object_add['vher_inhalt']
                ),
                "on_loan_insurance_value" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[37][0],
                    $object_add['vlei_inhalt']
                ),
                "on_loan_annotation" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[38][0],
                    $object_add['alei_inhalt']
                ),
            ],
            $tlLoader->tl("basis", "basis", 'rights') => [
                "rights_object" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[39][0],
                    $object_add['urhe_inhalt']
                ),
                "rights_of_use" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[40][0],
                    $object_add['nure_inhalt']
                ),
                "rights_annotation" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[41][0],
                    $object_add['arec_inhalt']
                ),
                "rights_metadata_holder" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $object_add['metadata_rights_holder'],
                    ""
                ),
                "rights_metadata_license" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $object_add['metadata_rights_status'],
                    ""
                ),
            ],
            $tlLoader->tl("basis", "basis", 'remarks') => [
                "remarks_short" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[42][0],
                    $object_add['kurz_inhalt'],
                ),
                "remarks_long" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[43][0],
                    $object_add['noti_inhalt']
                ),
                "images_in_museum" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[44][0],
                    $object_add['oaim_inhalt']
                ),
                "documents_in_museum" => new FieldEntry(
                    false,
                    [],
                    [],
                    '',
                    $searchvar[45][0],
                    $object_add['odim_inhalt']
                ),
            ],
            $overview['links'] => [],
            $overview['links'] . ": " . $tlLoader->tl("basis", "basis", 'single_object') => [],
            "translations" => [],
            $tlLoader->tl("basis", "basis", 'literature') => [],
            $tlLoader->tl("basis", "basis", 'objectgroup') => [],
            $overview['tags'] => [],
            $tlLoader->tl("eventtype_name", "eventname", "22") => [],
            $tlLoader->tl("eventtype_name", "eventname", "23") => [],
            $tlLoader->tl("eventtype_name", "eventname", "24") => [],
            $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") => [],
        ];

        /*
         * Repeat fields
         */

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {

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

        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {

            $availableFields[$overview['links'] . ": " . $tlLoader->tl("basis", "basis", 'single_object')] = array_merge(
                $availableFields[$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 * $fieldNoMultiplicator; $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 * $fieldNoMultiplicator; $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 * $fieldNoMultiplicator; $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',
                $collection['name'],
                $collection['samnam_explica']
            );

        }

        for ($i = 1; $i <= 5 * $fieldNoMultiplicator; $i++) {

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

        }

        for ($i = 1; $i <= 10 * $fieldNoMultiplicator; $i++) {

            $availableFields[$overview['tags']]["tag{$i}"] = new FieldEntry(
                false,
                [],
                [],
                '',
                $overview['tags'],
                ""
            );

        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {

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

        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {

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

        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {

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

        }

        for ($i = 1; $i <= 10 * $fieldNoMultiplicator; $i++) {

            $availableFields[$overview['images']] = array_merge(
                $availableFields[$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}"
                        ],
                        '',
                        $image_incha['image_description'],
                        $image_incha['bildbesch_explica']
                    ),
                    "image_owner{$i}" => new FieldEntry(
                        false,
                        [],
                        [
                            "image_name{$i}", "image_rights{$i}", "image_visible{$i}", "image_main{$i}"
                        ],
                        '',
                        $image_incha['image_rightsholder'],
                        $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}"
                        ],
                        '',
                        $image_incha['photographer'],
                        $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}"
                        ],
                        '',
                        $image_incha['rights_status'],
                        $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') . ": {$objekt['visibility']}",
                        ""
                    ),
                    "image_main{$i}" => new FieldEntry(
                        false,
                        ["y", "n"],
                        [
                            "image_name{$i}", "image_owner{$i}", "image_rights{$i}", "image_visible{$i}"
                        ],
                        '',
                        $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}"
                        ],
                        '',
                        $image_incha['master_filename'],
                        $image_incha['master_filename_explica']
                    ),
                ]
            );

        }

        for ($i = 1; $i <= 10 * $fieldNoMultiplicator; $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') . ', ' . $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)',
                        $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',
                        $resource_incha['resource_name'],
                        $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}",
                        ],
                        '',
                        $resource_incha['resource_description'],
                        $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.',
                        $resource_incha['resource_rightsholder'],
                        $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.',
                        $resource_incha['creator'],
                        $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}",
                        ],
                        '',
                        $resource_incha['rights_status'],
                        $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') . ": {$objekt['visibility']}",
                        ""
                    ),
                ]
            );

        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "1"), "production", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "2"), "finding", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "3"), "publication", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "4"), "template_creation", $i)
            );
        }

        for ($i = 1; $i <= 5 * $fieldNoMultiplicator; $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}"],
                        '',
                        $event['who'],
                        ""
                    ),
                    "was_depicted_who_sure{$i}" => new FieldEntry(
                        false,
                        ["y", "n"],
                        ["was_depicted_who{$i}"],
                        '',
                        $event['who'] . " [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]",
                        ""
                    )
                ]
            );

        }

        for ($i = 1; $i <= 5 * $fieldNoMultiplicator; $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}"],
                        '',
                        $event['where'],
                        ""
                    ),
                    "was_depicted_place_sure{$i}" => new FieldEntry(
                        false,
                        ["y", "n"],
                        ["was_depicted_place{$i}"],
                        '',
                        $event['where'] . " [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]",
                        ""
                    ),
                ]
            );

        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "6"), "was_used", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "7"), "written", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "8"), "collected", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "9"), "painted", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "10"), "taken", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "11"), "received", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "12"), "printing_plate_produced", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "13"), "sent", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "14"), "issued", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "15"), "signed", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "16"), "type_described", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "19"), "drawn", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "20"), "copied", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "25"), "commissioned", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "26"), "printed", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "27"), "spoken", $i)
            );
        }

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

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "29"), "decor_designed", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "30"), "form_designed", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "31"), "modelled", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "32"), "signed_artwork", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "33"), "was_mentioned", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "34"), "buried", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "35"), "intellectual_creation", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "37"), "painted_on", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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($event, $tlLoader, $tlLoader->tl("eventtype_name", "eventname", "38"), "illustrated", $i)
            );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $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}"],
                        '',
                        $event['when'],
                        ""
                    ),
                    "has_lived_when_sure{$i}" => new FieldEntry(
                        false,
                        ["y", "n"],
                        ["has_lived_when{$i}"],
                        '',
                        $event['when'] . " [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]",
                        ""
                    ),
                    "has_lived_where{$i}" => new FieldEntry(
                        false,
                        [],
                        ["has_lived_where_sure{$i}"],
                        '',
                        $event['where'],
                        ""
                    ),
                    "has_lived_where_sure{$i}" => new FieldEntry(
                        false,
                        ["y", "n"],
                        ["has_lived_where{$i}"],
                        '',
                        $event['where'] . " [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]",
                        ""
                    ),
                    "has_lived_annotation{$i}" => new FieldEntry(
                        false,
                        [],
                        [],
                        '',
                        $event['classic_annotation_intro'],
                        ""
                    ),
                ]
            );

        }

        $this->_availableFields = $availableFields;

    }
}