source: pmb4.2/trunk/fuentes/pmb/classes/z3950_notice.class.php @ 815

Last change on this file since 815 was 815, checked in by jrpelegrina, 4 years ago

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 158.0 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// | creator : Emmanuel PACAUD < emmanuel.pacaud@univ-poitiers.fr>            |
5// +-------------------------------------------------+
6// $Id: z3950_notice.class.php,v 1.173.2.1 2015-08-20 14:15:05 jpermanne Exp $
7
8if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
9
10require_once($class_path."/parametres_perso.class.php");
11require_once($class_path."/notice.class.php");
12require_once($base_path."/catalog/z3950/manual_categorisation.inc.php");
13if ($pmb_indexation_lang) {
14        require_once("$include_path/marc_tables/$pmb_indexation_lang/empty_words");
15}
16require_once("$include_path/isbn.inc.php");
17require_once("$class_path/iso2709.class.php");
18require_once("$class_path/author.class.php");
19require_once("$class_path/serie.class.php");
20require_once("$class_path/editor.class.php");
21require_once("$class_path/collection.class.php");
22require_once("$class_path/subcollection.class.php");
23require_once("$class_path/origine_notice.class.php");
24require_once("$class_path/audit.class.php");
25require_once("$class_path/expl.class.php");
26require_once("$include_path/templates/expl.tpl.php");
27require_once("$class_path/acces.class.php");
28require_once("$class_path/upload_folder.class.php");
29require_once($class_path."/category_auto.class.php");
30require_once("$include_path/explnum.inc.php");
31require_once("$class_path/serials.class.php");
32require_once($class_path."/notice_doublon.class.php");
33require_once("$class_path/origin_authorities.class.php");
34require_once($class_path."/synchro_rdf.class.php");
35require_once("$class_path/docs_section.class.php");
36require_once("$class_path/docs_codestat.class.php");
37require_once("$class_path/docs_type.class.php");
38
39//Recherche de la fonction auxiliaire d'intégration
40if(!$modele) {
41        if ($z3950_import_modele) {
42                if (file_exists($base_path."/catalog/z3950/".$z3950_import_modele)) {
43                        require_once($base_path."/catalog/z3950/".$z3950_import_modele);                       
44                } else {
45                error_message("", sprintf($msg["admin_error_file_import_modele_z3950"],$z3950_import_modele), 1, "./admin.php?categ=param");
46                exit;
47        }
48        } else require_once($base_path."/catalog/z3950/func_other.inc.php");
49} else {
50        require_once($base_path."/catalog/z3950/".$modele);
51}
52
53class z3950_notice {
54        var $bibliographic_level;
55        var $hierarchic_level;
56
57        var $titles;
58        var $serie;
59        var $serie_200;
60        var $nbr_in_serie;
61       
62        var $authors;
63        var $author_functions;
64       
65        var $editors;
66        var $collection;
67        var $subcollection;
68        var $nbr_in_collection;
69        var $mention_edition;   // mention d'édition (1ère, deuxième...)
70        var $isbn;
71
72        var $page_nbr;
73        var $illustration;
74        var $size;
75        var $prix;
76        var $accompagnement;
77
78        var $general_note;
79        var $content_note;
80        var $abstract_note;
81
82        var $internal_index;
83       
84        var $dewey ;
85        var $free_index;
86        var $matieres_index;
87
88        var $link_url;
89        var $link_format;
90
91        var $language_code;
92        var $original_language_code;
93
94        var $action;
95       
96        var $origine_notice = array() ;
97        var $orinot_id = 1 ;
98       
99        var $aut_array = array(); // tableau des auteurs
100        var $categories =       array();// les categories
101        var $categorisation_type = "categorisation_auto";
102
103        var $info_600_3 = array() ;
104        var $info_600_a = array() ;
105        var $info_600_b = array() ;
106        var $info_600_c = array() ;
107        var $info_600_d = array() ;     
108        var $info_600_f = array() ;
109        var $info_600_g = array() ;
110        var $info_600_j = array() ;
111        var $info_600_p = array() ;
112        var $info_600_t = array() ;
113        var $info_600_x = array() ;
114        var $info_600_y = array() ;
115        var $info_600_z = array() ;
116       
117        var $info_601_3 = array() ;
118        var $info_601_a = array() ;
119        var $info_601_b = array() ;
120        var $info_601_c = array() ;
121        var $info_601_d = array() ;
122        var $info_601_e = array() ;
123        var $info_601_f = array() ;
124        var $info_601_g = array() ;
125        var $info_601_h = array() ;
126        var $info_601_j = array() ;
127        var $info_601_t = array() ;
128        var $info_601_x = array() ;
129        var $info_601_y = array() ;
130        var $info_601_z = array() ;
131       
132        var $info_602_3 = array() ;
133        var $info_602_a = array() ;
134        var $info_602_f = array() ;
135        var $info_602_j = array() ;
136        var $info_602_t = array() ;
137        var $info_602_x = array() ;
138        var $info_602_y = array() ;
139        var $info_602_z = array() ;
140       
141        var $info_604_3 = array() ;
142        var $info_604_a = array() ;
143        var $info_604_h = array() ;
144        var $info_604_i = array() ;
145        var $info_604_j = array() ;
146        var $info_604_k = array() ;
147        var $info_604_l = array() ;
148        var $info_604_x = array() ;
149        var $info_604_y = array() ;
150        var $info_604_z = array() ;
151       
152        var $info_605_3 = array() ;
153        var $info_605_a = array() ;
154        var $info_605_h = array() ;
155        var $info_605_i = array() ;
156        var $info_605_k = array() ;
157        var $info_605_l = array() ;
158        var $info_605_m = array() ;
159        var $info_605_n = array() ;
160        var $info_605_q = array() ;
161        var $info_605_r = array() ;
162        var $info_605_s = array() ;
163        var $info_605_u = array() ;
164        var $info_605_w = array() ;
165        var $info_605_j = array() ;
166        var $info_605_x = array() ;
167        var $info_605_y = array() ;
168        var $info_605_z = array() ;
169       
170        var $info_606_3 = array() ;
171        var $info_606_a = array() ;
172        var $info_606_j = array() ;
173        var $info_606_x = array() ;
174        var $info_606_y = array() ;
175        var $info_606_z = array() ;     
176       
177        var $info_607_3 = array() ;
178        var $info_607_a = array() ;
179        var $info_607_j = array() ;
180        var $info_607_x = array() ;
181        var $info_607_y = array() ;
182        var $info_607_z = array() ;
183       
184        var $info_608_3 = array() ;
185        var $info_608_a = array() ;
186        var $info_608_j = array() ;
187        var $info_608_x = array() ;
188        var $info_608_y = array() ;
189        var $info_608_z = array() ;
190       
191        var $tu_500 = array();
192        var $tu_500_i = array();
193        var $tu_500_j = array();
194        var $tu_500_l = array();
195        var $tu_500_n = array();
196        var $tu_500_r = array();
197        var $tu_500_s = array();
198
199        var $info_503 = array();
200        var $info_503_d = array();
201        var $info_503_j = array();
202       
203        //bulletin
204        var $bull_id;
205        var $bull_num;
206        var $bull_date;
207        var $bull_mention;
208        var $bull_titre;
209        //perio
210        var $perio_titre;
211        var $perio_issn;
212        var $perio_id;
213       
214        var $thumbnail_url = "";
215        var $doc_nums = array();
216        var $exemplaires = array();
217       
218        var $message_retour="";
219        var $notice="";
220       
221        var $bt_integr_value = '';
222        var $bt_undo_value = '';
223        var $bt_undo_action='';
224       
225        //upload_vignette
226        var $flag_upload_vignette="";
227       
228        function z3950_notice ($type, $marc = NULL, $source_id=0) {
229               
230                $type = strtolower ($type);
231                switch ($type) {
232                        case 'form' :
233                                $this->from_form();
234                                break;
235                        case 'from_scratch' :
236                                break;
237                        default :
238                                if ($marc != NULL) {
239                                        if ($type == 'sutrs') $type= 'unimarc';
240                                        $this->notice_type=$type;
241                                        $this->notice=$marc;
242                                        $this->source_id = $source_id;
243                                        $record = new iso2709_record ($marc, AUTO_UPDATE,$type);
244                                       
245                                        if ($type == 'unimarc') $this->from_unimarc ($record);
246                                                else $this->from_usmarc ($record);
247                                        if(function_exists("traite_info_subst")){
248                                                traite_info_subst($this);
249                                        }
250                                }
251                                break;
252                }
253        }
254                               
255        static function substitute ($tag, $value, &$string) {
256                global $charset;
257                $string = str_replace ("!!$tag!!", htmlentities($value,ENT_QUOTES, $charset), $string);
258        }
259
260        function insert_in_database ($addslashes = false) {
261                global $dbh ;
262                global $class_path;
263                global $gestion_acces_active, $gestion_acces_user_notice, $gestion_acces_empr_notice;
264                global $res_prf, $chk_rights;
265                global $pmb_synchro_rdf;
266                global $opac_url_base,$pmb_notice_img_folder_id;
267               
268               
269                if($this->bibliographic_level=="s" && $this->hierarchic_level=="2"){
270                        $this->bibliographic_level = "b";
271                }
272                       
273               
274               
275                $new_notice = 0;
276                $notice_retour = 0;
277                $long_maxi = pmb_mysql_field_len(pmb_mysql_query("SELECT code FROM notices limit 1") ,0);
278                $isbn = rtrim (substr ($this->isbn, 0, $long_maxi));
279                if ($isbn != "") {
280                        if (isISBN($isbn)) {
281                                if (strlen($isbn)==13) {
282                                        $isbn1=formatISBN($isbn,13);
283                                } else {
284                                        $isbn1=formatISBN($isbn,10);
285                                }
286                        }
287                        $sql_rech="select notice_id from notices where code = '".$isbn."' ";
288                        if ($isbn1) $sql_rech.=" or code='".$isbn1."' ";
289                        $sql_result_rech = pmb_mysql_query($sql_rech) or die ("Couldn't select notice ! = ".$sql_rech);
290                        if (pmb_mysql_num_rows($sql_result_rech) == 0) {
291                                $new_notice=1; 
292                        } else {
293                                $new_notice=0;
294                                $lu = pmb_mysql_fetch_array($sql_result_rech);
295                                $notice_retour = $lu['notice_id'];
296                        }
297                } else {
298                        $new_notice = 1;
299                }
300
301                if ($new_notice == 0) {
302                        $retour = array ($new_notice, $notice_retour);
303                        return $retour;
304                }
305
306                for ($i = 0; $i < 2; $i++) {
307                        if ($this->editors[$i]['id']) {
308                                $editor_ids[$i] = $this->editors[$i]['id'];
309                        } else {
310                                $editor_ids[$i] = editeur::import ($this->editors[$i]);
311                        }
312                }
313               
314                $this->collection['parent'] = $editor_ids[0];
315                if ($this->collection["id"]) {
316                        $collection_id = $this->collection["id"];
317                } else { 
318                        $collection_id = collection::import ($this->collection);
319                }
320                $this->subcollection['coll_parent'] = $collection_id;
321                if ($this->subcollection["id"]) {
322                        $subcollection_id = $this->subcollection["id"];
323                } else { 
324                        $subcollection_id = subcollection::import ($this->subcollection);
325                }
326                $serie_id = serie::import(stripslashes($this->serie));
327
328                /* traitement de Dewey */
329                if (!$this->internal_index) {
330                        if (!$this->dewey["new_comment"])
331                                $this->dewey["new_comment"] = "";
332                        if (!$this->dewey["new_pclass"])
333                                $this->dewey["new_pclass"] = "";                       
334                        $this->internal_index = indexint::import(clean_string($this->dewey[0]), clean_string($this->dewey["new_comment"]), clean_string($this->dewey["new_pclass"]));
335                } 
336               
337                $date_parution_z3950 = notice::get_date_parution($this->year);
338       
339                /* Origine de la notice */
340                $this->orinot_id = origine_notice::import($this->origine_notice);
341                if ($this->orinot_id==0) $this->orinot_id=1 ;
342               
343               
344                if($addslashes){
345                        $this->document_type = addslashes($this->document_type);       
346                        $this->isbn = addslashes($this->isbn);
347                        $this->titles[0] = addslashes($this->titles[0]);
348                        $this->titles[1] = addslashes($this->titles[1]);
349                        $this->titles[2] = addslashes($this->titles[2]);
350                        $this->titles[3] = addslashes($this->titles[3]);
351                        $this->nbr_in_serie = addslashes($this->nbr_in_serie);
352                        $this->year = addslashes($this->year);
353                        $this->page_nbr = addslashes($this->page_nbr);
354                        $this->illustration = addslashes($this->illustration);
355                        $this->size = addslashes($this->size);
356                        $this->accompagnement = addslashes($this->accompagnement);
357                        $this->nbr_in_collection = addslashes($this->nbr_in_collection);
358                        $this->mention_edition = addslashes($this->mention_edition);
359                        $this->general_note = addslashes($this->general_note);
360                        $this->content_note = addslashes($this->content_note);
361                        $this->abstract_note = addslashes($this->abstract_note);
362                        $this->commentaire_gestion = addslashes($this->commentaire_gestion);
363                        $this->indexation_lang = addslashes($this->indexation_lang);
364                        $this->thumbnail_url = addslashes($this->thumbnail_url);
365                        $this->free_index = addslashes($this->free_index);
366                        $this->link_url = addslashes($this->link_url);
367                        $this->link_format = addslashes($this->link_format);
368                        $this->prix      = addslashes($this->prix);
369                        //les oubliés du premier tour
370                        $serie_id = addslashes($serie_id);
371                        $this->bibliographic_level = addslashes($this->bibliographic_level);
372                        $this->hierarchic_level = addslashes($this->hierarchic_level);
373                        $date_parution_z3950 = addslashes($date_parution_z3950);
374                }
375                               
376                $sql_ins = "insert into notices (
377                        typdoc          ,
378                        code            ,
379                        tit1            ,
380                        tit2            ,
381                        tit3            ,
382                        tit4            ,
383                        tparent_id      ,
384                        tnvol           ,
385                        ed1_id          ,
386                        ed2_id          ,
387                        year            ,
388                        npages          ,
389                        ill             ,
390                        size            ,
391                        accomp          ,
392                        coll_id         ,
393                        subcoll_id      ,
394                        nocoll          ,
395                        mention_edition ,
396                        n_gen           ,
397                        n_contenu       ,
398                        n_resume        ,
399                        indexint,
400                        statut,
401                        commentaire_gestion,
402                        signature,
403                        thumbnail_url,
404                        index_l,
405                        niveau_biblio,
406                        niveau_hierar,
407                        lien,
408                        eformat,
409                        origine_catalogage,
410                        prix,
411                        create_date,
412                        date_parution,
413                        indexation_lang
414                        ) values (
415                        '".$this->document_type."',     
416                        '".$this->isbn."',     
417                        '".$this->titles[0]."',
418                        '".$this->titles[1]."',
419                        '".$this->titles[2]."',
420                        '".$this->titles[3]."',
421                        '".$serie_id."',
422                        '".$this->nbr_in_serie."',
423                        ".$editor_ids[0]." ,
424                        ".$editor_ids[1]." ,
425                        '".$this->year."',
426                        '".$this->page_nbr."',
427                        '".$this->illustration."',
428                        '".$this->size."',
429                        '".$this->accompagnement."',
430                        ".$collection_id." ,
431                        ".$subcollection_id." ,
432                        '".$this->nbr_in_collection."',
433                        '".$this->mention_edition."',
434                        '".$this->general_note."',
435                        '".$this->content_note."',
436                        '".$this->abstract_note."',
437                        '".$this->internal_index."',
438                        '".$this->statut."',
439                        '".$this->commentaire_gestion."',
440                        '".$this->signature."',
441                        '".$this->thumbnail_url."',
442                        '".clean_tags($this->free_index)."',
443                        '".$this->bibliographic_level."',
444                        '".$this->hierarchic_level."',
445                        '".$this->link_url."',
446                        '".$this->link_format."',
447                        '".$this->orinot_id."',
448                        '".$this->prix."',
449                        sysdate(),
450                        '".$date_parution_z3950."',
451                        '".$this->indexation_lang."'
452                 )";
453                $sql_result_ins = pmb_mysql_query($sql_ins) or die ("Couldn't insert into table notices : ".$sql_ins);
454                $notice_retour = pmb_mysql_insert_id();
455                audit::insert_creation (AUDIT_NOTICE, $notice_retour) ;
456                                               
457                if ($gestion_acces_active==1) {
458                        $ac= new acces();
459                        //traitement des droits acces user_notice
460                        if ($gestion_acces_user_notice==1) {                   
461                                $dom_1= $ac->setDomain(1);
462                                $dom_1->storeUserRights(0, $notice_retour);
463                        }
464                        //traitement des droits acces empr_notice
465                        if ($gestion_acces_empr_notice==1) {                   
466                                $dom_2= $ac->setDomain(2);
467                                $dom_2->storeUserRights(0, $notice_retour);
468                        }
469                }
470               
471                // purge de la base des responsabilités de la notice intégrée...
472                if ($notice_retour) {
473                        $rqt_del = "delete from responsability where responsability_notice='$notice_retour'" ;
474                        $sql_result_del = pmb_mysql_query($rqt_del) or die ("Couldn't purge table responsability : ".$rqt_del);
475                }
476                $rqt_ins = "insert into responsability (responsability_author, responsability_notice, responsability_fonction, responsability_type, responsability_ordre ) VALUES ";
477                for ($i=0 ; $i<sizeof($this->aut_array) ; $i++ ){
478                        $aut['id']=clean_string($this->aut_array[$i]['id']);
479                        $aut['name']=clean_string($this->aut_array[$i]['entree']);
480                        $aut['rejete']=clean_string($this->aut_array[$i]['rejete']);
481                        $aut['date']=clean_string($this->aut_array[$i]['date']);
482                        $aut['type']=$this->aut_array[$i]['type_auteur'];
483                        $aut['subdivision']=clean_string($this->aut_array[$i]['subdivision']);
484                        $aut['numero']=clean_string($this->aut_array[$i]['numero']);
485                        $aut['lieu']=clean_string($this->aut_array[$i]['lieu']);
486                        $aut['ville']=clean_string($this->aut_array[$i]['ville']);
487                        $aut['pays']=clean_string($this->aut_array[$i]['pays']);
488                        $aut['web']=clean_string($this->aut_array[$i]['web']);
489                        $aut['author_comment']=clean_string($this->aut_array[$i]['author_comment']);
490                        $aut['authority_number']=clean_string($this->aut_array[$i]['authority_number']);                       
491                       
492                        /* Origine de l'autorité : on reprend les infos d'origine de la notice pour les attribuées aux origines des autorités */
493                        $id_origine_auth=0;
494                        $id_origine_auth = origin_authorities::import($this->origine_notice);                   
495                        if ($id_origine_auth==0) $id_origine_auth=1 ;
496                        // import de l'autorité auteur si elle existe et conservation des infos sur l'origine de l'autorité
497                        if($aut['authority_number']!='' && $id_origine_auth){
498                                $this->aut_array[$i]["id"] = $this->insert_authority_infos($aut['authority_number'],"author",$id_origine_auth,$aut);
499                        }                       
500                        if (!$this->aut_array[$i]["id"])
501                                $this->aut_array[$i]["id"] = auteur::import($aut);
502                        if ($this->aut_array[$i]["id"]) {
503                                $rqt = $rqt_ins . " (".$this->aut_array[$i]["id"].",".$notice_retour.",'".$this->aut_array[$i]['fonction']."',".$this->aut_array[$i]['responsabilite']."," . $i . ") " ; 
504                                $res_ins = pmb_mysql_query($rqt, $dbh);
505                        }
506                }
507                // traitement des titres uniformes     
508                global $pmb_use_uniform_title;
509                if ($pmb_use_uniform_title) {
510                        if(count($this->titres_uniformes)) {
511                                $ntu=new tu_notice($notice_retour);
512                                $ntu->update($this->titres_uniformes);
513                        }
514                }
515
516                // traitement des langues
517                // langues de la publication
518                $rqt_del = "delete from notices_langues where num_notice='$notice_retour' ";
519                $res_del = pmb_mysql_query($rqt_del, $dbh);
520                if (is_array($this->language_code) && count($this->language_code)) {
521                        $rqt_ins = "insert into notices_langues (num_notice, type_langue, code_langue, ordre_langue) VALUES ";
522                        foreach($this->language_code as $ordre_lang=>$code_lang) {
523                                if ($code_lang) {
524                                        $rqt = $rqt_ins . " ('$notice_retour',0, '$code_lang', $ordre_lang) " ;
525                                        $res_ins = @pmb_mysql_query($rqt, $dbh);
526                                } 
527                        }
528                }
529               
530                // langues originales
531                if (is_array($this->original_language_code) && count($this->original_language_code)) {
532                        $rqt_ins = "insert into notices_langues (num_notice, type_langue, code_langue, ordre_langue) VALUES ";
533                        foreach($this->original_language_code as $ordre_lang=>$code_lang) {
534                                if ($code_lang) {
535                                        $rqt = $rqt_ins . " ('$notice_retour',1, '$code_lang', $ordre_lang) " ;
536                                        $res_ins = @pmb_mysql_query($rqt, $dbh);
537                                } 
538                        }
539                }
540
541                // traitement des categories
542                if ($this->categorisation_type == "categorisation_auto") {
543                        traite_categories_enreg($notice_retour,$this->categories);                     
544                } else {
545                        $rqt_del = "delete from notices_categories where notcateg_notice='$notice_retour' ";
546                        $res_del = @pmb_mysql_query($rqt_del, $dbh);
547                       
548                        $rqt_ins = "insert into notices_categories (notcateg_notice, num_noeud, ordre_categorie) VALUES ";
549                       
550                        $rqt_ins_values = array();
551                        foreach ($this->categories as $i=>$category) {
552                                $id_categ=$category['categ_id'];
553                                if ($id_categ) {
554                                        $rqt_ins_values[] = " ('$notice_retour','$id_categ', $i) " ; 
555                                }                               
556                        }
557                        $rqt_ins .= implode(",", $rqt_ins_values);
558                        $res_ins = @pmb_mysql_query($rqt_ins, $dbh);
559                }
560               
561                //Traitement des champs personnalisés (du formulaire !!!)
562                $p_perso=new parametres_perso("notices");
563                $nberrors=$p_perso->check_submited_fields();
564                $p_perso->rec_fields_perso($notice_retour);
565               
566                //Traitement import perso
567                global $notice_id,$notice_org,$notice_type_org;
568                if (function_exists('z_recup_noticeunimarc_suite') && function_exists('z_import_new_notice_suite')) {
569                        $notice_id=$notice_retour;
570                        if(!$notice_org) 
571                                $notice_tmp = $this->notice;
572                        z_recup_noticeunimarc_suite($notice_tmp ? $notice_tmp : $notice_org);
573                        z_import_new_notice_suite();
574                        $notice_tmp="";
575                }
576               
577                //Recherche du titre uniforme automatique
578                //global $opac_enrichment_bnf_sparql;
579                //$opac_enrichment_bnf_sparql=1;
580               
581                $titre_uniforme=notice::getAutomaticTu($notice_retour);
582               
583                //Traitement upload vignette
584                if (trim($this->flag_upload_vignette)) {
585                        $req = "select repertoire_path from upload_repertoire where repertoire_id ='".$pmb_notice_img_folder_id."'";
586                        $res = pmb_mysql_query($req,$dbh);
587                        if(pmb_mysql_num_rows($res)){
588                                $rep=pmb_mysql_fetch_object($res);
589                        }
590                        //le fichier
591                        if (file_exists($rep->repertoire_path.$this->flag_upload_vignette)) {
592                                rename($rep->repertoire_path.$this->flag_upload_vignette,$rep->repertoire_path."img_".$notice_retour);
593                        }
594                        //le champ
595                        $rqt_upd = "UPDATE notices SET thumbnail_url='".addslashes($opac_url_base."getimage.php?noticecode=&vigurl=&notice_id=".$notice_retour)."' WHERE notice_id=".$notice_retour;
596                        $res_ins = @pmb_mysql_query($rqt_upd, $dbh);
597                }
598               
599                // Mise à jour des index de la notice
600                notice::majNotices($notice_retour);
601                // Mise à jour de la table notices_global_index
602                notice::majNoticesGlobalIndex($notice_retour);
603                // Mise à jour de la table notices_mots_global_index
604                notice::majNoticesMotsGlobalIndex($notice_retour);
605                //Calcul de la signature
606                $sign= new notice_doublon();
607                $val= $sign->gen_signature($notice_retour);
608                pmb_mysql_query("update notices set signature='$val' where notice_id=".$notice_retour, $dbh);
609       
610                //synchro_rdf
611                if($pmb_synchro_rdf){
612                        $synchro_rdf = new synchro_rdf();
613                }
614                //Si on catalogue un article on recrée l'arborescence
615                global $biblio_notice;
616                //TODO AR
617                //gérer le cas du bulletin (revient à intégrer le pério uniquement)
618                if($biblio_notice == 'art'){
619                        //Perios
620                        if(!$this->perio_id){
621                                $new_perio = new serial();
622                                $values=array();
623                                $values['tit1'] = $this->perio_titre;
624                                $values['code'] = $this->perio_issn;
625                                $values['niveau_biblio'] = "s";
626                                $values['niveau_hierar'] = "1";
627                                $this->perio_id = $new_perio->update($values);
628                                //synchro_rdf
629                                if($pmb_synchro_rdf){
630                                        $synchro_rdf->addRdf($this->perio_id,0);
631                                }
632                        }
633                               
634                        //Bulletin
635                        if($this->bull_id){
636                                $req_art = "insert into analysis set analysis_bulletin='".$this->bull_id."',
637                                        analysis_notice='".$notice_retour."'";
638                                pmb_mysql_query($req_art,$dbh);
639                                $req = "update bulletins set bulletin_notice='".$this->perio_id."' where bulletin_id='".$this->bull_id."'";
640                                pmb_mysql_query($req,$dbh);
641                        } else {
642                                $new_bull = new bulletinage(0,$this->perio_id);
643                                $values = array();
644                                $values['bul_no'] = $this->bull_num;
645                                $values['bul_date'] = $this->bull_mention;
646                                $values['date_date'] = $this->bull_date;
647                                $values['bul_titre'] = $this->bull_titre;
648                                $new_bull->update($values);
649                                $this->bull_id =$new_bull->bulletin_id;
650                                $req_art = "insert into analysis set analysis_bulletin='".$this->bull_id."',
651                                        analysis_notice='".$notice_retour."'";
652                                pmb_mysql_query($req_art,$dbh);
653                                //synchro_rdf
654                                if($pmb_synchro_rdf){
655                                        $synchro_rdf->addRdf(0,$this->bull_id);
656                                }
657                        }
658                }else if($biblio_notice == "bull"){
659                        //Perios
660                        if(!$this->perio_id){
661                                $new_perio = new serial();
662                                $values=array();
663                                $values['tit1'] = $this->perio_titre;
664                                $values['code'] = $this->perio_issn;
665                                $values['niveau_biblio'] = "s";
666                                $values['niveau_hierar'] = "1";
667                                $this->perio_id = $new_perio->update($values);
668                                //synchro_rdf
669                                if($pmb_synchro_rdf){
670                                        $synchro_rdf->addRdf($this->perio_id,0);
671                                }
672                        }
673                        if(!$this->bull_id){
674                                $new_bull = new bulletinage(0,$this->perio_id);
675                                $values = array();
676                                $values['bul_no'] = $this->bull_num;
677                                $values['bul_date'] = $this->bull_mention;
678                                $values['date_date'] = $this->bull_date;
679                                $values['bul_titre'] = $this->bull_titre;
680                                $new_bull->update($values);
681                                $this->bull_id =$new_bull->bulletin_id;
682                               
683                                //synchro_rdf
684                                if($pmb_synchro_rdf){
685                                        $synchro_rdf->addRdf(0,$this->bull_id);
686                                }
687//                              $req = "update bulletins set bulletin_notice='".$this->perio_id."',num_notice='".$notice_retour."'  where bulletin_id='".$this->bull_id."'";
688//                              pmb_mysql_query($req,$dbh);                             //Faire un update en mettant l'id de la notice crée
689                                //file_put_contents('php://stderr', print_r($this->bull_id, true));
690                        }
691                        if($this->bull_notice){
692                                $notice_bulletin = new notice();
693                                $notice_bulletin->del_notice($notice_retour);
694                                $notice_retour = $this->bull_notice;
695                        }
696                        //Mise à jour de la table bulletins, ajout de la relation entre le bulletins et sa notice
697                        $req = "update bulletins set bulletin_notice='".$this->perio_id."',num_notice='".$notice_retour."'  where bulletin_id='".$this->bull_id."'";
698                        pmb_mysql_query($req,$dbh);
699                       
700                        //Insertion dans la table notices_relation, ajout de la relatioin entre la notice de bulletin et la notice de perio
701                        $req = "insert into notices_relations (num_notice, linked_notice, relation_type,rank) values('".$notice_retour."', '".$this->perio_id."', 'b','1')";
702                        pmb_mysql_query($req,$dbh);
703                       
704                }
705               
706                //file_put_contents('php://stderr', print_r($notice_retour."\n", true));
707                //Exemplaires
708                if (count($this->exemplaires)) {
709//                      global $section_995, $typdoc_995, $codstatdoc_995;
710//                      , $nb_expl_ignores;
711                        $section_995_=new marc_list("section_995");
712                        $section_995=$section_995_->table;
713                        $typdoc_995_=new marc_list("typdoc_995");
714                        $typdoc_995=$typdoc_995_->table;
715                        $codstatdoc_995_=new marc_list("codstatdoc_995");
716                        $codstatdoc_995=$codstatdoc_995_->table;
717//                      $nb_expl_ignores=0;
718                       
719                        global $deflt_docs_statut, $deflt_docs_location, $deflt_lenders;
720                        foreach($this->exemplaires as $info_expl) {
721                                /* RAZ expl */
722                                $expl = array();
723                                       
724                                if ($notice_retour) {
725                                        /* préparation du tableau à passer à la méthode */
726                                        $expl['cb'] = $info_expl['f'];
727                                               
728                                       
729                                        //TODO AR
730                                        // les raccrocher au bulletin et non sa notice
731                                        // dans un second temps
732                                        if($this->bibliographic_level=="s" && $this->hierarchic_level=="2"){
733                                                if($this->bull_id){
734                                                        $expl['notice'] = 0;
735                                                        $expl['bulletin'] = $this->bull_id;
736                                                }else if (!$this->bull_id && $notice_retour){
737                                                        $expl['notice'] = $notice_retour;
738                                                        $expl['bulletin'] = 0;
739                                                }       
740                                        }else{
741                                                $expl['notice'] = $notice_retour;
742                                                $expl['bulletin']       = 0;
743                                        }
744                                       
745                                       
746                                        //$expl['bulletin']     = 0;
747                       
748                                        // $expl['typdoc']     = $info_995['r']; à chercher dans docs_typdoc
749                                        $data_doc=array();
750                                        //$data_doc['tdoc_libelle'] = $info_995['r']." -Type doc importé (".$book_lender_id.")";
751                                        $data_doc['tdoc_libelle'] = $typdoc_995[$info_expl['r']];
752                                        if (!$data_doc['tdoc_libelle']) $data_doc['tdoc_libelle'] = "\$r non conforme -".$info_expl['r']."-" ;
753                                        $data_doc['duree_pret'] = 0 ; /* valeur par défaut */
754                                        $data_doc['tdoc_codage_import'] = $info_expl['r'] ;
755                                        if ($tdoc_codage) $data_doc['tdoc_owner'] = $deflt_lenders ;
756                                        else $data_doc['tdoc_owner'] = 0 ;
757                                        $expl['typdoc'] = docs_type::import($data_doc);
758                       
759                                        $expl['cote'] = $info_expl['k'];
760                       
761                                        // $expl['section']    = $info_995['q']; à chercher dans docs_section
762                                        $data_doc=array();
763                                        $info_expl['q']=trim($info_expl['q']);
764                                        if (!$info_expl['q'])
765                                                $info_expl['q'] = "u";
766                                        $data_doc['section_libelle'] = $section_995[$info_expl['q']];
767                                        $data_doc['sdoc_codage_import'] = $info_expl['q'] ;
768                                        if ($sdoc_codage) $data_doc['sdoc_owner'] = $deflt_lenders ;
769                                        else $data_doc['sdoc_owner'] = 0 ;
770                                        $expl['section'] = docs_section::import($data_doc);
771                                       
772                                        $expl['statut'] = $deflt_docs_statut;
773                       
774                                        if ($info_expl['a']) {
775                                                $expl['location'] = $info_expl['a'];
776                                        } else {
777                                                $expl['location'] = $deflt_docs_location;
778                                        }
779                       
780                                        // $expl['codestat']   = $info_995['q']; 'q' utilisé, éventuellement à fixer par combo_box
781                                        $data_doc=array();
782                                        //$data_doc['codestat_libelle'] = $info_995['q']." -Pub visé importé (".$book_lender_id.")";
783                                        $data_doc['codestat_libelle'] = $codstatdoc_995[$info_expl['q']];
784                                        $data_doc['statisdoc_codage_import'] = $info_expl['q'] ;
785                                        if ($statisdoc_codage) $data_doc['statisdoc_owner'] = $deflt_lenders ;
786                                        else $data_doc['statisdoc_owner'] = 0 ;
787                                        $expl['codestat'] = docs_codestat::import($data_doc);
788                                       
789                                        $expl['note'] = $info_expl['u'];
790                                        $expl['expl_owner'] = $deflt_lenders ;
791                                       
792                                        if ($info_expl['m']) $expl['date_depot'] = substr($info_expl['m'],0,4)."-".substr($info_expl['m'],4,2)."-".substr($info_expl['m'],6,2) ;
793                                        if ($info_expl['n']) $expl['date_retour'] = substr($info_expl['n'],0,4)."-".substr($info_expl['n'],4,2)."-".substr($info_expl['n'],6,2) ;
794                               
795                                        exemplaire::import($expl);
796                                }
797                        }
798                       
799                }
800               
801               
802                //Documents numériques
803                global $deflt_explnum_statut;
804                foreach($this->doc_nums as $doc_num) {
805                        if (!$doc_num['a'])
806                                continue;
807                        if (!$doc_num['s'])
808                                $doc_num['s'] = $deflt_explnum_statut;
809                        if ($doc_num['__nodownload__']) {
810                                if($this->bibliographic_level=="b" && $this->hierarchic_level=="2") explnum_add_url($notice_retour, $this->bull_id, $doc_num['b'], $doc_num['a'], $doc_num['s']); 
811                                else explnum_add_url($notice_retour, 0, $doc_num['b'], $doc_num['a'], $doc_num['s']);
812                        } else {
813                                if($this->bibliographic_level=="b" && $this->hierarchic_level=="2") explnum_add_from_url($notice_retour,$this->bull_id, $doc_num['b'], $doc_num['a'], true, $this->source_id, $doc_num['f'], $doc_num['p'], $doc_num['s']);
814                                else explnum_add_from_url($notice_retour, 0, $doc_num['b'], $doc_num['a'], true, $this->source_id, $doc_num['f'], $doc_num['p'], $doc_num['s']);
815                        }
816                }
817               
818                //synchro_rdf
819                if($pmb_synchro_rdf){
820                        $synchro_rdf->addRdf($notice_retour,0);
821                }
822               
823                $retour = array ($new_notice, $notice_retour); 
824                return $retour;
825        } 
826
827        function update_in_database ($id_notice=0) {
828                global $dbh ;
829                global $pmb_synchro_rdf;
830               
831                $new_notice = 2;
832                $notice_retour = $id_notice;
833               
834                if (!$id_notice) {
835                        $retour = array (2, 0); 
836                        return $retour;
837                        }
838                       
839                //synchro_rdf
840                if($pmb_synchro_rdf){
841                        $synchro_rdf = new synchro_rdf();
842                        $synchro_rdf->delRdf($notice_retour,0);
843                }
844                // traitement des titres uniformes     
845                global $pmb_use_uniform_title;
846                if ($pmb_use_uniform_title) {
847                        if(count($this->titres_uniformes)) {
848                                $ntu=new tu_notice($id_notice);
849                                $ntu->update($this->titres_uniformes);
850                        }
851                }
852                       
853                for ($i = 0; $i < 2; $i++) {
854                        if ($this->editors[$i]['id'])
855                                $editor_ids[$i] = $this->editors[$i]['id'];
856                        else 
857                                $editor_ids[$i] = editeur::import ($this->editors[$i]);
858                }
859               
860                if ($this->collection["id"])
861                        $collection_id = $this->collection["id"];
862                else {
863                        $this->collection['parent'] = $editor_ids[0];
864                        $collection_id = collection::import ($this->collection);
865                }
866               
867                if ($this->subcollection["id"]) {
868                        $subcollection_id = $this->subcollection["id"];
869                }
870                else {
871                        $this->subcollection['coll_parent'] = $collection_id;
872                        $subcollection_id = subcollection::import ($this->subcollection);
873                        $serie_id = serie::import(stripslashes($this->serie));                 
874                }
875
876                /* traitement de Dewey */
877                if (!$this->internal_index) {
878                        if (!$this->dewey["new_comment"])
879                                $this->dewey["new_comment"] = "";
880                        if (!$this->dewey["new_pclass"])
881                                $this->dewey["new_pclass"] = "";                       
882                        $this->internal_index = indexint::import(clean_string($this->dewey[0]), clean_string($this->dewey["new_comment"]), clean_string($this->dewey["new_pclass"]));
883                }
884               
885                $date_parution_z3950 = notice::get_date_parution($this->year);
886                /* Origine de la notice */
887                $this->orinot_id = origine_notice::import($this->origine_notice);
888                if ($this->orinot_id==0) $this->orinot_id=1 ;
889                                               
890                $sql_ins = "update notices set
891                        typdoc                  ='".$this->document_type."',
892                        code                    ='".$this->isbn."',                 
893                        tit1                    ='".$this->titles[0]."',             
894                        tit2                    ='".$this->titles[1]."',             
895                        tit3                    ='".$this->titles[2]."',             
896                        tit4                    ='".$this->titles[3]."',             
897                        tparent_id              ='".$serie_id."',                   
898                        tnvol                   ='".$this->nbr_in_serie."',         
899                        ed1_id                  =".$editor_ids[0]." ,               
900                        ed2_id                  =".$editor_ids[1]." ,               
901                        year                    ='".$this->year."',                 
902                        npages                  ='".$this->page_nbr."',             
903                        ill                     ='".$this->illustration."',         
904                        size                    ='".$this->size."',                 
905                        accomp                  ='".$this->accompagnement."',       
906                        coll_id                 =".$collection_id." ,               
907                        subcoll_id              =".$subcollection_id." ,             
908                        nocoll                  ='".$this->nbr_in_collection."',     
909                        mention_edition         ='".$this->mention_edition."',       
910                        n_gen                   ='".$this->general_note."',         
911                        n_contenu               ='".$this->content_note."',         
912                        n_resume                ='".$this->abstract_note."',         
913                        indexint                ='".$this->internal_index."',         
914                        statut                                  ='".$this->statut."',
915                        commentaire_gestion             ='".$this->commentaire_gestion."',
916                        indexation_lang                 ='".$this->indexation_lang."',
917                        thumbnail_url                   ='".$this->thumbnail_url."',
918                        index_l                 ='".clean_tags($this->free_index)."',               
919                        niveau_biblio           ='".$this->bibliographic_level."',   
920                        niveau_hierar           ='".$this->hierarchic_level."',     
921                        lien                    ='".$this->link_url."',             
922                        eformat                 ='".$this->link_format."',           
923                        origine_catalogage      ='".$this->orinot_id."',             
924                        prix                    ='".$this->prix."',
925                        date_parution                   ='".$date_parution_z3950."'             
926                        where notice_id='$id_notice' ";
927                //echo "<pre>";
928                //print_r($this->aut_array);
929                //echo "</pre>";
930                //echo $sql_ins."<br />";
931                //echo "<pre>";
932                //print_r($this->categories);
933                //echo "</pre>";
934                //exit;
935                $sql_result_ins = pmb_mysql_query($sql_ins) or die ("Couldn't update notices : ".$sql_ins);
936                $notice_retour = $id_notice ;
937                audit::insert_modif (AUDIT_NOTICE, $id_notice) ;
938               
939                // purge de la base des responsabilités de la notice intégrée...
940                if ($notice_retour) {
941                        $rqt_del = "delete from responsability where responsability_notice='$notice_retour'" ;
942                        $sql_result_del = pmb_mysql_query($rqt_del) or die ("Couldn't purge table responsability : ".$rqt_del);
943                        }
944                $rqt_ins = "insert into responsability (responsability_author, responsability_notice, responsability_fonction, responsability_type, responsability_ordre) VALUES ";
945                for ($i=0 ; $i<sizeof($this->aut_array) ; $i++ ){
946                        $aut['id']=clean_string($this->aut_array[$i]['id']);
947                        $aut['name']=clean_string($this->aut_array[$i]['entree']);
948                        $aut['rejete']=clean_string($this->aut_array[$i]['rejete']);
949                        $aut['date']=clean_string($this->aut_array[$i]['date']);
950                        $aut['type']=$this->aut_array[$i]['type_auteur'];
951                        $aut['subdivision']=clean_string($this->aut_array[$i]['subdivision']);
952                        $aut['numero']=clean_string($this->aut_array[$i]['numero']);
953                        $aut['lieu']=clean_string($this->aut_array[$i]['lieu']);
954                        $aut['ville']=clean_string($this->aut_array[$i]['ville']);
955                        $aut['pays']=clean_string($this->aut_array[$i]['pays']);
956                        $aut['web']=clean_string($this->aut_array[$i]['web']);
957                        $aut['author_comment']=clean_string($this->aut_array[$i]['author_comment']);
958                        $aut['authority_number']=clean_string($this->aut_array[$i]['authority_number']);
959                       
960                        /* Origine de l'autorité : on reprend les infos d'origine de la notice pour les attribuées aux origines des autorités */
961                        $id_origine_auth=0;
962                        $id_origine_auth = origin_authorities::import($this->origine_notice);
963                        if ($id_origine_auth==0) $id_origine_auth=1 ;
964                        // import de l'autorité auteur si elle n'existe pas et conservation des infos sur l'origine de l'autorité
965                        if($aut['authority_number']!='' && $id_origine_auth){
966                                $this->aut_array[$i]["id"] = $this->insert_authority_infos($aut['authority_number'],"author",$id_origine_auth,$aut);
967                        }
968                        if (!$this->aut_array[$i]["id"])
969                                $this->aut_array[$i]["id"] = auteur::import($aut);
970                        if ($this->aut_array[$i]["id"]) {
971                                $rqt = $rqt_ins . " (".$this->aut_array[$i]["id"].",".$notice_retour.",'".$this->aut_array[$i]['fonction']."',".$this->aut_array[$i]['responsabilite'].",".$i.") " ; 
972                                $res_ins = pmb_mysql_query($rqt, $dbh);
973                        }
974                }
975               
976                // traitement des categories
977                if ($this->categorisation_type == "categorisation_auto") {
978                        traite_categories_enreg($notice_retour,$this->categories);                     
979                }
980                else {
981                        $rqt_del = "delete from notices_categories where notcateg_notice='$notice_retour' ";
982                        $res_del = @pmb_mysql_query($rqt_del, $dbh);
983                       
984                        $rqt_ins = "insert into notices_categories (notcateg_notice, num_noeud, ordre_categorie) VALUES ";
985                       
986                        $rqt_ins_values = array();
987                        foreach ($this->categories as $i=>$category) {
988                                $id_categ=$category['categ_id'];
989                                if ($id_categ) {
990                                        $rqt_ins_values[] = " ('$notice_retour','$id_categ', $i) " ; 
991                                }                               
992                        }
993                        $rqt_ins .= implode(",", $rqt_ins_values);
994                        $res_ins = @pmb_mysql_query($rqt_ins, $dbh);
995                }
996               
997                // traitement des langues
998                // langues de la publication
999                $rqt_del = "delete from notices_langues where num_notice='$notice_retour' ";
1000                $res_del = pmb_mysql_query($rqt_del, $dbh);
1001                if (is_array($this->language_code) && count($this->language_code)) {
1002                        $rqt_ins = "insert into notices_langues (num_notice, type_langue, code_langue, ordre_langue) VALUES ";
1003                        foreach($this->language_code as $ordre_lang=>$code_lang) {
1004                                if ($code_lang) {
1005                                        $rqt = $rqt_ins . " ('$notice_retour',0, '$code_lang', $ordre_lang) " ;
1006                                        $res_ins = @pmb_mysql_query($rqt, $dbh);
1007                                } 
1008                        }
1009                }
1010                // langues originales
1011                if (is_array($this->original_language_code) && count($this->original_language_code)) {
1012                        $rqt_ins = "insert into notices_langues (num_notice, type_langue, code_langue, ordre_langue) VALUES ";
1013                        foreach($this->original_language_code as $ordre_lang=>$code_lang) {
1014                                if ($code_lang) {
1015                                        $rqt = $rqt_ins . " ('$notice_retour',1, '$code_lang', $ordre_lang) " ;
1016                                        $res_ins = @pmb_mysql_query($rqt, $dbh);
1017                                } 
1018                        }
1019                }
1020                //Traitement des champs personnalisés (du formulaire !!!)
1021                $p_perso=new parametres_perso("notices");
1022                $nberrors=$p_perso->check_submited_fields();
1023                $p_perso->rec_fields_perso($notice_retour);
1024               
1025                //Traitement import perso
1026                global $notice_id,$notice_org,$notice_type_org;
1027                if (function_exists('z_recup_noticeunimarc_suite') && function_exists('recup_noticeunimarc_suite')) {
1028                        //Suppression des champs persos
1029                        $requete="delete from notices_custom_values where notices_custom_origine=".$notice_retour;
1030                        @pmb_mysql_query($requete);
1031                        $notice_id=$notice_retour;
1032                        z_recup_noticeunimarc_suite($notice_org);
1033                        z_import_new_notice_suite();
1034                }
1035               
1036                // Mise à jour des index de la notice
1037                notice::majNotices($notice_retour);
1038                // Mise à jour de la table notices_global_index
1039                notice::majNoticesGlobalIndex($notice_retour);
1040                // Mise à jour de la table notices_mots_global_index
1041                notice::majNoticesMotsGlobalIndex($notice_retour);
1042               
1043                //Documents numériques
1044                foreach($this->doc_nums as $doc_num) {
1045                        if (!$doc_num["a"])
1046                                continue;
1047                        explnum_add_from_url($notice_retour, $this->bull_id, $doc_num["b"], $doc_num["a"], false,$this->source_id, $doc_num["f"],'', $doc_num["s"]);
1048                }
1049               
1050                //synchro_rdf
1051                if($pmb_synchro_rdf){
1052                        $synchro_rdf->addRdf($notice_retour,0);
1053                }
1054               
1055                $retour = array ($new_notice, $notice_retour); 
1056                return $retour;
1057        } 
1058
1059        function get_form ($action, $id_notice=0,$retour='link',$article=false) {
1060                // construit le formulaire de catalogage pré-rempli
1061                global $msg, $dbh, $charset, $current_module ;
1062                global $include_path;
1063                global $base_path;
1064                global $znotices_id;
1065                global $item;
1066               
1067                $fonction = new marc_list('function');
1068
1069                $this->action = $action;
1070
1071                include("$include_path/templates/z3950_form.tpl.php");
1072                global $bt_undo;
1073
1074                // mise à jour de l'entête du formulaire
1075                $form_notice = str_replace('!!libelle_form!!', $this->libelle_form, $form_notice);
1076               
1077                // mise à jour des flags de niveau hiérarchique
1078                $form_notice = str_replace('!!b_level!!', $this->bibliographic_level, $form_notice);
1079                $form_notice = str_replace('!!h_level!!', $this->hierarchic_level, $form_notice);
1080                for ($i = 0; $i < 4; $i++) {
1081                        z3950_notice::substitute ("title_$i", $this->titles[$i], $ptab[0]);
1082                        }
1083                z3950_notice::substitute ("serie", $this->serie, $ptab[0]);
1084                z3950_notice::substitute ("nbr_in_serie", $this->nbr_in_serie, $ptab[0]);
1085                $form_notice = str_replace('!!tab0!!', $ptab[0], $form_notice);
1086                 
1087                // mise à jour de l'onglet 1
1088                // constitution de la mention de responsabilité
1089                $nb_autres_auteurs = 0 ;
1090                $nb_auteurs_secondaires = 0 ;//print "<pre>";print_r($this->aut_array);print "</pre>";
1091                for ($as = 0 ; $as < sizeof($this->aut_array) ; $as++ ){
1092                        if ($this->aut_array[$as]["responsabilite"]===0) {
1093                                $numrows = 0;
1094                                if ($this->aut_array[$as]["date"]) {
1095                                        $sql_author_find = "SELECT author_id, author_name, author_rejete, author_date FROM authors WHERE author_name = '".addslashes($this->aut_array[$as]["entree"])."' AND author_rejete = '".addslashes($this->aut_array[$as]["rejete"])."' AND author_type = '".$this->aut_array[$as]["type_auteur"]."' AND author_date ='".addslashes($this->aut_array[$as]["date"])."'";
1096                                        $res = pmb_mysql_query($sql_author_find);
1097                                        $numrows = pmb_mysql_num_rows($res);
1098                                }
1099                                if (!$numrows) {
1100                                        $sql_author_find = "SELECT author_id, author_name, author_rejete, author_date FROM authors WHERE author_name = '".addslashes($this->aut_array[$as]["entree"])."' AND author_rejete = '".addslashes($this->aut_array[$as]["rejete"])."' AND author_type = '".$this->aut_array[$as]["type_auteur"]."'";
1101                                        $res = pmb_mysql_query($sql_author_find);
1102                                        $numrows = pmb_mysql_num_rows($res);                                   
1103                                }
1104                                if ($numrows == 1) {
1105                                        $existing_author = pmb_mysql_fetch_array($res);
1106                                        $existing_author_id = $existing_author["author_id"];
1107                                }
1108                                else $existing_author_id = 0;
1109                                z3950_notice::substitute ("author0_type_use_existing", $existing_author_id ? "checked" : "", $ptab[1]);
1110                                z3950_notice::substitute ("author0_type_insert_new", $existing_author_id ? "" : "checked", $ptab[1]);
1111                                if ($existing_author_id) {
1112                                        z3950_notice::substitute ("f_author_name_0_existing", $existing_author["author_name"].", ".$existing_author["author_rejete"].($existing_author["author_date"] ? " (".$existing_author["author_date"].")" : ""), $ptab[1]);
1113                                        z3950_notice::substitute ("f_aut0_existing_id", $existing_author_id, $ptab[1]);
1114                                }
1115                                else {
1116                                        z3950_notice::substitute ("f_author_name_0_existing", '', $ptab[1]);
1117                                        z3950_notice::substitute ("f_aut0_existing_id", 0, $ptab[1]);                                   
1118                                }
1119
1120                                z3950_notice::substitute ("author_name_0", $this->aut_array[$as]["entree"], $ptab[1]);
1121                                z3950_notice::substitute ("author_rejete_0", $this->aut_array[$as]["rejete"], $ptab[1]);
1122                                z3950_notice::substitute ("author_date_0", $this->aut_array[$as]["date"], $ptab[1]);
1123                                z3950_notice::substitute ("author_function_0", $this->aut_array[$as]["fonction"], $ptab[1]);
1124                                z3950_notice::substitute ("author_function_label_0", $fonction->table[$this->aut_array[$as]["fonction"]], $ptab[1]);
1125                                z3950_notice::substitute ("author_lieu_0", $this->aut_array[$as]["lieu"], $ptab[1]);
1126                                z3950_notice::substitute ("author_pays_0", $this->aut_array[$as]["pays"], $ptab[1]);
1127                                z3950_notice::substitute ("author_comment_0", $this->aut_array[$as]["author_comment"], $ptab[1]);
1128                                z3950_notice::substitute ("author_ville_0", $this->aut_array[$as]["ville"], $ptab[1]);
1129                                z3950_notice::substitute ("author_subdivision_0", $this->aut_array[$as]["subdivision"], $ptab[1]);
1130                                z3950_notice::substitute ("author_numero_0", $this->aut_array[$as]["numero"], $ptab[1]);
1131                                z3950_notice::substitute ("author_web_0", $this->aut_array[$as]["web"], $ptab[1]);
1132                                z3950_notice::substitute ("authority_number_0", $this->aut_array[$as]["authority_number"], $ptab[1]);
1133                               
1134                                for ($type = 70; $type <= 72; $type++) {
1135                                        if ($this->aut_array[$as]["type_auteur"] == $type) 
1136                                                $sel = " selected";
1137                                        else $sel = "";
1138                                        z3950_notice::substitute ("author_type_".$type."_0", $sel, $ptab[1]);
1139                                        if($this->aut_array[$as]["type_auteur"] == '70')
1140                                            z3950_notice::substitute ('display_0','none', $ptab[1]);
1141                                        else 
1142                                                z3950_notice::substitute ('display_0','', $ptab[1]);
1143                                }                                               
1144                                       
1145                                }
1146                        if ($this->aut_array[$as]["responsabilite"]==1) {
1147                                if ($this->aut_array[$as]["entree"] == "") continue; 
1148                                $ptab_aut_autres = str_replace('!!iaut!!', $nb_autres_auteurs, $ptab[11]) ;
1149
1150                                $numrows = 0;
1151                                if ($this->aut_array[$as]["date"]) {
1152                                        $sql_author_find = "SELECT author_id, author_name, author_rejete, author_date FROM authors WHERE author_name = '".addslashes($this->aut_array[$as]["entree"])."' AND author_rejete = '".addslashes($this->aut_array[$as]["rejete"])."' AND author_type = '".$this->aut_array[$as]["type_auteur"]."' AND author_date ='".addslashes($this->aut_array[$as]["date"])."'";
1153                                        $res = pmb_mysql_query($sql_author_find);
1154                                        $numrows = pmb_mysql_num_rows($res);
1155                                }
1156                                if (!$numrows) {
1157                                        $sql_author_find = "SELECT author_id, author_name, author_rejete, author_date FROM authors WHERE author_name = '".addslashes($this->aut_array[$as]["entree"])."' AND author_rejete = '".addslashes($this->aut_array[$as]["rejete"])."' AND author_type = '".$this->aut_array[$as]["type_auteur"]."'";
1158                                        $res = pmb_mysql_query($sql_author_find);
1159                                        $numrows = pmb_mysql_num_rows($res);                                   
1160                                }
1161                                if ($numrows == 1) {
1162                                        $existing_author = pmb_mysql_fetch_array($res);
1163                                        $existing_author_id = $existing_author["author_id"];
1164                                }
1165                                else $existing_author_id = 0;
1166                                z3950_notice::substitute ("author1_type_use_existing_", $existing_author_id ? "checked" : "", $ptab_aut_autres);
1167                                z3950_notice::substitute ("author1_type_insert_new_", $existing_author_id ? "" : "checked", $ptab_aut_autres);
1168                                if ($existing_author_id) {
1169                                        z3950_notice::substitute ("f_aut1", $existing_author["author_name"].", ".$existing_author["author_rejete"].($existing_author["author_date"] ? " (".$existing_author["author_date"].")" : ""), $ptab_aut_autres);
1170                                        z3950_notice::substitute ("f_aut1_id", $existing_author_id, $ptab_aut_autres);
1171                                }
1172                                else {
1173                                        z3950_notice::substitute ("f_aut1", '', $ptab_aut_autres);
1174                                        z3950_notice::substitute ("f_aut1_id", '', $ptab_aut_autres);
1175                                }
1176
1177                                z3950_notice::substitute ("author_name_1", $this->aut_array[$as]["entree"], $ptab_aut_autres);
1178                                z3950_notice::substitute ("author_rejete_1", $this->aut_array[$as]["rejete"], $ptab_aut_autres);
1179                                z3950_notice::substitute ("author_date_1", $this->aut_array[$as]["date"], $ptab_aut_autres);
1180                                z3950_notice::substitute ("author_function_1", $this->aut_array[$as]["fonction"], $ptab_aut_autres);
1181                                z3950_notice::substitute ("author_function_label_1", $fonction->table[$this->aut_array[$as]["fonction"]], $ptab_aut_autres);
1182                                z3950_notice::substitute ("author_lieu_1", $this->aut_array[$as]["lieu"], $ptab_aut_autres);
1183                                z3950_notice::substitute ("author_pays_1", $this->aut_array[$as]["pays"], $ptab_aut_autres);
1184                                z3950_notice::substitute ("author_comment_1", $this->aut_array[$as]["author_comment"], $ptab_aut_autres);
1185                                z3950_notice::substitute ("author_ville_1", $this->aut_array[$as]["ville"], $ptab_aut_autres);
1186                                z3950_notice::substitute ("author_subdivision_1", $this->aut_array[$as]["subdivision"], $ptab_aut_autres);
1187                                z3950_notice::substitute ("author_numero_1", $this->aut_array[$as]["numero"], $ptab_aut_autres);
1188                                z3950_notice::substitute ("author_web_1", $this->aut_array[$as]["web"], $ptab_aut_autres);
1189                                z3950_notice::substitute ("authority_number_1", $this->aut_array[$as]["authority_number"], $ptab_aut_autres);
1190                                for ($type = 70; $type <= 72; $type++) {
1191                                        if ($this->aut_array[$as]["type_auteur"] == $type) $sel = " selected";
1192                                                else $sel = "";
1193                                        z3950_notice::substitute ("author_type_".$type."_1", $sel, $ptab_aut_autres);
1194                                        if($this->aut_array[$as]["type_auteur"] == '70')
1195                                                z3950_notice::substitute ('display_1'.$nb_autres_auteurs,'none', $ptab_aut_autres);
1196                                        else 
1197                                                z3950_notice::substitute ('display_1'.$nb_autres_auteurs,'', $ptab_aut_autres);
1198                                }
1199                                       
1200                                $autres_auteurs .= $ptab_aut_autres ;
1201                                $nb_autres_auteurs++ ;
1202                                }
1203                               
1204                       
1205                        if ($this->aut_array[$as]["responsabilite"]==2) {
1206                                if ($this->aut_array[$as]["entree"] == "") continue; 
1207                                $ptab_aut_autres = str_replace('!!iaut!!', $nb_auteurs_secondaires, $ptab[12]) ;
1208                               
1209                                $numrows = 0;
1210                                if ($this->aut_array[$as]["date"]) {
1211                                        $sql_author_find = "SELECT author_id, author_name, author_rejete, author_date FROM authors WHERE author_name = '".addslashes($this->aut_array[$as]["entree"])."' AND author_rejete = '".addslashes($this->aut_array[$as]["rejete"])."' AND author_type = '".$this->aut_array[$as]["type_auteur"]."' AND author_date ='".addslashes($this->aut_array[$as]["date"])."'";
1212                                        $res = pmb_mysql_query($sql_author_find);
1213                                        $numrows = pmb_mysql_num_rows($res);
1214                                }
1215                                if (!$numrows) {
1216                                        $sql_author_find = "SELECT author_id, author_name, author_rejete, author_date FROM authors WHERE author_name = '".addslashes($this->aut_array[$as]["entree"])."' AND author_rejete = '".addslashes($this->aut_array[$as]["rejete"])."' AND author_type = '".$this->aut_array[$as]["type_auteur"]."'";
1217                                        $res = pmb_mysql_query($sql_author_find);
1218                                        $numrows = pmb_mysql_num_rows($res);                                   
1219                                }
1220                                if ($numrows == 1) {
1221                                        $existing_author = pmb_mysql_fetch_array($res);
1222                                        $existing_author_id = $existing_author["author_id"];
1223                                }
1224                                else $existing_author_id = 0;
1225                                z3950_notice::substitute ("author2_type_use_existing_", $existing_author_id ? "checked" : "", $ptab_aut_autres);
1226                                z3950_notice::substitute ("author2_type_insert_new_", $existing_author_id ? "" : "checked", $ptab_aut_autres);
1227                                if ($existing_author_id) {
1228                                        z3950_notice::substitute ("f_aut2", $existing_author["author_name"].", ".$existing_author["author_rejete"].($existing_author["author_date"] ? " (".$existing_author["author_date"].")" : ""), $ptab_aut_autres);
1229                                        z3950_notice::substitute ("f_aut2_id", $existing_author_id, $ptab_aut_autres);
1230                                }
1231                                else {
1232                                        z3950_notice::substitute ("f_aut2", '', $ptab_aut_autres);
1233                                        z3950_notice::substitute ("f_aut2_id", 0, $ptab_aut_autres);
1234                                }
1235                               
1236                                z3950_notice::substitute ("author_name_2", $this->aut_array[$as]["entree"], $ptab_aut_autres);
1237                                z3950_notice::substitute ("author_rejete_2", $this->aut_array[$as]["rejete"], $ptab_aut_autres);
1238                                z3950_notice::substitute ("author_date_2", $this->aut_array[$as]["date"], $ptab_aut_autres);
1239                                z3950_notice::substitute ("author_function_2", $this->aut_array[$as]["fonction"], $ptab_aut_autres);
1240                                z3950_notice::substitute ("author_function_label_2", $fonction->table[$this->aut_array[$as]["fonction"]], $ptab_aut_autres);
1241                                z3950_notice::substitute ("author_lieu_2", $this->aut_array[$as]["lieu"], $ptab_aut_autres);
1242                                z3950_notice::substitute ("author_pays_2", $this->aut_array[$as]["pays"], $ptab_aut_autres);
1243                                z3950_notice::substitute ("author_comment_2", $this->aut_array[$as]["author_comment"], $ptab_aut_autres);
1244                                z3950_notice::substitute ("author_ville_2", $this->aut_array[$as]["ville"], $ptab_aut_autres);
1245                                z3950_notice::substitute ("author_subdivision_2", $this->aut_array[$as]["subdivision"], $ptab_aut_autres);
1246                                z3950_notice::substitute ("author_numero_2", $this->aut_array[$as]["numero"], $ptab_aut_autres);
1247                                z3950_notice::substitute ("author_web_2", $this->aut_array[$as]["web"], $ptab_aut_autres);
1248                                z3950_notice::substitute ("authority_number_2", $this->aut_array[$as]["authority_number"], $ptab_aut_autres);
1249                                for ($type = 70; $type <= 72; $type++) {
1250                                        if ($this->aut_array[$as]["type_auteur"] == $type) 
1251                                                $sel = " selected";
1252                                        else $sel = "";
1253                                        z3950_notice::substitute ("author_type_".$type."_2", $sel, $ptab_aut_autres);
1254                                        if($this->aut_array[$as]["type_auteur"] == '70')
1255                                                z3950_notice::substitute ('display_2'.$nb_auteurs_secondaires,'none', $ptab_aut_autres);
1256                                        else 
1257                                                z3950_notice::substitute ('display_2'.$nb_auteurs_secondaires,'', $ptab_aut_autres);
1258                                }
1259                                $auteurs_secondaires .= $ptab_aut_autres ;
1260                                $nb_auteurs_secondaires++ ;
1261                        }
1262                }
1263                // au cas ou pas d'auteur principal : on fait le ménage dans le formulaire
1264                z3950_notice::substitute ("author_name_0", "", $ptab[1]);
1265                z3950_notice::substitute ("author_rejete_0", "", $ptab[1]);
1266                z3950_notice::substitute ("author_date_0", "", $ptab[1]);
1267                z3950_notice::substitute ("author_function_0", "", $ptab[1]);
1268                z3950_notice::substitute ("author_function_label_0", "", $ptab[1]);
1269                z3950_notice::substitute ("f_author_name_0_existing", "", $ptab[1]);
1270                z3950_notice::substitute ("f_aut0_existing_id", "", $ptab[1]);
1271                z3950_notice::substitute ("author0_type_use_existing", "", $ptab[1]);
1272                z3950_notice::substitute ("author0_type_insert_new", "checked", $ptab[1]);
1273                z3950_notice::substitute ("author_lieu_0", "", $ptab[1]);
1274                z3950_notice::substitute ("author_pays_0", "", $ptab[1]);
1275                z3950_notice::substitute ("author_comment_0", "", $ptab[1]);
1276                z3950_notice::substitute ("author_ville_0", "", $ptab[1]);
1277                z3950_notice::substitute ("author_subdivision_0", "", $ptab[1]);
1278                z3950_notice::substitute ("author_numero_0", "", $ptab[1]);
1279                z3950_notice::substitute ("author_web_0", "", $ptab[1]);
1280                z3950_notice::substitute ("authority_number_0", "", $ptab[1]);
1281                z3950_notice::substitute ('display_0','none', $ptab[1]);
1282
1283               
1284                $ptab[1] = str_replace('!!max_aut1!!', $nb_autres_auteurs+1, $ptab[1]);
1285                $ptab[1] = str_replace('!!iaut_added1!!', $nb_autres_auteurs, $ptab[1]);
1286                $ptab[1] = str_replace('!!max_aut2!!', $nb_auteurs_secondaires+1, $ptab[1]);
1287                $ptab[1] = str_replace('!!iaut_added2!!', $nb_auteurs_secondaires, $ptab[1]);
1288               
1289                $ptab[1] = str_replace('!!autres_auteurs!!', $autres_auteurs, $ptab[1]);
1290                $ptab[1] = str_replace('!!auteurs_secondaires!!', $auteurs_secondaires, $ptab[1]);
1291                $form_notice = str_replace('!!tab1!!', $ptab[1], $form_notice);
1292               
1293                //Editeur 1
1294                //On tente avec toutes les infos
1295                if ($this->editors[0]['name'] && $this->editors[0]['ville']) {
1296                        $sql_find_publisher = "SELECT ed_id,ed_ville,ed_name FROM publishers WHERE ed_name = '".addslashes($this->editors[0]['name'])."' AND ed_ville = '".addslashes($this->editors[0]['ville'])."'";
1297                        $res = pmb_mysql_query($sql_find_publisher);
1298                        if (pmb_mysql_num_rows($res) == 1) {
1299                                $existing_publisher = pmb_mysql_fetch_array($res);
1300                                $existing_publisher_id = $existing_publisher["ed_id"];
1301                        }                       
1302                }
1303                //Non? Le nom sans ville peut être alors?
1304                if (!$existing_publisher_id && $this->editors[0]['name']){
1305                        $sql_find_publisher = "SELECT ed_id,ed_ville,ed_name FROM publishers WHERE ed_name = '".addslashes($this->editors[0]['name'])."' AND ed_ville = ''";
1306                        $res = pmb_mysql_query($sql_find_publisher);
1307                        if (pmb_mysql_num_rows($res) == 1) {
1308                                $existing_publisher = pmb_mysql_fetch_array($res);
1309                                $existing_publisher_id = $existing_publisher["ed_id"];
1310                        }
1311                }
1312                //Juste le nom alors?
1313                if (!$existing_publisher_id && $this->editors[0]['name'] && !$this->editors[0]['ville']){
1314                        $sql_find_publisher = "SELECT ed_id,ed_ville,ed_name FROM publishers WHERE ed_name = '".addslashes($this->editors[0]['name'])."'";
1315                        $res = pmb_mysql_query($sql_find_publisher);
1316                        if (pmb_mysql_num_rows($res) == 1) {
1317                                $existing_publisher = pmb_mysql_fetch_array($res);
1318                                $existing_publisher_id = $existing_publisher["ed_id"];
1319                        }
1320                }
1321                if (!$existing_publisher_id) 
1322                        $existing_publisher_id = 0;
1323                z3950_notice::substitute ("editor_type_use_existing", $existing_publisher_id ? 'checked' : '', $ptab[2]);
1324                z3950_notice::substitute ("editor_type_insert_new", $existing_publisher_id ? '' : 'checked', $ptab[2]);
1325                if ($existing_publisher_id) {
1326                        $editor = new editeur($existing_publisher_id);
1327                        $editor_display = $editor->display;
1328                        if (!$editor_display) {
1329                                $info_ville = $existing_publisher["ed_ville"] ? ' ('.$existing_publisher["ed_ville"].')' : "";
1330                                $editor_display = $existing_publisher["ed_name"].$info_ville;
1331                        }
1332                        z3950_notice::substitute ("f_ed1", $editor_display, $ptab[2]);
1333                        z3950_notice::substitute ("f_ed1_id", $existing_publisher_id, $ptab[2]);
1334                }
1335                else {
1336                        z3950_notice::substitute ("f_ed1", '', $ptab[2]);
1337                        z3950_notice::substitute ("f_ed1_id", '', $ptab[2]);
1338                }
1339               
1340                z3950_notice::substitute ("editor_name_0", $this->editors[0]['name'], $ptab[2]);
1341                z3950_notice::substitute ("editor_ville_0", $this->editors[0]['ville'], $ptab[2]);
1342               
1343                //Editeur 2
1344                //On tente avec toutes les infos
1345                if ($this->editors[1]['name'] && $this->editors[1]['ville']) {
1346                        $sql_find_publisher2 = "SELECT ed_id,ed_ville,ed_name FROM publishers WHERE ed_name = '".addslashes($this->editors[1]['name'])."' AND ed_ville = '".addslashes($this->editors[1]['ville'])."'";
1347                        $res = pmb_mysql_query($sql_find_publisher2);
1348                        if (pmb_mysql_num_rows($res) == 1) {
1349                                $existing_publisher2 = pmb_mysql_fetch_array($res);
1350                                $existing_publisher_id2 = $existing_publisher2["ed_id"];
1351                        }                       
1352                }
1353                //Non? Le nom sans ville peut être alors?
1354                if (!$existing_publisher_id2 && $this->editors[1]['name']){
1355                        $sql_find_publisher2 = "SELECT ed_id,ed_ville,ed_name FROM publishers WHERE ed_name = '".addslashes($this->editors[1]['name'])."' AND ed_ville = ''";
1356                        $res = pmb_mysql_query($sql_find_publisher2);
1357                        if (pmb_mysql_num_rows($res) == 1) {
1358                                $existing_publisher2 = pmb_mysql_fetch_array($res);
1359                                $existing_publisher_id2 = $existing_publisher2["ed_id"];
1360                        }
1361                }
1362                //Juste le nom alors?
1363                if (!$existing_publisher_id2 && $this->editors[1]['name'] && !$this->editors[1]['ville']){
1364                        $sql_find_publisher2 = "SELECT ed_id,ed_ville,ed_name FROM publishers WHERE ed_name = '".addslashes($this->editors[1]['name'])."'";
1365                        $res = pmb_mysql_query($sql_find_publisher2);
1366                        if (pmb_mysql_num_rows($res) == 1) {
1367                                $existing_publisher2 = pmb_mysql_fetch_array($res);
1368                                $existing_publisher_id2 = $existing_publisher2["ed_id"];
1369                        }
1370                }
1371                if (!$existing_publisher_id2) 
1372                        $existing_publisher_id2 = 0;
1373               
1374                z3950_notice::substitute ("editor1_type_use_existing", $existing_publisher_id2 ? 'checked' : '', $ptab[2]);
1375                z3950_notice::substitute ("editor1_type_insert_new", $existing_publisher_id2 ? '' : 'checked', $ptab[2]);
1376                if ($existing_publisher_id2) {
1377                        $editor = new editeur($existing_publisher_id2);
1378                        $editor_display = $editor->display;
1379                        if (!$editor_display) {
1380                                $info_ville = $existing_publisher2["ed_ville"] ? ' ('.$existing_publisher2["ed_ville"].')' : "";
1381                                $editor_display = $existing_publisher2["ed_name"].$info_ville;
1382                        }
1383                        z3950_notice::substitute ("f_ed11", $editor_display, $ptab[2]);
1384                        z3950_notice::substitute ("f_ed11_id", $existing_publisher_id2, $ptab[2]);
1385                }
1386                else {
1387                        z3950_notice::substitute ("f_ed11", '', $ptab[2]);
1388                        z3950_notice::substitute ("f_ed11_id", '', $ptab[2]);
1389                }
1390                               
1391                z3950_notice::substitute ("editor_name_1", $this->editors[1]['name'], $ptab[2]);
1392                z3950_notice::substitute ("editor_ville_1", $this->editors[1]['ville'], $ptab[2]);
1393               
1394                //Collection
1395                if ($existing_publisher_id && $this->collection['name']) {
1396                        $sql_collection_find = "SELECT collection_id, collection_name FROM collections WHERE collection_name = '".addslashes($this->collection['name'])."' AND collection_parent = '".$existing_publisher_id."'";
1397                        $res = pmb_mysql_query($sql_collection_find);
1398                        if (pmb_mysql_num_rows($res) == 1) {
1399                                $existing_collection = pmb_mysql_fetch_array($res);
1400                                $existing_collection_id = $existing_collection["collection_id"];
1401                        }
1402                        else $existing_collection_id = 0;                       
1403                }
1404                else $existing_collection_id = 0;
1405               
1406                z3950_notice::substitute ("collection_type_use_existing", $existing_collection_id ? 'checked' : '', $ptab[2]);
1407                z3950_notice::substitute ("collection_type_insert_new", $existing_collection_id ? '' : 'checked', $ptab[2]);
1408               
1409                if ($existing_collection_id) {
1410                        z3950_notice::substitute ("f_coll_existing", $existing_collection["collection_name"], $ptab[2]);
1411                        z3950_notice::substitute ("f_coll_existing_id", $existing_collection_id, $ptab[2]);
1412                }
1413                else {
1414                        z3950_notice::substitute ("f_coll_existing", '', $ptab[2]);
1415                        z3950_notice::substitute ("f_coll_existing_id", '0', $ptab[2]);                 
1416                }
1417                z3950_notice::substitute ("collection_name", $this->collection['name'], $ptab[2]);
1418                z3950_notice::substitute ("collection_issn", $this->collection['issn'], $ptab[2]);
1419               
1420                //Sous Collection
1421                if ($existing_collection_id && $this->subcollection['name']) {
1422                        $sql_subcollection_find = "SELECT sub_coll_id, sub_coll_name FROM sub_collections WHERE sub_coll_name = '".addslashes($this->subcollection['name'])."' AND sub_coll_parent = '".$existing_collection_id."'";
1423                        $res = pmb_mysql_query($sql_subcollection_find) or die(pmb_mysql_error()."<br />$sql_subcollection_find");
1424                        if (pmb_mysql_num_rows($res) == 1) {
1425                                $existing_subcollection = pmb_mysql_fetch_array($res);
1426                                $existing_subcollection_id = $existing_subcollection["sub_coll_id"];
1427                        }
1428                        else $existing_subcollection_id = 0;
1429                }
1430                else $existing_subcollection_id = 0;
1431               
1432                z3950_notice::substitute ("subcollection_type_use_existing", $existing_subcollection_id ? 'checked' : '', $ptab[2]);
1433                z3950_notice::substitute ("subcollection_type_insert_new", $existing_subcollection_id ? '' : 'checked', $ptab[2]);
1434               
1435                if ($existing_subcollection_id) {
1436                        z3950_notice::substitute ("f_subcoll_existing", $existing_subcollection["sub_coll_name"], $ptab[2]);
1437                        z3950_notice::substitute ("f_subcoll_existing_id", $existing_subcollection_id, $ptab[2]);
1438                }
1439                else {
1440                        z3950_notice::substitute ("f_subcoll_existing", '', $ptab[2]);
1441                        z3950_notice::substitute ("f_subcoll_existing_id", '0', $ptab[2]);                     
1442                }
1443                z3950_notice::substitute ("subcollection_name", $this->subcollection['name'], $ptab[2]);
1444                z3950_notice::substitute ("subcollection_issn", $this->subcollection['issn'], $ptab[2]);
1445
1446                z3950_notice::substitute ("nbr_in_collection", $this->nbr_in_collection, $ptab[2]);
1447
1448                z3950_notice::substitute ("year", $this->year, $ptab[2]);
1449               
1450                z3950_notice::substitute ("mention_edition", $this->mention_edition, $ptab[2]);
1451               
1452                $form_notice = str_replace('!!tab2!!', $ptab[2], $form_notice);
1453               
1454                z3950_notice::substitute ("isbn", $this->isbn, $ptab[3]);
1455
1456                $form_notice = str_replace('!!tab3!!', $ptab[3], $form_notice);
1457               
1458                z3950_notice::substitute ("page_nbr", $this->page_nbr, $ptab[4]);
1459                z3950_notice::substitute ("illustration", $this->illustration, $ptab[4]);
1460                z3950_notice::substitute ("prix", $this->prix, $ptab[4]);
1461                z3950_notice::substitute ("accompagnement", $this->accompagnement, $ptab[4]);
1462                z3950_notice::substitute ("size", $this->size, $ptab[4]);
1463                $form_notice = str_replace('!!tab4!!', $ptab[4], $form_notice);
1464
1465                z3950_notice::substitute ("general_note", $this->general_note, $ptab[5]);
1466                z3950_notice::substitute ("content_note", $this->content_note, $ptab[5]);
1467                z3950_notice::substitute ("abstract_note", $this->abstract_note, $ptab[5]);
1468                $form_notice = str_replace('!!tab5!!', $ptab[5], $form_notice);
1469
1470                // indexation interne
1471                $pclassement_sql = "SELECT * FROM pclassement";
1472                $res = pmb_mysql_query($pclassement_sql);
1473                $pclassement_count = pmb_mysql_num_rows($res);
1474                if (!$pclassement_count)
1475                        $pclassement_count = 1;
1476
1477                if ($pclassement_count > 1) {
1478                        $pclassements = array();
1479                        while ($row = pmb_mysql_fetch_assoc($res)) {
1480                                $pclassements[] = array("id" => $row["id_pclass"], "name" => $row["name_pclass"]);
1481                        }
1482
1483                        $pclassement_combobox = '<select name="f_indexint_new_pclass">';
1484                        foreach($pclassements as $pclassement) {
1485                                $pclassement_combobox .= '<option value="'.$pclassement["id"].'">'.$pclassement["name"].'</option>';
1486                        }
1487                        $pclassement_combobox .= '</select>';
1488                }
1489                else
1490                        $pclassement_combobox = "";
1491               
1492                $ptab[6] = str_replace("!!multiple_pclass_combo_box!!", $pclassement_combobox, $ptab[6]);
1493
1494                $index_int_sql = "SELECT indexint_name, indexint_comment, indexint_id, name_pclass FROM indexint LEFT JOIN pclassement ON (pclassement.id_pclass = indexint.num_pclass) WHERE indexint_name = '".addslashes($this->dewey[0])."'";
1495                $res = pmb_mysql_query($index_int_sql, $dbh);
1496                $num_rows = pmb_mysql_num_rows($res);
1497                if ($num_rows == 1) {
1498                        $the_row = pmb_mysql_fetch_assoc($res);
1499                        z3950_notice::substitute ("indexint", $the_row["indexint_name"].': '.$the_row["indexint_comment"], $ptab[6]);
1500                        z3950_notice::substitute ("indexint_id", $the_row["indexint_id"], $ptab[6]);
1501                       
1502                        z3950_notice::substitute ("indexint_type_use_existing", 'checked', $ptab[6]);
1503                        z3950_notice::substitute ("indexint_type_insert_new", '', $ptab[6]);
1504                        z3950_notice::substitute ("multiple_index_int_propositions", '', $ptab[6]);
1505                }
1506                else if ($num_rows > 1) {
1507                       
1508                        $index_ints = array();
1509                        while($row = pmb_mysql_fetch_assoc($res)) {
1510                                $index_ints[] = array("id" => $row["indexint_id"], "name" => $row["indexint_name"], "comment" => $row["indexint_comment"], "pclass" => $row["name_pclass"]);
1511                        }
1512                       
1513                        $form_indexint_proposition = "<ul>";
1514                        foreach ($index_ints as $index_int) {
1515                                $form_indexint_proposition .= "<li><b>[".$index_int["pclass"]."]</b> ".$index_int["name"].": ".$index_int["comment"].'&nbsp;';
1516                                $jsaction = "document.getElementById('indexint_type_use_existing').checked=1; document.getElementById('f_indexint').value='".addslashes($index_int["name"].' - '.$index_int["comment"])."'; document.getElementById('f_indexint_id').value='".addslashes($index_int["id"])."'";
1517                                $form_indexint_proposition .= '<input type="button" class="bouton" value="'.$msg["notice_integre_indexint_use"].'" onclick="'.$jsaction.'">';
1518                                $form_indexint_proposition .= '</li>';
1519                        }
1520                        $form_indexint_proposition .= "</ul>";
1521                        $ptab[6] = str_replace("!!multiple_index_int_propositions!!", $form_indexint_proposition, $ptab[6]);
1522                       
1523                        z3950_notice::substitute ("indexint", "", $ptab[6]);
1524                        z3950_notice::substitute ("indexint_id", "", $ptab[6]);
1525                        z3950_notice::substitute ("indexint_type_use_existing", 'checked', $ptab[6]);
1526                        z3950_notice::substitute ("indexint_type_insert_new", '', $ptab[6]);                   
1527                }
1528                else {
1529                        z3950_notice::substitute ("indexint", "", $ptab[6]);
1530                        z3950_notice::substitute ("indexint_id", "", $ptab[6]);
1531                        z3950_notice::substitute ("indexint_type_use_existing", '', $ptab[6]);
1532                        z3950_notice::substitute ("indexint_type_insert_new", 'checked', $ptab[6]);
1533                        z3950_notice::substitute ("multiple_index_int_propositions", '', $ptab[6]);
1534                }
1535                z3950_notice::substitute ("indexint_new_name", $this->dewey[0], $ptab[6]);
1536                z3950_notice::substitute ("indexint_new_comment", "", $ptab[6]);
1537
1538                // indexation libre
1539                z3950_notice::substitute ("f_free_index", $this->free_index, $ptab[6]);
1540                global $pmb_keyword_sep ;
1541                $sep="'$pmb_keyword_sep'";
1542                if (!$pmb_keyword_sep) $sep="' '";
1543                if(ord($pmb_keyword_sep)==0xa || ord($pmb_keyword_sep)==0xd) $sep=$msg['catalogue_saut_de_ligne'];
1544                $ptab[6]= str_replace("!!sep!!", htmlentities($sep,ENT_QUOTES, $charset), $ptab[6]);
1545
1546                $form_notice = str_replace('!!tab6!!', $ptab[6], $form_notice);
1547                       
1548                // Gestion des titres uniformes         
1549                $nb_tu=sizeof($this->tu_500);
1550                for ($i=0 ; $i<$nb_tu ; $i++ ) {
1551                        $value_tu[$i]['name'] = $this->tu_500[$i]['a'];
1552                        $ntu_data[$i]->tu->name = $this->tu_500[$i]['a'];                       
1553                        $value_tu[$i]['tonalite'] = $this->tu_500[$i]['u'];
1554                       
1555                        for($j=0;$j<count($this->tu_500_r[$i]);$j++) { 
1556                                $value_tu[$i]['distrib'][$j]= $this->tu_500_r[$i][$j]; 
1557                        }
1558                        for($j=0;$j<count($this->tu_500_s[$i]);$j++) {         
1559                                $value_tu[$i]['ref'][$j]= $this->tu_500_s[$i][$j];                     
1560                        }
1561               
1562                        if(($tu_id=titre_uniforme::import_tu_exist($value_tu,1))){
1563                                //      le titre uniforme est déjà existant
1564                                $ntu_data[$i]->num_tu= $tu_id;
1565                        } else {       
1566                                // le titre uniforme n'est pas existant
1567                                for($j=0;$j<count($this->tu_500_n[$i]);$j++) { 
1568                                        $value_tu[$i]['comment'].= $this->tu_500_r[$i][$j];
1569                                        if(($j+1)<count($this->tu_500_n[$i]))$value_tu[$i]['comment'].="\n";
1570                                }       
1571                                for($j=0;$j<count($this->tu_500_j[$i]);$j++) {         
1572                                        $value_tu[$i]['subdiv'][$j]= $this->tu_500_j[$i][$j];                   
1573                                }       
1574                        }
1575                        // memorisation du niveau biblio de ce titre uniforme
1576                        for($j=0;$j<count($this->tu_500_i[$i]);$j++) { 
1577                                $ntu_data[$i]->titre.= $this->tu_500_i[$i][$j]; 
1578                                if(($j+1)<count($this->tu_500_i[$i]))$ntu_data[$i]->titre.="; ";       
1579                        }                       
1580                        $ntu_data[$i]->date=$this->tu_500[$i]['k'];
1581                        for($j=0;$j<count($this->tu_500_l[$i]);$j++) { 
1582                                $ntu_data[$i]->sous_vedette.= $this->tu_500_l[$i][$j]; 
1583                                if(($j+1)<count($this->tu_500_l[$i]))$ntu_data[$i]->sous_vedette.="; "; 
1584                        }                       
1585                        $ntu_data[$i]->langue=$this->tu_500[$i]['m'];
1586                        $ntu_data[$i]->version=$this->tu_500[$i]['q'];
1587                        $ntu_data[$i]->mention=$this->tu_500[$i]['w'];
1588                               
1589                }
1590       
1591                // serialisation des champs de l'autorité titre uniforme   
1592                global $pmb_use_uniform_title;
1593                if ($pmb_use_uniform_title) {
1594                        $memo_value_tu="<input type='hidden' name='memo_value_tu' value=\"". rawurlencode(serialize($value_tu))."\">";
1595                        $ptab[230] = str_replace("!!titres_uniformes!!", $memo_value_tu.tu_notice::get_form_import("notice",$ntu_data), $ptab[230]);
1596                        $form_notice = str_replace('!!tab230!!', $ptab[230], $form_notice);
1597                }                               
1598
1599                // mise à jour de l'onglet 7 : langues
1600                // langues répétables
1601                $lang = new marc_list('lang');
1602                if (sizeof($this->language_code)==0) $max_lang = 1 ;
1603                        else $max_lang = sizeof($this->language_code) ; 
1604                for ($i = 0 ; $i < $max_lang ; $i++) {
1605                        if ($i) $ptab_lang = str_replace('!!ilang!!', $i, $ptab[701]) ;
1606                                else $ptab_lang = str_replace('!!ilang!!', $i, $ptab[70]) ;
1607                        if ( sizeof($this->language_code)==0 ) { 
1608                                $ptab_lang = str_replace('!!lang_code!!', '', $ptab_lang);
1609                                $ptab_lang = str_replace('!!lang!!', '', $ptab_lang);           
1610                                } else {
1611                                        $ptab_lang = str_replace('!!lang_code!!', $this->language_code[$i], $ptab_lang);
1612                                        $ptab_lang = str_replace('!!lang!!',htmlentities($lang->table[$this->language_code[$i]],ENT_QUOTES, $charset), $ptab_lang);
1613                                        }
1614                        $lang_repetables .= $ptab_lang ;
1615                        }
1616                $ptab[7] = str_replace('!!max_lang!!', $max_lang, $ptab[7]);
1617                $ptab[7] = str_replace('!!langues_repetables!!', $lang_repetables, $ptab[7]);
1618
1619                // langues originales répétables
1620                if (sizeof($this->original_language_code)==0) $max_langorg = 1 ;
1621                        else $max_langorg = sizeof($this->original_language_code) ; 
1622                for ($i = 0 ; $i < $max_langorg ; $i++) {
1623                        if ($i) $ptab_lang = str_replace('!!ilangorg!!', $i, $ptab[711]) ;
1624                                else $ptab_lang = str_replace('!!ilangorg!!', $i, $ptab[71]) ;
1625                        if ( sizeof($this->original_language_code)==0 ) { 
1626                                $ptab_lang = str_replace('!!langorg_code!!', '', $ptab_lang);
1627                                $ptab_lang = str_replace('!!langorg!!', '', $ptab_lang);               
1628                                } else {
1629                                        $ptab_lang = str_replace('!!langorg_code!!', $this->original_language_code[$i], $ptab_lang);
1630                                        $ptab_lang = str_replace('!!langorg!!',htmlentities($lang->table[$this->original_language_code[$i]],ENT_QUOTES, $charset), $ptab_lang);
1631                                        }
1632                        $langorg_repetables .= $ptab_lang ;
1633                        }
1634                $ptab[7] = str_replace('!!max_langorg!!', $max_langorg, $ptab[7]);
1635                $ptab[7] = str_replace('!!languesorg_repetables!!', $langorg_repetables, $ptab[7]);
1636
1637                $form_notice = str_replace('!!tab7!!', $ptab[7], $form_notice);
1638
1639                z3950_notice::substitute ("link_url", $this->link_url, $ptab[8]);
1640                z3950_notice::substitute ("link_format", $this->link_format, $ptab[8]);
1641
1642                $form_notice = str_replace('!!tab8!!', $ptab[8], $form_notice);
1643
1644                // définition de la page cible du form
1645                $form_notice = str_replace('!!action!!', $this->action, $form_notice);
1646
1647                // ajout des selecteurs
1648                $select_doc = new marc_select('doctype', 'typdoc', $this->document_type);
1649                $form_notice = str_replace('!!document_type!!', $select_doc->display, $form_notice);
1650                if($article){
1651                        $form_notice = str_replace('!!checked_mono!!', "", $form_notice);
1652                        $form_notice = str_replace('!!checked_perio!!', "", $form_notice);
1653                        $form_notice = str_replace('!!checked_art!!', "selected=\"selected\"", $form_notice);
1654                } else {
1655                        if($this->bibliographic_level == 's'){
1656                                $form_notice = str_replace('!!checked_mono!!', "", $form_notice);
1657                                $form_notice = str_replace('!!checked_perio!!', "selected=\"selected\"", $form_notice);
1658                                $form_notice = str_replace('!!checked_art!!', "", $form_notice);
1659                        } else {
1660                                $form_notice = str_replace('!!checked_mono!!', "selected=\"selected\"", $form_notice);
1661                                $form_notice = str_replace('!!checked_perio!!', "", $form_notice);
1662                                $form_notice = str_replace('!!checked_art!!', "", $form_notice);
1663                        }
1664                }
1665               
1666                //Zone des perios et des bulletins pour les articles
1667                $zone_article_form  = str_replace("!!perio_titre!!",$this->perio_titre[0],$zone_article_form );
1668                $zone_article_form  = str_replace("!!perio_issn!!",$this->perio_issn[0],$zone_article_form );
1669                $zone_article_form  = str_replace("!!bull_date!!",$this->bull_mention[0],$zone_article_form );
1670                $zone_article_form  = str_replace("!!bull_titre!!",$this->bull_titre[0],$zone_article_form );
1671                $zone_article_form  = str_replace("!!bull_num!!",$this->bull_num[0],$zone_article_form );
1672               
1673                if($this->bull_date[0]) {
1674                        $date_date_formatee = formatdate_input($this->bull_date[0]);
1675                        $date_date_hid = $this->bull_date[0];
1676                } else {
1677                        $date_date_formatee = '';
1678                        $date_date_hid = '';
1679                }
1680                $date_clic = "onClick=\"openPopUp('./select.php?what=calendrier&caller=notice&date_caller=&param1=f_bull_new_date&param2=date_date_lib&auto_submit=NO&date_anterieure=YES', 'date_date', 250, 300, -2, -2, 'toolbar=no, dependent=yes, resizable=yes')\"  ";
1681                $date_date = "<input type='hidden' id='f_bull_new_date' name='f_bull_new_date' value='$date_date_hid' />
1682                        <input class='saisie-10em' type='text' name='date_date_lib' value='".$date_date_formatee."' placeholder='".$msg["format_date_input_placeholder"]."' />
1683                        <input class='bouton' type='button' name='date_date_lib_bouton' value='".$msg["bouton_calendrier"]."' ".$date_clic." />";
1684                $zone_article_form = str_replace("!!date_date!!",$date_date,$zone_article_form);
1685               
1686                //On cherche si le perio existe
1687                if($this->perio_titre[0] && $this->perio_issn[0]){
1688                        $req="select notice_id, tit1 from notices where niveau_biblio='s' and niveau_hierar='1'
1689                                        and tit1='".addslashes($this->perio_titre[0])."'
1690                                        and code='".addslashes($this->perio_issn[0])."' limit 1";
1691                        $res_perio = pmb_mysql_query($req,$dbh);
1692                        $num_rows_perio = pmb_mysql_num_rows($res_perio);
1693                }
1694                if (!$num_rows_perio){
1695                        if($this->perio_titre[0]){
1696                                $req="select notice_id, tit1 from notices where niveau_biblio='s' and niveau_hierar='1'
1697                                        and tit1='".addslashes($this->perio_titre[0])."'
1698                                        limit 1";
1699                                $res_perio = pmb_mysql_query($req,$dbh);
1700                                $num_rows_perio = pmb_mysql_num_rows($res_perio);
1701                        }
1702                }
1703                if (!$num_rows_perio){
1704                        if($this->perio_issn[0]){
1705                                $req="select notice_id, tit1 from notices where niveau_biblio='s' and niveau_hierar='1'
1706                                                and code='".addslashes($this->perio_issn[0])."' limit 1";
1707                                $res_perio = pmb_mysql_query($req,$dbh);
1708                                $num_rows_perio = pmb_mysql_num_rows($res_perio);
1709                        }
1710                }       
1711                if ($num_rows_perio == 1) {
1712                        $perio_found = pmb_mysql_fetch_object($res_perio);
1713                        $idperio = $perio_found->notice_id;
1714                        $zone_article_form  = str_replace("!!f_perio_existing!!",htmlentities($perio_found->tit1,ENT_QUOTES,$charset),$zone_article_form );
1715                        $zone_article_form  = str_replace("!!f_perio_existing_id!!",$perio_found->notice_id,$zone_article_form );
1716                        $zone_article_form  = str_replace("!!perio_type_new!!","",$zone_article_form );
1717                        $zone_article_form  = str_replace("!!perio_type_use_existing!!","checked",$zone_article_form );
1718                } else {
1719                        $idperio = 0;
1720                        $zone_article_form  = str_replace("!!f_perio_existing!!","",$zone_article_form );
1721                        $zone_article_form  = str_replace("!!f_perio_existing_id!!","",$zone_article_form );
1722                        $zone_article_form  = str_replace("!!perio_type_new!!","checked",$zone_article_form );
1723                        $zone_article_form  = str_replace("!!perio_type_use_existing!!","",$zone_article_form );
1724                }
1725
1726                //On cherche si le bulletin existe
1727                $num_rows_bull=0;
1728                if($this->bull_num[0] && $idperio){
1729                        $req="select bulletin_id, bulletin_numero,date_date,mention_date from bulletins where bulletin_notice='".$idperio."' and  bulletin_numero like '%".addslashes($this->bull_num[0])."%' ";
1730                        $res_bull = pmb_mysql_query($req,$dbh);
1731                        $num_rows_bull = pmb_mysql_num_rows($res_bull);
1732                }
1733                if(!$num_rows_bull && $this->bull_date[0] && $idperio){
1734                        $req="select bulletin_id, bulletin_numero,date_date,mention_date from bulletins where bulletin_notice='".$idperio."' and date_date='".addslashes($this->bull_date[0])."' ";
1735                        $res_bull = pmb_mysql_query($req,$dbh);
1736                        $num_rows_bull = pmb_mysql_num_rows($res_bull);
1737                }elseif(($num_rows_bull > 1) && $this->bull_date[0] && $idperio){
1738                        $req="select bulletin_id, bulletin_numero,date_date,mention_date from bulletins where bulletin_notice='".$idperio."' and date_date='".addslashes($this->bull_date[0])."' and  bulletin_numero like '%".addslashes($this->bull_num[0])."%' ";
1739                        $res_bull = pmb_mysql_query($req,$dbh);
1740                        $num_rows_bull = pmb_mysql_num_rows($res_bull);
1741                }
1742                if(!$num_rows_bull && $this->bull_mention[0] && $idperio){
1743                        $req="select bulletin_id, bulletin_numero,date_date,mention_date from bulletins where bulletin_notice='".$idperio."' and mention_date='".addslashes($this->bull_mention[0])."' ";
1744                        $res_bull = pmb_mysql_query($req,$dbh);
1745                        $num_rows_bull = pmb_mysql_num_rows($res_bull);
1746                }elseif(($num_rows_bull > 1) && $this->bull_mention[0] && $idperio){
1747                        if($this->bull_date[0]){
1748                                $req="select bulletin_id, bulletin_numero,date_date,mention_date from bulletins where bulletin_notice='".$idperio."' and date_date='".addslashes($this->bull_date[0])."' and mention_date='".addslashes($this->bull_mention[0])."' ";
1749                        }else{
1750                                $req="select bulletin_id, bulletin_numero,date_date,mention_date from bulletins where bulletin_notice='".$idperio."' and mention_date='".addslashes($this->bull_mention[0])."' and  bulletin_numero like '%".addslashes($this->bull_num[0])."%' ";
1751                        }
1752                        $res_bull = pmb_mysql_query($req,$dbh);
1753                        $num_rows_bull = pmb_mysql_num_rows($res_bull);
1754                }
1755               
1756                if ($num_rows_bull) {
1757                        $bull_found = pmb_mysql_fetch_object($res_bull);
1758                        $f_bull_existing=trim($bull_found->bulletin_numero);
1759                        if(!$f_bull_existing && trim($bull_found->date_date)){
1760                                $f_bull_existing="[".trim($bull_found->date_date)."]";
1761                        }elseif(!$f_bull_existing && trim($bull_found->mention_date)){
1762                                $f_bull_existing="(".trim($bull_found->mention_date).")";
1763                        }
1764                        $zone_article_form  = str_replace("!!f_bull_existing!!",htmlentities($f_bull_existing,ENT_QUOTES,$charset),$zone_article_form );
1765                        $zone_article_form  = str_replace("!!f_bull_existing_id!!",$bull_found->bulletin_id,$zone_article_form );
1766                        $zone_article_form  = str_replace("!!bull_type_new!!",(($num_rows_bull)?'':"checked='checked'"),$zone_article_form );
1767                        $zone_article_form  = str_replace("!!bull_type_use_existing!!",(($num_rows_bull)?"checked='checked'":''),$zone_article_form );
1768                } else {
1769                        $zone_article_form  = str_replace("!!f_bull_existing!!","",$zone_article_form );
1770                        $zone_article_form  = str_replace("!!f_bull_existing_id!!","",$zone_article_form );
1771                        $zone_article_form  = str_replace("!!bull_type_new!!","checked='checked'",$zone_article_form );
1772                        $zone_article_form  = str_replace("!!bull_type_use_existing!!","",$zone_article_form );
1773                }                               
1774                $form_notice = str_replace("!!zone_article!!",$zone_article_form,$form_notice);
1775                if($article) 
1776                        $form_notice = str_replace("!!display_zone_article!!","",$form_notice);
1777                else $form_notice = str_replace("!!display_zone_article!!","none",$form_notice);
1778               
1779                if($item){
1780                        $form_notice = str_replace('!!notice_entrepot!!', "<input type='hidden' name='item' value='$item' />", $form_notice);
1781                } else $form_notice = str_replace('!!notice_entrepot!!', "", $form_notice);
1782               
1783                $form_notice = str_replace('!!orinot_nom!!', $this->origine_notice[nom], $form_notice);
1784                $form_notice = str_replace('!!orinot_pays!!', $this->origine_notice[pays], $form_notice);
1785                //Traitement du 503 "titre de forme" pour le Musée des beaux arts de Nantes
1786                global $tableau_503;
1787                $tableau_503 = array(   "info_503" => $this->info_503,
1788                                                                "info_503_d" => $this->info_503_d,
1789                                                                "info_503_j" => $this->info_503_j);
1790                                       
1791                // traitement des catégories : affichage dans le formulaire
1792               
1793               
1794                $tableau_600 = array(
1795                                                                "info_600_3" => $this->info_600_3,
1796                                                                "info_600_a" => $this->info_600_a,                                     
1797                                                                "info_600_b" => $this->info_600_b,                                                             
1798                                                                "info_600_c" => $this->info_600_c,                                                             
1799                                                                "info_600_d" => $this->info_600_d,                                                             
1800                                                                "info_600_f" => $this->info_600_f,
1801                                                                "info_600_g" => $this->info_600_g,
1802                                                                "info_600_j" => $this->info_600_j,
1803                                                                "info_600_p" => $this->info_600_p,
1804                                                                "info_600_t" => $this->info_600_t,
1805                                                                "info_600_x" => $this->info_600_x,
1806                                                                "info_600_y" => $this->info_600_y,
1807                                                                "info_600_z" => $this->info_600_z);
1808                $tableau_601 = array(
1809                                                                "info_601_3" => $this->info_601_3,
1810                                                                "info_601_a" => $this->info_601_a,                             
1811                                                                "info_601_b" => $this->info_601_b,                                                             
1812                                                                "info_601_c" => $this->info_601_c,                                                             
1813                                                                "info_601_d" => $this->info_601_d,
1814                                                                "info_601_e" => $this->info_601_e,                                                             
1815                                                                "info_601_f" => $this->info_601_f,
1816                                                                "info_601_g" => $this->info_601_g,
1817                                                                "info_601_h" => $this->info_601_h,
1818                                                                "info_601_j" => $this->info_601_j,
1819                                                                "info_601_t" => $this->info_601_t,
1820                                                                "info_601_x" => $this->info_601_x,
1821                                                                "info_601_y" => $this->info_601_y,
1822                                                                "info_601_z" => $this->info_601_z);
1823                $tableau_602 = array(
1824                                                                "info_602_3" => $this->info_602_3,
1825                                                                "info_602_a" => $this->info_602_a,
1826                                                                "info_602_f" => $this->info_602_f,
1827                                                                "info_602_j" => $this->info_602_j,                     
1828                                                                "info_602_t" => $this->info_602_t,
1829                                                                "info_602_x" => $this->info_602_x,
1830                                                                "info_602_y" => $this->info_602_y,
1831                                                                "info_602_z" => $this->info_602_z);
1832                $tableau_604 = array(
1833                                                                "info_604_3" => $this->info_604_3,
1834                                                                "info_604_a" => $this->info_604_a,                     
1835                                                                "info_604_h" => $this->info_604_h,
1836                                                                "info_604_i" => $this->info_604_i,     
1837                                                                "info_604_j" => $this->info_604_j,
1838                                                                "info_604_k" => $this->info_604_k,
1839                                                                "info_604_l" => $this->info_604_l,
1840                                                                "info_604_x" => $this->info_604_x,
1841                                                                "info_604_y" => $this->info_604_y,
1842                                                                "info_604_z" => $this->info_604_z);
1843                $tableau_605 = array(
1844                                                                "info_605_3" => $this->info_605_3,
1845                                                                "info_605_a" => $this->info_605_a,
1846                                                                "info_605_h" => $this->info_605_h,
1847                                                                "info_605_i" => $this->info_605_i,     
1848                                                                "info_605_k" => $this->info_605_k,
1849                                                                "info_605_l" => $this->info_605_l,             
1850                                                                "info_605_m" => $this->info_605_m,
1851                                                                "info_605_n" => $this->info_605_n,
1852                                                                "info_605_q" => $this->info_605_q,
1853                                                                "info_605_r" => $this->info_605_r,
1854                                                                "info_605_s" => $this->info_605_s,
1855                                                                "info_605_u" => $this->info_605_u,
1856                                                                "info_605_w" => $this->info_605_w,     
1857                                                                "info_605_j" => $this->info_605_j,
1858                                                                "info_605_x" => $this->info_605_x,
1859                                                                "info_605_y" => $this->info_605_y,
1860                                                                "info_605_z" => $this->info_605_z);
1861                $tableau_606 = array(
1862                                                                "info_606_3" => $this->info_606_3,
1863                                                                "info_606_a" => $this->info_606_a,
1864                                                                "info_606_j" => $this->info_606_j,
1865                                                                "info_606_x" => $this->info_606_x,
1866                                                                "info_606_y" => $this->info_606_y,
1867                                                                "info_606_z" => $this->info_606_z);
1868                $tableau_607 = array(
1869                                                                "info_607_3" => $this->info_607_3,
1870                                                                "info_607_a" => $this->info_607_a,
1871                                                                "info_607_j" => $this->info_607_j,
1872                                                                "info_607_x" => $this->info_607_x,
1873                                                                "info_607_y" => $this->info_607_y,
1874                                                                "info_607_z" => $this->info_607_z);                     
1875                $tableau_608 = array(
1876                                                                "info_608_3" => $this->info_608_3,
1877                                                                "info_608_a" => $this->info_608_a,
1878                                                                "info_608_j" => $this->info_608_j,
1879                                                                "info_608_x" => $this->info_608_x,
1880                                                                "info_608_y" => $this->info_608_y,
1881                                                                "info_608_z" => $this->info_608_z);
1882                       
1883               
1884                // catégories
1885                $max_categ = 1;
1886                $ptab_categ = str_replace('!!icateg!!', 0, $ptab[60]) ;
1887                $ptab_categ = str_replace('!!categ_id!!', 0, $ptab_categ);
1888                $ptab_categ = str_replace('!!categ_libelle!!', '', $ptab_categ);               
1889                $ptab[6] = str_replace("!!categories_repetables!!", $ptab_categ, $ptab[6]);     
1890                $ptab[6] = str_replace('!!tab_categ_order!!', "", $ptab[6]);
1891               
1892                $traitement_rameau=traite_categories_for_form($tableau_600,$tableau_601,$tableau_602,$tableau_605,$tableau_606,$tableau_607,$tableau_608);
1893                if (!is_array($traitement_rameau)) {
1894                        $traitement_rameau = array("form" => $traitement_rameau, "message" => "");
1895                }
1896                $form_notice = str_replace('!!message_rameau!!', $traitement_rameau["message"], $form_notice);
1897                $form_notice = str_replace('!!traitement_rameau!!', $traitement_rameau["form"], $form_notice);
1898
1899                $manual_categorisation_form = get_manual_categorisation_form($tableau_600,$tableau_601,$tableau_602,$tableau_604,$tableau_605,$tableau_606,$tableau_607,$tableau_608);
1900                $form_notice = str_replace('!!manual_categorisation!!', $manual_categorisation_form, $form_notice);
1901
1902                //Mise à jour de l'onglet 9
1903                $p_perso=new parametres_perso("notices");
1904                if(function_exists("param_perso_form")) {
1905                        param_perso_form($p_perso);                     
1906                }
1907               
1908                //pour Pubmed et DOI, on regarde si on peut remplir un champ résolveur...
1909                if(count($this->others_ids)>0){
1910                        foreach($p_perso->t_fields as $key => $t_field){
1911                                if($t_field['TYPE']  =="resolve"){
1912                                        $field_options = _parser_text_no_function_("<?xml version='1.0' encoding='".$charset."'?>\n".$t_field['OPTIONS'], "OPTIONS");
1913                                        foreach($field_options['RESOLVE'] as $resolve){
1914                                                //pubmed = 1 | DOI = 2
1915                                                foreach($this->others_ids as $other_id){
1916                                                        if($other_id['b'] == "PMID" && $resolve['ID']=="1"){
1917                                                                //on a le champ perso résolveur PubMed
1918                                                                $p_perso->values[$key][]=$other_id['a']."|1";
1919                                                        }else if($other_id['b'] == "DOI" && $resolve['ID']=="2"){
1920                                                                //on a le champ perso résolveur DOI
1921                                                                $p_perso->values[$key][]=$other_id['a']."|2";
1922                                                        }
1923                                                }
1924                                        }
1925                                }
1926                        }
1927                }
1928               
1929                if (!$p_perso->no_special_fields) {
1930                        $perso_=$p_perso->show_editable_fields($id_notice,true);
1931                        $perso="";
1932                        for ($i=0; $i<count($perso_["FIELDS"]); $i++) {
1933                                $p=$perso_["FIELDS"][$i];
1934                                $perso.="<div class='row'>
1935                                        <label for='".$p["NAME"]."' class='etiquette'>".$p["TITRE"]."</label>
1936                                        </div>
1937                                        <div class='row'>
1938                                        ".$p["AFF"]."
1939                                        </div>
1940                                        ";
1941                        }
1942                        $perso.=$perso_["CHECK_SCRIPTS"];
1943                        $ptab[9]=str_replace("!!champs_perso!!",$perso,$ptab[9]);
1944                } else 
1945                        $ptab[9]="\n<script type='text/javascript' >function check_form() { return true; }</script>\n";
1946                $form_notice = str_replace('!!tab9!!', $ptab[9], $form_notice);
1947
1948                // champs de gestion
1949                global $pmb_notice_img_folder_id;
1950                $message_folder="";
1951                if($pmb_notice_img_folder_id){
1952                        $req = "select repertoire_path from upload_repertoire where repertoire_id ='".$pmb_notice_img_folder_id."'";
1953                        $res = pmb_mysql_query($req);
1954                        if(pmb_mysql_num_rows($res)){
1955                                $rep=pmb_mysql_fetch_object($res);
1956                                if(!is_dir($rep->repertoire_path)){
1957                                        $notice_img_folder_error=1;
1958                                }
1959                        }else $notice_img_folder_error=1;
1960                        if($notice_img_folder_error){
1961                                if (SESSrights & ADMINISTRATION_AUTH){
1962                                        $requete = "select * from parametres where gestion=0 and type_param='pmb' and sstype_param='notice_img_folder_id' ";
1963                                        $res = pmb_mysql_query($requete);
1964                                        $i=0;
1965                                        if($param=pmb_mysql_fetch_object($res)) {
1966                                                $message_folder=" <a class='erreur' href='./admin.php?categ=param&action=modif&id_param=".$param->id_param."' >".$msg['notice_img_folder_admin_no_access']."</a> ";
1967                                        }
1968                                }else{
1969                                        $message_folder=$msg['notice_img_folder_no_access'];
1970                                }
1971                        }
1972                }
1973                $ptab[10] = str_replace('!!message_folder!!',$message_folder, $ptab[10]);
1974               
1975                // langue de la notice
1976                global $lang,$xmlta_indexation_lang;
1977                $user_lang=$this->indexation_lang;
1978                if(!$user_lang)$user_lang=$xmlta_indexation_lang;
1979                //      if(!$user_lang) $user_lang="fr_FR";
1980                $langues = new XMLlist("$include_path/messages/languages.xml");
1981                $langues->analyser();
1982                $clang = $langues->table;
1983               
1984                $combo = "<select name='indexation_lang' id='indexation_lang' class='saisie-20em' >";
1985                if(!$user_lang) $combo .= "<option value='' selected>--</option>";
1986                else $combo .= "<option value='' >--</option>";
1987                while(list($cle, $value) = each($clang)) {
1988                        // arabe seulement si on est en utf-8
1989                        if (($charset != 'utf-8' and $user_lang != 'ar') or ($charset == 'utf-8')) {
1990                                if(strcmp($cle, $user_lang) != 0) $combo .= "<option value='$cle'>$value ($cle)</option>";
1991                                else $combo .= "<option value='$cle' selected>$value ($cle)</option>";
1992                        }
1993                }
1994                $combo .= "</select>";
1995                $ptab[10] = str_replace('!!indexation_lang!!',$combo, $ptab[10]);
1996                $form_notice = str_replace('!!indexation_lang_sel!!', $user_lang, $form_notice);
1997               
1998                global $deflt_integration_notice_statut;
1999                if ($id_notice) {
2000                        $rqt_statut="select statut from notices where notice_id='$id_notice' ";
2001                        $res_statut=pmb_mysql_query($rqt_statut);
2002                        $stat = pmb_mysql_fetch_object($res_statut) ;
2003                        $select_statut = gen_liste_multiple ("select id_notice_statut, gestion_libelle from notice_statut order by 2", "id_notice_statut", "gestion_libelle", "id_notice_statut", "form_notice_statut", "", $stat->statut, "", "","","",0) ;
2004                        } else {
2005                                $select_statut = gen_liste_multiple ("select id_notice_statut, gestion_libelle from notice_statut order by 2", "id_notice_statut", "gestion_libelle", "id_notice_statut", "form_notice_statut", "", $deflt_integration_notice_statut, "", "","","",0) ;
2006                        }
2007                $ptab[10] = str_replace('!!notice_statut!!', $select_statut, $ptab[10]);
2008                $ptab[10] = str_replace('!!commentaire_gestion!!',htmlentities($this->commentaire_gestion,ENT_QUOTES, $charset), $ptab[10]);
2009                $ptab[10] = str_replace('!!thumbnail_url!!',htmlentities($this->thumbnail_url,ENT_QUOTES, $charset), $ptab[10]);
2010                $form_notice = str_replace('!!tab10!!', $ptab[10], $form_notice);
2011               
2012                // Documents Numériques
2013                $docnum_infos = "";
2014                $count = 0;
2015                $upload_doc_num="";
2016                if($this->source_id){
2017                        $requete="select * from connectors_sources where source_id=".$this->source_id."";
2018                        $resultat=pmb_mysql_query($requete);
2019                        if (pmb_mysql_num_rows($resultat)) {
2020                                $r=pmb_mysql_fetch_object($resultat);
2021                                if(!$r->upload_doc_num) $upload_doc_num = "checked";
2022                        }       
2023                }
2024                if (count($this->doc_nums)) {
2025                        global $deflt_explnum_statut;
2026                        $statutlist = gen_liste_multiple ("select id_explnum_statut, gestion_libelle from explnum_statut order by 2", "id_explnum_statut", "gestion_libelle", "id_explnum_statut", "doc_num_statut!!docnumid!!", "", $deflt_explnum_statut, "", "","","",0);           
2027                        foreach ($this->doc_nums as $doc_num) {
2028                                $docnum_info = $ptab[1111];
2029//                              $alink = '<a target="_blank" href="'.htmlspecialchars($doc_num["a"]).'">'.htmlspecialchars($doc_num["a"]).'</a>';
2030                                $docnum_info = str_replace('!!docnum_url!!', htmlspecialchars($doc_num["a"],ENT_QUOTES, $charset), $docnum_info);
2031                                $docnum_info = str_replace('!!docnum_caption!!', htmlspecialchars($doc_num["b"],ENT_QUOTES, $charset), $docnum_info);
2032                                $docnum_info = str_replace('!!docnum_filename!!', htmlspecialchars($doc_num["f"],ENT_QUOTES, $charset), $docnum_info);
2033                                $docnum_info = str_replace('!!docnum_statutlist!!', $statutlist, $docnum_info);
2034                                $docnum_info = str_replace('!!docnumid!!', $count, $docnum_info);
2035                                $docnum_info = str_replace('!!upload_doc_num!!', $upload_doc_num, $docnum_info);
2036                                $docnum_infos .= $docnum_info;
2037                                $count++;
2038                        }
2039                }
2040                if (!$docnum_infos)
2041                        $docnum_infos = $msg["noticeintegre_nodocnum"];
2042                $ptab[1110] = str_replace('!!docnum_count!!', $count, $ptab[1110]);
2043                $ptab[1110] = str_replace('!!docnums!!', $docnum_infos, $ptab[1110]);
2044                $form_notice = str_replace('!!tab11!!', $ptab[1110], $form_notice);     
2045               
2046               
2047                $aac=explode('&',$action);
2048                $retact='&'.$aac[2].'&'.$aac[5].'&'.$aac[6];
2049                global $force;
2050                $retares='';
2051                switch ($retour) {
2052                        case 'button' :
2053                                if($this->message_retour) {
2054                                        $retares="<input type='button' class='bouton' onclick='history.go(-1);' value='".$this->message_retour."' />";
2055                                } else {
2056                                        if($force == 1 ){
2057                                                $retares="<a href='javascript:history.go(-2);'>".$msg['z3950_retour_a_resultats']."</a>";       
2058                                        }else{
2059                                                $retares="<a href='javascript:history.go(-1);'>".$msg['z3950_retour_a_resultats']."</a>";       
2060                                        }
2061                                } 
2062                                break;
2063                        case 'link' :
2064                                $retares="<a href='./catalog.php?categ=z3950&action=display".$retact."'>".$msg['z3950_retour_a_resultats']."</a>";
2065                                break;
2066                        default :
2067                                break;
2068                }
2069                $form_notice = str_replace('!!retour_a_resultats!!', $retares, $form_notice);
2070               
2071                if (!$this->bt_integr_value) {
2072                        if (!$id_notice) {
2073                                $form_notice = str_replace('!!bouton_integration!!', $msg['z3950_integr_not_seule'], $form_notice);
2074                        } else {
2075                                $form_notice = str_replace('!!bouton_integration!!', $msg['notice_z3950_remplace_catal'], $form_notice);
2076                        }
2077                } else {
2078                        $form_notice = str_replace('!!bouton_integration!!', $this->bt_integr_value, $form_notice);
2079                }
2080                if ($this->bt_undo_value && $this->bt_undo_action) {
2081                        $bt_undo = str_replace('!!value!!', $this->bt_undo_value, $bt_undo);
2082                        $bt_undo = str_replace('!!action!!', $this->bt_undo_action, $bt_undo);
2083                        $form_notice = str_replace('<!-- bt_undo -->', $bt_undo, $form_notice);
2084                }
2085                $form_notice = str_replace('!!id_notice!!', $id_notice, $form_notice);
2086                $form_notice = str_replace('!!notice!!',$znotices_id,$form_notice);
2087                $form_notice = str_replace('!!notice_type!!',$this->notice_type,$form_notice);
2088               
2089                return $form_notice;
2090        }
2091
2092        // Traitement retour du formulaire
2093        function from_form () {
2094                global $typdoc, $b_level, $h_level, $f_title_0, $f_title_1, $f_title_2, $f_title_3, $f_serie, $f_nbr_in_serie ;
2095                global $f_editor_name_0, $f_editor_ville_0, $f_editor_name_1, $f_editor_ville_1, $f_collection_name, $f_collection_issn, $f_subcollection_name, $f_subcollection_issn,
2096                        $f_nbr_in_collection, $f_year, $f_mention_edition, $f_cb, $f_page_nbr, $f_illustration, $f_size, $f_prix, $f_accompagnement,
2097                        $f_general_note, $f_content_note, $f_abstract_note, 
2098                        $f_indexint, $f_indexint_id, $f_free_index,
2099                        $f_language_code, $f_original_language_code,
2100                        $f_link_url, $f_link_format,
2101                        $f_orinot_nom, $f_orinot_pays,
2102                        $form_notice_statut, $f_commentaire_gestion, $f_thumbnail_url ;
2103                global $categ_pas_trouvee, $pmb_keyword_sep, $categorisation_type,$indexation_lang; 
2104                global $pmb_notice_img_folder_id,$opac_url_base,$item;
2105
2106                global $pmb_use_uniform_title;
2107                if ($pmb_use_uniform_title) {
2108                        global $max_titre_uniforme;
2109                        if ($max_titre_uniforme) {
2110                                global $memo_value_tu;
2111                                $value_tu=unserialize(rawurldecode($memo_value_tu));
2112                                // Titres uniformes
2113                                for ($i=0; $i<$max_titre_uniforme ; $i++) {
2114                                        $var_tu_id = "f_titre_uniforme_code$i" ;
2115                                        $var_tu_titre = "f_titre_uniforme$i" ;
2116                                       
2117                                        $var_ntu_titre = "ntu_titre$i" ;
2118                                        $var_ntu_date = "ntu_date$i" ;
2119                                        $var_ntu_sous_vedette = "ntu_sous_vedette$i" ;
2120                                        $var_ntu_langue = "ntu_langue$i" ;
2121                                        $var_ntu_version = "ntu_version$i" ;
2122                                        $var_ntu_mention = "ntu_mention$i" ;
2123                                        global $$var_tu_id,$$var_tu_titre,$$var_ntu_titre,$$var_ntu_date,$$var_ntu_sous_vedette,$$var_ntu_langue,$$var_ntu_version,$$var_ntu_mention;
2124                                       
2125                                        if($$var_tu_titre) {
2126                                                // on crée un nouveau titre uniforme si un id et un titre différent, ou si pas d'id
2127                                                if($$var_tu_id && ($$var_tu_titre != $value_tu[$i]["name"] ) || (!$$var_tu_id)) {
2128                                                        $value_tu[$i]["name"]=$$var_tu_titre;
2129                                                        $tu_id=titre_uniforme::import($value_tu[$i],1);
2130                                                } else {
2131                                                        $tu_id=$$var_tu_id;
2132                                                }
2133                                                // il est soit existant, soit créé
2134                                                if($tu_id) {
2135                                                        $this->titres_uniformes[] = array (
2136                                                                'tu_titre' => $$var_tu_titre,
2137                                                                'num_tu' => $tu_id,
2138                                                                'ntu_titre' => $$var_ntu_titre,
2139                                                                'ntu_date' => $$var_ntu_date,
2140                                                                'ntu_sous_vedette' => $$var_ntu_sous_vedette,
2141                                                                'ntu_langue' => $$var_ntu_langue,
2142                                                                'ntu_version' => $$var_ntu_version,
2143                                                                'ntu_mention' => $$var_ntu_mention )
2144                                                        ;
2145                                                }       
2146                                        }                               
2147                                }
2148                        }
2149                }               
2150
2151                $this->document_type = clean_string ($typdoc);
2152
2153                $this->bibliographic_level = clean_string ($b_level);
2154                $this->hierarchic_level = clean_string ($h_level);
2155
2156                $this->titles[0] = clean_string ($f_title_0);
2157                $this->titles[1] = clean_string ($f_title_1);
2158                $this->titles[2] = clean_string ($f_title_2);
2159                $this->titles[3] = clean_string ($f_title_3);
2160                $this->serie = clean_string ($f_serie);
2161                $this->nbr_in_serie = clean_string ($f_nbr_in_serie);
2162
2163                $this->aut_array = array () ;
2164                global $max_aut1, $max_aut2 ;
2165               
2166                // auteur principal
2167                global $author0_type;
2168                if ($author0_type == "use_existing") {
2169                        global $f_existing_f0_code, $f_aut0_existing_id, $f_auth_number_to_compare_0;
2170                        if ($f_aut0_existing_id)
2171                                $this->aut_array[] = array(
2172                                        'fonction' => $f_existing_f0_code,
2173                                        'id' => $f_aut0_existing_id,
2174                                        'responsabilite' => 0,
2175                                        // si auteur existe, on récupère quand même le numéro d'autorité de l'auteur en cours d'import
2176                                        // il sera intégré si la source de l'autorité n'existe pas encore en base
2177                                        'authority_number' => $f_auth_number_to_compare_0        );
2178                } else {
2179                        global $f_author_name_0, $f_author_rejete_0, $f_author_date_0, $f_author_type_0, $f_author_function_0, $f_author_lieu_0, $f_author_pays_0, $f_author_comment_0, $f_author_ville_0, $f_author_subdivision_0, $f_author_numero_0, $f_author_web_0, $f_authority_number_0  ;
2180                        $this->aut_array[] = array(
2181                                'entree' => stripslashes($f_author_name_0),
2182                                'rejete' => stripslashes($f_author_rejete_0),
2183                                'date' => stripslashes($f_author_date_0),
2184                                'type_auteur' => $f_author_type_0,
2185                                'fonction' => $f_author_function_0,
2186                                'id' => 0,
2187                                'responsabilite' => 0,
2188                                'lieu' =>  $f_author_lieu_0,
2189                                'pays' => $f_author_pays_0,
2190                                'author_comment' => $f_author_comment_0,
2191                                'ville' => $f_author_ville_0,
2192                                'subdivision' => $f_author_subdivision_0,
2193                                'numero' => $f_author_numero_0,
2194                                'web' => $f_author_web_0,
2195                                'authority_number' => $f_authority_number_0 );                 
2196                }
2197
2198                // autres auteurs
2199                for ($i=0; $i< $max_aut1 ; $i++) {
2200                        $var_aut_name = "f_author_name_1$i" ;
2201                        $var_aut_rejete = "f_author_rejete_1$i" ;
2202                        $var_aut_date = "f_author_date_1$i" ;
2203                        $var_aut_type_auteur = "f_author_type_1$i" ;
2204                        $var_aut_function = "f_author_function_1$i" ;
2205                        $var_auth_type_use = "author1_type_$i";
2206                        $var_aut_pays = "f_author_lieu_1$i" ;
2207                        $var_aut_lieu = "f_author_pays_1$i" ;
2208                        $var_aut_comment = "f_author_comment_1$i" ;
2209                        $var_aut_ville = "f_author_ville_1$i" ;
2210                        $var_aut_subdivision = "f_author_subdivision_1$i" ;
2211                        $var_aut_numero = "f_author_numero_1$i" ;
2212                        $var_aut_web = "f_author_web_1$i" ;
2213                        $var_aut_number = "f_authority_number_1$i" ;
2214                       
2215                        global $$var_aut_name, $$var_aut_rejete, $$var_aut_date, $$var_aut_type_auteur, $$var_aut_function, $$var_auth_type_use, $$var_aut_lieu, $$var_aut_pays, $$var_aut_comment, $$var_aut_ville, $$var_aut_subdivision, $$var_aut_numero, $$var_aut_web, $$var_aut_number;
2216                        if ($$var_auth_type_use == "use_existing") {
2217                                $a_id = "f_aut1_id$i";
2218                                $a_code = "f_f1_code$i";
2219                                // si auteur existe, on récupère quand même le numéro d'autorité de l'auteur en cours d'import
2220                                // il sera intégré si la source de l'autorité n'existe pas encore en base
2221                                $a_aut_to_compare = "f_auth_number_to_compare_1$i";
2222                                global $$a_code, $$a_id, $$a_aut_to_compare;
2223                                if ($$a_id)
2224                                        $this->aut_array[] = array(
2225                                                'fonction' => $$a_code,
2226                                                'id' => $$a_id,
2227                                                'responsabilite' => 1,
2228                                                'authority_number' => $$a_aut_to_compare );
2229                        } else if ($$var_aut_name) 
2230                                $this->aut_array[] = array(
2231                                        'entree' => stripslashes($$var_aut_name),
2232                                        'rejete' => stripslashes($$var_aut_rejete),
2233                                        'date' => stripslashes($$var_aut_date),
2234                                        'type_auteur' => $$var_aut_type_auteur,
2235                                        'fonction' => $$var_aut_function,
2236                                        'id' => 0,
2237                                        'responsabilite' => 1,
2238                                        'lieu' => $$var_aut_lieu,
2239                                        'pays' => $$var_aut_pays,
2240                                        'author_comment' => $$var_aut_comment,
2241                                        'ville' => $$var_aut_ville,
2242                                        'subdivision' => $$var_aut_subdivision,
2243                                        'numero' => $$var_aut_numero,
2244                                        'web' => $$var_aut_web,
2245                                        'authority_number' => $$var_aut_number );
2246                        }
2247                // auteurs secondaires
2248                for ($i=0; $i< $max_aut2 ; $i++) {
2249                        $var_aut_name = "f_author_name_2$i" ;
2250                        $var_aut_rejete = "f_author_rejete_2$i" ;
2251                        $var_aut_date = "f_author_date_2$i" ;
2252                        $var_aut_type_auteur = "f_author_type_2$i" ;
2253                        $var_aut_function = "f_author_function_2$i" ;
2254                        $var_auth_type_use = "author2_type_$i";
2255                        $var_aut_pays = "f_author_lieu_2$i" ;
2256                        $var_aut_lieu = "f_author_pays_2$i" ;
2257                        $var_aut_comment = "f_author_comment_2$i" ;
2258                        $var_aut_ville = "f_author_ville_2$i" ;
2259                        $var_aut_subdivision = "f_author_subdivision_2$i" ;
2260                        $var_aut_numero = "f_author_numero_2$i" ;
2261                        $var_aut_web = "f_author_web_2$i" ;
2262                        $var_aut_number = "f_authority_number_2$i" ;
2263                        global $$var_aut_name, $$var_aut_rejete, $$var_aut_date, $$var_aut_type_auteur, $$var_aut_function, $$var_auth_type_use, $$var_aut_lieu, $$var_aut_pays, $$var_aut_comment, $$var_aut_ville, $$var_aut_subdivision, $$var_aut_numero, $$var_aut_web, $$var_aut_number;
2264
2265                        if ($$var_auth_type_use == "use_existing") {
2266                                $a_id = "f_aut2_id$i";
2267                                $a_code = "f_f2_code$i";
2268                                // si auteur existe, on récupère quand même le numéro d'autorité de l'auteur en cours d'import
2269                                // il sera intégré si la source de l'autorité n'existe pas encore en base
2270                                $a_aut_to_compare = "f_auth_number_to_compare_2$i";
2271                                global $$a_code, $$a_id, $$a_aut_to_compare;
2272                                if ($$a_id)
2273                                        $this->aut_array[] = array(
2274                                                'fonction' => $$a_code,
2275                                                'id' => $$a_id,
2276                                                'responsabilite' => 2,
2277                                                'authority_number' => $$a_aut_to_compare );
2278                        }
2279                        else if ($$var_aut_name) 
2280                                $this->aut_array[] = array(
2281                                        'entree' => stripslashes($$var_aut_name),
2282                                        'rejete' => stripslashes($$var_aut_rejete),
2283                                        'date' => stripslashes($$var_aut_date),
2284                                        'type_auteur' => $$var_aut_type_auteur,
2285                                        'fonction' => $$var_aut_function,
2286                                        'id' => 0,
2287                                        'responsabilite' => 2,
2288                                        'lieu' => $$var_aut_lieu,
2289                                        'pays' => $$var_aut_pays,
2290                                        'author_comment' => $$var_aut_comment,
2291                                        'ville' => $$var_aut_ville,
2292                                        'subdivision' => $$var_aut_subdivision,
2293                                        'numero' => $$var_aut_numero,
2294                                        'web' => $$var_aut_web,
2295                                        'authority_number' => $$var_aut_number );                       
2296                        }
2297
2298                global $editor_type, $f_ed1_id;
2299                global $collection_type,$f_coll_existing_id;
2300                global $subcollection_type,$f_subcoll_existing_id;
2301                if ($editor_type == "use_existing") {
2302                        if ($f_ed1_id) {
2303                                $this->editors[0]['id'] = $f_ed1_id;
2304                               
2305                                if ($collection_type == "use_existing") {
2306                                        if($f_coll_existing_id){
2307                                                $this->collection['id'] = $f_coll_existing_id;
2308                                               
2309                                                if ($subcollection_type == "use_existing") {
2310                                                        if($f_subcoll_existing_id){
2311                                                                $this->subcollection['id'] = $f_subcoll_existing_id;
2312                                                        }
2313                                                }else{
2314                                                        $this->subcollection['name'] = clean_string (stripslashes($f_subcollection_name));
2315                                                        $this->subcollection['issn'] = clean_string (stripslashes($f_subcollection_issn));
2316                                                        $this->subcollection['id'] = 0;                 
2317                                                }
2318                                        }//Si on dit utiliser une collection existante mais qu'il n'y en a pas on ne reprend pas de sous collection     
2319                                }else{
2320                                        $this->collection['name'] = clean_string (stripslashes($f_collection_name));
2321                                        $this->collection['issn'] = clean_string (stripslashes($f_collection_issn));
2322                                        $this->collection['id'] = 0;
2323                                       
2324                                        //Si on insert une nouvelle collection on insert aussi une nouvelle sous-collection
2325                                        $this->subcollection['name'] = clean_string (stripslashes($f_subcollection_name));
2326                                        $this->subcollection['issn'] = clean_string (stripslashes($f_subcollection_issn));
2327                                        $this->subcollection['id'] = 0; 
2328                                }
2329                        }//Si on dit utiliser un editeur existant mais qu'il n'y en a pas on ne reprend pas de collection ni sous collection
2330                }else{
2331                        $this->editors[0]['name'] = clean_string (stripslashes($f_editor_name_0));
2332                        $this->editors[0]['ville'] = clean_string (stripslashes($f_editor_ville_0));
2333                        $this->editors[0]['id'] = 0;
2334                       
2335                        //Si on insert un nouvel editeur on insert aussi une nouvelle sous-collection
2336                        $this->collection['name'] = clean_string (stripslashes($f_collection_name));
2337                        $this->collection['issn'] = clean_string (stripslashes($f_collection_issn));
2338                        $this->collection['id'] = 0;
2339                       
2340                        //Et une sous collection
2341                        $this->subcollection['name'] = clean_string (stripslashes($f_subcollection_name));
2342                        $this->subcollection['issn'] = clean_string (stripslashes($f_subcollection_issn));
2343                        $this->subcollection['id'] = 0; 
2344                }
2345                global $editor1_type, $f_ed11_id;
2346                if ($editor1_type == "use_existing") {
2347                        if ($f_ed11_id) {
2348                                $this->editors[1]['id'] = $f_ed11_id;
2349                        }
2350                }
2351                else {
2352                        $this->editors[1]['name'] = clean_string (stripslashes($f_editor_name_1));
2353                        $this->editors[1]['ville'] = clean_string (stripslashes($f_editor_ville_1));
2354                        $this->editors[1]['id'] = 0;                   
2355                }               
2356               
2357                $this->nbr_in_collection = clean_string ($f_nbr_in_collection);
2358
2359                $this->year = clean_string ($f_year);
2360                $this->mention_edition = clean_string ($f_mention_edition);
2361
2362                $this->isbn = clean_string ($f_cb);
2363
2364                $this->page_nbr = clean_string ($f_page_nbr);
2365                $this->illustration = clean_string ($f_illustration);
2366                $this->size = clean_string ($f_size);
2367                $this->prix = clean_string ($f_prix);
2368                $this->accompagnement = clean_string ($f_accompagnement);
2369
2370                $this->general_note = $f_general_note;
2371                $this->content_note = $f_content_note;
2372                $this->abstract_note = $f_abstract_note;
2373
2374                // catégories
2375                if ($categorisation_type == "categorisation_auto") {
2376                        $this->categories = traite_categories_from_form();
2377                        $this->categorisation_type = "categorisation_auto";
2378                }
2379                else {
2380                        global $max_categ;
2381                        $categories = array();
2382                        for($i=0, $count=$max_categ; $i<$count; $i++) {
2383                                $a_categ_id_name = "f_categ_id".$i;
2384                                global $$a_categ_id_name;
2385                               
2386                                if (!$$a_categ_id_name)
2387                                        continue;
2388                                $acategory = array("categ_id" => $$a_categ_id_name);
2389                               
2390                                $categories[] = $acategory;
2391                        }
2392                        $this->categories = $categories;
2393                        $this->categorisation_type = "categorisation_manual";
2394                }
2395               
2396                global $indexint_type;
2397                if ($indexint_type == "use_existing") {
2398                        $this->dewey[0] = clean_string (stripslashes($f_indexint));
2399                        $this->internal_index = $f_indexint_id ;                       
2400                }
2401                else {
2402                        global $f_indexint_new, $f_indexint_new_comment, $f_indexint_new_pclass;
2403                        $this->dewey[0] = clean_string (stripslashes($f_indexint_new));
2404                        $this->dewey["new_comment"] = clean_string (stripslashes($f_indexint_new_comment));
2405                        $this->dewey["new_pclass"] = clean_string (stripslashes($f_indexint_new_pclass));
2406                        $this->internal_index = 0;                     
2407                }
2408               
2409                // $categ_pas_trouvee ; est un tableau de catégories pas trouvées,
2410                //              mots clés pas présents dans $this->categories mais à conserver en zone libre
2411
2412                if (!isset($categ_pas_trouvee)) $categ_pas_trouvee=array();
2413                for ($i=0;$i<count($categ_pas_trouvee);$i++) 
2414                        if (trim($categ_pas_trouvee[$i])) 
2415                                $categ_pas_trouvee_pasvide[]=addslashes(trim($categ_pas_trouvee[$i]));
2416
2417                if ($f_free_index) $categ_pas_trouvee_pasvide[]=$f_free_index;
2418               
2419                if(is_array($categ_pas_trouvee_pasvide) && count($categ_pas_trouvee_pasvide)){
2420                        $f_free_index=implode($pmb_keyword_sep, $categ_pas_trouvee_pasvide);
2421                }
2422                $this->free_index = clean_string ($f_free_index);
2423
2424
2425                // traitement des langues
2426                global $max_lang, $max_langorg;
2427                $f_lang_form = array();
2428                $f_langorg_form = array() ;
2429                // langues de la publication
2430                $j=0;
2431                $this->language_code = array();
2432                for ($i=0; $i< $max_lang ; $i++) {
2433                        $var_langcode = "f_lang_code$i" ;
2434                        global $$var_langcode ;
2435                        if ($$var_langcode) {
2436                                $this->language_code[$j] =  $$var_langcode;
2437                                $j++;   
2438                        }
2439                }
2440                // langues originales
2441                $j=0;
2442                $this->original_language_code = array();
2443                for ($i=0; $i< $max_langorg ; $i++) {
2444                        $var_langorgcode = "f_langorg_code$i" ;
2445                        global $$var_langorgcode;
2446                        if ($$var_langorgcode) {
2447                                $this->original_language_code[$j] =  $$var_langorgcode;
2448                                $j++;
2449                        }
2450                }
2451               
2452                $this->link_url = clean_string ($f_link_url);
2453                $this->link_format = clean_string ($f_link_format);
2454
2455                $this->origine_notice[nom] = clean_string ($f_orinot_nom);
2456                $this->origine_notice[pays] = clean_string ($f_orinot_pays);
2457
2458                $this->statut = $form_notice_statut ;
2459                $this->commentaire_gestion  = $f_commentaire_gestion ;
2460                $this->indexation_lang = $indexation_lang ;
2461                $this->thumbnail_url            = $f_thumbnail_url;
2462               
2463                // vignette de la notice uploadé dans un répertoire
2464                if($_FILES['f_img_load']['name'] && $pmb_notice_img_folder_id){
2465                        $poids_fichier_max=1024*1024;//Limite la taille de l'image à 1 Mo
2466                        $req = "select repertoire_path from upload_repertoire where repertoire_id ='".$pmb_notice_img_folder_id."'";
2467                        $res = pmb_mysql_query($req,$dbh);
2468                        if(pmb_mysql_num_rows($res)){
2469                                $rep=pmb_mysql_fetch_object($res);
2470                                $filename_output=$rep->repertoire_path."img_es_".$item;
2471                        }
2472                        if (($fp=@fopen($_FILES['f_img_load']['tmp_name'], "rb")) && $filename_output) {
2473                                $image="";
2474                                $size=0;
2475                                $flag=true;
2476                                while (!feof($fp)) {
2477                                        $image.=fread($fp,4096);
2478                                        $size=strlen($image);
2479                                        if ($size>$poids_fichier_max) {
2480                                                $flag=false;
2481                                                break;
2482                                        }
2483                                }
2484                                if ($flag) {
2485                                        if ($img=imagecreatefromstring($image)) {
2486                                                if(!($pmb_notice_img_pics_max_size*1)) $pmb_notice_img_pics_max_size=100;
2487                                                $redim=false;
2488                                                if (imagesx($img) >= imagesy($img)) {
2489                                                        if(imagesx($img) <= $pmb_notice_img_pics_max_size){
2490                                                                $largeur=imagesx($img);
2491                                                                $hauteur=imagesy($img);
2492                                                        }else{
2493                                                                $redim=true;
2494                                                                $largeur=$pmb_notice_img_pics_max_size;
2495                                                                $hauteur = ($largeur*imagesy($img))/imagesx($img);
2496                                                        }
2497                                                } else {
2498                                                        if(imagesy($img) <= $pmb_notice_img_pics_max_size){
2499                                                                $hauteur=imagesy($img);
2500                                                                $largeur=imagesx($img);
2501                                                        }else{
2502                                                                $redim=true;
2503                                                                $hauteur=$pmb_notice_img_pics_max_size;
2504                                                                $largeur = ($hauteur*imagesx($img))/imagesy($img);
2505                                                        }
2506                                                }
2507                                                if($redim){
2508                                                        $dest = imagecreatetruecolor($largeur,$hauteur);
2509                                                        imagecopyresampled($dest, $img, 0, 0, 0, 0, $largeur, $hauteur,imagesx($img),imagesy($img));
2510                                                        imagepng($dest,$filename_output);
2511                                                        imagedestroy($dest);
2512                                                }else{
2513                                                        imagepng($img,$filename_output);
2514                                                }
2515                                                imagedestroy($img);
2516                                                $thumbnail_url=$opac_url_base."getimage.php?noticecode=&vigurl=&notice_id=es_".$item;
2517               
2518                                                $this->thumbnail_url = $thumbnail_url;
2519                                                $this->flag_upload_vignette = "img_es_".$item;
2520                                        }
2521                                }
2522                        }
2523                }
2524               
2525                //Document Numérique
2526                global $doc_num_count;
2527                for ($i=0; $i<$doc_num_count; $i++) {
2528                        $include_cb_name = "include_doc_num".$i;
2529                        global $$include_cb_name;
2530                        if ($$include_cb_name) {
2531                                $docnum_filename_name = "doc_num_filename".$i;
2532                                global $$docnum_filename_name;
2533                                $docnum_caption_name = "doc_num_caption".$i;
2534                                global $$docnum_caption_name;
2535                                $docnum_url_name = "doc_num_url".$i;
2536                                global $$docnum_url_name;
2537                                $docnum_statut_name = "doc_num_statut".$i;
2538                                global $$docnum_statut_name;
2539                                $docnum_nodownload_name = "doc_num_nodownload".$i;
2540                                global $$docnum_nodownload_name;
2541                                if ($$docnum_nodownload_name)
2542                                        $nodownload = 1;
2543                                else
2544                                        $nodownload = 0;
2545                                                                       
2546                                $this->doc_nums[] = array("a" => $$docnum_url_name, "b" => $$docnum_caption_name, "f" => $$docnum_filename_name, "__nodownload__" => $nodownload, "s" => $$docnum_statut_name);
2547                        }
2548                }
2549               
2550                global $perio_type,$bull_type;
2551                //Périos
2552                if($perio_type == 'use_existing'){
2553                        global $f_perio_existing_id;
2554                        $this->perio_id = $f_perio_existing_id;                 
2555                } else {
2556                        global $f_perio_new, $f_perio_new_issn;
2557                        $this->perio_titre = clean_string ($f_perio_new);
2558                        $this->perio_issn = clean_string ($f_perio_new_issn);
2559                }
2560               
2561                //Bulletins
2562                if($bull_type == 'use_existing'){
2563                        global $f_bull_existing_id;
2564                        $this->bull_id = $f_bull_existing_id;                   
2565                } else {
2566                        global $f_bull_new_num, $f_bull_new_titre, $f_bull_new_date, $f_bull_new_mention;
2567                        $this->bull_num = clean_string ($f_bull_new_num);
2568                        $this->bull_titre = clean_string ($f_bull_new_titre);
2569                        $this->bull_date = clean_string ($f_bull_new_date);
2570                        $this->bull_mention = clean_string ($f_bull_new_mention);
2571                }
2572        }
2573
2574        function process_isbn ($isbn) {
2575                /* We've got everything, let's have a look if ISBN already exists in notices table */
2576                $isbn_nettoye = preg_replace('/-|\.| |\(|\)|\[|\]|\:|\;|[A-WY-Z]/i', '', $isbn);
2577                $isbn_nettoye_13 = substr($isbn_nettoye,0,13);
2578                $isbn_nettoye_10 = substr($isbn_nettoye,0,10);
2579                $isbn_OK = "";
2580                if(isEAN($isbn_nettoye_13)) { /* it's an EAN -> convert it to ISBN */
2581                        $isbn_OK = EANtoISBN($isbn_nettoye_13);
2582                } 
2583                if (!$isbn_OK) {
2584                        if (isISBN($isbn_nettoye_10)) {
2585                                $isbn_OK = formatISBN($isbn_nettoye_10);
2586                        }
2587                }
2588                if (!$isbn_OK) $isbn_OK = clean_string($isbn);
2589
2590                return $isbn_OK;
2591        }
2592               
2593        function process_author ($name, $rejete, $type, $date) {
2594                if (!$rejete) {
2595                        $field = explode (',', $name, 2);
2596                        $name = $field[0];
2597                        $rejete = $field[1];
2598                }
2599               
2600                $name = $this->clean_field ($name);
2601                $rejete = $this->clean_field ($rejete);
2602                       
2603                $author['name'] = $name;
2604                $author['rejete'] = $rejete;
2605                $author['type'] = $type;
2606                $author['date'] = $date;
2607
2608                return $author;
2609        }
2610               
2611        function clean_field ($field) {
2612                return preg_replace('/-$| $|\($|\)$|\[$|\]$|\:$|\;$|\/$\|\$|([^ ].)\.$|,$/', '$1', trim ($field));
2613        }
2614       
2615        // fonction d'intégration de l'origine de l'autorité (pratiquement identique à keep_authority_infos dans pmb/admin/import/import.finc.php)
2616        function insert_authority_infos($authority_number,$type,$id_origin_authority,$authority_infos=array()){
2617                global $opac_enrichment_bnf_sparql;
2618               
2619                //on a un numéro d'autorité, on regarde si on l'a déjà rencontré
2620                $num_authority=$authority_infos['id'];
2621                $query = "select id_authority_source,num_authority from authorities_sources where authority_number = '".$authority_number."' and num_origin_authority='".$id_origin_authority."' and authority_type = '".$type."'";
2622                $result = pmb_mysql_query($query) or die("can't select authorities_sources :".$query);
2623                if(pmb_mysql_num_rows($result)){
2624                        $row = pmb_mysql_fetch_object($result);
2625                        $num_authority = $row->num_authority;
2626                        $num_authority_source= $row->id_authority_source;
2627                        // on cherche la préférence... dès fois que...
2628                        $query = "select id_authority_source, num_authority from authorities_sources where authority_number = '".$authority_number."' and authority_type = '".$type."' and authority_favorite = 1";
2629                        $result = pmb_mysql_query($query) or die("can't select authorities_sources :".$query);
2630                        if(pmb_mysql_num_rows($result)){
2631                                $row = pmb_mysql_fetch_object($result);
2632                                $num_authority = $row->num_authority;
2633                                $num_authority_source= $row->id_authority_source;
2634                        }
2635                }else{
2636                        // on importe l'autorité dans la base si elle n'a pas d'id
2637                        if($num_authority==0){                         
2638                                switch($type){
2639                                        case "author" :
2640                                                $num_authority = auteur::import($authority_infos);
2641                                                break;
2642                                        case "uniform_title" :
2643                                                $num_authority = titre_uniforme::import($authority_infos);
2644                                                break;
2645                                        case "category" :
2646                                                $num_authority = category::import($authority_infos);
2647                                                break;
2648                                        case "collection" :
2649                                                $num_authority = collection::import($authority_infos);
2650                                                break;
2651                                        case "subcollection" :
2652                                                $num_authority = subcollection::import($authority_infos);
2653                                                break;
2654                                        case "serie" :                 
2655                                                break;
2656                                }
2657                        }
2658                        // on intègre la source de l'autorité   
2659                        $query = "insert into authorities_sources set
2660                        num_authority = '$num_authority',
2661                        authority_number = '".$authority_number."',
2662                        authority_type = '$type',
2663                        num_origin_authority = ".$id_origin_authority.",
2664                        import_date = now()";
2665                        pmb_mysql_query($query) or die("can't insert authorities_sources :".$query);
2666                        $num_authority_source = pmb_mysql_insert_id();
2667////////////////////////////////////////////////////////////////
2668                        if(($opac_enrichment_bnf_sparql) && ($type=='author')){
2669                                auteur::author_enrichment($num_authority);
2670                        }
2671                }
2672                return $num_authority;
2673        }
2674
2675        function from_usmarc ($record) {
2676                $this->document_type = $record->inner_guide[dt];
2677                $this->bibliographic_level = $record->inner_guide[bl];
2678                $this->hierarchic_level = $record->inner_guide[hl];
2679
2680                if ($this->hierarchic_level=="") {
2681                        if ($this->bibliographic_level=="s") $this->hierarchic_level="1";
2682                        if ($this->bibliographic_level=="m") $this->hierarchic_level="0";
2683                }
2684
2685                for ($i=0;$i<count($record->inner_directory);$i++) {
2686                        $cle=$record->inner_directory[$i]['label'];
2687                        switch($cle) {
2688                                case "020": /* isbn */
2689                                        $isbn = $record->get_subfield($cle,'a');
2690                                        break;
2691                                case "041": /* language */
2692                                        $this->language_code = $record->get_subfield_array($cle,"a");
2693                                        break;
2694                                case "245": /* titles */
2695                                        $tit = $record->get_subfield($cle, "a", "b", "n", "p");
2696                                        break;
2697                                case "246": /* titles */
2698                                        $tit_sup=$record->get_subfield($cle, "a");
2699                                        break;
2700                                case "247": /* former title */
2701                                        $tit_for=$record->get_subfield($cle, "a");
2702                                        break;
2703                                case "250": /* mention_edition */
2704                                        $subfield = $record->get_subfield($cle,"a");
2705                                        $this->mention_edition = $subfield[0];
2706                                        break;
2707                                case "260": /* publisher */
2708                                        $editor = $record->get_subfield($cle,"a","b","c");
2709                                        break;
2710                                case "300": /* description */
2711                                        $subfield = $record->get_subfield($cle,"a");
2712                                        $this->page_nbr = $this->clean_field ($subfield[0]);
2713                                        $subfield = $record->get_subfield($cle,"b");
2714                                        $this->illustration = $this->clean_field ($subfield[0]);
2715                                        $subfield = $record->get_subfield($cle,"c");
2716                                        $this->size = $this->clean_field ($subfield[0]);
2717                                        $subfield = $record->get_subfield($cle,"e");
2718                                        $this->accompagnement = $this->clean_field ($subfield[0]);
2719                                        break;
2720                                case "022": /* collection */
2721                                        $collection_022=$record->get_subfield($cle,"a");
2722                                        break;
2723                                case "222": /* collection */
2724                                        $collection_222=$record->get_subfield($cle,"a","v","x");
2725                                        break;
2726                                case "440": /* collection */
2727                                        $collection_440=$record->get_subfield($cle,"a","v","x");
2728                                        break;
2729                                case "500": /* inside */
2730                                        $general_note = $record->get_subfield($cle,"a");
2731                                        break;
2732                                case "502": /* abstract */
2733                                        $content_note = $record->get_subfield($cle,"a");
2734                                        break;
2735                                case "520": /* abstract */
2736                                        $abstract_note = $record->get_subfield($cle,"a");
2737                                        break;
2738                                case "082": /* Dewey */
2739                                        $this->dewey=$record->get_subfield($cle,"a");
2740                                        break;
2741                                case "100":
2742                                        $aut_100=$record->get_subfield($cle,"a","d","e","4","3");
2743                                        break;
2744                                case "110":
2745                                        $aut_110=$record->get_subfield($cle,"a","d","e","4","3");
2746                                        break;
2747                                case "111":
2748                                        $aut_111=$record->get_subfield($cle,"a","d","e","4","3");
2749                                        break;
2750                                case "700":
2751                                        $aut_700=$record->get_subfield($cle,"a","d","e","4","3");
2752                                        break;
2753                                case "710":
2754                                        $aut_710=$record->get_subfield($cle,"a","d","e","4","3");
2755                                        break;
2756                                case "711":
2757                                        $aut_711=$record->get_subfield($cle,"a","d","e","4","3");
2758                                        break;
2759                                case "856":
2760                                        $subfield = $record->get_subfield($cle,"u","q");
2761                                        $this->ressource = $subfield[0];
2762                                        break;
2763                                case "650":
2764                                        $this->info_606_a=$record->get_subfield_array_array($cle,"a");
2765                                        $this->info_606_3=$record->get_subfield_array_array($cle,"3");
2766                                        $this->info_606_j=$record->get_subfield_array_array($cle,"j");
2767                                        $this->info_606_x=$record->get_subfield_array_array($cle,"x");
2768                                        $this->info_606_y=$record->get_subfield_array_array($cle,"y");
2769                                        $this->info_606_z=$record->get_subfield_array_array($cle,"z");
2770                                        break;
2771                                case "653":
2772                                        $index_sujets=$record->get_subfield($cle,"a");
2773                                        break;
2774                                default:
2775                                        break;
2776
2777                        } /* end of switch */
2778
2779                } /* end of for */
2780
2781                $this->isbn = $this->process_isbn ($isbn[0]);
2782
2783                /* INSERT de la notice OK, on va traiter les auteurs
2784                10# : personnal : type auteur 70                71# : collectivités : type auteur 71
2785                1 seul en 700                                   idem pour les déclinaisons         
2786                n en 701 n en 702
2787                les 7#0 tombent en auteur principal : responsability_type = 0
2788                les 7#1 tombent en autre auteur : responsability_type = 1
2789                les 7#2 tombent en auteur secondaire : responsability_type = 2
2790                */
2791                $this->aut_array = array();
2792                /* on compte tout de suite le nbre d'enreg dans les répétables */
2793                $nb_repet_700=sizeof($aut_700);
2794                $nb_repet_710=sizeof($aut_710);
2795                $nb_repet_711=sizeof($aut_711);
2796
2797                /* renseignement de aut0 */
2798                if ($aut_100[0][a]!="") { /* auteur principal en 100 ? */
2799                               
2800                        $author=$this->process_author($aut_100[0]['a'],$aut_100[0]['b'],'','');
2801                       
2802                        $this->aut_array[] = array(
2803                                "entree" => $author['name'], //$aut_100[0]['a'],
2804                                "rejete" => $author['rejete'], //$aut_100[0]['b'],
2805                                "type_auteur" => "70",
2806                                "fonction" => convert_usmarc_unimarc_functions($aut_100[0][4]),
2807                                "id" => 0,
2808                                "responsabilite" => 0,
2809                                "authority_number" => $aut_100[0][3] ) ;
2810                        } elseif ($aut_110[0]['a']!="") { /* auteur principal en 110 ? */
2811                                $author=$this->process_author($aut_110[0]['a'],$aut_110[0]['b'],'','');
2812                                $this->aut_array[] = array(
2813                                        "entree" => $author['name'], //$aut_110[0]['a'],
2814                                        "rejete" => $author['rejete'], //$aut_110[0]['b'],
2815                                        "type_auteur" => "71",
2816                                        "fonction" => convert_usmarc_unimarc_functions($aut_110[0][4]),
2817                                        "id" => 0,
2818                                        "responsabilite" => 0 ,
2819                                        "authority_number" => $aut_110[0][3] ) ;                               
2820                                } elseif ($aut_111[0]['a']!="") { /* auteur principal en 111 ? */
2821                                        $author=$this->process_author($aut_111[0]['a'],$aut_111[0]['b'],'','');
2822                                        $this->aut_array[] = array(
2823                                                "entree" => $author['name'], //$aut_111[0]['a'],
2824                                                "rejete" => $author['rejete'], //$aut_111[0]['b'],
2825                                                "type_auteur" => "71",
2826                                                "fonction" => convert_usmarc_unimarc_functions($aut_111[0][4]),
2827                                                "id" => 0,
2828                                                "responsabilite" => 0,
2829                                                "authority_number" => $aut_111[0][3] ) ;                                       
2830                                        } 
2831       
2832                /* renseignement de aut1 */
2833                for ($i=0 ; $i < $nb_repet_700 ; $i++) {
2834                        $author=$this->process_author($aut_700[$i]['a'],$aut_700[$i]['b'],'','');
2835                        $this->aut_array[] = array(
2836                                "entree" => $author['name'], //$aut_700[$i]['a'],
2837                                "rejete" => $author['rejete'], //$aut_700[$i]['b'],
2838                                "type_auteur" => "70",
2839                                "fonction" => convert_usmarc_unimarc_functions($aut_700[$i][4]),
2840                                "id" => 0,
2841                                "responsabilite" => 1 ,
2842                                "authority_number" => $aut_700[$i][3] ) ;
2843                        }
2844                for ($i=0 ; $i < $nb_repet_710 ; $i++) {
2845                        $author=$this->process_author($aut_710[$i]['a'],$aut_710[$i]['b'],'','');
2846                        $this->aut_array[] = array(
2847                                "entree" => $author['name'], //$aut_710[$i]['a'],
2848                                "rejete" => $author['rejete'], //$aut_710[$i]['b'],
2849                                "type_auteur" => "71",
2850                                "fonction" => convert_usmarc_unimarc_functions($aut_710[$i][4]),
2851                                "id" => 0,
2852                                "responsabilite" => 1,
2853                                "authority_number" => $aut_710[$i][3] ) ;
2854                        }
2855                /* renseignement de aut2 */
2856                for ($i=0 ; $i < $nb_repet_711 ; $i++) {
2857                        $author=$this->process_author($aut_711[$i]['a'],$aut_711[$i]['b'],'','');
2858                        $this->aut_array[] = array(
2859                                "entree" => $author['name'], //$aut_711[$i]['a'],
2860                                "rejete" => $author['rejete'], //$aut_711[$i]['b'],
2861                                "type_auteur" => "71",
2862                                "fonction" => convert_usmarc_unimarc_functions($aut_711[$i][4]),
2863                                "id" => 0,
2864                                "responsabilite" => 2 ,
2865                                "authority_number" => $aut_711[$i][3]) ;
2866                        }
2867               
2868                /* Editors */
2869                $this->year = preg_replace ("/[^0-9\[\]()]/", "", $editor[0][c]);
2870
2871                $this->editors[0]['name'] = $this->clean_field ($editor[0][b]);
2872                $this->editors[0]['ville'] = $this->clean_field ($editor[0][a]);
2873
2874                $this->editors[1]['name'] = $this->clean_field ($editor[1][b]);
2875                $this->editors[1]['ville'] = $this->clean_field ($editor[1][a]);
2876               
2877                /* ici traitement des collections */
2878                $coll_name = "";
2879                $subcoll_name = "";
2880                $coll_issn = "";
2881                $subcoll_issn = "";
2882                $nocoll = "";
2883
2884                /* traitement de 222$a, si rien alors 440$a pour la collection */
2885                if ($collection_222[0][a]!="") {
2886                        $coll_name = $this->clean_field($collection_222[0][a]);
2887                        $coll_issn = $collection_022[0][a];
2888                } elseif ($collection_440[0][a]!="") {
2889                        $coll_name = $this->clean_field($collection_440[0][a]);
2890                        $coll_issn = $collection_440[0][x];
2891                }
2892
2893                /* traitement de 222 1, si rien alors 440 1 pour la sous-collection */
2894                if ($collection_222[1][a]!="") {
2895                        $subcoll_name = $this->clean_field($collection_222[1][a]);
2896                        $subcoll_issn = $collection_022[1][a];
2897                } elseif ($collection_440[1][a]!="") {
2898                        $subcoll_name = $this->clean_field($collection_440[1][a]);
2899                        $subsubcoll_issn = $collection_440[1][x];
2900                }
2901
2902                /* gaffe au nocoll, en principe en 440$v */
2903                if ($collection_440[0][v]!="") {
2904                        $this->nbr_in_collection = $collection_440[0][v];
2905                } else 
2906                $this->nbr_in_collection = "";
2907
2908                $this->collection['name']=clean_string($coll_name);
2909                $this->collection['issn']=clean_string($coll_issn);
2910
2911                $this->subcollection['name']=clean_string($subcoll_name);
2912                $this->subcollection['issn']=clean_string($subcoll_issn);
2913                               
2914                /* Series */
2915                $this->serie = clean_string ($tit[0][p]);
2916                $this->nbr_in_serie = clean_string ($tit[0][n]);
2917               
2918                /* traitement ressources */
2919                $this->link_url = $ressource[0]["u"];
2920                $this->link_format = $ressource[0]["2"];
2921
2922                /* traitement des titres */
2923                $this->titles[0] = preg_replace('/-$| $|\||\($|\)$|\[$|\]$|\:$|\;$|\/$|\\$|\.+$/', '', trim($tit[0][a]));
2924                $this->titles[1] = preg_replace('/-$| $|\||\($|\)$|\[$|\]$|\:$|\;$|\/$\|\$|\.+$/', '', trim($tit_sup[0][a]));
2925                $this->titles[2] = preg_replace('/-$| $|\||\($|\)$|\[$|\]$|\:$|\;$|\/$\|\$|\.+$/', '', trim($tit_for[0][a]));
2926                $this->titles[3] = preg_replace('/-$| $|\||\($|\)$|\[$|\]$|\:$|\;$|\/$\|\$|\.+$/', '', trim($tit[0][b]));
2927
2928                $this->general_note = "";
2929                $this->content_note = "";
2930                $this->abstract_note = "";
2931
2932                /* prepare index_titre field for searching */                           
2933                for ($i = 0; $i < count ($abstract_note); $i++) {
2934                        $this->abstract_note .= $abstract_note[$i]." ";
2935                }
2936                for ($i = 0; $i < count($general_note); $i++) {
2937                        $this->general_note .= $general_note[$i]." ";
2938                }
2939                for ($i = 0; $i < count ($content_note); $i++) {
2940                        $this->content_note .= $content_note[$i]." ";
2941                }
2942                if (trim ($this->abstract_note) == "") 
2943                        $this->abstract_note = $this->general_note." ".$this->content_note;
2944               
2945                global $pmb_keyword_sep ;
2946                if (!$pmb_keyword_sep) $pmb_keyword_sep=" ";
2947                if (is_array($index_sujets)) $this->free_index = implode ($pmb_keyword_sep,$index_sujets);
2948                        else $this->free_index = $index_sujets;
2949       
2950        }
2951
2952        function from_unimarc ($record) {
2953                $this->document_type = $record->inner_guide[dt];
2954                $this->bibliographic_level = $record->inner_guide[bl];
2955                $this->hierarchic_level = $record->inner_guide[hl];
2956
2957                if ($this->hierarchic_level=="") {
2958                        if ($this->bibliographic_level=="s") $this->hierarchic_level="1";
2959                        if ($this->bibliographic_level=="m") $this->hierarchic_level="0";
2960                }
2961                if(function_exists("param_perso_prepare"))  param_perso_prepare($record);
2962                $indicateur = array();
2963                for ($i=0;$i<count($record->inner_directory);$i++) {
2964                        $cle=$record->inner_directory[$i]['label'];
2965                        $indicateur[$cle][]=substr($record->inner_data[$i]['content'],0,2);
2966                        switch($cle) {
2967                                case "010": /* isbn */
2968                                        $isbn = $record->get_subfield($cle,'a');
2969                                        $subfield = $record->get_subfield($cle,"d");
2970                                        $this->prix = $subfield[0];
2971                                case "011": /* isbn */
2972                                        $isbn = $record->get_subfield($cle,'a');       
2973                                        break;
2974                                case "014": /* isbn */
2975                                        $this->others_ids = $record->get_subfield($cle,'a','b');
2976                                        break;
2977                                case "071": /* barcode */
2978                                        $cb = $record->get_subfield($cle,"a");
2979                                        break;
2980                                case "101": /* language */
2981                                        //martizva NOTE: some server send language in UPCASE!!!
2982                                        // $subfield = $record->get_subfield($cle,"a");
2983                                        // $this->language_code = strtolower($subfield[0]);
2984                                        // $subfield = $record->get_subfield($cle,"c");
2985                                        // $this->original_language_code = strtolower($subfield[0]);
2986                                        $this->language_code = $record->get_subfield_array($cle,"a");
2987                                        $this->original_language_code = $record->get_subfield_array($cle,"c");
2988                                        break;
2989                                case "200": /* titles */
2990                                        $tit = $record->get_subfield($cle, 'a', 'c', 'd', 'e', 'v');
2991                                        $tit_200a=$record->get_subfield_array($cle, 'a');
2992                                        $tit_200c=$record->get_subfield_array($cle, 'c');
2993                                        $tit_200d=$record->get_subfield_array($cle, 'd');
2994                                        $tit_200e=$record->get_subfield_array($cle, 'e');
2995                                        $tit_200v=$record->get_subfield_array($cle, 'v');
2996                                        $this->serie_200=$record->get_subfield($cle, 'h', 'i');
2997                                        break;
2998                                case "205": /* mention_edition */
2999                                        $subfield = $record->get_subfield($cle,"a");
3000                                        $this->mention_edition = $subfield[0];
3001                                        break;
3002                                case "210": /* publisher */
3003                                        $editeur_lieu=$record->get_subfield_array_array($cle, "a");
3004                                        $editeur_nom=$record->get_subfield_array_array($cle, "c");
3005                                        $editeur_date=$record->get_subfield_array($cle, "d");
3006                                        $editeur_date_machine=$record->get_subfield_array($cle, "h");
3007                                        break;
3008                                case "215": /* description */
3009                                        $subfield = $record->get_subfield($cle,"a");
3010                                        $this->page_nbr = $subfield[0];
3011                                        $subfield = $record->get_subfield($cle,"c");
3012                                        $this->illustration = $subfield[0];
3013                                        $subfield = $record->get_subfield($cle,"d");
3014                                        $this->size = $subfield[0];
3015                                        $subfield = $record->get_subfield($cle,"e");
3016                                        $this->accompagnement = $subfield[0];
3017                                        break;
3018                                case "225": /* collection */
3019                                        $collection_225 = $record->get_subfield($cle,"a","i","v","x");
3020                                        break;
3021                                case "300": /* inside */
3022                                        $general_note = $record->get_subfield($cle,"a");
3023                                        break;
3024                                case "327": /* inside */
3025                                        $content_note=$record->get_subfield_array($cle,"a");
3026                                        break;
3027                                case "330": /* abstract */
3028                                        $abstract_note = $record->get_subfield($cle,"a");
3029                                        break;
3030                                case "345": /* EAN */
3031                                        $EAN=$record->get_subfield($cle,"b");
3032                                        break;
3033                                case "410": /* collection */
3034                                        $collection_410 = $record->get_subfield($cle,"t","v","x");
3035                                        break;
3036                                case "411": /* sub-collection */
3037                                        $collection_411 = $record->get_subfield($cle,"t","v","x");
3038                                        break;
3039                                case "461": /* series ou perios*/
3040                                        if(($this->bibliographic_level == 'a' || $this->bibliographic_level == 'b' || $this->bibliographic_level == 's')  && $this->hierarchic_level == '2'){
3041                                                $perio = $record->get_subfield($cle,"t","x","v","d","e");
3042                                                $this->perio_titre = $record->get_subfield_array($cle,"t");
3043                                                $this->perio_issn = $record->get_subfield_array($cle,"x");
3044                                                if($record->get_subfield_array($cle,"v")) $this->bull_num = $record->get_subfield_array($cle,"v");
3045                                                if($record->get_subfield_array($cle,"d")) $this->bull_date = $record->get_subfield_array($cle,"d");
3046                                                if($record->get_subfield_array($cle,"e")) $this->bull_mention = $record->get_subfield_array($cle,"e");
3047                                        } else $serie = $record->get_subfield($cle,"t","v");
3048                                        break;
3049                                case "463":/* Bulletins */
3050                                        $bulletin_463 = $record->get_subfield($cle,"t","v","d","e");
3051                                        $this->bull_num = $record->get_subfield_array($cle,"v");
3052                                        $this->bull_date = $record->get_subfield_array($cle,"d");
3053                                        $this->bull_mention = $record->get_subfield_array($cle,"e");
3054                                        $this->bull_titre = $record->get_subfield_array($cle,"t");
3055                                        break;
3056                                case "500": /* Titres uniformes */
3057                                        $this->tu_500 = $record->get_subfield($cle,"a","k","m","q","u","v","w");
3058                                        $this->tu_500_i = $record->get_subfield_array_array($cle,"i");
3059                                        $this->tu_500_j = $record->get_subfield_array_array($cle,"j");
3060                                        $this->tu_500_l = $record->get_subfield_array_array($cle,"l"); 
3061                                        $this->tu_500_n = $record->get_subfield_array_array($cle,"n");                                                                 
3062                                        $this->tu_500_r = $record->get_subfield_array_array($cle,"r");
3063                                        $this->tu_500_s = $record->get_subfield_array_array($cle,"s");                                 
3064                                        break;
3065                                case "503": /* Titres de forme */
3066                                        $this->info_503 = $record->get_subfield($cle,"a","e","f","h","m","n");
3067                                        $this->info_503_d = $record->get_subfield_array_array($cle,"d");
3068                                        $this->info_503_j = $record->get_subfield_array_array($cle,"j");                               
3069                                        break; 
3070                                case "530":
3071                                        $perio530a=$record->get_subfield_array($cle, 'a');
3072                                        break;
3073                                        //TODO AR
3074                                        //recup 530 (voir import_unimarc_lien)
3075                                case "600": // 600 PERSONAL NAME USED AS SUBJECT
3076                                        $this->info_600_3=$record->get_subfield_array_array($cle,"3");
3077                                        $this->info_600_a=$record->get_subfield_array_array($cle,"a");
3078                                        $this->info_600_b=$record->get_subfield_array_array($cle,"b");
3079                                        $this->info_600_c=$record->get_subfield_array_array($cle,"c");
3080                                        $this->info_600_d=$record->get_subfield_array_array($cle,"d");
3081                                        $this->info_600_f=$record->get_subfield_array_array($cle,"f");
3082                                        $this->info_600_g=$record->get_subfield_array_array($cle,"g");
3083                                        $this->info_600_j=$record->get_subfield_array_array($cle,"j");
3084                                        $this->info_600_p=$record->get_subfield_array_array($cle,"p");
3085                                        $this->info_600_t=$record->get_subfield_array_array($cle,"t");
3086                                        $this->info_600_x=$record->get_subfield_array_array($cle,"x");
3087                                        $this->info_600_y=$record->get_subfield_array_array($cle,"y");
3088                                        $this->info_600_z=$record->get_subfield_array_array($cle,"z");
3089                                        break;
3090                                case "601": // 601 CORPORATE BODY NAME USED AS SUBJECT
3091                                        $this->info_601_3=$record->get_subfield_array_array($cle,"3");
3092                                        $this->info_601_a=$record->get_subfield_array_array($cle,"a");
3093                                        $this->info_601_b=$record->get_subfield_array_array($cle,"b");
3094                                        $this->info_601_c=$record->get_subfield_array_array($cle,"c");
3095                                        $this->info_601_d=$record->get_subfield_array_array($cle,"d");
3096                                        $this->info_601_e=$record->get_subfield_array_array($cle,"e");
3097                                        $this->info_601_f=$record->get_subfield_array_array($cle,"f");
3098                                        $this->info_601_g=$record->get_subfield_array_array($cle,"g");
3099                                        $this->info_601_h=$record->get_subfield_array_array($cle,"h");
3100                                        $this->info_601_t=$record->get_subfield_array_array($cle,"t");
3101                                        $this->info_601_j=$record->get_subfield_array_array($cle,"j");
3102                                        $this->info_601_x=$record->get_subfield_array_array($cle,"x");
3103                                        $this->info_601_y=$record->get_subfield_array_array($cle,"y");
3104                                        $this->info_601_z=$record->get_subfield_array_array($cle,"z");
3105                                        break;
3106                                case "602": // 602 FAMILY NAME USED AS SUBJECT
3107                                        $this->info_602_3=$record->get_subfield_array_array($cle,"3");
3108                                        $this->info_602_a=$record->get_subfield_array_array($cle,"a");
3109                                        $this->info_602_f=$record->get_subfield_array_array($cle,"f");
3110                                        $this->info_602_t=$record->get_subfield_array_array($cle,"t");
3111                                        $this->info_602_j=$record->get_subfield_array_array($cle,"j");
3112                                        $this->info_602_x=$record->get_subfield_array_array($cle,"x");
3113                                        $this->info_602_y=$record->get_subfield_array_array($cle,"y");
3114                                        $this->info_602_z=$record->get_subfield_array_array($cle,"z");
3115                                        break;
3116                                case "604": // 604 AUTEUR-TITRE USED AS SUBJECT
3117                                        $this->info_604_a=$record->get_subfield_array_array($cle,"a");
3118                                        $this->info_604_h=$record->get_subfield_array_array($cle,"h");
3119                                        $this->info_604_i=$record->get_subfield_array_array($cle,"i");
3120                                        $this->info_604_j=$record->get_subfield_array_array($cle,"j");
3121                                        $this->info_604_k=$record->get_subfield_array_array($cle,"k");
3122                                        $this->info_604_l=$record->get_subfield_array_array($cle,"l");
3123                                        $this->info_604_x=$record->get_subfield_array_array($cle,"x");
3124                                        $this->info_604_y=$record->get_subfield_array_array($cle,"y");
3125                                        $this->info_604_z=$record->get_subfield_array_array($cle,"z");
3126                                        break;
3127                                case "605": // 605 TITLE USED AS SUBJECT
3128                                        $this->info_605_3=$record->get_subfield_array_array($cle,"3");
3129                                        $this->info_605_a=$record->get_subfield_array_array($cle,"a");
3130                                        $this->info_605_h=$record->get_subfield_array_array($cle,"h");
3131                                        $this->info_605_i=$record->get_subfield_array_array($cle,"i");
3132                                        $this->info_605_j=$record->get_subfield_array_array($cle,"j");
3133                                        $this->info_605_k=$record->get_subfield_array_array($cle,"k");
3134                                        $this->info_605_l=$record->get_subfield_array_array($cle,"l");
3135                                        $this->info_605_m=$record->get_subfield_array_array($cle,"m");
3136                                        $this->info_605_n=$record->get_subfield_array_array($cle,"n");
3137                                        $this->info_605_q=$record->get_subfield_array_array($cle,"q");
3138                                        $this->info_605_r=$record->get_subfield_array_array($cle,"r");
3139                                        $this->info_605_s=$record->get_subfield_array_array($cle,"s");
3140                                        $this->info_605_u=$record->get_subfield_array_array($cle,"u");
3141                                        $this->info_605_w=$record->get_subfield_array_array($cle,"w");
3142                                        $this->info_605_j=$record->get_subfield_array_array($cle,"j");
3143                                        $this->info_605_x=$record->get_subfield_array_array($cle,"x");
3144                                        $this->info_605_y=$record->get_subfield_array_array($cle,"y");
3145                                        $this->info_605_z=$record->get_subfield_array_array($cle,"z");
3146                                        break;
3147                                case "606": // RAMEAU / TOPICAL NAME USED AS SUBJECT
3148                                        $this->info_606_3=$record->get_subfield_array_array($cle,"3");
3149                                        $this->info_606_a=$record->get_subfield_array_array($cle,"a");
3150                                        $this->info_606_j=$record->get_subfield_array_array($cle,"j");
3151                                        $this->info_606_x=$record->get_subfield_array_array($cle,"x");
3152                                        $this->info_606_y=$record->get_subfield_array_array($cle,"y");
3153                                        $this->info_606_z=$record->get_subfield_array_array($cle,"z");
3154                                        break;
3155                                case "607": // 607 GEOGRAPHICAL NAME USED AS SUBJECT
3156                                        $this->info_607_3=$record->get_subfield_array_array($cle,"3");
3157                                        $this->info_607_a=$record->get_subfield_array_array($cle,"a");
3158                                        $this->info_607_j=$record->get_subfield_array_array($cle,"j");
3159                                        $this->info_607_x=$record->get_subfield_array_array($cle,"x");
3160                                        $this->info_607_y=$record->get_subfield_array_array($cle,"y");
3161                                        $this->info_607_z=$record->get_subfield_array_array($cle,"z");
3162                                        break;
3163                                case "608": // 608 Vedette matière de forme, de genre ou des caractéristiques physiques
3164                                        $this->info_608_3=$record->get_subfield_array_array($cle,"3");
3165                                        $this->info_608_a=$record->get_subfield_array_array($cle,"a");
3166                                        $this->info_608_j=$record->get_subfield_array_array($cle,"j");
3167                                        $this->info_608_x=$record->get_subfield_array_array($cle,"x");
3168                                        $this->info_608_y=$record->get_subfield_array_array($cle,"y");
3169                                        $this->info_608_z=$record->get_subfield_array_array($cle,"z");
3170                                        break;
3171                                case "610": /* mots clé */
3172                                        $index_sujets=$record->get_subfield($cle,"a");
3173                                        break;
3174                                case "676": /* Dewey */
3175                                        $this->dewey=$record->get_subfield($cle,"a");
3176                                        break;
3177                                case "686": /* PCDM */
3178                                        if (!$this->dewey)
3179                                                $this->dewey=$record->get_subfield($cle,"a");
3180                                        break;
3181                                case "700":
3182                                        $aut_700=$record->get_subfield($cle,"a","b","c","d","4","f","N","3");
3183                                        break;
3184                                case "701":
3185                                        $aut_701=$record->get_subfield($cle,"a","b","c","d","4","f","N","3");
3186                                        break;
3187                                case "702":
3188                                        $aut_702=$record->get_subfield($cle,"a","b","c","d","4","f","N","3");
3189                                        break;
3190                                case "710":
3191                                        $aut_710=$record->get_subfield($cle,"a","b","c","g","d","4","f","e","k","l","m","n","3");
3192                                        break;
3193                                case "711":
3194                                        $aut_711=$record->get_subfield($cle,"a","b","c","g","d","4","f","e","k","l","m","n","3");
3195                                        break;
3196                                case "712":
3197                                        $aut_712=$record->get_subfield($cle,"a","b","c","g","d","4","f","e","k","l","m","n","3");
3198                                        break;
3199                                case "801": /* origine du catalogage */
3200                                        $origine_notice=$record->get_subfield($cle,"a","b");
3201                                        break;
3202                                case "856":
3203                                        $ressource = $record->get_subfield($cle,"u","q");
3204                                        break;
3205                                case "995": /* infos de la BDP */
3206                                        $info_995 = $record->get_subfield($cle,"a","b","c","d","f","k","m","n","o","r","u");
3207                                        $this->exemplaires = $info_995;
3208                                        break;
3209                                case "896": /* Thumbnail */
3210                                        $this->thumbnail_url = $record->get_subfield($cle,"a");
3211                                        $this->thumbnail_url = $this->thumbnail_url[0];
3212                                        break;
3213                                //Documents numériques
3214                                case "897":
3215                                        $this->doc_nums = $record->get_subfield($cle,"a", "b","f","p");
3216                                        break;
3217                                default:
3218                                        break;
3219
3220                        } /* end of switch */
3221
3222                } /* end of for */
3223
3224                //Récupération des catégories en lien avec le fichier xml
3225                category_auto::get_info_categ($record);
3226                $this->isbn = $this->process_isbn ($isbn[0]);
3227                if (function_exists("traite_categories_from_unimarc")) {
3228                        $this->categories = traite_categories_from_unimarc($this);
3229                }
3230                /* INSERT de la notice OK, on va traiter les auteurs
3231                70# : personnal : type auteur 70                71# : collectivités : type auteur 71
3232                1 seul en 700                                   idem pour les déclinaisons         
3233                n en 701 n en 702
3234                les 7#0 tombent en auteur principal : responsability_type = 0
3235                les 7#1 tombent en autre auteur : responsability_type = 1
3236                les 7#2 tombent en auteur secondaire : responsability_type = 2
3237                */
3238                $this->aut_array = array();
3239                /* on compte tout de suite le nbre d'enreg dans les répétables */
3240                $nb_repet_701=sizeof($aut_701);
3241                $nb_repet_711=sizeof($aut_711);
3242                $nb_repet_702=sizeof($aut_702);
3243                $nb_repet_712=sizeof($aut_712);
3244
3245                /* renseignement de aut0 */
3246                if ($aut_700[0][a]!="") { /* auteur principal en 700 ? */
3247                        $this->aut_array[] = array(
3248                                "entree" => $aut_700[0]['a'],
3249                                "rejete" => $aut_700[0]['b'],
3250                                "author_comment" => $aut_700[0]['c']." ".$aut_700[0]['d'],
3251                                "date" => $aut_700[0]['f'],
3252                                "type_auteur" => "70",
3253                                "fonction" => $aut_700[0][4],
3254                                "id" => 0,
3255                                "responsabilite" => 0 ,
3256                                "ordre" => 0 ,
3257                                "authority_number" => $aut_700[0][3]) ;
3258                } elseif ($aut_710[0]['a']!="") { /* auteur principal en 710 ? */
3259                        if(substr($indicateur["710"][0],0,1)=="1")      $type_auteur="72";
3260                        else $type_auteur="71";
3261                       
3262                        $lieu=$aut_710[0]['e'];
3263                        if(!$lieu)$lieu=$aut_710[0]['k'];       
3264                        $this->aut_array[] = array(
3265                                "entree" => $aut_710[0]['a'],
3266                                "rejete" => $aut_710[0]['g'],
3267                                "subdivision" => $aut_710[0]['b'],
3268                                "author_comment" => $aut_710[0]['c'],
3269                                "numero" => $aut_710[0]['d'],
3270                                "ville" => $aut_710[0]['l'],
3271                                "web" => $aut_710[0]['n'],
3272                                "date" => $aut_710[0]['f'],
3273                                "type_auteur" => $type_auteur*1,
3274                                "fonction" => $aut_710[0][4],
3275                                "id" => 0,
3276                                "responsabilite" => 0,
3277                                "ordre" => 0 ,
3278                                "lieu" => $lieu,
3279                                "pays" => $aut_710[0]['m'],
3280                                "authority_number" => $aut_710[0][3]) ;                 
3281                } 
3282       
3283                /* renseignement de aut1 */
3284                for ($i=0 ; $i < $nb_repet_701 ; $i++) {
3285                        $this->aut_array[] = array(
3286                                "entree" => $aut_701[$i]['a'],
3287                                "rejete" => $aut_701[$i]['b'],
3288                                "author_comment" => $aut_701[$i]['c']." ".$aut_701[$i]['d'],
3289                                "date" => $aut_701[$i]['f'],
3290                                "type_auteur" => "70",
3291                                "fonction" => $aut_701[$i][4],
3292                                "id" => 0,
3293                                "responsabilite" => 1,
3294                                "ordre" => ($i+1) ,
3295                                "authority_number" => $aut_701[$i][3]) ;
3296                        }
3297                for ($i=0 ; $i < $nb_repet_711 ; $i++) {
3298                        if(substr($indicateur["711"][$i],0,1)=="1")     $type_auteur="72";
3299                        else $type_auteur="71"; 
3300                       
3301                        $lieu=$aut_711[$i]['e'];
3302                        if(!$lieu)$lieu=$aut_711[$i]['k'];     
3303                        $this->aut_array[] = array(
3304                                "entree" => $aut_711[$i]['a'],
3305                                "rejete" => $aut_711[$i]['g'],
3306                                "subdivision" => $aut_711[$i]['b'],
3307                                "author_comment" => $aut_711[$i]['c'],
3308                                "numero" => $aut_711[$i]['d'],
3309                                "ville" => $aut_711[$i]['l'],
3310                                "web" => $aut_711[$i]['n'],
3311                                "date" => $aut_711[$i]['f'],
3312                                "type_auteur" => $type_auteur*1,
3313                                "fonction" => $aut_711[$i][4],
3314                                "id" => 0,
3315                                "responsabilite" => 1,
3316                                "lieu" => $lieu,
3317                                "pays" => $aut_711[$i]['m'],
3318                                "ordre" => ($i+1) ,
3319                                "authority_number" => $aut_711[$i][3]) ;
3320                        }
3321                /* renseignement de aut2 */
3322                for ($i=0 ; $i < $nb_repet_702 ; $i++) {
3323                        $this->aut_array[] = array(
3324                                "entree" => $aut_702[$i]['a'],
3325                                "rejete" => $aut_702[$i]['b'],
3326                                "author_comment" => $aut_702[$i]['c']." ".$aut_702[$i]['d'],
3327                                "date" => $aut_702[$i]['f'],
3328                                "type_auteur" => "70",
3329                                "fonction" => $aut_702[$i][4],
3330                                "id" => 0,
3331                                "responsabilite" => 2,
3332                                "ordre" => ($i+1) ,
3333                                "authority_number" => $aut_702[$i][3]) ;
3334                        }
3335                for ($i=0 ; $i < $nb_repet_712 ; $i++) {
3336                        if(substr($indicateur["712"][$i],0,1)=="1")     $type_auteur="72";
3337                        else $type_auteur="71";
3338                        $lieu=$aut_712[$i]['e'];
3339                        if(!$lieu)$lieu=$aut_712[$i]['k'];
3340                                               
3341                        $this->aut_array[] = array(
3342                                "entree" => $aut_712[$i]['a'],
3343                                "rejete" => $aut_712[$i]['g'],
3344                                "subdivision" => $aut_712[$i]['b'],
3345                                "author_comment" => $aut_712[$i]['c'],
3346                                "numero" => $aut_712[$i]['d'],
3347                                "ville" => $aut_712[$i]['l'],
3348                                "web" => $aut_712[$i]['n'],
3349                                "date" => $aut_712[$i]['f'],
3350                                "type_auteur" => $type_auteur*1,
3351                                "fonction" => $aut_712[$i][4],
3352                                "id" => 0,
3353                                "responsabilite" => 2,
3354                                "lieu" => $lieu,
3355                                "pays" => $aut_712[$i]['m'],
3356                                "ordre" => ($i+1) ,
3357                                "authority_number" => $aut_712[$i][3]) ;
3358                        }
3359                /*  Added for some italian z39.50 server
3360                Some adjustment to clean the values from symbol like << and others */
3361                for ($i=0 ; $i < $nb_repet_701+$nb_repet_711+$nb_repet_702 +$nb_repet_712+1 ; $i++) {
3362                        $this->aut_array[$i]['entree']=del_more_garbage($this->aut_array[$i]['entree']);
3363                        $this->aut_array[$i]['rejete']=del_more_garbage($this->aut_array[$i]['rejete']);
3364                }
3365               
3366                /* traitement des éditeurs */
3367                $editor=array();
3368                if (is_array($editeur_nom)) {
3369                        foreach ( $editeur_nom as $key_nom1 => $nom1 ) {
3370                                foreach ( $nom1 as $key_nom2 => $nom2 ) {
3371                                        $mon_ed=array();
3372                                        $mon_ed["c"]=$nom2;
3373                       
3374                                        if($editeur_lieu[$key_nom1][$key_nom2]){
3375                                                $mon_ed["a"]=$editeur_lieu[$key_nom1][$key_nom2];
3376                                        }
3377       
3378                                        $editor[]=$mon_ed;
3379                                }
3380                        }
3381                }
3382                $this->year=clean_string($editeur_date[0]);
3383
3384                $this->editors[0]['name']=clean_string($editor[0][c]);
3385                $this->editors[0]['ville']=clean_string($editor[0][a]);
3386
3387                $this->editors[1]['name']=clean_string($editor[1][c]);
3388                $this->editors[1]['ville']=clean_string($editor[1][a]);
3389               
3390                /*  Added for some italian z39.50 server
3391                Some adjustment to clean the values from symbol like << and others */
3392                $this->editors[0]['name']=del_more_garbage($this->editors[0]['name']);
3393                $this->editors[1]['name']=del_more_garbage($this->editors[1]['name']);
3394               
3395                /* traitement des collections */
3396                $coll_name="";
3397                $subcoll_name="";
3398                $coll_issn="";
3399                $subcoll_issn="";
3400                $nocoll_ins="";
3401
3402                // Collection : traitement de 225 et 410, préférence donnée au 410
3403                if ($collection_410[0][t]) $coll_name=$collection_410[0][t];
3404                elseif ($collection_225[0][a]!="") $coll_name=$collection_225[0][a];
3405               
3406                if ($collection_410[0][x]) $coll_issn=$collection_410[0][x];
3407                elseif ($collection_225[0][x]!="") $coll_issn=$collection_225[0][x];
3408               
3409               
3410                // Sous-collection : traitement de 225$i et 411, préférence donnée au 411
3411                if ($collection_411[0][t]) $subcoll_name=$collection_411[0][t];
3412                elseif ($collection_225[0][i]!="") $subcoll_name=$collection_225[0][i];
3413               
3414                if ($collection_411[0][x]) $subcoll_issn=$collection_411[0][x];
3415
3416                // Numéro dans la collection, présent en 411$v, sinon en 410$v et enfin en 225$v
3417                if     ($collection_411[0][v]!="") $this->nbr_in_collection = $collection_411[0][v];
3418                elseif ($collection_410[0][v]!="") $this->nbr_in_collection = $collection_410[0][v];
3419                elseif ($collection_225[0][