diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/GpsPosition.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/GpsPosition.php index 97efeea8cb..30dc66f936 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/GpsPosition.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/GpsPosition.php @@ -81,6 +81,30 @@ class GpsPosition && $this->latitude_ref !== null; } + public function isCompleteComposite() + { + return $this->longitude !== null + && $this->latitude !== null; + } + + public function getCompositeLongitude() + { + if ($this->longitude === null) { + return null; + } + + return $this->longitude ; + } + + public function getCompositeLatitude() + { + if ($this->latitude === null) { + return null; + } + + return $this->latitude; + } + public function getSignedLongitude() { if ($this->longitude === null) { diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/MetadataHydrator.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/MetadataHydrator.php index b3b611d301..32b93502d4 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/MetadataHydrator.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/MetadataHydrator.php @@ -155,9 +155,9 @@ SQL; // Push this tag into object $position->set($tag_name, $value); // Try to output complete position - if ($position->isComplete()) { - $lon = $position->getSignedLongitude(); - $lat = $position->getSignedLatitude(); + if ($position->isCompleteComposite()) { + $lon = $position->getCompositeLongitude(); + $lat = $position->getCompositeLatitude(); $records[$id]['metadata_tags']['Longitude'] = $lon; $records[$id]['metadata_tags']['Latitude'] = $lat; diff --git a/lib/classes/record/adapter.php b/lib/classes/record/adapter.php index aa71a42f67..2f1f3658ac 100644 --- a/lib/classes/record/adapter.php +++ b/lib/classes/record/adapter.php @@ -758,26 +758,24 @@ class record_adapter implements RecordInterface, cache_cacheableInterface public function getPositionFromTechnicalInfos() { $positionTechnicalField = [ - media_subdef::TC_DATA_LATITUDE_REF, media_subdef::TC_DATA_LATITUDE, - media_subdef::TC_DATA_LONGITUDE_REF, media_subdef::TC_DATA_LONGITUDE ]; - $position = new GpsPosition(); + $position = []; foreach($positionTechnicalField as $field){ $fieldData = $this->get_technical_infos($field); if($fieldData){ - $position->set($field, $fieldData->getValue()); + $position[$field] = $fieldData->getValue(); } } - if($position->isComplete()){ + if(count($position) == 2){ return [ 'isCoordComplete' => 1, - 'latitude' => $position->getSignedLatitude(), - 'longitude' => $position->getSignedLongitude() + 'latitude' => $position[media_subdef::TC_DATA_LATITUDE], + 'longitude' => $position[media_subdef::TC_DATA_LONGITUDE] ]; } diff --git a/tests/Alchemy/Tests/Phrasea/SearchEngine/Indexer/GpsPositionTest.php b/tests/Alchemy/Tests/Phrasea/SearchEngine/Indexer/GpsPositionTest.php index 54b37c37b4..ed0a4b0746 100644 --- a/tests/Alchemy/Tests/Phrasea/SearchEngine/Indexer/GpsPositionTest.php +++ b/tests/Alchemy/Tests/Phrasea/SearchEngine/Indexer/GpsPositionTest.php @@ -20,6 +20,13 @@ class GpsPositionTest extends \PHPUnit_Framework_TestCase $this->assertFalse($position->isComplete()); } + public function testIsCompleteCompositeWithSingleSet() + { + $position = new GpsPosition(); + $position->set('Latitude', 48.856578); + $this->assertFalse($position->isCompleteComposite()); + } + public function testIsCompleteWithAllSet() { $position = new GpsPosition(); @@ -30,6 +37,14 @@ class GpsPositionTest extends \PHPUnit_Framework_TestCase $this->assertTrue($position->isComplete()); } + public function testIsCompleteCompositeWithAllSet() + { + $position = new GpsPosition(); + $position->set('Latitude', 48.856578); + $position->set('Longitude', 2.351828); + $this->assertTrue($position->isCompleteComposite()); + } + /** * @dataProvider getSupportedTagNames */ @@ -89,6 +104,13 @@ class GpsPositionTest extends \PHPUnit_Framework_TestCase $this->assertEquals(-2.351828, $position->getSignedLongitude()); } + public function testGetCompositeLongitude() + { + $position = new GpsPosition(); + $position->set('Longitude', -2.351828); + $this->assertEquals(-2.351828, $position->getCompositeLongitude()); + } + public function testGetSignedLatitude() { $position = new GpsPosition(); @@ -109,4 +131,11 @@ class GpsPositionTest extends \PHPUnit_Framework_TestCase $position->set('LatitudeRef', 'S'); $this->assertEquals(-48.856578, $position->getSignedLatitude()); } + + public function testGetCompositeLatitude() + { + $position = new GpsPosition(); + $position->set('Latitude', -48.856578); + $this->assertEquals(-48.856578, $position->getCompositeLatitude()); + } }