From f3f83c9dc5b135c2f31321c4a3f132b96a14e175 Mon Sep 17 00:00:00 2001
From: efalcy <efalcy@afi-sa.fr>
Date: Tue, 21 Jun 2022 11:54:38 +0200
Subject: [PATCH] dev#154000 : fix RIS format for thesis advisor and editor for
 book

---
 library/Class/MetaData/RisBuilder.php   | 15 ++++++++++-----
 library/Class/Notice/ZoteroMetaData.php |  4 ++--
 tests/scenarios/Zotero/ZoteroTest.php   |  8 ++++----
 3 files changed, 16 insertions(+), 11 deletions(-)

diff --git a/library/Class/MetaData/RisBuilder.php b/library/Class/MetaData/RisBuilder.php
index 9bab051142c..49959165401 100644
--- a/library/Class/MetaData/RisBuilder.php
+++ b/library/Class/MetaData/RisBuilder.php
@@ -20,7 +20,8 @@
  */
 
 class Class_MetaData_RisBuilder extends Class_MetaData_Builder {
-  protected $_content=[];
+  protected $_content=[],
+    $_type='BOOK';
 
   protected $typemap = [
                         "journalArticle"=> 'ABST',
@@ -58,6 +59,10 @@ class Class_MetaData_RisBuilder extends Class_MetaData_Builder {
 
 
   public function add_editors( $name) {
+    if ( $this->_type == 'BOOK') {
+      $this->_content[] = 'A3  - '.$this->formatAuthor($name);
+      return $this;
+    }
     $this->_content[] = 'A2  - '.$this->formatAuthor($name);
     return $this;
   }
@@ -70,7 +75,7 @@ class Class_MetaData_RisBuilder extends Class_MetaData_Builder {
 
 
   public function add_contributors( $name) {
-    $this->_content[] = 'A2  - '.$this->formatAuthor($name);
+    $this->_content[] = 'A3  - '.$this->formatAuthor($name);
     return $this;
   }
 
@@ -190,8 +195,8 @@ class Class_MetaData_RisBuilder extends Class_MetaData_Builder {
   }
 
   function add_type($value) {
-    $value=$this->typemap[$value] ??  'BOOK';
-    $this->_content[] = 'TY  - '.$value;
+    $this->_type = $this->typemap[$value] ??  'BOOK';
+    $this->_content[] = 'TY  - '. $this->_type;
     return $this;
   }
 
@@ -234,7 +239,7 @@ class Class_MetaData_RisBuilder extends Class_MetaData_Builder {
 
   public function add_libraryCatalog($value) {
     $this->_content[] = 'DP  - '. Class_Profil::find(1)->getTitre() . ' - '. Class_AdminVar::getNomDomaine();
-    $this->_content[] = 'L2  - '.$value;
+    $this->_content[] = 'L4  - '.$value;
     return $this;
   }
 
diff --git a/library/Class/Notice/ZoteroMetaData.php b/library/Class/Notice/ZoteroMetaData.php
index e95659d4d66..41638eb2863 100644
--- a/library/Class/Notice/ZoteroMetaData.php
+++ b/library/Class/Notice/ZoteroMetaData.php
@@ -101,7 +101,7 @@ class Class_Notice_ZoteroMetaData {
             'libraryCatalog' => fn($record) => $record->getAbsoluteUrl(),
             'creators'  => function($record) {
               $creators = $record->getAllAuthorsFromZones(['700']);
-              $others = ( $record->getZoteroLabel() == 'thesis') ? [] : $record->getAllAuthorsFromZonesAndResponsibility(['701'], ['300', '370', '727']);
+              $others = ( $record->getZoteroLabel() == 'thesis') ? [] : $record->getAllAuthorsFromZonesAndResponsibility(['701'], ['300', '370']);
               if (array_merge($creators, $others))
                 return array_merge($creators, $others);
 
@@ -110,7 +110,7 @@ class Class_Notice_ZoteroMetaData {
               return [$article->getAuthorName()];},
             'editors'   => fn($record) => $record->getAllAuthorsFromZonesAndResponsibility(['702'], ['340']),
             'producers'   => fn($record) => $record->getAllAuthorsFromZonesAndResponsibility(['702'], ['630']),
-            'contributors'  => fn($record) =>  ($record->getZoteroLabel() == 'thesis' ) ? $record->getAllAuthorsFromZones(['701', '702', '711']) : $record->getAllAuthorsFromZonesAndResponsibility(['702'], ['100', '205']),
+            'contributors'  => fn($record) =>  ($record->getZoteroLabel() == 'thesis' ) ? $record->getAllAuthorsFromZonesAndResponsibility(['701', '702', '711'],[ '727', '100']) : $record->getAllAuthorsFromZonesAndResponsibility(['702'], ['100', '205']),
             'translators'  => fn($record) => $record->getAllAuthorsFromZonesAndResponsibility(['701', '702'], ['730']),
             'keywords' => fn($record) => $record->getMatieresLabels(),
             'attachments' => fn($record) => $record->get_subfield('003')
diff --git a/tests/scenarios/Zotero/ZoteroTest.php b/tests/scenarios/Zotero/ZoteroTest.php
index fe575ceeadb..b4324083929 100644
--- a/tests/scenarios/Zotero/ZoteroTest.php
+++ b/tests/scenarios/Zotero/ZoteroTest.php
@@ -55,7 +55,7 @@ abstract class ZoteroTestCase extends AbstractControllerTestCase {
                     'libelle' => 'Directeur artistique']);
 
     $this->fixture('Class_CodifAuteurFonction',
-                   ['id' => '702',
+                   ['id' => '727',
                     'libelle' => 'Directeur de these']);
 
     $this->_buildTemplateProfil(['id' => 1,
@@ -611,7 +611,7 @@ class ZoteroTheseRisTest extends ZoteroTestCase {
             ['UR', 'https://hal.archives-ouvertes.fr/tel-00222781'],
             ['LA', 'fre'],
             ['AU', 'Akgungor, Ali Caglar'],
-            ['A2', 'Gilbert, Claude'],
+            ['A3', 'Gilbert, Claude'],
             ['Y1', '2007'],
             ['M3', 'Thèse de doctorat'],
     ];
@@ -724,8 +724,8 @@ class ZoteroAuthorTypeDocShouldBeBookTypeRisTest extends ZoteroTestCase {
 
   public function expectedMetasDatas() {
     return [
-            ['A2', 'Saurugger, Sabine'],
-            ['A2', 'Terpan, Fabien'],
+            ['A3', 'Saurugger, Sabine'],
+            ['A3', 'Terpan, Fabien'],
     ];
   }
 
-- 
GitLab