correct backoffocie with new handle if format
authorymh <ymh.work@gmail.com>
Fri, 08 Apr 2016 17:50:49 +0200
changeset 145 49b75287c30b
parent 144 03678acbfda3
child 146 dc4d1cdc47e0
correct backoffocie with new handle if format
server/src/app/Http/Controllers/Bo/DocumentListController.php
server/src/app/Http/routes.php
server/src/app/Libraries/CocoonUtils.php
server/src/app/Libraries/Mappers/CocoonAbstractRdfMapper.php
server/src/app/Libraries/Mappers/CocoonCollectionRdfMapper.php
server/src/app/Libraries/Mappers/CocoonContentRdfMapper.php
server/src/app/Models/Document.php
server/src/resources/views/bo/docList.blade.php
server/src/tests/libraries/Mappers/CocoonCollectionRdfMapperTest.php
server/src/tests/libraries/Mappers/CocoonSoundRdfMapperTest.php
--- a/server/src/app/Http/Controllers/Bo/DocumentListController.php	Sat Mar 26 00:24:34 2016 +0100
+++ b/server/src/app/Http/Controllers/Bo/DocumentListController.php	Fri Apr 08 17:50:49 2016 +0200
@@ -65,6 +65,7 @@
      */
     public function show($id)
     {
+        Log::info("show: $id");
         //$doc->add("<$doc_uri>");
         $doc = $this->documentRepository->get($id);
 
@@ -85,6 +86,7 @@
      */
     public function getClient($id)
     {
+        Log::info("getClient: $id");
         return view('bo.docDetailClient', ['docid' => $id, 'boClientEnv' => json_encode(config('corpusparole.bo_client_environment'), JSON_UNESCAPED_SLASHES)]);
     }
 
--- a/server/src/app/Http/routes.php	Sat Mar 26 00:24:34 2016 +0100
+++ b/server/src/app/Http/routes.php	Fri Apr 08 17:50:49 2016 +0200
@@ -18,10 +18,11 @@
 Route::group(['middleware' => ['web']], function () {
 
     //Route::get('bo/docs/docDetailClient', 'Bo\DocumentListController@showClient');
+    Route::pattern('docs', ".*");
+    Route::get('bo/docs/client/{docs}', 'Bo\DocumentListController@getClient')
+        ->name('bo.docs.client')
+        ->where('docs', '.+');
     Route::resource('bo/docs', 'Bo\DocumentListController');
-    Route::controller('bo/docs', 'Bo\DocumentListController', [
-        'getClient' => 'bo.docs.client'
-    ]);
 
 
     Route::controllers([
@@ -39,6 +40,7 @@
 */
 
 Route::group(['prefix' => 'api/v1', 'middleware' => 'cors'] , function() {
+    Route::pattern('documents', ".*");
     Route::resource('documents', 'Api\DocumentController',
                     ['only' => ['index', 'show', 'update']]);
     Route::resource('viaf', 'Api\ViafController',
--- a/server/src/app/Libraries/CocoonUtils.php	Sat Mar 26 00:24:34 2016 +0100
+++ b/server/src/app/Libraries/CocoonUtils.php	Fri Apr 08 17:50:49 2016 +0200
@@ -70,8 +70,10 @@
     }
 
     public static function isResourceCollection($res) {
-        return $res instanceof Resource &&
-            (strpos(strtolower($res->getUri()), "collection", strlen(config('corpusparole.cocoon_doc_id_base_uri'))) !== FALSE);
+        return $res instanceof Resource && (
+            (strpos(strtolower($res->getUri()), "collection", strlen(config('corpusparole.cocoon_doc_id_base_uri'))) !== FALSE) ||
+            (strpos(strtolower($res->getUri()), "collection", strlen(config('corpusparole.corpus_doc_id_base_uri'))) !== FALSE)
+        );
     }
 
 }
--- a/server/src/app/Libraries/Mappers/CocoonAbstractRdfMapper.php	Sat Mar 26 00:24:34 2016 +0100
+++ b/server/src/app/Libraries/Mappers/CocoonAbstractRdfMapper.php	Fri Apr 08 17:50:49 2016 +0200
@@ -80,6 +80,22 @@
         $providedCHOResource->add($prop, trim($value));
     }
 
+    protected function propertyCollectionMap($providedCHOResource, $prop, $value) {
+        // if this is a collection, we use the edm:isGatheredInto property
+        if(CocoonUtils::isResourceCollection($value)) {
+            $resId = CocoonUtils::getIdFromUri($value->getUri());
+            $resUri = CocoonUtils::getCorpusUriFromId($resId);
+            $providedCHOResource->addResource('http://www.europeana.eu/schemas/edm/isGatheredInto', $resUri);
+        } elseif (strpos($value->getUri(), config('corpusparole.cocoon_doc_id_base_uri')) === 0 ) {
+            $resId = CocoonUtils::getIdFromUri($value->getUri());
+            $resUri = CocoonUtils::getCorpusUriFromId($resId);
+            $providedCHOResource->add($prop, $resUri);
+        } else {
+            $providedCHOResource->add($prop, $value);
+        }
+    }
+
+
     protected function addSpatialProperties($destRes, $res, $outputGraph) {
         $spatials = $res->all($this->inputGraph->resource('http://purl.org/dc/terms/spatial'));
         $lats = $res->all($this->inputGraph->resource('http://www.w3.org/2003/01/geo/wgs84_pos#lat'));
--- a/server/src/app/Libraries/Mappers/CocoonCollectionRdfMapper.php	Sat Mar 26 00:24:34 2016 +0100
+++ b/server/src/app/Libraries/Mappers/CocoonCollectionRdfMapper.php	Fri Apr 08 17:50:49 2016 +0200
@@ -97,7 +97,7 @@
             ['http://purl.org/dc/elements/1.1/language', null],
             ['http://purl.org/dc/terms/accessRights', 'propertyTrimMap'],
             ['http://purl.org/dc/terms/extent', null],
-            ['http://purl.org/dc/terms/isPartOf', null],
+            ['http://purl.org/dc/terms/isPartOf', 'propertyCollectionMap'],
             ['http://www.language-archives.org/OLAC/1.1/annotator', 'propertyOlacRoleMap'],
             ['http://www.language-archives.org/OLAC/1.1/author', 'propertyOlacRoleMap'],
             ['http://www.language-archives.org/OLAC/1.1/compiler', 'propertyOlacRoleMap'],
--- a/server/src/app/Libraries/Mappers/CocoonContentRdfMapper.php	Sat Mar 26 00:24:34 2016 +0100
+++ b/server/src/app/Libraries/Mappers/CocoonContentRdfMapper.php	Fri Apr 08 17:50:49 2016 +0200
@@ -81,15 +81,6 @@
         $providedCHOResource->add('http://purl.org/dc/terms/references', $value);
     }
 
-    protected function propertyCollectionMap($providedCHOResource, $prop, $value) {
-        // if this is a collection, we use the edm:isGatheredInto property
-        if(CocoonUtils::isResourceCollection($value)) {
-            $providedCHOResource->add('http://www.europeana.eu/schemas/edm/isGatheredInto', $value);
-        } else {
-            $providedCHOResource->add($prop, $value);
-        }
-    }
-
     /**
      * Build the provided CHO.
      */
--- a/server/src/app/Models/Document.php	Sat Mar 26 00:24:34 2016 +0100
+++ b/server/src/app/Models/Document.php	Fri Apr 08 17:50:49 2016 +0200
@@ -273,8 +273,8 @@
         //remove old,
         foreach ($this->getContributors() as $contribDef) {
             $value = null;
-            if (is_null($contribDef['url'])) {
-                if(is_null($contribDef['nameLiteral'])) {
+            if (empty($contribDef['url'])) {
+                if(empty($contribDef['nameLiteral'])) {
                     $value = new Literal($contribDef['name']);
                 } else {
                     $value = $contribDef['nameLiteral'];
@@ -289,7 +289,7 @@
         //put new
         foreach ($contributors as $newContribDef) {
             $value = null;
-            if (is_null($newContribDef['url'])) {
+            if (empty($newContribDef['url'])) {
                 $value = new Literal($newContribDef['name'], "fr", null);
             } else {
                 $value = new Resource($newContribDef['url']);
--- a/server/src/resources/views/bo/docList.blade.php	Sat Mar 26 00:24:34 2016 +0100
+++ b/server/src/resources/views/bo/docList.blade.php	Fri Apr 08 17:50:49 2016 +0200
@@ -16,7 +16,7 @@
                         @foreach ($docs as $doc)
                             <tr>
                                 <td>
-                                    <a href="{{ route('bo.docs.client',[ 'id' => $doc->getId()]) }}#/doc/{{ $doc->getId() }}">{{ $doc->getId() }}</a>
+                                    <a href="{{ route('bo.docs.client',[ 'id' => rawurlencode($doc->getId())]) }}#/doc/{{ rawurlencode($doc->getId()) }}">{{ $doc->getId() }}</a>
                                 </td>
                                 <td>{{ $doc->getTitle() }}</td>
                                 <td><a href="{{ $doc->getLanguageValue() }}" target="_blank" title="{{ $languageNames[$doc->getLanguageValue()]}}">{{substr($doc->getLanguageValue(), 29)}}</td>
--- a/server/src/tests/libraries/Mappers/CocoonCollectionRdfMapperTest.php	Sat Mar 26 00:24:34 2016 +0100
+++ b/server/src/tests/libraries/Mappers/CocoonCollectionRdfMapperTest.php	Fri Apr 08 17:50:49 2016 +0200
@@ -178,7 +178,6 @@
             'http://purl.org/dc/terms/issued',
             'http://purl.org/dc/elements/1.1/type',
             'http://purl.org/dc/elements/1.1/language',
-            'http://purl.org/dc/terms/isPartOf',
             'http://purl.org/dc/terms/modified',
         ];
 
@@ -216,4 +215,23 @@
 
     }
 
+    /**
+     * Test mapping for isPartOf
+     *
+     * @return void
+     */
+    public function testOneToOneCollectionIsPartOf() {
+        $collection = $this->resGraphes['BASE']->get('edm:Collection', '^rdf:type');
+        $sourceNode = $this->inputGraphes['BASE']->get('http://crdo.risc.cnrs.fr/schemas/Resource', '^rdf:type');
+
+        $this->assertNotNull($collection);
+        $this->assertNotNull($sourceNode);
+
+        $ispartOf = $collection->all('<http://www.europeana.eu/schemas/edm/isGatheredInto>');
+        $this->assertCount(1, $ispartOf, "Must have one collection node");
+
+        $this->assertEquals(config('corpusparole.corpus_doc_id_base_uri')."crdo-COLLECTION_ALA", strval($collection->get('<http://www.europeana.eu/schemas/edm/isGatheredInto>')), "the isPartOf mus equals ".config('corpusparole.corpus_doc_id_base_uri')."crdo-COLLECTION_ALA");
+    }
+
+
 }
--- a/server/src/tests/libraries/Mappers/CocoonSoundRdfMapperTest.php	Sat Mar 26 00:24:34 2016 +0100
+++ b/server/src/tests/libraries/Mappers/CocoonSoundRdfMapperTest.php	Fri Apr 08 17:50:49 2016 +0200
@@ -380,22 +380,22 @@
         $this->assertNotNull($providedCHO);
         $this->assertNotNull($sourceNode);
 
-        $isGatheredInto = $providedCHO->all($this->resGraphes['BASE']->resource('http://www.europeana.eu/schemas/edm/isGatheredInto'));
+        $isGatheredInto = $providedCHO->all('<http://www.europeana.eu/schemas/edm/isGatheredInto>');
         $this->assertCount(2, $isGatheredInto, "Must have two collection node");
 
-        $ispartOf = $providedCHO->all($this->resGraphes['BASE']->resource('http://purl.org/dc/terms/isPartOf'));
+        $ispartOf = $providedCHO->all('<http://purl.org/dc/terms/isPartOf>');
         $this->assertCount(1, $ispartOf, "Must have one collection node");
 
         $outputValuesStr = [];
-        foreach($providedCHO->all($this->resGraphes['BASE']->resource('http://www.europeana.eu/schemas/edm/isGatheredInto')) as $outputValue) {
+        foreach($providedCHO->all('<http://www.europeana.eu/schemas/edm/isGatheredInto>') as $outputValue) {
             array_push($outputValuesStr, strval($outputValue));
         }
         $this->assertNotEmpty($outputValuesStr, "we must found some values to test isGatheredInto");
 
-        $this->assertContains("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_LANGUESDEFRANCE", $outputValuesStr, "http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_LANGUESDEFRANCE not found in output graph");
-        $this->assertContains("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_ESLO1", $outputValuesStr, "http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_ESLO1 not found in output graph");
+        $this->assertContains(config('corpusparole.corpus_doc_id_base_uri')."crdo-COLLECTION_LANGUESDEFRANCE", $outputValuesStr, config('corpusparole.corpus_doc_id_base_uri')."crdo-COLLECTION_LANGUESDEFRANCE not found in output graph");
+        $this->assertContains(config('corpusparole.corpus_doc_id_base_uri')."crdo-COLLECTION_ESLO1", $outputValuesStr, config('corpusparole.corpus_doc_id_base_uri')."crdo-COLLECTION_ESLO1 not found in output graph");
 
-        $this->assertEquals("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ESLO1_ENT_010", strval($providedCHO->get($this->resGraphes['BASE']->resource('http://purl.org/dc/terms/isPartOf'))), "the isPartOf mus equals http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ESLO1_ENT_010");
+        $this->assertEquals(config('corpusparole.corpus_doc_id_base_uri')."crdo-ESLO1_ENT_010", strval($providedCHO->get('<http://purl.org/dc/terms/isPartOf>')), "the isPartOf mus equals ".config('corpusparole.corpus_doc_id_base_uri')."crdo-ESLO1_ENT_010");
     }
 
     /**