get_eds_config(); } public function get_id() { return "eds"; } //Est-ce un entrepot ? public function is_repository() { return 2; } protected function unserialize_source_params($source_id) { $params = parent::unserialize_source_params($source_id); if(!empty($params['PARAMETERS']['eds_url'])) { $this->eds_url = $params['PARAMETERS']['eds_url']; } if(!empty($params['PARAMETERS']['eds_login'])) { $this->eds_login = $params['PARAMETERS']['eds_login']; } if(!empty($params['PARAMETERS']['eds_pwd'])) { $this->eds_pwd = $params['PARAMETERS']['eds_pwd']; } if(!empty($params['PARAMETERS']['eds_profile'])) { $this->eds_profile = $params['PARAMETERS']['eds_profile']; } if(!empty($params['PARAMETERS']['eds_maxCount'])) { $this->eds_maxCount = $params['PARAMETERS']['eds_maxCount']; } if(isset($params['PARAMETERS']['eds_languages']) && is_array($params['PARAMETERS']['eds_languages'])) { $this->eds_languages = $params['PARAMETERS']['eds_languages']; } return $params; } public function enrichment_is_allow(){ return false; } protected function get_client() { $this->eds_client = new eds_client($this->eds_login, $this->eds_pwd, $this->eds_profile, $this->eds_url); } //Formulaire des propriétés générales public function source_get_property_form($source_id) { global $charset; $this->unserialize_source_params($source_id); if(!$this->eds_url) { $this->eds_url = eds_client::WSURL_DEFAULT; } $form = "
 

".$this->msg['eds_ws']."

 
"; $form.= "
 

