Skip to content

Commit

Permalink
[import] fix measurement replacements
Browse files Browse the repository at this point in the history
  • Loading branch information
rastislav-chynoransky committed Dec 13, 2024
1 parent 9851bdd commit 1b4d8ec
Show file tree
Hide file tree
Showing 9 changed files with 375 additions and 90 deletions.
1 change: 1 addition & 0 deletions app/Enums/FrontendEnum.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ enum FrontendEnum: string
{
case WEBUMENIA = 'webumenia';
case MORAVSKA_GALERIE = 'moravska-galerie';
case UPM = 'upm';
}
8 changes: 8 additions & 0 deletions app/Import.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,14 @@ class Import extends Model
'completed_at' => 'datetime',
];

protected $fillable = [
'name',
'dir_path',
'iip_dir_path',
'class_name',
'disk',
];

public function user()
{
return $this->belongsTo(User::class);
Expand Down
144 changes: 144 additions & 0 deletions app/Importers/UpmImporter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
<?php

namespace App\Importers;

use App\Enums\FrontendEnum;

class UpmImporter extends AbstractImporter
{
protected $mapping = [
'identifier' => 'Inventárníčíslo',
'title:cs' => 'Název',
'title:sk' => 'Název',
'title:en' => 'Název EN',
'dating:cs' => 'Datace',
'dating:sk' => 'Datace',
'date_earliest' => 'Od',
'date_latest' => 'Do',
'work_type:cs' => 'Výtvarný druh',
'work_type:sk' => 'Výtvarný druh',
'object_type:cs' => 'Typ',
'object_type:sk' => 'Typ',
'medium:cs' => 'Materiál',
'medium:sk' => 'Materiál',
'technique:cs' => 'Technika',
'technique:sk' => 'Technika',
'topic:cs' => 'Námět',
'topic:sk' => 'Námět',
'inscription:cs' => 'Značení',
'inscription:sk' => 'Značení',
'related_work:sk' => 'Sbírka',
'related_work:cs' => 'Sbírka',
'acquisition_date' => 'Datum akvizice',
];

protected $defaults = [
'relationship_type:sk' => 'zo súboru',
'relationship_type:cs' => 'ze souboru',
'relationship_type:en' => 'collection',
'gallery:cs' => 'Uměleckoprůmyslové museum v Praze, UPM',
'gallery:sk' => 'Umeleckopriemyselné múzeum v Prahe, UPM',
'frontends' => [
FrontendEnum::UPM,
FrontendEnum::WEBUMENIA,
],
];

protected static $options = [
'delimiter' => ';',
'enclosure' => '"',
'escape' => '\\',
'newline' => "\n",
];

protected function init()
{
$this->sanitizers[] = function ($value) {
return empty_to_null(trim($value));
};
}

protected function getItemId(array $record)
{
return 'CZE:UPM.' . str($record['ID'])
->explode('_')
->transform(fn ($part) => str($part)
->replaceMatches('/\W/', '-')
->trim('-')
)
->join('_');
}

protected function getItemImageFilenameFormat(array $record): string
{
return str($record['ID'])
->explode('_')
->transform(fn ($part) => '0*' . preg_quote($part))
->join('_') . '(_.*)?';
}

protected function hydrateAuthor(array $record): string
{
$authors = str($record['Autor']);
if ($authors->isEmpty()) {
return 'Neznámý autor';
}

return $authors
->split('/\s*;\s*/')
->map(function (string $author) {
preg_match('/^(?<name>[^–]*)(\s–\s(?<role>.*))?$/', $author, $matches);

if (!isset($matches['name'], $matches['role'])) {
return $author;
}

return sprintf('%s (%s)', formatName($matches['name']), $matches['role']);
})
->join('; ');
}

protected function hydratePlace(array $record, string $locale): ?string
{
if (!in_array($locale, ['cs', 'sk'])) {
return null;
}

$place = str($record['Vznik'])->match('/^([^;]+)/');
return $place->isNotEmpty() ? $place->toString() : null;
}

protected function hydrateAdditionals(array $record, string $locale): ?array
{
if ($locale !== 'cs') {
return null;
}

$additionals = [];

if ($record['Způsob akvizice'] !== null) {
$additionals['acquisition'] = $record['Způsob akvizice'];
}

if ($record['Výstava'] !== null) {
$additionals['exhibition'] = $record['Výstava'];
}

$producer = str($record['Vznik'])->match('/;(.+)/');
if ($producer->isNotEmpty()) {
$additionals['producer'] = $producer->toString();
}

return $additionals ?: null;
}

protected function hydrateMeasurement(array $record, $locale): ?string
{
if (empty($record['Rozměry'])) {
return null;
}

$replacements = trans('item.measurement_replacements', [], $locale);
return strtr($record['Rozměry'], $replacements);
}
}
1 change: 1 addition & 0 deletions database/seeders/DatabaseSeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ public function run()
$this->call(CollectionsTableSeeder::class);
$this->call(CategoriesTableSeeder::class);
$this->call(ArticlesTableSeeder::class);
$this->call(ImportsTableSeeder::class);

// $this->call(SketchbooksTableSeeder::class);
}
Expand Down
21 changes: 21 additions & 0 deletions database/seeders/ImportsTableSeeder.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php

