From 781163ab0b063b113714039c54ac97c2be62131b Mon Sep 17 00:00:00 2001 From: olga-kulish Date: Wed, 15 Jan 2025 15:33:14 +0300 Subject: [PATCH 1/6] feat: language service: add vertical writing mode property --- locales/ja-HS/lang.rdf | 1 + locales/ja-JP/lang.rdf | 1 + locales/ja-LE/lang.rdf | 1 + locales/ja-UE/lang.rdf | 1 + models/classes/Language/Language.php | 19 ++++++++++++++++--- .../Repository/LanguageRepository.php | 15 +++++++++++++-- models/classes/class.LanguageService.php | 3 +++ models/ontology/tao.rdf | 16 ++++++++++++++++ 8 files changed, 52 insertions(+), 5 deletions(-) diff --git a/locales/ja-HS/lang.rdf b/locales/ja-HS/lang.rdf index c60c1aecd4..86b648cfa6 100755 --- a/locales/ja-HS/lang.rdf +++ b/locales/ja-HS/lang.rdf @@ -12,5 +12,6 @@ + diff --git a/locales/ja-JP/lang.rdf b/locales/ja-JP/lang.rdf index 8a46983729..abde10134a 100755 --- a/locales/ja-JP/lang.rdf +++ b/locales/ja-JP/lang.rdf @@ -12,5 +12,6 @@ + diff --git a/locales/ja-LE/lang.rdf b/locales/ja-LE/lang.rdf index da8da48f68..90bcbfc8da 100755 --- a/locales/ja-LE/lang.rdf +++ b/locales/ja-LE/lang.rdf @@ -12,5 +12,6 @@ + diff --git a/locales/ja-UE/lang.rdf b/locales/ja-UE/lang.rdf index c3961e14ac..ded70c37a5 100755 --- a/locales/ja-UE/lang.rdf +++ b/locales/ja-UE/lang.rdf @@ -12,5 +12,6 @@ + diff --git a/models/classes/Language/Language.php b/models/classes/Language/Language.php index 53c23fa762..85fb9c868e 100644 --- a/models/classes/Language/Language.php +++ b/models/classes/Language/Language.php @@ -40,12 +40,16 @@ class Language implements JsonSerializable /** @var string */ private $orientation; - public function __construct(string $uri, string $code, string $label, string $orientation) + /** @var ?string */ + private $verticalWritingMode; + + public function __construct(string $uri, string $code, string $label, string $orientation, ?string $verticalWritingMode) { $this->uri = $uri; $this->code = $code; $this->orientation = $orientation; $this->label = $label; + $this->verticalWritingMode = $verticalWritingMode; } public function getUri(): string @@ -68,13 +72,22 @@ public function getOrientation(): string return $this->orientation; } + public function getVerticalWritingMode(): string + { + return $this->verticalWritingMode; + } + public function jsonSerialize(): array { - return [ + $properties = [ 'uri' => $this->uri, 'code' => $this->code, 'label' => $this->label, - 'orientation' => $this->orientation, + 'orientation' => $this->orientation ]; + if ($this->verticalWritingMode) { + $properties['verticalWritingMode'] = $this->verticalWritingMode; + } + return $properties; } } diff --git a/models/classes/Language/Repository/LanguageRepository.php b/models/classes/Language/Repository/LanguageRepository.php index 11acd4aeb4..a049f97011 100644 --- a/models/classes/Language/Repository/LanguageRepository.php +++ b/models/classes/Language/Repository/LanguageRepository.php @@ -59,18 +59,29 @@ public function findAvailableLanguagesByUsage(): LanguageCollection $values = $language->getPropertiesValues( [ OntologyRdf::RDF_VALUE, - tao_models_classes_LanguageService::PROPERTY_LANGUAGE_ORIENTATION + tao_models_classes_LanguageService::PROPERTY_LANGUAGE_ORIENTATION, + tao_models_classes_LanguageService::PROPERTY_LANGUAGE_VERTICAL_WRITING_MODE ] ); $orientationUri = $values[tao_models_classes_LanguageService::PROPERTY_LANGUAGE_ORIENTATION][0]->getUri(); + $verticalWritingMode = null; + $verticalWritingModePropVal = $values[tao_models_classes_LanguageService::PROPERTY_LANGUAGE_VERTICAL_WRITING_MODE]; + if ($verticalWritingModePropVal) { + $verticalWritingModeUri = $verticalWritingModePropVal[0]->getUri(); + $verticalWritingMode = $verticalWritingModeUri === tao_models_classes_LanguageService::INSTANCE_VERTICAL_WRITING_MODE_RL + ? 'vertical-rl' + : 'vertical-lr'; + } + $output->add( new Language( $language->getUri(), $values[OntologyRdf::RDF_VALUE][0]->__toString(), $language->getLabel(), - $orientationUri === tao_models_classes_LanguageService::INSTANCE_ORIENTATION_RTL ? 'rtl' : 'ltr' + $orientationUri === tao_models_classes_LanguageService::INSTANCE_ORIENTATION_RTL ? 'rtl' : 'ltr', + $verticalWritingMode ) ); } diff --git a/models/classes/class.LanguageService.php b/models/classes/class.LanguageService.php index ced0c648ba..cd570b5125 100644 --- a/models/classes/class.LanguageService.php +++ b/models/classes/class.LanguageService.php @@ -49,10 +49,13 @@ class tao_models_classes_LanguageService extends tao_models_classes_GenerisServi public const CLASS_URI_LANGUAGES_USAGES = 'http://www.tao.lu/Ontologies/TAO.rdf#LanguagesUsages'; public const PROPERTY_LANGUAGE_USAGES = 'http://www.tao.lu/Ontologies/TAO.rdf#LanguageUsages'; public const PROPERTY_LANGUAGE_ORIENTATION = 'http://www.tao.lu/Ontologies/TAO.rdf#LanguageOrientation'; + public const PROPERTY_LANGUAGE_VERTICAL_WRITING_MODE = 'http://www.tao.lu/Ontologies/TAO.rdf#LanguageVerticalWritingMode'; public const INSTANCE_LANGUAGE_USAGE_GUI = 'http://www.tao.lu/Ontologies/TAO.rdf#LanguageUsageGUI'; public const INSTANCE_LANGUAGE_USAGE_DATA = 'http://www.tao.lu/Ontologies/TAO.rdf#LanguageUsageData'; public const INSTANCE_ORIENTATION_LTR = 'http://www.tao.lu/Ontologies/TAO.rdf#OrientationLeftToRight'; public const INSTANCE_ORIENTATION_RTL = 'http://www.tao.lu/Ontologies/TAO.rdf#OrientationRightToLeft'; + public const INSTANCE_VERTICAL_WRITING_MODE_RL = 'http://www.tao.lu/Ontologies/TAO.rdf#WritingModeVerticalRl'; + public const INSTANCE_VERTICAL_WRITING_MODE_LR = 'http://www.tao.lu/Ontologies/TAO.rdf#WritingModeVerticalLr'; // --- OPERATIONS --- /** diff --git a/models/ontology/tao.rdf b/models/ontology/tao.rdf index 6f3f3719ba..6f1a3a53e7 100644 --- a/models/ontology/tao.rdf +++ b/models/ontology/tao.rdf @@ -151,6 +151,22 @@ + + + + + + + + + + + + + + + + From d9e98880adb2d193b60f98d51db762c15200f9cc Mon Sep 17 00:00:00 2001 From: olga-kulish Date: Wed, 15 Jan 2025 17:06:59 +0300 Subject: [PATCH 2/6] chore: migration for vertical language --- migrations/Version202501151305122234_tao.php | 34 ++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 migrations/Version202501151305122234_tao.php diff --git a/migrations/Version202501151305122234_tao.php b/migrations/Version202501151305122234_tao.php new file mode 100644 index 0000000000..3fce781ff6 --- /dev/null +++ b/migrations/Version202501151305122234_tao.php @@ -0,0 +1,34 @@ +addReport( + $this->propagate(new SyncModels())([]) + ); + } + + public function down(Schema $schema): void + { + $this->throwIrreversibleMigrationException( + 'The models should be updated via `SyncModels` script after reverting their RDF definitions.' + ); + } +} From 3b68181776ea32a659b8769d6eb7d44efa6461fc Mon Sep 17 00:00:00 2001 From: olga-kulish Date: Wed, 15 Jan 2025 18:55:41 +0300 Subject: [PATCH 3/6] chore: formatting --- models/classes/Language/Language.php | 11 ++++++++--- .../Language/Repository/LanguageRepository.php | 12 ++++++------ models/classes/class.LanguageService.php | 3 ++- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/models/classes/Language/Language.php b/models/classes/Language/Language.php index 85fb9c868e..b6dcd6fdbb 100644 --- a/models/classes/Language/Language.php +++ b/models/classes/Language/Language.php @@ -43,8 +43,13 @@ class Language implements JsonSerializable /** @var ?string */ private $verticalWritingMode; - public function __construct(string $uri, string $code, string $label, string $orientation, ?string $verticalWritingMode) - { + public function __construct( + string $uri, + string $code, + string $label, + string $orientation, + ?string $verticalWritingMode + ) { $this->uri = $uri; $this->code = $code; $this->orientation = $orientation; @@ -72,7 +77,7 @@ public function getOrientation(): string return $this->orientation; } - public function getVerticalWritingMode(): string + public function getVerticalWritingMode(): ?string { return $this->verticalWritingMode; } diff --git a/models/classes/Language/Repository/LanguageRepository.php b/models/classes/Language/Repository/LanguageRepository.php index a049f97011..7a322ddedc 100644 --- a/models/classes/Language/Repository/LanguageRepository.php +++ b/models/classes/Language/Repository/LanguageRepository.php @@ -66,11 +66,11 @@ public function findAvailableLanguagesByUsage(): LanguageCollection $orientationUri = $values[tao_models_classes_LanguageService::PROPERTY_LANGUAGE_ORIENTATION][0]->getUri(); - $verticalWritingMode = null; - $verticalWritingModePropVal = $values[tao_models_classes_LanguageService::PROPERTY_LANGUAGE_VERTICAL_WRITING_MODE]; - if ($verticalWritingModePropVal) { - $verticalWritingModeUri = $verticalWritingModePropVal[0]->getUri(); - $verticalWritingMode = $verticalWritingModeUri === tao_models_classes_LanguageService::INSTANCE_VERTICAL_WRITING_MODE_RL + $verticalMode = null; + $verticalPropVal = $values[tao_models_classes_LanguageService::PROPERTY_LANGUAGE_VERTICAL_WRITING_MODE]; + if ($verticalPropVal) { + $verticalUri = $verticalPropVal[0]->getUri(); + $verticalMode = $verticalUri === tao_models_classes_LanguageService::INSTANCE_VERTICAL_WRITING_MODE_RL ? 'vertical-rl' : 'vertical-lr'; } @@ -81,7 +81,7 @@ public function findAvailableLanguagesByUsage(): LanguageCollection $values[OntologyRdf::RDF_VALUE][0]->__toString(), $language->getLabel(), $orientationUri === tao_models_classes_LanguageService::INSTANCE_ORIENTATION_RTL ? 'rtl' : 'ltr', - $verticalWritingMode + $verticalMode ) ); } diff --git a/models/classes/class.LanguageService.php b/models/classes/class.LanguageService.php index cd570b5125..95f6303059 100644 --- a/models/classes/class.LanguageService.php +++ b/models/classes/class.LanguageService.php @@ -49,7 +49,8 @@ class tao_models_classes_LanguageService extends tao_models_classes_GenerisServi public const CLASS_URI_LANGUAGES_USAGES = 'http://www.tao.lu/Ontologies/TAO.rdf#LanguagesUsages'; public const PROPERTY_LANGUAGE_USAGES = 'http://www.tao.lu/Ontologies/TAO.rdf#LanguageUsages'; public const PROPERTY_LANGUAGE_ORIENTATION = 'http://www.tao.lu/Ontologies/TAO.rdf#LanguageOrientation'; - public const PROPERTY_LANGUAGE_VERTICAL_WRITING_MODE = 'http://www.tao.lu/Ontologies/TAO.rdf#LanguageVerticalWritingMode'; + public const PROPERTY_LANGUAGE_VERTICAL_WRITING_MODE = + 'http://www.tao.lu/Ontologies/TAO.rdf#LanguageVerticalWritingMode'; public const INSTANCE_LANGUAGE_USAGE_GUI = 'http://www.tao.lu/Ontologies/TAO.rdf#LanguageUsageGUI'; public const INSTANCE_LANGUAGE_USAGE_DATA = 'http://www.tao.lu/Ontologies/TAO.rdf#LanguageUsageData'; public const INSTANCE_ORIENTATION_LTR = 'http://www.tao.lu/Ontologies/TAO.rdf#OrientationLeftToRight'; From 258839d9cc3f85fa33aebf42708dd2ace102da50 Mon Sep 17 00:00:00 2001 From: olga-kulish Date: Wed, 15 Jan 2025 18:55:54 +0300 Subject: [PATCH 4/6] test: language vertical writing test --- .../Filter/LanguageAllowedFilterTest.php | 6 +- .../Language/LanguageCollectionTest.php | 3 +- .../models/classes/Language/LanguageTest.php | 34 ++++++++- .../Repository/LanguageRepositoryTest.php | 71 +++++++++++++++---- 4 files changed, 93 insertions(+), 21 deletions(-) diff --git a/test/unit/models/classes/Language/Filter/LanguageAllowedFilterTest.php b/test/unit/models/classes/Language/Filter/LanguageAllowedFilterTest.php index 6ea352ab89..0e82c04a24 100644 --- a/test/unit/models/classes/Language/Filter/LanguageAllowedFilterTest.php +++ b/test/unit/models/classes/Language/Filter/LanguageAllowedFilterTest.php @@ -126,13 +126,15 @@ private function getLanguageCollection(): LanguageCollection 'uri', 'en-US', 'label', - 'ltr' + 'ltr', + null ), new Language( 'uri', 'pt-BR', 'label', - 'ltr' + 'ltr', + null ), ]); } diff --git a/test/unit/models/classes/Language/LanguageCollectionTest.php b/test/unit/models/classes/Language/LanguageCollectionTest.php index f1713019fd..51b7f13e31 100644 --- a/test/unit/models/classes/Language/LanguageCollectionTest.php +++ b/test/unit/models/classes/Language/LanguageCollectionTest.php @@ -40,7 +40,8 @@ public function setUp(): void 'uri', 'pt-BR', 'Portuguese', - tao_models_classes_LanguageService::INSTANCE_ORIENTATION_LTR + tao_models_classes_LanguageService::INSTANCE_ORIENTATION_LTR, + null ); } diff --git a/test/unit/models/classes/Language/LanguageTest.php b/test/unit/models/classes/Language/LanguageTest.php index bc96380660..b3fad47606 100644 --- a/test/unit/models/classes/Language/LanguageTest.php +++ b/test/unit/models/classes/Language/LanguageTest.php @@ -36,13 +36,23 @@ public function testGetters(): void 'uri', 'pt-BR', 'Portuguese', - tao_models_classes_LanguageService::INSTANCE_ORIENTATION_LTR + tao_models_classes_LanguageService::INSTANCE_ORIENTATION_LTR, + null ); - $this->assertSame('uri', $language->getUri()); $this->assertSame('pt-BR', $language->getCode()); $this->assertSame('Portuguese', $language->getLabel()); $this->assertSame(tao_models_classes_LanguageService::INSTANCE_ORIENTATION_LTR, $language->getOrientation()); + $this->assertSame(null, $language->getVerticalWritingMode()); + + $language = new Language( + 'uri', + 'ja-JP', + 'Japanese', + 'ltr', + 'vertical-rl' + ); + $this->assertSame('vertical-rl', $language->getVerticalWritingMode()); } public function testJsonSerialize(): void @@ -51,15 +61,33 @@ public function testJsonSerialize(): void 'uri', 'pt-BR', 'Portuguese', - tao_models_classes_LanguageService::INSTANCE_ORIENTATION_LTR + tao_models_classes_LanguageService::INSTANCE_ORIENTATION_LTR, + null + ); + $this->assertSame( + [ + 'uri' => $language->getUri(), + 'code' => $language->getCode(), + 'label' => $language->getLabel(), + 'orientation' => $language->getOrientation(), + ], + $language->jsonSerialize() ); + $language = new Language( + 'uri', + 'ja-JP', + 'Japanese', + 'ltr', + 'vertical-rl' + ); $this->assertSame( [ 'uri' => $language->getUri(), 'code' => $language->getCode(), 'label' => $language->getLabel(), 'orientation' => $language->getOrientation(), + 'verticalWritingMode' => $language->getVerticalWritingMode() ], $language->jsonSerialize() ); diff --git a/test/unit/models/classes/Language/Repository/LanguageRepositoryTest.php b/test/unit/models/classes/Language/Repository/LanguageRepositoryTest.php index 4ea7ce5fa4..17a89d0bf5 100644 --- a/test/unit/models/classes/Language/Repository/LanguageRepositoryTest.php +++ b/test/unit/models/classes/Language/Repository/LanguageRepositoryTest.php @@ -54,18 +54,28 @@ public function setUp(): void public function testFindAvailableLanguagesByUsage(): void { $usageResource = $this->createMock(core_kernel_classes_Resource::class); - $languageResource = $this->createMock(core_kernel_classes_Resource::class); + $languageResource1 = $this->createMock(core_kernel_classes_Resource::class); + $languageResource2 = $this->createMock(core_kernel_classes_Resource::class); - $languageCode = $this->createMock(core_kernel_classes_Resource::class); + $languageCode1 = $this->createMock(core_kernel_classes_Resource::class); + $languageCode2 = $this->createMock(core_kernel_classes_Resource::class); $orientation = $this->createMock(core_kernel_classes_Resource::class); + $verticalWritingMode2 = $this->createMock(core_kernel_classes_Resource::class); $orientation ->method('getUri') ->willReturn(tao_models_classes_LanguageService::INSTANCE_ORIENTATION_LTR); - $languageCode + $verticalWritingMode2 + ->method('getUri') + ->willReturn(tao_models_classes_LanguageService::INSTANCE_VERTICAL_WRITING_MODE_RL); + + $languageCode1 + ->method('__toString') + ->willReturn('code1'); + $languageCode2 ->method('__toString') - ->willReturn('code'); + ->willReturn('code2'); $this->ontology ->method('getResource') @@ -75,41 +85,72 @@ public function testFindAvailableLanguagesByUsage(): void ->method('getAvailableLanguagesByUsage') ->willReturn( [ - $languageResource + $languageResource1, + $languageResource2 + ] + ); + + $languageResource1 + ->method('getPropertiesValues') + ->willReturn( + [ + OntologyRdf::RDF_VALUE => [ + 0 => $languageCode1 + ], + tao_models_classes_LanguageService::PROPERTY_LANGUAGE_ORIENTATION => [ + 0 => $orientation + ], + tao_models_classes_LanguageService::PROPERTY_LANGUAGE_VERTICAL_WRITING_MODE => null, ] ); - $languageResource + $languageResource2 ->method('getPropertiesValues') ->willReturn( [ OntologyRdf::RDF_VALUE => [ - 0 => $languageCode + 0 => $languageCode2 ], tao_models_classes_LanguageService::PROPERTY_LANGUAGE_ORIENTATION => [ 0 => $orientation ], + tao_models_classes_LanguageService::PROPERTY_LANGUAGE_VERTICAL_WRITING_MODE => [ + 0 => $verticalWritingMode2 + ], ] ); - $languageResource + $languageResource1 + ->method('getUri') + ->willReturn('uri1'); + $languageResource2 ->method('getUri') - ->willReturn('uri'); + ->willReturn('uri2'); - $languageResource + $languageResource1 ->method('getLabel') - ->willReturn('label'); + ->willReturn('label1'); + $languageResource2 + ->method('getLabel') + ->willReturn('label2'); $collection = $this->sut->findAvailableLanguagesByUsage(); - $this->assertCount(1, $collection); + $this->assertCount(2, $collection); $this->assertSame( [ [ - 'uri' => 'uri', - 'code' => 'code', - 'label' => 'label', + 'uri' => 'uri1', + 'code' => 'code1', + 'label' => 'label1', + 'orientation' => 'ltr' + ], + [ + 'uri' => 'uri2', + 'code' => 'code2', + 'label' => 'label2', 'orientation' => 'ltr', + 'verticalWritingMode' => 'vertical-rl' ] ], json_decode(json_encode($collection->jsonSerialize()), true) From bfbab5fba37c37bdc95f070e5fed29f7fd228509 Mon Sep 17 00:00:00 2001 From: olga-kulish Date: Thu, 23 Jan 2025 13:47:37 +0300 Subject: [PATCH 5/6] fix: language vertical writing: constructor fallback, remove migration --- migrations/Version202501151305122234_tao.php | 34 -------------------- models/classes/Language/Language.php | 2 +- 2 files changed, 1 insertion(+), 35 deletions(-) delete mode 100644 migrations/Version202501151305122234_tao.php diff --git a/migrations/Version202501151305122234_tao.php b/migrations/Version202501151305122234_tao.php deleted file mode 100644 index 3fce781ff6..0000000000 --- a/migrations/Version202501151305122234_tao.php +++ /dev/null @@ -1,34 +0,0 @@ -addReport( - $this->propagate(new SyncModels())([]) - ); - } - - public function down(Schema $schema): void - { - $this->throwIrreversibleMigrationException( - 'The models should be updated via `SyncModels` script after reverting their RDF definitions.' - ); - } -} diff --git a/models/classes/Language/Language.php b/models/classes/Language/Language.php index b6dcd6fdbb..dc4733ad9b 100644 --- a/models/classes/Language/Language.php +++ b/models/classes/Language/Language.php @@ -48,7 +48,7 @@ public function __construct( string $code, string $label, string $orientation, - ?string $verticalWritingMode + ?string $verticalWritingMode = null ) { $this->uri = $uri; $this->code = $code; From 1af7f9411179c0630b8ed8767779a4c1783dea55 Mon Sep 17 00:00:00 2001 From: olga-kulish Date: Fri, 24 Jan 2025 10:13:47 +0300 Subject: [PATCH 6/6] fix: language vertical mode missed rdf prop --- models/ontology/tao.rdf | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/models/ontology/tao.rdf b/models/ontology/tao.rdf index 6f1a3a53e7..bc0579c8cc 100644 --- a/models/ontology/tao.rdf +++ b/models/ontology/tao.rdf @@ -153,8 +153,16 @@ - - + + + + + + + + + +