".$this->msg['eds_search_params']."

 
"; $languages_selector = $this->get_languages_selector(); $form.= "
$languages_selector
"; return $form; } protected function get_languages_selector() { global $charset; $availables_languages = $this->eds_config['eds']['languages']; $selector = ""; return $selector; } public function make_serialized_source_properties($source_id) { global $eds_url, $eds_login, $eds_pwd, $eds_profile; global $eds_maxCount, $eds_languages; $this->unserialize_source_params($source_id); if(empty($eds_url)) { $eds_url = ''; } if(empty($eds_login)) { $eds_login = ''; } if(empty($eds_pwd)) { $eds_pwd = ''; } if(empty($eds_profile)) { $eds_profile = ''; } if(!isset($eds_maxCount)) { $eds_maxCount = eds_client::MAXCOUNT_DEFAULT; } else { $eds_maxCount = intval($eds_maxCount); } $eds_languages_values = []; if(is_array($eds_languages) && !empty($eds_languages)) { $availables_languages = $this->eds_config['eds']['languages']; foreach($eds_languages as $v) { if(array_key_exists($v, $availables_languages)) { $eds_languages_values[] = $availables_languages[$v]; } } } $this->sources[$source_id]['PARAMETERS'] = serialize( [ 'eds_url' => stripslashes($eds_url), 'eds_login' => stripslashes($eds_login), 'eds_pwd' => stripslashes($eds_pwd), 'eds_profile' => stripslashes($eds_profile), 'eds_maxCount' => $eds_maxCount, 'eds_languages' => $eds_languages_values, ] ); } public function search($source_id,$query,$search_id) { // $t0 = hrtime(true); $this->unserialize_source_params($source_id); $this->get_client(); $eds_search_fields = $this->eds_config['eds']['search_fields']; $first_queries = []; $this->last_queries = []; foreach($query as $mterm) { if(empty($eds_search_fields[$mterm->ufield])) { continue; } foreach($eds_search_fields[$mterm->ufield] as $criterion) { foreach($mterm->values as $value) { $aq = new analyse_query($value); $boolean_query = $this->build_boolean_query($aq->tree); $first_queries[] = ['Criterion'=>$criterion, 'Value'=>$boolean_query]; } } } $first_queries = $this->add_queries_with_limiters($first_queries); $first_queries = $this->add_language_limiters_to_queries($first_queries); $first_queries = $this->add_page_number_to_queries($first_queries, 1); $first_responses = $this->run_queries($first_queries); foreach($first_queries as $k=>$fq) { $first_queries[$k]['Response'] = $first_responses[$k]; } unset($first_responses); $this->queries = $first_queries; $last_queries = $first_queries; unset($first_queries); do { $next_queries = $this->build_next_queries($last_queries); if(!empty($next_queries)) { $next_responses = $this->run_queries($next_queries); foreach($next_queries as $k=>$nq) { $next_queries[$k]['Response'] = $next_responses[$k]; } $this->queries = array_merge($this->queries, $next_queries); $last_queries = $next_queries; } } while ( !empty($next_queries) ); unset($last_queries); $this->eds_client->endsession(); // $t1 = hrtime(true); $this->prepare_records($source_id, $search_id); $this->rec_records(); // $t2 = hrtime(true); // var_dump("tps rech = ".($t1 - $t0)/1000000000); // var_dump("tps conv = ".($t2 - $t1)/1000000000); // var_dump("tps total = ".($t2 - $t0)/1000000000); } protected function add_queries_with_limiters($queries) { if(empty($this->eds_config['eds']['query_limiters'])) { return $queries; } $final_queries = $queries; foreach($final_queries as $query) { foreach($this->eds_config['eds']['query_limiters'] as $id=>$limiter) { $values = explode(',', $limiter[1]); $query['Limiters']=[]; $query['Limiters'][] = [ "Id" => $id, "Values" => $values, ]; $final_queries[] = $query; } } return $final_queries; } protected function add_language_limiters_to_queries($queries) { if(empty($this->eds_config['eds']['language_limiters'])) { return $queries; } $final_queries = []; foreach($queries as $query) { foreach($this->eds_config['eds']['language_limiters'] as $id=>$limiter) { $values = explode(',', $limiter[1]); $query['Limiters'][] = [ "Id" => $id, "Values" => $values, ]; $final_queries[] = $query; } } return $final_queries; } protected function add_page_number_to_queries($queries, $page = 1) { $page = intval($page); if(!$page) { $page = 1; } $final_queries = []; foreach($queries as $query) { $query['PageNumber'] = $page; $final_queries[] = $query; } return $final_queries; } protected function build_next_queries($last_queries) { $next_queries = []; $nb_results_to_retrieve = $this->eds_maxCount; foreach($last_queries as $lq) { $page_number = $lq['Response']['Content']['SearchRequest']['RetrievalCriteria']['PageNumber']; $nb_results_per_page = $lq['Response']['Content']['SearchRequest']['RetrievalCriteria']['ResultsPerPage']; $nb_results_on_last_page = count($lq['Response']['Content']['SearchResult']['Data']['Records']); $nb_retrieved_results = (($page_number-1)*$nb_results_per_page) + $nb_results_on_last_page; $nb_total_results = $lq['Response']['Content']['SearchResult']['Statistics']['TotalHits']; if( ($nb_retrieved_results < $nb_results_to_retrieve) && ($nb_retrieved_results < $nb_total_results) ) { unset($lq['Response']); $lq['PageNumber']++; $next_queries[] = $lq; } } return $next_queries; } protected function build_boolean_query($tree) { if(!is_array($tree) || empty($tree)) { return ''; } $query = ''; for($i=0 ; $iliteral !=2 ){ if($query != ''){ $query.= ' '; } if($tree[$i]->operator == "or"){ $query.= 'or '; } if($tree[$i]->operator == "and"){ $query.= 'and '; } if($tree[$i]->not){ $query.= 'not '; } if($tree[$i]->sub){ $query.=' ('.$this->build_boolean_query($tree[$i]->sub).')'; }else{ if($tree[$i]->literal){ $query.= '"'.encoding_normalize::utf8_normalize($tree[$i]->word).'"'; } else { $query.= encoding_normalize::utf8_normalize($tree[$i]->word); } } } } return $query; } protected function run_queries($queries) { foreach($queries as $query) { $final_query['Queries'] = [[ "FieldCode" => $query['Criterion'], "Term" => $query['Value'], ]]; $final_query['SearchMode'] = eds_client::SEARCHMODE_DEFAULT; $final_query['ResultsPerPage'] = eds_client::RESULTSPERPAGE_DEFAULT; $final_query['PageNumber'] = $query['PageNumber']; $final_query['Sort'] = eds_client::SORT_DEFAULT; $final_query['Highlight'] = eds_client::HIGHLIGHT_DEFAULT; $final_query['IncludeFacets'] = eds_client::INCLUDEFACETS_DEFAULT; $final_query['FacetFilters'] = eds_client::FACETFILTERS_DEFAULT; $final_query['View'] = eds_client::VIEW_DEFAULT; $final_query['Actions'] = eds_client::ACTIONS_DEFAULT; $final_query['limiters'] = eds_client::LIMITERS_DEFAULT; if(!empty($query['Limiters'])) { $final_query['Limiters'] = $query['Limiters']; } $final_query['Expanders'] = eds_client::EXPANDERS_DEFAULT; $final_query['PublicationId'] = eds_client::PUBLICATIONID_DEFAULT; $final_query['RelatedContent'] = eds_client::RELATEDCONTENT_DEFAULT; $final_query['AutoSuggest'] = eds_client::AUTOSUGGEST_DEFAULT; $final_query['AutoCorrect'] = eds_client::AUTOCORRECT_DEFAULT; $final_query['IncludeImageQuickView'] = eds_client::INCLUDEIMAGEQUICKVIEW_DEFAULT; $this->eds_client->add_search_request( $final_query['Queries'], $final_query['SearchMode'], $final_query['ResultsPerPage'], $final_query['PageNumber'], $final_query['Sort'], $final_query['Highlight'], $final_query['IncludeFacets'], $final_query['FacetFilters'], $final_query['View'], $final_query['Actions'], $final_query['Limiters'], $final_query['Expanders'], $final_query['PublicationId'], $final_query['RelatedContent'], $final_query['AutoSuggest'], $final_query['AutoCorrect'], $final_query['IncludeImageQuickView'] ); } $this->eds_client->run_search(); return $this->eds_client->get_result(); } protected function prepare_records($source_id, $search_id) { if( !is_array($this->queries) || empty($this->queries)) { return; } foreach($this->queries as $query) { foreach($query['Response']['Content']['SearchResult']['Data']['Records'] as $record) { $record['Limiters'] = $query['Limiters']; $this->prepare_record($record, $source_id, $search_id); } } } protected function prepare_record($record, $source_id, $search_id) { global $charset; if( !is_array($record) || empty(($record)) ) { return; } $data = []; //Lecture Header foreach($record['Header'] as $k=>$record_header) { $data['Header_'.$k] = $record_header; } //verification presence An (Id document) ? if(empty($data['Header_An'])) { return; } $ref = $data['Header_An']; $date_import=date("Y-m-d H:i:s",time()); //Id deja existant if($this->has_ref($source_id, $ref, $search_id)){ $this->update_record_limiters($record['Limiters'], $source_id, $search_id, $ref); return; } //Lecture Items foreach($record['Items'] as $record_item) { $data['Items_'.$record_item['Name']][] = encoding_normalize::utf8_decode(html_entity_decode(strip_tags($record_item['Data']), ENT_QUOTES,'utf-8')); } //Verification presence Titre ? if(empty($data['Items_Title'])) { return; } //Lecture Fulltext/CustomLinks if(!empty($record['FullText']['CustomLinks'])) { foreach($record['FullText']['CustomLinks'] as $k=>$record_link) { if($record_link['Category'] == 'fullText' && !empty($record_link['Url'])) { $data['FullText_CustomLinks'][$k] = $record_link['Url']; } } } //Lecture RecordInfo/BibRecord/BibEntity/Identifiers if( !empty($record['RecordInfo']['BibRecord']['BibEntity']['Identifiers']) ) { foreach($record['RecordInfo']['BibRecord']['BibEntity']['Identifiers'] as $k=>$record_identifier) { if( !empty($record_identifier['Type']) && $record_identifier['Type'] == 'doi' && !empty($record_identifier['Value']) ) { $data['DOI'][$k] = encoding_normalize::utf8_decode($record_identifier['Value']); } } } //Lecture RecordInfo/BibRecord/BibEntity/Languages if( !empty($record['RecordInfo']['BibRecord']['BibEntity']['Languages']) ) { foreach($record['RecordInfo']['BibRecord']['BibEntity']['Languages'] as $k=>$record_language) { if(!empty($record_language['Code'])) { $data['Languages'][$k] = encoding_normalize::utf8_decode($record_language['Code']); } if(!empty($record_language['Text'])) { $data['Languages'][$k] = encoding_normalize::utf8_decode($record_language['Text']); } } } //Lecture RecordInfo/BibRecord/BibEntity/PhysicalDescription/Pagination/PageCount if( !empty($record['RecordInfo']['BibRecord']['BibEntity']['PhysicalDescription']['Pagination']['PageCount']) ) { $data['PageCount'] = $record['RecordInfo']['BibRecord']['BibEntity']['PhysicalDescription']['Pagination']['PageCount']; } //Lecture RecordInfo/BibRecord/BibEntity/PhysicalDescription/Pagination/StartPage if( !empty($record['RecordInfo']['BibRecord']['BibEntity']['PhysicalDescription']['Pagination']['StartPage']) ) { $data['StartPage'] = $record['RecordInfo']['BibRecord']['BibEntity']['PhysicalDescription']['Pagination']['StartPage']; } //Lecture RecordInfo/BibRecord/BibEntity/Subjects if( !empty($record['RecordInfo']['BibRecord']['BibEntity']['Subjects']) ) { foreach($record['RecordInfo']['BibRecord']['BibEntity']['Subjects'] as $k=>$record_subject) { if(!empty($record_subject['SubjectFull'])) { $data['Subjects'][$k] = encoding_normalize::utf8_decode($record_subject['SubjectFull']); } } } //Lecture RecordInfo/BibRecord/BibRelationships/HasContributorRelationships if( !empty($record['RecordInfo']['BibRecord']['BibRelationships']['HasContributorRelationships']) ) { foreach($record['RecordInfo']['BibRecord']['BibRelationships']['HasContributorRelationships'] as $k=>$record_contributor) { if(!empty($record_contributor['PersonEntity']['Name']['NameFull'])) { $data['PersonEntity'][$k] = encoding_normalize::utf8_decode($record_contributor['PersonEntity']['Name']['NameFull']); } } } //Lecture RecordInfo/BibRecord/BibRelationships/IsPartOfRelationships/ if( !empty($record['RecordInfo']['BibRecord']['BibRelationships']['IsPartOfRelationships']) ) { foreach($record['RecordInfo']['BibRecord']['BibRelationships']['IsPartOfRelationships'] as $record_rel) { //Lecture RecordInfo/BibRecord/BibRelationships/IsPartOfRelationships/BibEntity/Dates if(!empty($record_rel['BibEntity']['Dates'])) { foreach($record_rel['BibEntity']['Dates'] as $k=>$record_date) { if($record_date['Y']) { $data['Year'][$k] = $record_date['Y']; } if($record_date['D'] && $record_date['M'] && $record_date['Y'] ) { $data['DateYMD'][$k] = $record_date['Y'].'-'.$record_date['M'].'-'.$record_date['D']; } if(!empty($record_date['Text'])) { $data['DateText'][$k] = encoding_normalize::utf8_decode($record_date['Text']); } if(!empty($record_date['Type'])) { $data['DateType'][$k] = encoding_normalize::utf8_decode($record_date['Type']); } } } //Lecture RecordInfo/BibRecord/BibRelationships/IsPartOfRelationships/BibEntity/Identifiers if(!empty($record_rel['BibEntity']['Identifiers'])) { foreach($record_rel['BibEntity']['Identifiers'] as $k=>$record_identifier) { if($record_identifier['Type']=='issn-print' || $record_identifier['Type']=='issn-electronic' ) { $data['ISSN'][$k] = encoding_normalize::utf8_decode($record_identifier['Value']); } if($record_identifier['Type']=='isbn-print' || $record_identifier['Type']=='isbn-electronic') { $data['ISBN'][$k] = encoding_normalize::utf8_decode($record_identifier['Value']); } } } //Lecture RecordInfo/BibRecord/BibRelationships/IsPartOfRelationships/BibEntity/Numbering if(!empty($record_rel['BibEntity']['Numbering'])) { foreach($record_rel['BibEntity']['Numbering'] as $k=>$record_numbering) { if($record_numbering['Type']=='volume' ) { $data['Volume'] = encoding_normalize::utf8_decode($record_numbering['Value']); } if($record_numbering['Type']=='issue' ) { $data['Issue'] = encoding_normalize::utf8_decode($record_numbering['Value']); } } } //Lecture RecordInfo/BibRecord/BibRelationships/IsPartOfRelationships/BibEntity/Titles if(!empty($record_rel['BibEntity']['Titles'])) { foreach($record_rel['BibEntity']['Titles'] as $k=>$record_titles) { if($record_titles['TitleFull']) { $data['Relationship_Titles'][$k] = encoding_normalize::utf8_decode(html_entity_decode($record_titles['TitleFull'], ENT_QUOTES, 'utf-8')); } } } } } //Transfo Unimarc //type doc et entetes $unimarc_headers = [ "rs" => "*", "ru" => "*", "el" => "*", "bl" => "m", "hl" => "0", "dt" => "a", ]; if( !empty($data['Header_PubTypeId']) ) { if(array_key_exists($data['Header_PubTypeId'], $this->eds_config['eds']['publication_type_id_to_bl_hl_dt'])) { $headers = $this->eds_config['eds']['publication_type_id_to_bl_hl_dt'][$data['Header_PubTypeId']]; $unimarc_headers['bl'] = $headers[0]; $unimarc_headers['hl'] = $headers[1]; $unimarc_headers['dt'] = $headers[2]; } } $unimarc_record = []; $fo = 0; $so = 0; //An (Id document) $unimarc_record[] = [ 'ufield' => '001', 'usubfield' => '', 'value' => $ref, 'field_order' => $fo, 'subfield_order' => $so, ]; $fo++; //ISBN if( !empty($data['ISBN']) ) { foreach($data['ISBN'] as $isbn) { $unimarc_record[] = [ 'ufield' => '010', 'usubfield' => 'a', 'value' => $isbn, 'field_order' => $fo, 'subfield_order' => $so, ]; $fo++; } } //ISSN if( !empty($data['ISSN']) ) { foreach($data['ISSN'] as $issn) { $unimarc_record[] = [ 'ufield' => '011', 'usubfield' => 'a', 'value' => $issn, 'field_order' => $fo, 'subfield_order' => $so, ]; $fo++; } } //Languages if( !empty($data['Languages']) ) { foreach($data['Languages'] as $language) { if(!empty($language)) { if(array_key_exists($language, $this->eds_config['eds']['language_text_to_language_code'])) { $language = $this->eds_config['eds']['language_text_to_language_code'][$language]; } $unimarc_record[] = [ 'ufield' => '101', 'usubfield' => 'a', 'value' => $language, 'field_order' => $fo, 'subfield_order' => $so, ]; } $fo++; } } //Title $unimarc_record[] = [ 'ufield' => '200', 'usubfield' => 'a', 'value' => $data['Items_Title'][0], 'field_order' => $fo, 'subfield_order' => $so, ]; $fo++; //TitleAlt if( !empty($data['TitleAlt']) ) { $unimarc_record[] = [ 'ufield' => '200', 'usubfield' => 'd', 'value' => $data['Items_TitleAlt'][0], 'field_order' => $fo, 'subfield_order' => $so, ]; $fo++; } //Relationship_Titles > Editeur if( !empty($data['Relationship_Titles']) && $unimarc_headers['bl']=='m') { $unimarc_record[] = [ 'ufield' => '210', 'usubfield' => 'c', 'value' => $data['Relationship_Titles'][0], 'field_order' => $fo, 'subfield_order' => $so, ]; $fo++; } //DateYMD > Année if( !empty($data['Year'][0]) ) { $unimarc_record[] = [ 'ufield' => '210', 'usubfield' => 'd', 'value' => $data['Year'][0], 'field_order' => $fo, 'subfield_order' => $so, ]; $fo++; } //DateYMD > Date de publication $formated_date = ''; if( !empty($data['DateYMD'][0]) ) { $date = DateTime::createFromFormat('Y-m-d', $data['DateYMD'][0]); if($date) { $formated_date = $date->format('d/m/Y'); } if(!$date) { $formated_date = $data['DateYMD']; } $unimarc_record[] = [ 'ufield' => '219', 'usubfield' => 'd', 'value' => $formated_date, 'field_order' => $fo, 'subfield_order' => $so, ]; $fo++; } //StartPage + PageCount > Nombre de pages $pag = 0; if( !empty($data['StartPage']) || !empty($data['PageCount']) ) { if( !empty($data['PageCount']) && empty($data['StartPage']) ) { $pag = $data['PageCount']." p."; } elseif ( !empty($data['StartPage']) && ( empty($data['PageCount']) || $data['PageCount']==1 )) { $pag = "p. ".$data['StartPage']; } else { $pag = "p. ".$data['StartPage']; if(is_numeric($data['StartPage'])) { $pag.= '-'.($data['StartPage']+$data['PageCount'])*1; } } $unimarc_record[] = [ 'ufield' => '215', 'usubfield' => '4', 'value' => $pag, 'field_order' => $fo, 'subfield_order' => $so, ]; $fo++; } //Abstract if( !empty($data['Items_Abstract']) ) { foreach($data['Items_Abstract'] as $abstract) { $unimarc_record[] = [ 'ufield' => '330', 'usubfield' => 'a', 'value' => $abstract, 'field_order' => $fo, 'subfield_order' => $so, ]; $fo++; } } //RelationShip_Titles > Periodique if( !empty($data['Relationship_Titles']) && $unimarc_headers['bl']=='a') { $unimarc_record[] = [ 'ufield' => '461', 'usubfield' => 't', 'value' => $data['Relationship_Titles'][0], 'field_order' => $fo, 'subfield_order' => $so, ]; $unimarc_record[] = [ 'ufield' => '461', 'usubfield' => '9', 'value' => 'lnk:perio', 'field_order' => $fo, 'subfield_order' => $so, ]; $fo++; } //Volume + Issue if( ( !empty($data['Volume']) || !empty($data['Issue']) ) && $unimarc_headers['bl']=='a') { $vol_num = ''; if(!empty($data['Volume'])) { $vol_num = $this->msg['eds_vol'].$data['Volume']; } if(!empty($data['Issue'][0])) { if(!empty($vol_num)) { $vol_num.= " "; } $vol_num.= $this->msg['eds_num'].$data['Issue']; } $unimarc_record[] = [ 'ufield' => '463', 'usubfield' => 'v', 'value' => $vol_num, 'field_order' => $fo, 'subfield_order' => $so, ]; $unimarc_record[] = [ 'ufield' => '463', 'usubfield' => '9', 'value' => 'lnk:bull', 'field_order' => $fo, 'subfield_order' => $so, ]; $fo++; } //DateYMD > Date bulletin if($formated_date && $unimarc_headers['bl']=='a') { $unimarc_record[] = [ 'ufield' => '463', 'usubfield' => 'd', 'value' => $data['DateYMD'][0], 'field_order' => $fo, 'subfield_order' => $so, ]; $unimarc_record[] = [ 'ufield' => '463', 'usubfield' => 'e', 'value' => $formated_date, 'field_order' => $fo, 'subfield_order' => $so, ]; $fo++; } //Subjects if(!empty($data['Subjects']) ) { foreach($data['Subjects'] as $subject) { $unimarc_record[] = [ 'ufield' => '606', 'usubfield' => 'a', 'value' => $subject, 'field_order' => $fo, 'subfield_order' => $so, ]; $fo++; } } //PersonEntity > Auteurs if( !empty($data['PersonEntity']) ) { if(count($data['PersonEntity']) == 1) { $ufield = '700'; } else { $ufield = '701'; } foreach($data['PersonEntity'] as $aut) { $tab_aut = explode(',', $aut); $aut_name = ''; if(!empty($tab_aut[0])) { $aut_name = $tab_aut[0]; } $aut_firstname = ''; if(!empty($tab_aut[1])) { $aut_firstname = $tab_aut[1]; } $unimarc_record[] = [ 'ufield' => $ufield, 'usubfield' => 'a', 'value' => $aut_name, 'field_order' => $fo, 'subfield_order' => $so, ]; if(!empty($aut_firstname)) { $unimarc_record[] = [ 'ufield' => $ufield, 'usubfield' => 'b', 'value' => $aut_firstname, 'field_order' => $fo, 'subfield_order' => $so, ]; } $fo++; } } //FullText_CustomLinks > Liens if( !empty($data['FullText_CustomLinks']) ) { foreach($data['FullText_CustomLinks'] as $link) { $unimarc_record[] = [ 'ufield' => '856', 'usubfield' => 'u', 'value' => $link, 'field_order' => $fo, 'subfield_order' => $so, ]; $fo++; } } //Header_PubType > Type de publication if( !empty($data['Header_PubType']) ) { $unimarc_record[] = [ 'ufield' => '900', 'usubfield' => 'a', 'value' => $data['Header_PubType'], 'field_order' => $fo, 'subfield_order' => $so, ]; if( !empty($this->eds_config['eds']['field_to_cp']['Header_PubType']) ) { $unimarc_record[] = [ 'ufield' => '900', 'usubfield' => 'n', 'value' => $this->eds_config['eds']['field_to_cp']['Header_PubType'], 'field_order' => $fo, 'subfield_order' => $so, ]; $unimarc_record[] = [ 'ufield' => '900', 'usubfield' => 't', 'value' => 'text', 'field_order' => $fo, 'subfield_order' => $so, ]; } $fo++; } //Header_DbLabel > Source if( !empty($data['Header_DbLabel']) ) { $unimarc_record[] = [ 'ufield' => '900', 'usubfield' => 'a', 'value' => $data['Header_DbLabel'], 'field_order' => $fo, 'subfield_order' => $so, ]; if( !empty($this->eds_config['eds']['field_to_cp']['Header_DbLabel']) ) { $unimarc_record[] = [ 'ufield' => '900', 'usubfield' => 'n', 'value' => $this->eds_config['eds']['field_to_cp']['Header_DbLabel'], 'field_order' => $fo, 'subfield_order' => $so, ]; $unimarc_record[] = [ 'ufield' => '900', 'usubfield' => 't', 'value' => 'text', 'field_order' => $fo, 'subfield_order' => $so, ]; } $fo++; } //DOI if( !empty($data['DOI']) ) { foreach($data['DOI'] as $doi) { $unimarc_record[] = [ 'ufield' => '900', 'usubfield' => 'a', 'value' => $doi, 'field_order' => $fo, 'subfield_order' => $so, ]; $unimarc_record[] = [ 'ufield' => '900', 'usubfield' => 'b', 'value' => "http://dx.doi.org/".$doi, 'field_order' => $fo, 'subfield_order' => $so, ]; $unimarc_record[] = [ 'ufield' => '900', 'usubfield' => 'c', 'value' => $doi."|2", 'field_order' => $fo, 'subfield_order' => $so, ]; if( !empty($this->eds_config['eds']['field_to_cp']['DOI']) ) { $unimarc_record[] = [ 'ufield' => '900', 'usubfield' => 'n', 'value' => $this->eds_config['eds']['field_to_cp']['DOI'], 'field_order' => $fo, 'subfield_order' => $so, ]; $unimarc_record[] = [ 'ufield' => '900', 'usubfield' => 't', 'value' => 'resolve', 'field_order' => $fo, 'subfield_order' => $so, ]; } $fo++; } } //Dépôt d'archives institutionnel uniquement (dépôt HAL, DbId=ir01198a) if( !empty($data['Header_DbId']) && $data['Header_DbId']=='ir01198a' ) { $unimarc_record[] = [ 'ufield' => '903', 'usubfield' => 'a', 'value' => 'msg:40', 'field_order' => $fo, 'subfield_order' => $so, ]; } else { $unimarc_record[] = [ 'ufield' => '903', 'usubfield' => 'a', 'value' => 'msg:39', 'field_order' => $fo, 'subfield_order' => $so, ]; } if(empty($unimarc_record)) { return; } $this->buffer['search_id'] = $search_id; $this->buffer['source_id'] = $source_id; $this->buffer['date_import'] = $date_import; $this->buffer['records'][$ref]['header'] = $unimarc_headers; $this->buffer['records'][$ref]['content'] = $unimarc_record; $this->init_record_limiters($ref); } protected function rec_records() { if(empty($this->buffer)) { return; } foreach($this->buffer['records'] as $ref=>$record) { $this->buffer['records'][$ref]['recid'] = $this->insert_into_external_count($this->buffer['source_id'], $ref); } $this->insert_records_into_entrepot($this->buffer); } protected function init_record_limiters($ref) { if(empty($this->eds_config['eds']['query_limiters'])) { return ; } foreach(array_keys($this->eds_config['eds']['query_limiters']) as $id) { $ufield = $this->eds_config['eds']['query_limiters'][$id][2]; $usubfield = 'a'; $value = 'msg:39'; $this->buffer['records'][$ref]['content']["$ufield-$usubfield-0-0"] = [ 'ufield' => $ufield, 'usubfield' => $usubfield, 'value' => $value, 'field_order' => 0, 'subfield_order' => 0, ]; } } protected function update_record_limiters($limiters, $ref) { if(empty($this->eds_config['eds']['query_limiters'])) { return ; } foreach($limiters as $limiter) { if(!empty($this->eds_config['eds']['query_limiters'][$limiter['Id']])) { $ufield = $this->eds_config['eds']['query_limiters'][$limiter['Id']][2]; $usubfield = 'a'; $value = 'msg:40'; $this->buffer['records'][$ref]['content']["$ufield-$usubfield-0-0"] = [ 'ufield' => $ufield, 'usubfield' => $usubfield, 'value' => $value, 'field_order' => 0, 'subfield_order' => 0, ]; } } } protected function get_eds_config () { if(!empty($this->eds_config)) { return $this->eds_config; } $contents = ''; $search_fields_file = __DIR__.'/eds.json'; $search_fields_file_subst = __DIR__.'/eds_subst.json'; if(is_readable($search_fields_file_subst)) { $contents = file_get_contents($search_fields_file_subst); } if(!$contents) { if(is_readable($search_fields_file)) { $contents = file_get_contents($search_fields_file); } } if(!$contents) { return $this->eds_config; } $this->eds_config = json_decode($contents, true); if(!empty($this->eds_config['eds']['query_limiters'])) { foreach($this->eds_config['eds']['query_limiters'] as $k=>$limiter) { $this->eds_config['eds']['query_limiters'][$limiter[0]] = $limiter; unset($this->eds_config['eds']['query_limiters'][$k]); } } if(!empty($this->eds_config['eds']['language_limiters'])) { foreach($this->eds_config['eds']['language_limiters'] as $k=>$limiter) { $this->eds_config['eds']['language_limiters'][$limiter[0]] = $limiter; unset($this->eds_config['eds']['language_limiters'][$k]); } } return $this->eds_config; } }