namespace Database\Seeders;

use App\Import;
use App\Importers\UpmImporter;
use Illuminate\Database\Seeder;

class ImportsTableSeeder extends Seeder
{
public function run()
{
Import::create([
'name' => 'UPM',
'dir_path' => 'UPM',
'iip_dir_path' => 'UPM',
'class_name' => UpmImporter::class,
'disk' => 'import_iip',
]);
}
}
59 changes: 29 additions & 30 deletions lang/cs/item.php
Original file line number Diff line number Diff line change
Expand Up @@ -108,36 +108,35 @@
],
],
'measurement_replacements' => [
'a' => 'výška hlavní části',
'a.' => 'výška hlavní části',
'b' => 'výška vedlejší části',
'b.' => 'výška vedlejší části',
'čas' => 'čas',
'd' => 'délka',
'd.' => 'délka',
'h' => 'hloubka/tloušťka',
'h.' => 'hloubka/tloušťka',
'hmot' => 'hmotnost',
'hmot.' => 'hmotnost',
'hr' => 'hloubka s rámem',
'jiný' => 'jiný nespecifikovaný',
'p' => 'průměr/ráže',
'p.' => 'průměr/ráže',
'r.' => 'ráže',
'ryz' => 'ryzost',
's' => 'šířka',
's.' => 'šířka',
'sd.' => 'šířka grafické desky',
'sp' => 'šířka s paspartou',
'sp.' => 'šířka s paspartou',
'sr' => 'šířka s rámem',
'v' => 'celková výška/délka',
'v.' => 'celková výška/délka',
'vd.' => 'výška grafické desky',
'vp' => 'výška s paspartou',
'vp.' => 'výška s paspartou',
'vr' => 'výška s rámem',
'=' => ' ',
'a=' => 'výška hlavní části ',
'a.=' => 'výška hlavní části ',
'b=' => 'výška vedlejší části ',
'b.=' => 'výška vedlejší části ',
'čas=' => 'čas ',
'd=' => 'délka ',
'd.=' => 'délka ',
'h=' => 'hloubka/tloušťka ',
'h.=' => 'hloubka/tloušťka ',
'hmot=' => 'hmotnost ',
'hmot.=' => 'hmotnost ',
'hr=' => 'hloubka s rámem ',
'jiný=' => 'jiný nespecifikovaný ',
'p=' => 'průměr/ráže ',
'p.=' => 'průměr/ráže ',
'r.=' => 'ráže ',
'ryz=' => 'ryzost ',
's=' => 'šířka ',
's.=' => 'šířka ',
'sd.=' => 'šířka grafické desky ',
'sp=' => 'šířka s paspartou ',
'sp.=' => 'šířka s paspartou ',
'sr=' => 'šířka s rámem ',
'v=' => 'celková výška/délka ',
'v.=' => 'celková výška/délka ',
'vd.=' => 'výška grafické desky ',
'vp=' => 'výška s paspartou ',
'vp.=' => 'výška s paspartou ',
'vr=' => 'výška s rámem ',
],
'untitled' => 'bez názvu',
'authority_roles' => [
Expand Down
59 changes: 29 additions & 30 deletions lang/en/item.php
Original file line number Diff line number Diff line change
Expand Up @@ -105,36 +105,35 @@
],
],
'measurement_replacements' => [
'a' => 'height of the main part',
'a.' => 'height of the main part',
'b' => 'height of the secondary part',
'b.' => 'height of the secondary part',
'čas' => 'time',
'd' => 'length',
'd.' => 'length',
'h' => 'depth/thickness',
'h.' => 'depth/thickness',
'hmot' => 'mass',
'hmot.' => 'mass',
'hr' => 'depth with frame',
'jiný' => 'other, unspecified',
'p' => 'diameter, calibre/gauge',
'p.' => 'diameter, calibre/gauge',
'r.' => 'calibre/gauge',
'ryz' => 'purity',
's' => 'width',
's.' => 'width',
'sd.' => 'width of the printing plate',
'sp' => 'width with mount',
'sp.' => 'width with mount',
'sr' => 'width with frame',
'v' => 'overall height/length',
'v.' => 'overall height/length',
'vd.' => 'height of the printing plate',
'vp' => 'height with mount',
'vp.' => 'height with mount',
'vr' => 'height with frame',
'=' => ' ',
'a=' => 'height of the main part ',
'a.=' => 'height of the main part ',
'b=' => 'height of the secondary part ',
'b.=' => 'height of the secondary part ',
'čas=' => 'time ',
'd=' => 'length ',
'd.=' => 'length ',
'h=' => 'depth/thickness ',
'h.=' => 'depth/thickness ',
'hmot=' => 'mass ',
'hmot.=' => 'mass ',
'hr=' => 'depth with frame ',
'jiný=' => 'other, unspecified ',
'p=' => 'diameter, calibre/gauge ',
'p.=' => 'diameter, calibre/gauge ',
'r.=' => 'calibre/gauge ',
'ryz=' => 'purity ',
's=' => 'width ',
's.=' => 'width ',
'sd.=' => 'width of the printing plate ',
'sp=' => 'width with mount ',
'sp.=' => 'width with mount ',
'sr=' => 'width with frame ',
'v=' => 'overall height/length ',
'v.=' => 'overall height/length ',
'vd.=' => 'height of the printing plate ',
'vp=' => 'height with mount ',
'vp.=' => 'height with mount ',
'vr=' => 'height with frame ',
],
'untitled' => 'untitled',
'authority_roles' => [
Expand Down
59 changes: 29 additions & 30 deletions lang/sk/item.php
Original file line number Diff line number Diff line change
Expand Up @@ -105,36 +105,35 @@
],
],
'measurement_replacements' => [
'a' => 'výška hlavnej časti',
'a.' => 'výška hlavnej časti',
'b' => 'výška vedľajšej časti',
'b.' => 'výška vedľajšej časti',
'čas' => 'čas',
'd' => 'dĺžka',
'd.' => 'dĺžka',
'h' => 'hĺbka/hrúbka',
'h.' => 'hĺbka/hrúbka',
'hmot' => 'hmotnosť',
'hmot.' => 'hmotnosť',
'hr' => 'hĺbka s rámom',
'jiný' => 'nešpecifikované',
'p' => 'priemer',
'p.' => 'priemer',
'r.' => 'ráž',
'ryz' => 'rýdzosť',
's' => 'šírka',
's.' => 'šírka',
'sd.' => 'šírka grafickej plochy',
'sp' => 'šírka s paspartou',
'sp.' => 'šírka s paspartou',
'sr' => 'šírka s rámom',
'v' => 'celková výška/dĺžka',
'v.' => 'celková výška/dĺžka',
'vd.' => 'výška grafickej dosky',
'vp' => 'výška s paspartou',
'vp.' => 'výška s paspartou',
'vr' => 'výška s rámom',
'=' => ' ',
'a=' => 'výška hlavnej časti ',
'a.=' => 'výška hlavnej časti ',
'b=' => 'výška vedľajšej časti ',
'b.=' => 'výška vedľajšej časti ',
'čas=' => 'čas ',
'd=' => 'dĺžka ',
'd.=' => 'dĺžka ',
'h=' => 'hĺbka/hrúbka ',
'h.=' => 'hĺbka/hrúbka ',
'hmot=' => 'hmotnosť ',
'hmot.=' => 'hmotnosť ',
'hr=' => 'hĺbka s rámom' ,
'jiný=' => 'nešpecifikované ',
'p=' => 'priemer ',
'p.=' => 'priemer ',
'r.=' => 'ráž ',
'ryz=' => 'rýdzosť ',
's=' => 'šírka ',
's.=' => 'šírka ',
'sd.=' => 'šírka grafickej plochy ',
'sp=' => 'šírka s paspartou ',
'sp.=' => 'šírka s paspartou ',
'sr=' => 'šírka s rámom ',
'v=' => 'celková výška/dĺžka ',
'v.=' => 'celková výška/dĺžka ',
'vd.=' => 'výška grafickej dosky ',
'vp=' => 'výška s paspartou ',
'vp.=' => 'výška s paspartou ',
'vr=' => 'výška s rámom ',
],
'untitled' => 'bez názvu',
'authority_roles' => [
Expand Down
Loading

0 comments on commit 1b4d8ec

Please sign in to comment.