source: pmb5.0/trunk/fuentes/pmb/admin/import/import_func.inc.php @ 6888

Last change on this file since 6888 was 6888, checked in by jrpelegrina, 19 months ago

WIP in migration 1

  • Property svn:executable set to *
File size: 103.0 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: import_func.inc.php,v 1.124.2.4 2017-11-27 16:02:13 jpermanne Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".inc.php")) die("no access");
8
9if(!isset($book_lender_id)) $book_lender_id = '';
10if(!isset($book_statut_id)) $book_statut_id = '';
11
12require_once($class_path."/serials.class.php");
13require_once($class_path."/category_auto.class.php");
14require_once($class_path."/origin.class.php");
15require_once($class_path."/notice_doublon.class.php");
16require_once($class_path."/notice_relations.class.php");
17require_once($class_path.'/audit.class.php');
18
19// templates
20$tpl_beforeupload_expl = "
21                <form class='form-$current_module' ENCTYPE=\"multipart/form-data\" METHOD=\"post\" ACTION=\"iimport_expl.php\">
22                <h3>".$msg['import_expl_form_titre']."</h3>
23                <div class='form-contenu'>
24                    <div class='row'>
25                        <div class='colonne2'>
26                            <label class='etiquette' >$msg[564]</label><br />
27                            <INPUT TYPE='radio' NAME='isbn_mandatory' id='io1' VALUE='1' CLASS='radio' /><label for='io1'> $msg[40] </label>
28                            <INPUT TYPE='radio' NAME='isbn_mandatory' id='io0' VALUE='0' CLASS='radio' checked='checked' /><label for='io0'> $msg[39] </label>
29                        </div>
30                        <div class='colonne-suite'>
31                            <label class='etiquette' >$msg[568]</label><br />
32                            <INPUT TYPE='radio' NAME='isbn_dedoublonnage' id='di1' VALUE='1' CLASS='radio' checked='checked' /><label for='di1'> $msg[40] </label>
33                            <INPUT TYPE='radio' NAME='isbn_dedoublonnage' id='di0' VALUE='0' CLASS='radio' /><label for='di0'> $msg[39] </label>
34                            <input type='checkbox' name='isbn_only' id='ionly' value='1' checked='checked' /><label for='ionly'> ".$msg["ignore_issn"]." </label>
35                       </div>
36                    </div>
37                    <div class='row'>&nbsp;</div>
38                    <div class='row'>
39                        <div class='colonne2'>
40                                <label class='etiquette' for='statutnot'>$msg[import_statutnot]</label>
41                                <div>
42                                ".gen_liste_multiple ("select id_notice_statut, gestion_libelle from notice_statut order by 2", "id_notice_statut", "gestion_libelle", "id_notice_statut", "statutnot", "", 1, "", "","","",0)."
43                                </div>
44                        </div>
45                        <div class='colonne-suite'>
46                                <label class='etiquette' >".$msg['import_genere_liens']."</label><br />
47                                <INPUT TYPE='radio' NAME='link_generate' id='link1' VALUE=' 1' CLASS='radio' onclick='param_links_display();' /><label for='link1'> $msg[40] </label>
48                            <INPUT TYPE='radio' NAME='link_generate' id='link0' VALUE='0' CLASS='radio' checked='checked' onclick='param_links_display();' /><label for='link0'> $msg[39] </label>
49                             <span id='list_param_links' style='display: none;'>
50                                        <div style='clear: both; margin-left: 50%;'>
51                                                <label class='etiquette' for='notice_replace_links'>".$msg['notice_replace_links_option_keep_title']."</label>
52                                                <br /><input type='radio' name='notice_replace_links' value='0' ".($deflt_notice_replace_links==0?"checked='checked'":"")." /> ".$msg['notice_replace_links_option_keep_all']."
53                                                                                <br /><input type='radio' name='notice_replace_links' value='1' ".($deflt_notice_replace_links==1?"checked='checked'":"")." /> ".$msg['notice_replace_links_option_keep_replacing']."
54                                                                                <br /><input type='radio' name='notice_replace_links' value='2' ".($deflt_notice_replace_links==2?"checked='checked'":"")." /> ".$msg['notice_replace_links_option_keep_replaced']."
55                                                                        </div>
56                            </span>
57                        </div>
58                    </div>
59                    <div class='row'>&nbsp;</div>
60                        <div class='row'>
61                                <div class='colonne2'>
62                                        <label class='etiquette' for='import_force_notice_is_new'>".$msg['import_force_notice_is_new']."</label>
63                                <div>
64                                        <input type='radio' name='import_force_notice_is_new' id='import_force_notice_is_new' value='0' checked='checked'> ".$msg['39']." <input type='radio' name='import_force_notice_is_new' id='import_force_notice_is_new' value='1'> ".$msg['40']."
65                                </div>
66                                </div>
67                                <div class='colonne-suite'>
68                                                        <label class='etiquette' for='authorities_notices'>".htmlentities($msg['import_with_authorities_notices'],ENT_QUOTES,$charset)."</label><br />
69                                                        <input type='radio' name='authorities_notices' id='authorities_notices1' value='1' class='radio' /><label for='authorities_notices1'>".htmlentities($msg[40],ENT_QUOTES,$charset)."</label>
70                                                        <input type='radio' name='authorities_notices' id='authorities_notices0' value='0' class='radio' checked='checked'/><label for='authorities_notices0'>".htmlentities($msg[39],ENT_QUOTES,$charset)."</label>
71                        </div>
72                        </div>
73                        <div class='row'>&nbsp;</div>
74                                <div clas='row'>
75                                        <div class='colonne2'>
76                                                &nbsp;<br />
77                                                &nbsp;
78                                        </div>
79                                        <div class='colonne-suite'>
80                                                <label class='etiquette' for='authorities_default_origin'>".htmlentities($msg['import_authorities_origin_default_value'],ENT_QUOTES,$charset)."</label><br />
81                                                                ".origin::gen_combo_box("authorities")."
82                                        </div>
83                                </div>
84                    <div class='row'><hr /></div>
85                                        <div class='row'>
86                        <label class='etiquette' for='preteur statut'>$msg[560]</label>
87                    </div>
88                    <div class='row'>".
89                        lender::gen_combo_box($book_lender_id)."&nbsp;&nbsp;".
90                        docs_statut::gen_combo_box($book_statut_id)."
91                    </div>
92                    <div class='row'>
93                        <label class='etiquette' for='localisation'>$msg[import_localisation]</label>
94                    </div>
95                    <div class='row'>".
96                        docs_location::gen_combo_box($deflt_docs_location)."
97                    </div>
98                    <div class='row'><hr /></div>
99                    <div class='row'>
100                        <label class='etiquette' for='cote_obligatoire'>$msg[566]</label>
101                    </div>
102                    <div class='row'>
103                        <INPUT TYPE='radio' NAME='cote_mandatory' id='cm1' VALUE='1' CLASS='radio' /><label for='cm1'> $msg[40] </label>
104                        <INPUT TYPE='radio' NAME='cote_mandatory' id='cm0' VALUE='0' CLASS='radio' checked='checked' /><label for='cm0'> $msg[39] </label>
105                    </div>
106                    <div class='row'><hr /></div>
107                    <div class='row'>
108                        <label class='etiquette'>$msg[17]</label>
109                    </div>
110                    <div class='row'>
111                        <INPUT TYPE='radio' NAME='tdoc_codage' id='td1' VALUE='1' CLASS='radio' /><label for='td1'> ".$msg["import_expl_codage_proprio"]."</label>
112                        <INPUT TYPE='radio' NAME='tdoc_codage' id='td0' VALUE='0' CLASS='radio' checked='checked' /><label for='td0'> ".$msg["import_expl_codage_generique"]."</label>
113                    </div>
114                    <div class='row'>
115                        <label class='etiquette'>$msg[24]</label>
116                    </div>
117                    <div class='row'>
118                        <INPUT TYPE='radio' NAME='statisdoc_codage' id='sd1' VALUE='1' CLASS='radio' /><label for='sd1'> ".$msg["import_expl_codage_proprio"]."</label>
119                        <INPUT TYPE='radio' NAME='statisdoc_codage' id='sd0' VALUE='0' CLASS='radio' checked='checked' /><label for='sd0'> ".$msg["import_expl_codage_generique"]."</label>
120                    </div>
121                    <div class='row'>
122                        <label class='etiquette'>$msg[19]</label>
123                    </div>
124                    <div class='row'>
125                        <INPUT TYPE='radio' NAME='sdoc_codage' id='sdc1' VALUE='1' CLASS='radio' /><label for='sdc1'> ".$msg["import_expl_codage_proprio"]."</label>
126                        <INPUT TYPE='radio' NAME='sdoc_codage' id='sdc0' VALUE='0' CLASS='radio' checked='checked' /><label for='sdc0'> ".$msg["import_expl_codage_generique"]."</label>
127                    </div>
128                    <div class='row'><hr /></div>
129
130                    <div class='row'>
131                        <label class='etiquette' for='txt_suite'>$msg[501]</label>
132                        </div>
133                    <div class='row'>
134                        <INPUT NAME='userfile' class='saisie-80em' TYPE='file' size='60' />
135                        <INPUT NAME=\"categ\" TYPE=\"hidden\" value=\"import\" />
136                        <INPUT NAME=\"sub\" TYPE=\"hidden\" value=\"import_expl\" />
137                        <INPUT NAME=\"action\" TYPE=\"hidden\" value=\"afterupload\" />
138                    </div>
139                    </div>
140                <INPUT TYPE='SUBMIT' class='bouton' NAME='upload' VALUE='".$msg[502]."' />
141                </FORM>
142                <script type='text/javascript'>
143                                        function param_links_display(){
144                                                if(document.getElementById('link1').checked){
145                                                        document.getElementById('list_param_links').style.display='';
146                                                } else {
147                                                        document.getElementById('list_param_links').style.display='none';
148                                                }
149                                        }
150                                </script>";
151
152$tpl_beforeupload_notices = "
153                    <form class='form-$current_module' ENCTYPE='multipart/form-data' METHOD='post' ACTION='iimport_expl.php' />
154                    <h3>".$msg['import_noti_form_titre']."</h3>
155                    <div class='form-contenu'>
156                    <div class='row'>
157                        <div class='colonne2'>
158                            <label class='etiquette' for='isbn_obligatoire'>$msg[564]</label><br />
159                            <INPUT TYPE='radio' NAME='isbn_mandatory' id='io1' VALUE='1' CLASS='radio' /><label for='io1'> $msg[40] </label>
160                            <INPUT TYPE='radio' NAME='isbn_mandatory' id='io0' VALUE='0' CLASS='radio' checked='checked' /><label for='io0'> $msg[39] </label>
161                            </div>
162                        <div class='colonne-suite'>
163                            <label class='etiquette' for='isbn_dedoublonnage'>$msg[568]</label><br />
164                            <INPUT TYPE='radio' NAME='isbn_dedoublonnage' id='di1' VALUE='1' CLASS='radio' checked='checked' /><label for='di1'> $msg[40] </label>
165                            <INPUT TYPE='radio' NAME='isbn_dedoublonnage' id='di0' VALUE='0' CLASS='radio' /><label for='di0'> $msg[39] </label>
166                            <input type='checkbox' name='isbn_only' id='ionly' value='1' /><label for='ionly'> ".$msg["ignore_issn"]." </label>
167                            </div>
168                        </div>
169                        <div class='row'>&nbsp;</div>
170                                                <div class='row'>
171                                <div class='colonne2'>
172                                        <label class='etiquette' for='statutnot'>$msg[import_statutnot]</label>
173                                        <div>
174                                        ".gen_liste_multiple ("select id_notice_statut, gestion_libelle from notice_statut order by 2", "id_notice_statut", "gestion_libelle", "id_notice_statut", "statutnot", "", 1, "", "","","",0)."
175                                        </div>
176                                </div>
177                                <div class='colonne-suite'>
178                                        <label class='etiquette' for='generer_lien'>".$msg['import_genere_liens']."</label><br />
179                                        <INPUT TYPE='radio' NAME='link_generate' id='link1' VALUE='1' CLASS='radio' onclick='param_links_display();' /><label for='link1'> $msg[40] </label>
180                                    <INPUT TYPE='radio' NAME='link_generate' id='link0' VALUE='0' CLASS='radio' checked='checked' onclick='param_links_display();' /><label for='link0'> $msg[39] </label>
181                                    <span id='list_param_links' style='display: none;'>
182                                        <div style='clear: both; margin-left: 50%;'>
183                                                <label class='etiquette' for='notice_replace_links'>".$msg['notice_replace_links_option_keep_title']."</label>
184                                                <br /><input type='radio' name='notice_replace_links' value='0' ".($deflt_notice_replace_links==0?"checked='checked'":"")." /> ".$msg['notice_replace_links_option_keep_all']."
185                                                                                <br /><input type='radio' name='notice_replace_links' value='1' ".($deflt_notice_replace_links==1?"checked='checked'":"")." /> ".$msg['notice_replace_links_option_keep_replacing']."
186                                                                                <br /><input type='radio' name='notice_replace_links' value='2' ".($deflt_notice_replace_links==2?"checked='checked'":"")." /> ".$msg['notice_replace_links_option_keep_replaced']."
187                                                                        </div>
188                                    </span>
189                                </div>
190                                </div>
191                                <div class='row'>&nbsp;</div>
192                                <div class='row'>
193                                        <div class='colonne2'>
194                                                <label class='etiquette' for='import_force_notice_is_new'>".$msg['import_force_notice_is_new']."</label>
195                                        <div>
196                                                <input type='radio' name='import_force_notice_is_new' id='import_force_notice_is_new' value='0' checked='checked'> ".$msg['39']." <input type='radio' name='import_force_notice_is_new' id='import_force_notice_is_new' value='1'> ".$msg['40']."
197                                        </div>
198                                        </div>
199                                        <div class='colonne-suite'>
200                                                                <label class='etiquette' for='authorities_notices'>".htmlentities($msg['import_with_authorities_notices'],ENT_QUOTES,$charset)."</label><br />
201                                                                <input type='radio' name='authorities_notices' id='authorities_notices1' value='1' class='radio' /><label for='authorities_notices1'>".htmlentities($msg[40],ENT_QUOTES,$charset)."</label>
202                                                                <input type='radio' name='authorities_notices' id='authorities_notices0' value='0' class='radio' checked='checked'/><label for='authorities_notices0'>".htmlentities($msg[39],ENT_QUOTES,$charset)."</label>
203                                        </div>
204                                </div>
205                                <div class='row'>&nbsp;</div>
206                                <div clas='row'>
207                                        <div class='colonne2'>
208                                                &nbsp;<br />
209                                                &nbsp;
210                                        </div>
211                                        <div class='colonne-suite'>
212                                                <label class='etiquette' for='authorities_default_origin'>".htmlentities($msg['import_authorities_origin_default_value'],ENT_QUOTES,$charset)."</label><br />
213                                                                ".origin::gen_combo_box("authorities","authorities_default_origin")."
214                                        </div>
215                                </div>
216                            <div class='row'>&nbsp;</div>
217                        <div class='row'>
218                            <label class='etiquette' for='txt_suite'>$msg[501]</label>
219                            </div>
220                        <div class='row'>
221                            <INPUT NAME='userfile' class='saisie-80em' TYPE='file' size='60' />
222                            <INPUT NAME='categ' TYPE='hidden' value='import' />
223                            <INPUT NAME='sub' TYPE='hidden' value='import' />
224                            <INPUT NAME='action' TYPE='hidden' value='afterupload' />
225                            </div>
226                        </div>
227                    <INPUT TYPE='SUBMIT' class='bouton' NAME='upload' VALUE='".$msg[502]."' />
228                    </FORM>
229                    <script type='text/javascript'>
230                                                function param_links_display(){
231                                                        if(document.getElementById('link1').checked){
232                                                                document.getElementById('list_param_links').style.display='';
233                                                        } else {
234                                                                document.getElementById('list_param_links').style.display='none';
235                                                        }
236                                                }
237                                        </script>";
238
239//------------------------------------- LLIUREX 22/02/2018 ----------------------------------
240$tpl_beforeupload_reb = "
241                    <form class='form-$current_module' ENCTYPE='multipart/form-data' METHOD='post' ACTION='iimport_expl.php' />
242                    <h3>".$msg['import_reb_form_titre']."</h3>
243                    <div class='form-contenu'>
244                        <div class='row'>
245                            <label class='etiquette' for='txt_suite'>".$msg['import_reb_form_file']."</label>
246                            </div>
247                        <div class='row'>
248                            <INPUT NAME='userfile' class='bouton' TYPE='file' size='60'>
249                            <INPUT NAME='categ' TYPE='hidden' value='import'>
250                            <INPUT NAME='sub' TYPE='hidden' value='import_reb'>
251                            <INPUT NAME='action' TYPE='hidden' value='afterupload'>
252                            </div>
253                        </div>
254                    <INPUT TYPE='SUBMIT' class='bouton' NAME='upload' VALUE='".$msg[502]."' />
255                    </FORM>
256                    <script type='text/javascript'>
257            function param_links_display(){
258              if(document.getElementById('link1').checked){
259                document.getElementById('list_param_links').style.display='';
260              } else {
261                document.getElementById('list_param_links').style.display='none';
262              }
263            }
264          </script>";
265
266
267//----------------------------- FIN LLIUREX 22/02/2018-------------------------------
268// PRELOAD
269function loadfile_in_table () {
270        global $msg ;
271        global $sub, $book_lender_name ;
272        global $noticenumber, $filename, $from_file, $pb_fini, $recharge ;
273        global $pmb_import_limit_read_file ;
274
275  //------------------------------ LLIUREX 22/02/2018---------------------------------
276//en principio parece que no le hace falta, pero lo dejo comentado porque puede servir de referencia para futuras modificaciones
277//  if ((stripos($filename, "/temp/"))==false){
278//  $filename="../../temp/".$filename;
279//}
280//------------------------------FIN LLIUREX 22/02/2018 ------------------------------
281
282
283        if ($noticenumber=="") $noticenumber=0;
284
285        if (!file_exists($filename)) {
286                printf ($msg[506],$from_file); /* The file %s doesn't exist... */
287                return;
288        }
289
290        if (filesize($filename)==0) {
291                printf ($msg[507],$from_file); /* The file % is empty, it's going to be deleted */
292                unlink ($filename);
293                return;
294        }
295
296        $handle = fopen ($filename, "rb");
297        if (!$handle) {
298                printf ($msg[508],$from_file); /* Unable to open the file %s ... */
299                return;
300        }
301
302        if ($sub=="import_expl") {
303                printf ($msg[509], $from_file) ;
304                printf ($msg[511], "\"".$book_lender_name."\"") ;
305        }
306
307        $file_size=filesize ($filename);
308
309        $contents = fread ($handle, $file_size);
310        fclose ($handle);
311
312        /* First load of the shot, let's empty the import table */
313        if ($recharge=="") {
314                $sql = "DELETE FROM import_marc WHERE origine='".addslashes(SESSid)."' ";
315                $sql_result = pmb_mysql_query($sql) or die ("Couldn't delete import table !");
316                $sql = "DELETE FROM error_log WHERE error_origin LIKE '%_".addslashes(SESSid).".%' ";
317                $sql_result = pmb_mysql_query($sql) or die ("Couldn't delete error_log table !");
318        }
319
320        /* The whole file is in $contents, let's read it */
321        $str_lu="";
322        $j=0;
323        $i=0;
324        $pb_fini="";
325        $txt="";
326        $ascii_cursor_left = chr(0x1d);
327        $contents_len = strlen($contents);
328        while ( ($i<=$contents_len) && ($pb_fini=="") ) {
329                $car_lu=substr($contents,$i,1) ;
330                $i++;
331                if ($i<=$contents_len) {
332                        if ($car_lu != $ascii_cursor_left) {
333                                /* the read car isn't the end of the notice */
334                                $str_lu = $str_lu.$car_lu;
335                        } else {
336                                /* the read car is the end of a notice */
337                                $str_lu = $str_lu.$car_lu;
338                                $j++;
339                                $sql = "INSERT INTO import_marc (notice,origine) VALUES('".addslashes($str_lu)."','".addslashes(SESSid)."')";
340                                $sql_result = pmb_mysql_query($sql)
341                                        or die ("Couldn't insert record!");
342                                if ($j>=$pmb_import_limit_read_file && $i<$contents_len) {
343                                        /* let's rewrite the file with the remaing string  */
344                                        $handle = fopen ($filename, "wb");
345                                        fwrite ($handle, substr($contents,$i, $file_size-$i));
346                                        fclose ($handle);
347                                        printf (" ".$msg[510], ($file_size-$i)) ;
348                                        $pb_fini="NOTEOF";
349                                } else if ($j>=$pmb_import_limit_read_file && $i>=$contents_len){
350                                        $pb_fini = "EOF";
351                                }
352                                $str_lu="";
353                        }
354                } else { /* the wole file has been read */
355                        $pb_fini="EOF";
356                }
357        } /* end while red file */
358
359        if ($pb_fini=="NOTEOF") $recharge="YES"; else $recharge="NO" ;
360        if ($pb_fini=="EOF") { /* The file has been read, we can delete it */
361                unlink ($filename);
362        }
363} // fin fonction de load
364
365
366function recup_noticeunimarc($notice) {
367
368        global $id_unimarc;
369        global $doc_type                ;
370        global $hierarchic_level;
371        global $bibliographic_level     ;
372        global $bibliographic_level_origine;
373        global $hierarchic_level_origine;
374        global $isbn                    ;
375        global $issn_011                ;
376        global $prix                    ;
377        global $prix_cd                 ;
378        global $cb                              ;
379        global $lang_code               ;
380        global $org_lang_code   ;
381        global $tit_200a                ;
382        global $tit_200c                ;
383        global $tit_200d                ;
384        global $tit_200e                ;
385        global $tit_200v                ;
386        global $serie_200               ;
387        global $editeur_lieu    ;
388        global $editeur_adr     ;
389        global $editeur_nom             ;
390        global $editeur_date    ;
391        global $editeur_pays    ;
392        global $editeur_pmbfields       ;
393        global $no_edition              ;
394        global $npages                  ;
395        global $ill                             ;
396        global $size                    ;
397        global $accomp                  ;
398        global $collection_225  ;
399        global $n_contenu               ;
400        global $n_resume                ;
401        global $n_gen                   ;
402        global $EAN                             ;
403        global $collection_410  ;
404        global $collection_411  ;
405        global $serie                   ;
406        global $index_sujets    ;
407        global $dewey                   ;
408        global $dewey_l                 ;
409        global $tu_500                  ;
410        global $tu_500_r                ;
411        global $tu_500_s                ;
412        global $tu_500_j                ;
413        global $aut_700                 ;
414        global $aut_701                 ;
415        global $aut_702                 ;
416        global $aut_710                 ;
417        global $aut_711                 ;
418        global $aut_712                 ;
419        global $origine_notice  ;
420        global $lien, $eformat  ;
421        global $info_995                ;
422        global $info_996                ;
423        global $info_852                ;
424        global $analytique              ;
425
426        global $info_600_a, $info_600_j, $info_600_x, $info_600_y, $info_600_z ;
427        global $info_601_a, $info_601_j, $info_601_x, $info_601_y, $info_601_z ;
428        global $info_602_a, $info_602_j, $info_602_x, $info_602_y, $info_602_z ;
429        global $info_605_a, $info_605_j, $info_605_x, $info_605_y, $info_605_z ;
430        global $info_606_a, $info_606_j, $info_606_x, $info_606_y, $info_606_z ;
431        global $info_607_a, $info_607_j, $info_607_x, $info_607_y, $info_607_z ;
432
433        global $info_686;
434        global $indicateur;
435        global $link_generate;
436        $id_import=array();
437        $id_unimarc='';
438        $indicateur=array();
439        $doc_type               = "";
440        $hierarchic_level       = '0';
441        $bibliographic_level    = 'm';
442        $isbn                   = array();
443        $issn_011               = array();
444        $prix                   = array();
445        $prix_cd                = array();
446        $cb                             = "";
447        $lang_code              = array();
448        $org_lang_code  = array();
449        $tit_200a               = array();
450        $tit_200c               = array();
451        $tit_200d               = array();
452        $tit_200e               = array();
453        $tit_200v               = array();
454        $serie_200              = array();
455        $editeur_lieu   = array();
456        $editeur_adr    = array();
457        $editeur_nom    = array();
458        $editeur_date   = array();
459        $editeur_pays   = array();
460        $editeur_pmbfields      = array();
461        $npages                 = array();
462        $no_edition             = array();
463        $ill                    = array();
464        $size                   = array();
465        $accomp                 = array();
466        $collection_225 = array();
467        $collection_410 = array();
468        $collection_411 = array();
469        $n_contenu              = array();
470        $n_resume               = array();
471        $n_gen                  = array();
472        $EAN                    = array();
473        $serie                  = array();
474        $index_sujets   = array();
475        $dewey                  = array();
476        $dewey_l                = array();
477        $tu_500                 = array();
478        $tu_500_r               = array();
479        $tu_500_s               = array();
480        $tu_500_j               = array();
481        $aut_700                = array();
482        $aut_701                = array();
483        $aut_702                = array();
484        $aut_710                = array();
485        $aut_711                = array();
486        $aut_712                = array();
487        $origine_notice = array() ;
488        $lien                   = array();
489        $eformat                = array();
490        $info_995               = array();
491        $info_852               = array();
492        $analytique     = array() ;
493
494        $info_600_a = array();
495        $info_600_j = array();
496        $info_600_x = array();
497        $info_600_y = array();
498        $info_600_z  = array();
499
500        $info_601_a = array();
501        $info_601_j = array();
502        $info_601_x = array();
503        $info_601_y = array();
504        $info_601_z  = array();
505
506        $info_602_a = array();
507        $info_602_j = array();
508        $info_602_x = array();
509        $info_602_y = array();
510        $info_602_z  = array();
511
512        $info_605_a = array();
513        $info_605_j = array();
514        $info_605_x = array();
515        $info_605_y = array();
516        $info_605_z  = array();
517
518        $info_606_a = array();
519        $info_606_j = array();
520        $info_606_x = array();
521        $info_606_y = array();
522        $info_606_z  = array();
523
524        $info_607_a = array();
525        $info_607_j = array();
526        $info_607_x = array();
527        $info_607_y = array();
528        $info_607_z  = array();
529
530        $info_686 = array();
531        $info_996 = array();
532
533        $record = new iso2709_record($notice, AUTO_UPDATE);
534        if(!$record->valid("import_notice")){
535                // On ne traite pas les notices invalides
536                /*echo "<pre>";
537                print_r($record->inner_data);
538                echo "</pre>";
539                die();*/
540                $num_notice=$record->get_subfield("001");
541                $titr=$record->get_subfield_array("200", 'a');
542                $requete="insert into error_log(error_origin,error_text) values('import_func_".addslashes(SESSid).".inc.php','".addslashes("La notice (numéro : ".$num_notice[0].", titre : ".$titr[0].") n'a pas été reprise. <BR/><span style='color:#FF0000'>Erreur(s):".implode("<BR/>",$record->errors)."</span>")."')";
543                pmb_mysql_query($requete);
544                return false;
545        }
546        $doc_type=$record->inner_guide['dt'];
547
548        $bibliographic_level_origine=$record->inner_guide['bl'];
549        $hierarchic_level_origine=$record->inner_guide['hl'];
550
551        // traitements particuliers, solution d'urgence pour les pério et autres.
552        if($link_generate){
553                //Si on choisit d'importer les liens on reprend le niveau
554                        switch ($bibliographic_level_origine) {
555                        case 'a':
556                                $hierarchic_level = '2';
557                                $bibliographic_level = 'a';
558                                break;
559                        case 's':
560                                if($hierarchic_level_origine <= '1'){
561                                        $hierarchic_level = '1';
562                                        $bibliographic_level = 's';
563                                } else {
564                                        $hierarchic_level = '2';
565                                        $bibliographic_level = 'b';
566                                }
567                                break;
568                        case 'm':
569                        case 'c':
570                        default :
571                                // suite à pb d'export Orphée : si inconnu, non conforme, on force à 0 et m
572                                $hierarchic_level = '0';
573                                $bibliographic_level = 'm';
574                                break;
575                }
576        }else{
577                //Sinon on reprend tous en temps que monographie
578                $hierarchic_level = '0';
579                $bibliographic_level = 'm';
580        }
581
582
583        for ($i=0;$i<count($record->inner_directory);$i++) {
584                $cle=$record->inner_directory[$i]['label'];
585                //$length=$record->inner_directory[$i]['length'];
586                //$adress=$record->inner_directory[$i]['adress'];
587                $flag_cle=0;
588                if(!array_key_exists($cle,$indicateur)) {
589                        $flag_cle=1;
590                }
591                // memo indicateur de champ
592                $indicateur[$cle][]=substr($record->inner_data[$i]['content'],0,2);
593                if($flag_cle) {
594                        switch($cle) {
595                                case "001" :
596                                        $id_import=$record->get_subfield($cle);
597                                        $id_unimarc = $id_import[0];
598                                        break;
599                                case "010": /* isbn */
600                                        $isbn=$record->get_subfield($cle,'a');
601                                        $prix=$record->get_subfield($cle,'d');
602                                        break;
603                                case "011": /* issn_011 */
604                                        $issn_011=$record->get_subfield($cle,'a');
605                                        break;
606                                case "071": /* barcode */
607                                        $cb=$record->get_subfield($cle,"a");
608                                        break;
609                                case "101": /* language */
610                                        $lang_code=$record->get_subfield_array($cle,"a");
611                                        $org_lang_code=$record->get_subfield_array($cle,"c");
612                                        break;
613                                case "200": /* titles */
614                                        $tit_200a=$record->get_subfield_array($cle, 'a');
615                                        $tit_200c=$record->get_subfield_array($cle, 'c');
616                                        $tit_200d=$record->get_subfield_array($cle, 'd');
617                                        $tit_200e=$record->get_subfield_array($cle, 'e');
618                                        $tit_200v=$record->get_subfield_array($cle, 'v');
619                                        $serie_200=$record->get_subfield($cle,"h","i");
620                                        break;
621                                case "205": /* no_edition */
622                                        $no_edition=$record->get_subfield_array($cle,"a");
623                                        break;
624                                case "210": /* publisher */ // b: adr
625                                        $editeur_lieu=$record->get_subfield_array_array($cle, "a");
626                                        $editeur_adr=$record->get_subfield_array_array($cle, "b");
627                                        $editeur_nom=$record->get_subfield_array_array($cle, "c");
628                                        $editeur_date=$record->get_subfield_array($cle, "d");
629                                        $editeur_pays=$record->get_subfield_array_array($cle, "z");
630                                        $editeur_pmbfields=$record->get_subfield_array_array($cle, "9");
631                                        break;
632                                case "215": /* description */
633                                        $npages=$record->get_subfield_array($cle,"a");
634                                        $ill=$record->get_subfield_array($cle,"c");
635                                        $size=$record->get_subfield_array($cle,"d");
636                                        $accomp=$record->get_subfield_array($cle,"e");
637                                        break;
638                                case "225": /* collection */
639                                        $collection_225=$record->get_subfield($cle,"a","i","v","x");
640                                        break;
641                                case "300": /* inside */
642                                        $n_gen=$record->get_subfield_array($cle,"a");
643                                        break;
644                                case "327": /* inside */
645                                        $n_contenu=$record->get_subfield_array($cle,"a");
646                                        break;
647                                case "330": /* abstract */
648                                        $n_resume=$record->get_subfield_array($cle,"a");
649                                        break;
650                                case "345": /* EAN */
651                                        $EAN=$record->get_subfield($cle,"b");
652                                        $prix_cd=$record->get_subfield($cle,"d");
653                                        break;
654                                case "410": /* collection */
655                                        $collection_410=$record->get_subfield($cle,"v","t","x","3");
656                                        break;
657                                case "411": /* sub-collection */
658                                        $collection_411=$record->get_subfield($cle,"v","t","x","3");
659                                        break;
660                                case "461": /* series */
661                                        $serie=$record->get_subfield($cle,"t","v");
662                                        break;
663                                case "464": /* analytique */
664                                        // $a pour le tout-venant le reste pour les périodiques bretons ! C'est un periodique donc un depouillement ou une notice objet
665                                        $analytique=$record->get_subfield_array_array($cle);
666                                        $info_464=$record->get_subfield($cle,"t","v","p","d","z","e");
667                                        break;
668                                case "500": // titres uniformes
669                                        $tu_500=$record->get_subfield($cle,"a","i","k","l","m","n","q","u","w","3");
670                                        $tu_500_r=$record->get_subfield_array_array($cle,"r");
671                                        $tu_500_s=$record->get_subfield_array_array($cle,"s");
672                                        $tu_500_j=$record->get_subfield_array_array($cle,"j");
673                                        break;
674                                case "600": // 600 PERSONAL NAME USED AS SUBJECT
675                                        $info_600_a=$record->get_subfield_array_array($cle,"a");
676                                        $info_600_j=$record->get_subfield_array_array($cle,"j");
677                                        $info_600_x=$record->get_subfield_array_array($cle,"x");
678                                        $info_600_y=$record->get_subfield_array_array($cle,"y");
679                                        $info_600_z=$record->get_subfield_array_array($cle,"z");
680                                        break;
681                                case "601": // 601 CORPORATE BODY NAME USED AS SUBJECT
682                                        $info_601_a=$record->get_subfield_array_array($cle,"a");
683                                        $info_601_j=$record->get_subfield_array_array($cle,"j");
684                                        $info_601_x=$record->get_subfield_array_array($cle,"x");
685                                        $info_601_y=$record->get_subfield_array_array($cle,"y");
686                                        $info_601_z=$record->get_subfield_array_array($cle,"z");
687                                        break;
688                                case "602": // 602 FAMILY NAME USED AS SUBJECT
689                                        $info_602_a=$record->get_subfield_array_array($cle,"a");
690                                        $info_602_j=$record->get_subfield_array_array($cle,"j");
691                                        $info_602_x=$record->get_subfield_array_array($cle,"x");
692                                        $info_602_y=$record->get_subfield_array_array($cle,"y");
693                                        $info_602_z=$record->get_subfield_array_array($cle,"z");
694                                        break;
695                                case "605": // 605 TITLE USED AS SUBJECT
696                                        $info_605_a=$record->get_subfield_array_array($cle,"a");
697                                        $info_605_j=$record->get_subfield_array_array($cle,"j");
698                                        $info_605_x=$record->get_subfield_array_array($cle,"x");
699                                        $info_605_y=$record->get_subfield_array_array($cle,"y");
700                                        $info_605_z=$record->get_subfield_array_array($cle,"z");
701                                        break;
702                                case "606": // RAMEAU / TOPICAL NAME USED AS SUBJECT
703                                        $info_606_a=$record->get_subfield_array_array($cle,"a");
704                                        $info_606_j=$record->get_subfield_array_array($cle,"j");
705                                        $info_606_x=$record->get_subfield_array_array($cle,"x");
706                                        $info_606_y=$record->get_subfield_array_array($cle,"y");
707                                        $info_606_z=$record->get_subfield_array_array($cle,"z");
708                                        break;
709                                case "607": // 607 GEOGRAPHICAL NAME USED AS SUBJECT
710                                        $info_607_a=$record->get_subfield_array_array($cle,"a");
711                                        $info_607_j=$record->get_subfield_array_array($cle,"j");
712                                        $info_607_x=$record->get_subfield_array_array($cle,"x");
713                                        $info_607_y=$record->get_subfield_array_array($cle,"y");
714                                        $info_607_z=$record->get_subfield_array_array($cle,"z");
715                                        break;
716                                case "610": /* mots clé */
717                                        $index_sujets=$record->get_subfield_array($cle,"a");
718                                        break;
719                                case "676": /* Dewey */
720                                        $dewey=$record->get_subfield_array($cle,"a");
721                                        $dewey_l=$record->get_subfield_array($cle,"l");
722                                        $dewey_num=$record->get_subfield_array($cle,"l","3");
723                                        break;
724                                case "686": /* pcdm3 */
725                                        $info_686=$record->get_subfield($cle,"a","l","3");
726                                        break;
727                                case "700":
728                                        $aut_700=$record->get_subfield($cle,"a","b","c","d","4","f","N","3");
729                                        break;
730                                case "701":
731                                        $aut_701=$record->get_subfield($cle,"a","b","c","d","4","f","N","3");
732                                        break;
733                                case "702":
734                                        $aut_702=$record->get_subfield($cle,"a","b","c","d","4","f","N","3");
735                                        break;
736                                case "710":
737                                        $aut_710=$record->get_subfield($cle,"a","b","c","g","d","4","f","e","k","l","m","n","3");
738                                        break;
739                                case "711":
740                                        $aut_711=$record->get_subfield($cle,"a","b","c","g","d","4","f","e","k","l","m","n","3");
741                                        break;
742                                case "712":
743                                        $aut_712=$record->get_subfield($cle,"a","b","c","g","d","4","f","e","k","l","m","n","3");
744                                        break;
745                                case "801": /* origine du catalogage */
746                                        $origine_notice=$record->get_subfield($cle,"a","b");
747                                        break;
748                                case "852": /* infos du SCD de Lyon 3 */
749                                        $info_852=$record->get_subfield($cle, "b", "h", "p", "y");
750                                        break;
751                                case "856": /* url */
752                                        $lien=$record->get_subfield($cle,"u");
753                                        $eformat=$record->get_subfield($cle,"q");
754                                        break;
755                                case "995": /* infos de la BDP */
756                                        $info_995=$record->get_subfield($cle, "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z", "0","1","2","3","4","5","6","7","8","9","A","B","C","D","M","N","O","P","R","S","T","U","V","W","Z");
757                                        break;
758                                case "996": /* infos supplémentaires... ? */
759                                        $info_996=$record->get_subfield($cle, "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z", "0","1","2","3","4","5","6","7","8","9","A","B","C","D","M","N","O","P","R","S","T","U","V","W","Z");
760                                        break;
761                                default:
762                                        break;
763
764                        } /* end of switch */
765                }
766        } /* end of for */
767
768        //Récupération des catégories en lien avec le fichier xml
769        category_auto::get_info_categ($record);
770
771
772        return true ;
773
774} // fin recup_noticeunimarc = fin récupération des variables lues dans la notice UNIMARC
775
776
777/*
778 *  Récupération des liens des notices
779 */
780function recup_noticeunimarc_link($notice){
781        global $notices_liees, $titre_ppal_200, $titre_perio_530a, $champ_210 ;
782
783        $record = new iso2709_record($notice,AUTO_UPDATE);
784        $titre_ppal_200 = $record->get_subfield('200','a','h','i');
785        $champ_210 = $record->get_subfield('210','d','h');
786        $titre_perio_530a = $record->get_subfield('530','a');
787        $notices_liees=$record->get_all_fields('4..');
788}
789
790/*
791 * Import d'une nouvelle notice
792 */
793function import_new_notice() {
794
795        global $dbh ;
796        global $notice_id ;
797        global $bulletin_ex;//Identifiant du bulletin
798        $bulletin_ex=0;
799        global $id_unimarc;
800        global $notices_crees;
801        global $bulletins_crees;
802        global $notices_a_creer;
803        global $bulletins_a_creer;
804        global $base_path;
805        global $pmb_keyword_sep;
806        global $link_generate;
807        global $doc_type                ;
808        global $hierarchic_level        ;
809        global $bibliographic_level     ;
810        global $isbn_OK                 ;
811        global $prix                    ;
812        global $prix_cd                 ;
813        global $cb                              ;
814        global $tit_200a                ;
815        global $tit_200c                ;
816        global $tit_200d                ;
817        global $tit_200e                ;
818        global $tit_200v                ;
819        global $serie_200               ;
820        global $editor                  ;
821        global $editeur_lieu    ;
822        global $editeur_adr     ;
823        global $editeur_nom             ;
824        global $editeur_date    ;
825        global $editeur_pays    ;
826        global $editeur_pmbfields       ;
827        global $no_edition              ;
828        global $npages                  ;
829        global $ill                             ;
830        global $size                    ;
831        global $accomp                  ;
832        global $collection_225  ;
833        global $n_contenu               ;
834        global $n_resume                ;
835        global $n_gen                   ;
836        global $EAN                             ;
837        global $collection_410  ;
838        global $collection_411  ;
839        global $tu_500          ;
840        global $tu_500_r                ;
841        global $tu_500_s                ;
842        global $tu_500_j                ;
843        global $serie                   ;
844        global $index_sujets    ;
845        global $dewey                   ;
846        global $dewey_l                 ;
847        global $aut_700                 ;
848        global $aut_701                 ;
849        global $aut_702                 ;
850        global $aut_710                 ;
851        global $aut_711                 ;
852        global $aut_712                 ;
853        global $origine_notice  ;
854        global $lien                    ;
855        global $eformat                 ;
856        global $analytique              ;
857        global $statutnot               ;
858        global $indicateur;
859        global $add_explnum;
860        global $info_686;
861
862        global $authorities_notices;
863        global $authorities_default_origin;
864
865        global $import_force_notice_is_new;
866       
867        global $notice_replace_links;
868
869        $origin_authority= $authorities_default_origin;
870        $add_explnum=FALSE;
871        /* traitement des éditeurs */
872        $coll_id=0;
873        $subcoll_id=0;
874        $serie_id=0;
875        $tnvol_ins="";
876        $ed1_id=0;
877        $ed2_id=0;
878        $year="";
879        $date_parution="0000-00-00";
880
881        //On récupère le tableau des notices créées à partir du fichier temporaire (rechargement d'iframe)
882        if($link_generate && !isset($notices_crees)){
883                $tabimport_id= file_get_contents("$base_path/temp/liste_id".SESSid.".txt");
884                if($tabimport_id){
885                        $tabimport_id = unserialize($tabimport_id);
886                        $notices_crees = $tabimport_id['notices_existantes'];
887            $notices_a_creer = $tabimport_id['notices_a_creer'];
888            $bulletins_crees = $tabimport_id['bulletins_crees'];
889            $bulletins_a_creer = $tabimport_id['bulletins_a_creer'];
890                }
891        }
892
893        if(!is_array($notices_crees)) $notices_crees = array();
894
895        //Pour le cas ou on est sur une notice (bidon) d'article juste pour les exemplaires de bulletin
896        if($bibliographic_level == "a" && isset($tit_200d[0]) && $tit_200d[0] == "Article_expl_bulletin"){
897                //On importe rien
898                return;
899        }elseif(isset($tit_200d[0]) && $tit_200d[0] == "Article_expl_bulletin"){
900                //Pour le cas ou on import sans les liens un fichier exporter avec les exemplaires et les liens
901                $tit_200d[0]="";
902        }
903
904        if($bibliographic_level != "a" && $bibliographic_level != "b"){
905                //Pour les articles et les bulletins on ne garde pas les informations suivantes
906                $year = (isset($editeur_date[0]) ? clean_string($editeur_date[0]) : '');
907                $date_parution=notice::get_date_parution($year);
908
909                //traitement des éditeurs
910                $editor=array();
911                foreach ( $editeur_nom as $key_nom1 => $nom1 ) {
912                foreach ( $nom1 as $key_nom2 => $nom2 ) {
913                        $mon_ed=array();
914                        $mon_ed["c"]=$nom2;
915
916                        if(isset($editeur_adr[$key_nom1][$key_nom2])){
917                                $mon_ed["b"]=$editeur_adr[$key_nom1][$key_nom2];
918                        }
919
920                        if(isset($editeur_lieu[$key_nom1][$key_nom2])){
921                                $mon_ed["a"]=$editeur_lieu[$key_nom1][$key_nom2];
922                        }
923
924                        if(isset($editeur_pays[$key_nom1][$key_nom2])){
925                                $mon_ed["z"]=$editeur_pays[$key_nom1][$key_nom2];
926                        }
927                        if($editeur_pmbfields[$key_nom1][$key_nom2]){//Si j'ai ces informations c'est un export PMB donc je n'ai pas deux editeurs dans le même 210
928                                foreach ( $editeur_pmbfields[$key_nom1] as $val9 ) {
929                                        if(preg_match("/^(.+?):(.+)$/",$val9,$matches)){
930                                                $mon_ed[trim($matches[1])]=$matches[2];
931                                        }
932                                        }
933                        }
934                        $editor[]=$mon_ed;
935                        }
936                }
937                $ed=array();
938                $ed['name'] = (isset($editor[0]['c']) ? clean_string($editor[0]['c']) : '');
939                $ed['adr'] = (isset($editor[0]['b']) ? clean_string($editor[0]['b']) : '');
940                if(isset($editor[0]['adr1']) && $editor[0]['adr1'])$ed['adr']=clean_string($editor[0]['adr1']);//Si cela vient de PMB dans $b j'ai un concat
941                $ed['ville'] = (isset($editor[0]['a']) ? clean_string($editor[0]['a']) : '');
942                $ed['adr2'] = (isset($editor[0]['adr2']) ? clean_string($editor[0]['adr2']) : '');
943                $ed['cp'] = (isset($editor[0]['cp']) ? clean_string($editor[0]['cp']) : '');
944                $ed['pays'] = (isset($editor[0]['z']) ? clean_string($editor[0]['z']) : '');
945                $ed['web'] = (isset($editor[0]['web']) ? clean_string($editor[0]['web']) : '');
946                $ed['ed_comment'] = (isset($editor[0]['comment']) ? clean_string($editor[0]['comment']) : '');
947                $ed1_id = editeur::import($ed);
948                $ed=array();
949                $ed['name'] = (isset($editor[1]['c']) ? clean_string($editor[1]['c']) : '');
950                $ed['adr'] = (isset($editor[1]['b']) ? clean_string($editor[1]['b']) : '');
951                if(isset($editor[1]['adr1']) && $editor[1]['adr1'])$ed['adr']=clean_string($editor[1]['adr1']);//Si cela vient de PMB dans $b j'ai un concat
952                $ed['ville'] = (isset($editor[1]['a']) ? clean_string($editor[1]['a']) : '');
953                $ed['adr2'] = (isset($editor[1]['adr2']) ? clean_string($editor[1]['adr2']) : '');
954                $ed['cp'] = (isset($editor[1]['cp']) ? clean_string($editor[1]['cp']) : '');
955                $ed['pays'] = (isset($editor[1]['z']) ? clean_string($editor[1]['z']) : '');
956                $ed['web'] = (isset($editor[1]['web']) ? clean_string($editor[1]['web']) : '');
957                $ed['ed_comment'] = (isset($editor[1]['comment']) ? clean_string($editor[1]['comment']) : '');
958                $ed2_id = editeur::import($ed);
959                if($bibliographic_level != "s"){
960                        //Pour les periodiques on ne garde pas les informations suivantes
961                        /* traitement des collections */
962                        $coll_name="";
963                        $subcoll_name="";
964                        $coll_issn="";
965                        $coll_aut_number="";
966                        $subcoll_issn="";
967                        $subcoll_aut_number="";
968                        $nocoll_ins="";
969                        /* traitement de 225$a, si rien alors 410$t pour la collection */
970                        if (isset($collection_225[0]['a']) && $collection_225[0]['a']!="") {
971                                $coll_name=$collection_225[0]['a'];
972                                $coll_issn=$collection_225[0]['x'];
973                        } elseif (isset($collection_410[0]['t']) && $collection_410[0]['t']!="") {
974                                $coll_name=$collection_410[0]['t'];
975                                $coll_issn=$collection_410[0]['x'];
976                                $coll_aut_number = $collection_410[0]['3'];
977                        }
978                        /* traitement de 225$i, si rien alors 411$t pour la sous-collection */
979                        if (isset($collection_225[0]['i']) && $collection_225[0]['i']!="") {
980                                $subcoll_name=$collection_225[0]['i'];
981                                $subcoll_issn=$collection_225[1]['x'];
982                        } elseif (isset($collection_411[0]['t']) && $collection_411[0]['t']!="") {
983                                        $subcoll_name=$collection_411[0]['t'];
984                                        $subcoll_issn=$collection_411[0]['x'];
985                                        $coll_aut_number = $collection_411[0]['3'];
986                        }
987                        /* gaffe au nocoll, en principe en 225$v selon FL  sinon en 410$v ou 411$v*/
988                        if (isset($collection_225[0]['v']) && $collection_225[0]['v']!="")
989                                $nocoll_ins=$collection_225[0]['v'];
990                        elseif(isset($collection_410[0]['v']) && $collection_410[0]['v']!="")
991                                $nocoll_ins=$collection_410[0]['v'];
992                        elseif(isset($collection_411[0]['v']) && $collection_411[0]['v']!="")
993                                $nocoll_ins=$collection_411[0]['v'];
994                        else
995                                $nocoll_ins="";
996
997
998                        $collec['name'] = ($coll_name ? clean_string($coll_name) : '');
999                        $collec['parent'] = $ed1_id;
1000                        $collec['issn'] = ($coll_issn ? clean_string($coll_issn) : '');
1001                        $collec['authority_number'] = $coll_aut_number;
1002                        if($collec['authority_number']){
1003                                $coll_id = keep_authority_infos($collec['authority_number'],"collection",$origin_authority,0,$collec);
1004                        }else{
1005                                $coll_id = collection::import($collec);
1006                        }
1007
1008                        /* sous collection */
1009                        $subcollec['name'] = ($subcoll_name ? clean_string($subcoll_name) : '');
1010                        $subcollec['coll_parent'] = $coll_id;
1011                        $subcollec['issn'] = ($subcoll_issn ? clean_string($subcoll_issn) : '');
1012                        $subcollec['authority_number'] = $subcoll_aut_number;
1013                        if($subcollec['authority_number']){
1014                                $subcoll_id = keep_authority_infos($subcollec['authority_number'],"subcollection",$origin_authority,0,$subcollec);
1015                        }else{
1016                                $subcoll_id = collection::import($subcollec);
1017                        }
1018                        $subcoll_id = subcollection::import($subcollec);
1019
1020                        /* traitement des séries */
1021                        if(isset($serie[0]['t'])) {
1022                                $serie_id = serie::import(clean_string($serie[0]['t']));
1023                        } else {
1024                                $serie_id = 0;
1025                        }
1026                        $tnvol_ins = (isset($serie[0]['v']) ? $serie[0]['v'] : '');
1027                        if(!$serie_id){
1028                                if(isset($serie_200[0]['i'])) {
1029                                        $serie_id = serie::import(clean_string($serie_200[0]['i']));
1030                                } else {
1031                                        $serie_id = 0;
1032                                }
1033                                $serie[0]['t'] = (isset($serie_200[0]['i']) ? $serie_200[0]['i'] : '');
1034                                //$tnvol_ins=$serie_200[0]['h'];
1035                        }
1036                        if(!$tnvol_ins){
1037                                $tnvol_ins = (isset($serie_200[0]['h']) ? $serie_200[0]['h'] : '');
1038                        }
1039                }
1040        }
1041
1042        /* traitement de Dewey */
1043        if(isset($dewey[0])) {
1044                $indexint_id = indexint::import(clean_string($dewey[0]),$dewey_l[0]);
1045        } else {
1046                $indexint_id = 0;
1047        }
1048        if(!$indexint_id and count($info_686)){
1049                if(isset($info_686[0]["a"])) {
1050                        $indexint_id = indexint::import(clean_string($info_686[0]["a"]),$info_686[0]["l"],99);
1051                } else {
1052                        $indexint_id = 0;
1053                }
1054        }
1055
1056        /* Traitement des notes */
1057        $n_resume_total  = "";
1058        $n_gen_total     = "";
1059        $n_contenu_total = "";
1060
1061        if (!$n_resume) $n_resume=array();
1062        $n_resume_total= implode("\n",$n_resume);
1063
1064        if (!$n_gen) $n_gen=array();
1065        $n_gen_total= implode("\n",$n_gen);
1066
1067        if (!$n_contenu) $n_contenu=array();
1068        $n_contenu_total= implode("\n",$n_contenu);
1069
1070        // ajout : les 464$a sont ajouté aux notes de contenu à déporter éventuellement dans func_bdp41 si besoin
1071        for ($i = 0; $i< count($analytique); $i++) {
1072                $ana=array();
1073                for ($j = 0; $j< count($analytique[$i]); $j++) {
1074                        $ana[$analytique[$i][$j]["label"]][]=$analytique[$i][$j]["content"];
1075                }
1076                if(count($ana["a"]) == 1){//Selon la norme le $a n'est pas répétable dans le même champ 4XX
1077                        $n_contenu_total.=$ana["a"][0].(count($ana["e"])?" ; ".implode(" ; ",$ana["e"]):"").(count($ana["f"])?" / ".implode(" / ",$ana["f"]):"").(count($ana["g"])?" / ".implode(" / ",$ana["g"]):"")."\n";
1078                }else{//Au cas où
1079                        for ($j=0; $j<count($ana["a"]); $j++) {
1080                                $n_contenu_total.=$ana["a"][$j].($ana["e"][$j]?" ; ".$ana["e"][$j]:"").($ana["f"][$j]?" / ".$ana["f"][$j]:"").($ana["g"][$j]?" / ".$ana["g"][$j]:"")."\n";
1081                        }
1082                }
1083        }
1084
1085
1086
1087        // Préparation des titres
1088        $tit[0]['a'] = implode (" ; ",$tit_200a);
1089        if($bibliographic_level != "a" && $bibliographic_level != "b"  && $bibliographic_level != "s"){
1090                //Pour les articles et les bulletins on ne garde pas les informations suivantes
1091                $tit[0]['c'] = implode (" ; ",$tit_200c);
1092        }else{
1093                $tit[0]['c']="";
1094        }
1095
1096        $tit[0]['d'] = implode (" ; ",$tit_200d);
1097        $tit[0]['e'] = implode (" ; ",$tit_200e);
1098
1099        if (is_array($index_sujets))
1100                $index_l = implode (' '.$pmb_keyword_sep.' ',$index_sujets);
1101        else
1102                $index_l = $index_sujets;
1103
1104        // if (trim($n_resume_total)=="") $n_resume_total = $n_gen_total." ".$n_contenu_total ;
1105
1106        /* Origine de la notice */
1107        $origine_not['nom'] = (isset($origine_notice[0]['b']) ? clean_string($origine_notice[0]['b']) : '');
1108        $origine_not['pays'] = (isset($origine_notice[0]['a']) ? clean_string($origine_notice[0]['a']) : '');
1109        $orinot_id = origine_notice::import($origine_not);
1110        if ($orinot_id==0) $orinot_id=1 ;
1111
1112        if($bibliographic_level != "a" && $bibliographic_level != "s"){
1113                //Pour les articles et les periodiques on ne garde pas les informations suivantes
1114                // prix
1115                $price = (isset($prix[0]) ? $prix[0] : '');
1116                //Pour les CDs
1117                if(!$price){
1118                        $price = (isset($prix_cd[0]) ? $prix_cd[0] : '');
1119                }
1120
1121                $illustration=implode (" : ",$ill);
1122                $taille=implode (" ; ",$size);
1123                $mat_accomp=implode (" + ",$accomp);
1124                if($bibliographic_level != "b"){
1125                        $mention_edit=implode (", ",$no_edition);
1126                }else{
1127                        $mention_edit="";
1128                }
1129
1130        }else{
1131                $illustration="";
1132                $taille="";
1133                $mat_accomp="";
1134        }
1135
1136        if($bibliographic_level != "s"){
1137                //Pour les periodiques on ne garde pas les informations suivantes
1138                $nbpages=implode (" - ",$npages);
1139        }else{
1140                $nbpages="";
1141        }
1142
1143        //Valeurs à globaliser pour le calcul des droits d'accès
1144        global $typdoc;
1145        global $form_notice_statut;
1146        $typdoc = $doc_type;
1147        $form_notice_statut = $statutnot;
1148       
1149        $notice_is_new = 0;
1150        $notice_date_is_new = '';
1151
1152        if ((isset($import_force_notice_is_new)) && ($import_force_notice_is_new==1)) {
1153                $notice_is_new = 1;
1154                $notice_date_is_new = date('Y-m-d H:i:s');             
1155        }
1156       
1157                /* and at least, the insertion in notices table */
1158                $sql_ins = "insert into notices (
1159                                                typdoc                  ,
1160                                                code            ,
1161                                                statut                  ,
1162                                tit1            ,
1163                                tit2            ,
1164                                tit3            ,
1165                                tit4            ,
1166                                tparent_id      ,
1167                                tnvol           ,
1168                                ed1_id          ,
1169                                ed2_id          ,
1170                                year            ,
1171                                npages          ,
1172                                ill             ,
1173                                size            ,
1174                                accomp          ,
1175                                coll_id         ,
1176                                subcoll_id      ,
1177                                nocoll          ,
1178                                mention_edition ,
1179                                n_gen           ,
1180                                n_contenu       ,
1181                                n_resume        ,
1182                                index_l,
1183                                indexint,
1184                                niveau_biblio,
1185                                niveau_hierar,
1186                                lien,
1187                                eformat,
1188                                origine_catalogage,
1189                                prix,
1190                                                create_date,
1191                                                date_parution,
1192                                                notice_is_new,
1193                                                notice_date_is_new
1194                                ) values (
1195                                                '".$doc_type."',
1196                                                '".addslashes($isbn_OK)."',
1197                                                '".$statutnot."',
1198                                '".(isset($tit[0]['a']) ? addslashes(clean_string($tit[0]['a'])) : '')."',
1199                                '".(isset($tit[0]['c']) ? addslashes(clean_string($tit[0]['c'])) : '')."',
1200                                '".(isset($tit[0]['d']) ? addslashes(clean_string($tit[0]['d'])) : '')."',
1201                                '".(isset($tit[0]['e']) ? addslashes(clean_string($tit[0]['e'])) : '')."',
1202                                '".$serie_id."',
1203                                '".addslashes($tnvol_ins)."',
1204                                 ".$ed1_id." ,
1205                                 ".$ed2_id." ,
1206                                '".addslashes($year)."',
1207                                '".addslashes($nbpages)."',
1208                                '".addslashes($illustration)."',
1209                                '".addslashes($taille)."',
1210                                '".addslashes($mat_accomp)."',
1211                                 ".$coll_id." ,
1212                                 ".$subcoll_id." ,
1213                                '".addslashes($nocoll_ins)."',
1214                                '".addslashes($mention_edit)."',
1215                                '".addslashes($n_gen_total     )."',
1216                                '".addslashes($n_contenu_total )."',
1217                                '".addslashes($n_resume_total  )."',
1218                                '".addslashes($index_l)."',
1219                                '".$indexint_id."',
1220                                '".$bibliographic_level."',
1221                                '".$hierarchic_level."',
1222                                '".(isset($lien[0]) ? addslashes($lien[0]) : '')."',
1223                                '".(isset($eformat[0]) ? addslashes($eformat[0]) : '')."',
1224                                '".$orinot_id."',
1225                                '".addslashes($price)."',
1226                                                sysdate(),
1227                                                '".addslashes($date_parution)."',
1228                                                '".$notice_is_new."',
1229                                                '".$notice_date_is_new."'       
1230                                                )";
1231                pmb_mysql_query($sql_ins,$dbh) or die ("Couldn't insert into notices ! = ".$sql_ins);
1232                $notice_id = pmb_mysql_insert_id($dbh) ;
1233                notice::majNotices($notice_id);
1234                audit::insert_creation(AUDIT_NOTICE,$notice_id);
1235                //calcul des droits d'accès s'ils sont activés
1236                calc_notice_acces_rights($notice_id);
1237
1238                // on devait attendre que la notice soit intégrée pour faire l'association avec la notice..;
1239                if($collec['authority_number']){
1240                        keep_authority_infos($collec['authority_number'],"scollection",$origin_authority,$notice_id,$collec);
1241                }
1242                if($subcollec['authority_number']){
1243                        keep_authority_infos($subcollec['authority_number'],"subcollection",$origin_authority,$notice_id,$subcollec);
1244                }
1245
1246
1247                /* INSERT de la notice OK, on va traiter les auteurs
1248                70# : personnal : type auteur 70                71# : collectivités : type auteur 71
1249                1 seul en 700                                   idem pour les déclinaisons
1250                n en 701 n en 702
1251                les 7#0 tombent en auteur principal : responsability_type = 0
1252                les 7#1 tombent en autre auteur : responsability_type = 1
1253                les 7#2 tombent en auteur secondaire : responsability_type = 2
1254                */
1255                $aut_array = array();
1256                /* on compte tout de suite le nbre d'enreg dans les répétables */
1257                $nb_repet_701=sizeof($aut_701);
1258                $nb_repet_711=sizeof($aut_711);
1259                $nb_repet_702=sizeof($aut_702);
1260                $nb_repet_712=sizeof($aut_712);
1261                //indicateur["710"];
1262                /* renseignement de aut0 */
1263                if (isset($aut_700[0]['a']) && $aut_700[0]['a']!="") { /* auteur principal en 700 ? */
1264                        $aut_array[] = array(
1265                                "entree" => $aut_700[0]['a'],
1266                                "rejete" => $aut_700[0]['b'],
1267                                "author_comment" => $aut_700[0]['c']." ".$aut_700[0]['d'],
1268                                "date" => $aut_700[0]['f'],
1269                                "type_auteur" => "70",
1270                                "fonction" => $aut_700[0][4],
1271                                "id" => 0,
1272                                "responsabilite" => 0,
1273                                "ordre" => 0,
1274                                'authority_number' =>  $aut_700[0][3]
1275                        ) ;
1276                } elseif (isset($aut_710[0]['a']) && $aut_710[0]['a']!="") { /* auteur principal en 710 ? */
1277                        if(substr($indicateur["710"][0],0,1)=="1")      $type_auteur="72";
1278                                else $type_auteur="71";
1279
1280                        $lieu=$aut_710[0]['e'];
1281                        if(!$lieu)$lieu=$aut_710[0]['k'];
1282                        $aut_array[] = array(
1283                                "entree" => $aut_710[0]['a'],
1284                                "rejete" => $aut_710[0]['g'],
1285                                "subdivision" => $aut_710[0]['b'],
1286                                "author_comment" => $aut_710[0]['c'],
1287                                "numero" => $aut_710[0]['d'],
1288                                "lieu" => $lieu,
1289                                "ville" => $aut_710[0]['l'],
1290                                "pays" => $aut_710[0]['m'],
1291                                "web" => $aut_710[0]['n'],
1292                                "date" => $aut_710[0]['f'],
1293                                "type_auteur" => $type_auteur,
1294                                "fonction" => $aut_710[0][4],
1295                                "id" => 0,
1296                                "responsabilite" => 0,
1297                                "ordre" => 0,
1298                                'authority_number' =>  $aut_710[0][3]
1299                         ) ;
1300                }
1301
1302                /* renseignement de aut1 */
1303                for ($i=0 ; $i < $nb_repet_701 ; $i++) {
1304                        $aut_array[] = array(
1305                                "entree" => $aut_701[$i]['a'],
1306                                "rejete" => $aut_701[$i]['b'],
1307                                "author_comment" => $aut_701[$i]['c']." ".$aut_701[$i]['d'],
1308                                "date" => $aut_701[$i]['f'],
1309                                "type_auteur" => "70",
1310                                "fonction" => $aut_701[$i][4],
1311                                "id" => 0,
1312                                "responsabilite" => 1,
1313                                "ordre" => ($i+1),
1314                                'authority_number' =>  $aut_701[$i][3]
1315                        ) ;
1316                }
1317
1318                for ($i=0 ; $i < $nb_repet_711 ; $i++) {
1319                        if(substr($indicateur["711"][$i],0,1)=="1")     $type_auteur="72";
1320                        else $type_auteur="71";
1321
1322                        $lieu=$aut_711[$i]['e'];
1323                        if(!$lieu)$lieu=$aut_711[$i]['k'];
1324                        $aut_array[] = array(
1325                                "entree" => $aut_711[$i]['a'],
1326                                "rejete" => $aut_711[$i]['g'],
1327                                "subdivision" => $aut_711[$i]['b'],
1328                                "author_comment" => $aut_711[$i]['c'],
1329                                "numero" => $aut_711[$i]['d'],
1330                                "lieu" => $lieu,
1331                                "ville" => $aut_711[$i]['l'],
1332                                "pays" => $aut_711[$i]['m'],
1333                                "web" => $aut_711[$i]['n'],
1334                                "date" => $aut_711[$i]['f'],
1335                                "type_auteur" => $type_auteur,
1336                                "fonction" => $aut_711[$i][4],
1337                                "id" => 0,
1338                                "responsabilite" => 1,
1339                                "ordre" => ($i+1),
1340                                'authority_number' =>  $aut_711[$i][3]
1341                        ) ;
1342                }
1343
1344                /* renseignement de aut2 */
1345                for ($i=0 ; $i < $nb_repet_702 ; $i++) {
1346                        $aut_array[] = array(
1347                                "entree" => $aut_702[$i]['a'],
1348                                "rejete" => $aut_702[$i]['b'],
1349                                "author_comment" => $aut_702[$i]['c']." ".$aut_702[$i]['d'],
1350                                "date" => $aut_702[$i]['f'],
1351                                "type_auteur" => "70",
1352                                "fonction" => $aut_702[$i][4],
1353                                "id" => 0,
1354                                "responsabilite" => 2,
1355                                "ordre" => ($i+1),
1356                                'authority_number' =>  $aut_702[$i][3]
1357                        ) ;
1358                }
1359
1360                for ($i=0 ; $i < $nb_repet_712 ; $i++) {
1361                        if(substr($indicateur["712"][$i],0,1)=="1")     $type_auteur="72";
1362                        else $type_auteur="71";
1363
1364                        $lieu=$aut_712[$i]['e'];
1365                        if(!$lieu)$lieu=$aut_712[$i]['k'];
1366                        $aut_array[] = array(
1367                                "entree" => $aut_712[$i]['a'],
1368                                "rejete" => $aut_712[$i]['g'],
1369                                "subdivision" => $aut_712[$i]['b'],
1370                                "author_comment" => $aut_712[$i]['c'],
1371                                "numero" => $aut_712[$i]['d'],
1372                                "lieu" => $lieu,
1373                                "ville" => $aut_712[$i]['l'],
1374                                "pays" => $aut_712[$i]['m'],
1375                                "web" => $aut_712[$i]['n'],
1376                                "date" => $aut_712[$i]['f'],
1377                                "type_auteur" => $type_auteur,
1378                                "fonction" => $aut_712[$i][4],
1379                                "id" => 0,
1380                                "responsabilite" => 2,
1381                                "ordre" => ($i+1),
1382                                'authority_number' =>  $aut_712[$i][3]
1383                        ) ;
1384                }
1385
1386                // récup des infos auteurs et mise en tableau :
1387                // appel de la fonction membre d'importation et insertion en table
1388                $rqt_ins = "insert into responsability (responsability_author, responsability_notice, responsability_fonction, responsability_type, responsability_ordre) VALUES ";
1389                $values="";
1390                if(count($aut_array)){
1391                        for ($i=0 ; $i<sizeof($aut_array) ; $i++ ){
1392                                $aut = array();
1393                                $aut['name'] = (isset($aut_array[$i]['entree']) ? clean_string($aut_array[$i]['entree']) : '');
1394                                $aut['rejete'] = (isset($aut_array[$i]['rejete']) ? clean_string($aut_array[$i]['rejete']) : '');
1395                                $aut['type'] = $aut_array[$i]['type_auteur'];
1396                                $aut['date'] = (isset($aut_array[$i]['date']) ? clean_string($aut_array[$i]['date']) : '');
1397                                $aut['subdivision'] = (isset($aut_array[$i]['subdivision']) ? clean_string($aut_array[$i]['subdivision']) : '');
1398                                $aut['numero'] = (isset($aut_array[$i]['numero']) ? clean_string($aut_array[$i]['numero']) : '');
1399                                $aut['lieu'] = (isset($aut_array[$i]['lieu']) ? clean_string($aut_array[$i]['lieu']) : '');
1400                                $aut['ville'] = (isset($aut_array[$i]['ville']) ? clean_string($aut_array[$i]['ville']) : '');
1401                                $aut['pays'] = (isset($aut_array[$i]['pays']) ? clean_string($aut_array[$i]['pays']) : '');
1402                                $aut['web'] = (isset($aut_array[$i]['web']) ? clean_string($aut_array[$i]['web']) : '');
1403                                $aut['author_comment'] = (isset($aut_array[$i]['author_comment']) ? clean_string($aut_array[$i]['author_comment']) : '');
1404                                $aut['authority_number'] = (isset($aut_array[$i]['authority_number']) ? clean_string($aut_array[$i]['authority_number']) : '');
1405                                //si on à demander la prise en compte des numéro d'autorités
1406                                if($authorities_notices && $aut['authority_number']!=""){
1407                                        $aut_array[$i]["id"] = keep_authority_infos($aut['authority_number'],"author",$origin_authority,$notice_id,$aut);
1408                                }
1409                                if(!$aut_array[$i]["id"]){
1410                                        $aut_array[$i]["id"] = auteur::import($aut);
1411                                }
1412                                $aut_array[$i]['fonction'] = trim($aut_array[$i]['fonction']);
1413                                if ($aut_array[$i]["id"]) {
1414                                        if($values!= "") $values.=",";
1415                                        $values.=" ('".$aut_array[$i]["id"]."','".$notice_id."','".addslashes($aut_array[$i]['fonction'])."','".$aut_array[$i]['responsabilite']."','".$aut_array[$i]['ordre']."') " ;
1416        //                              $rqt = $rqt_ins . " ('".$aut_array[$i]["id"]."','".$notice_id."','".addslashes($aut_array[$i]['fonction'])."','".$aut_array[$i]['responsabilite']."','".$aut_array[$i]['ordre']."') " ;
1417        //                              @pmb_mysql_query($rqt, $dbh);
1418                                }
1419                        }
1420                        @pmb_mysql_query($rqt_ins.$values);
1421                }
1422                // Titres uniformes
1423                global $pmb_use_uniform_title;
1424                if ($pmb_use_uniform_title) {
1425                        $nb_tu=sizeof($tu_500);
1426                        for ($i=0 ; $i<$nb_tu ; $i++ ) {
1427                                $value_tu[$i]['name'] = $tu_500[$i]['a'];
1428                                $value_tu[$i]['tonalite'] = $tu_500[$i]['u'];
1429                                $value_tu[$i]['comment'] = $tu_500[$i]['n'];
1430                                $value_tu[$i]['authority_number'] = $tu_500[$i]['3'];
1431
1432                                for($j=0;$j<count($tu_500_r[$i]);$j++) {
1433                                        $value_tu[$i]['distrib'][$j]= $tu_500_r[$i][$j];
1434                                }
1435                                for($j=0;$j<count($tu_500_s[$i]);$j++) {
1436                                        $value_tu[$i]['ref'][$j]= $tu_500_s[$i][$j];
1437                                }
1438                                for($j=0;$j<count($tu_500_j[$i]);$j++) {
1439                                        $value_tu[$i]['subdiv'][$j]= $tu_500_j[$i][$j];
1440                                }
1441                                if($authorities_notices && $aut['authority_number']!=""){
1442                                        $tu_id = keep_authority_infos($value_tu[$i]['authority_number'],"uniform_title",$origin_authority,$notice_id,$value_tu[$i]);
1443                                }else{
1444                                        $tu_id = titre_uniforme::import($value_tu[$i]);
1445                                }
1446                                if($tu_id) {
1447                                        $requete = "INSERT INTO notices_titres_uniformes SET
1448                                        ntu_num_notice='$notice_id',
1449                                        ntu_num_tu='$tu_id',
1450                                        ntu_titre='".addslashes($tu_500[$i]['i'])."',
1451                                        ntu_date='".addslashes($tu_500[$i]['k'])."',
1452                                        ntu_sous_vedette='".addslashes($tu_500[$i]['l'])."',
1453                                        ntu_langue='".addslashes($tu_500[$i]['m'])."',
1454                                        ntu_version='".addslashes($tu_500[$i]['q'])."',
1455                                        ntu_mention='".addslashes($tu_500[$i]['w'])."',
1456                                        ntu_ordre=$i
1457                                        ";
1458                                        pmb_mysql_query($requete, $dbh);
1459                                }
1460                        }
1461                }
1462
1463                global $lang_code               ;
1464                global $org_lang_code           ;
1465                if((is_array($lang_code) && count($lang_code)) || (is_array($org_lang_code) && count($org_lang_code))) {
1466                        $rqt_ins = "insert into notices_langues (num_notice, type_langue, code_langue, ordre_langue) VALUES ";
1467                        $values = "";
1468                        $lang_code = array_unique($lang_code);
1469                        for ($i=0; $i<count($lang_code); $i++) {
1470                                $lang_code[$i]=trim($lang_code[$i]);
1471                                if($values!="") $values.=",";
1472                                $values.="('$notice_id',0, '".addslashes($lang_code[$i])."','$i') ";
1473                                //$rqt_ins = "insert into notices_langues (num_notice, type_langue, code_langue) VALUES ('$notice_id',0, '".addslashes($lang_code[$i])."') " ;
1474                                //@pmb_mysql_query($rqt_ins, $dbh);
1475                        }
1476                        $org_lang_code = array_unique($org_lang_code);
1477                        for ($i=0; $i<count($org_lang_code); $i++) {
1478                                $org_lang_code[$i]=trim($org_lang_code[$i]);
1479                                if($values!="") $values.=",";
1480                                $values.="('$notice_id',1, '".addslashes($org_lang_code[$i])."','".$i."') ";
1481                                //$rqt_ins = "insert into notices_langues (num_notice, type_langue, code_langue) VALUES ('$notice_id',1, '".addslashes($org_lang_code[$i])."') " ;
1482        //                      @pmb_mysql_query($rqt_ins, $dbh);
1483                        }
1484                        @pmb_mysql_query($rqt_ins.$values, $dbh);
1485                }
1486        //Import des catégories
1487        category_auto::save_info_categ();
1488        //Calcule de la signature
1489        $sign= new notice_doublon();
1490        $val= $sign->gen_signature($notice_id);
1491        pmb_mysql_query("update notices set signature='$val' where notice_id=".$notice_id, $dbh);
1492
1493        //Si on a un id de notice et qu'il n'est pas dans le tableau des notices créées, on l'ajoute
1494        if($link_generate && trim($id_unimarc) !== "" && !$notices_crees[$id_unimarc]){
1495                $notices_crees[$id_unimarc]=$notice_id;
1496
1497        }elseif($link_generate && trim($id_unimarc) !== "" && $notices_crees[$id_unimarc]){
1498                //Si la notice a déjà été créée (Export des liens dans les notices liées) on remplace celle précédemment par celle en cours de traitement
1499                 $niveau_biblio=$bibliographic_level.$hierarchic_level;
1500                 switch ($niveau_biblio) {
1501                        case 'm0':
1502                                //On a une notice de monographie
1503                                $notice_a_supp=$notices_crees[$id_unimarc];
1504                                $ma_notice= new notice($notice_a_supp);
1505                                $ma_notice->replace($notice_id);
1506                                break;
1507                        case 's1':
1508                                //On a une notice de periodique
1509                                $notice_a_supp=$notices_crees[$id_unimarc];
1510                                $ma_notice= new serial($notice_a_supp);
1511                                $ma_notice->replace($notice_id);
1512                                break;
1513                        case 'b2':
1514                                //On a une notice de bulletin
1515                                $notice_a_supp=$notices_crees[$id_unimarc];
1516                                //Dans les bulletins
1517                                $requete="update bulletins set num_notice='".$notice_id."' where num_notice='".$notice_a_supp."' ";
1518                                pmb_mysql_query($requete,$dbh);
1519                                //Dans les relations entre notice
1520                                notice_relations::replace_links($notice_a_supp, $notice_id, $notice_replace_links);
1521                                notice::del_notice($notice_a_supp);
1522                                break;
1523                        case 'a2':
1524                                //On a une notice d'article
1525                                $notice_a_supp=$notices_crees[$id_unimarc];
1526                                //Dans les bulletins
1527                                $requete="update analysis set analysis_notice='".$notice_id."' where analysis_notice='".$notice_a_supp."' ";
1528                                pmb_mysql_query($requete,$dbh);
1529                                //Dans les relations entre notice
1530                                notice_relations::replace_links($notice_a_supp, $notice_id, $notice_replace_links);
1531                                notice::del_notice($notice_a_supp);
1532                                break;
1533                }
1534                $notices_crees[$id_unimarc]=$notice_id;
1535        }
1536
1537} // fin import_new_notice
1538
1539
1540/*
1541 * Importer les liens entre les notices
1542 */
1543
1544function import_notice_link(){
1545        global $notices_liees, $notices_a_creer, $id_unimarc, $dbh, $notices_crees, $bulletins_crees;
1546        global $notice_id, $titre_ppal_200, $titre_perio_530a, $champ_210, $bulletins_a_creer;
1547        global $hierarchic_level, $bibliographic_level, $tit_200d,$bulletin_ex;
1548
1549        if($bibliographic_level == "a" && $hierarchic_level == "2" && $tit_200d[0] == "Article_expl_bulletin"){
1550                //Quand on est sur le cas de la reconstruction d'un exemplaire de bulletin
1551                $tab_bull= array();
1552                $tab_bull = get_infos_notices_liees($notices_liees,'463','bull_expl');
1553
1554                $id_perio=creer_notice_periodique($tab_bull[0]["0"][0],$tab_bull[0]["t"][1],$tab_bull[0]["x"][0]);
1555                $bulletin=array();
1556                $bulletin=array("titre"=>$tab_bull[0]["t"][0],"date"=>$tab_bull[0]["d"][0],"mention"=>$tab_bull[0]["e"][0],"num"=>$tab_bull[0]["v"][0]);
1557                $bulletin_ex=creer_bulletin($id_perio,$bulletin);
1558                return;
1559        }
1560
1561
1562        //Traitements des liens entre notices
1563        $requete = "SELECT * FROM notices WHERE notice_id='".$notice_id."'";
1564        $res = pmb_mysql_query($requete,$dbh);
1565        while(($notice_creee=pmb_mysql_fetch_object($res))){
1566                $niveau_biblio = $notice_creee->niveau_biblio.$notice_creee->niveau_hierar;
1567                $tab_field = $tab_art = $tab_bull = $tab_perio = array();
1568
1569                switch($niveau_biblio){
1570                        case 's1' :
1571                                //Lien(s) vers Périodique
1572                                $tab_art = get_infos_notices_liees($notices_liees,'464','art');
1573                                $tab_bull = get_infos_notices_liees($notices_liees,'462','bull');
1574                                creer_bulletinage_et_articles($tab_bull,$tab_art);
1575                                break;
1576                        case 'b2' :
1577                                //Lien(s) vers Notice de bulletin
1578                                creer_liens_pour_bull_notice($titre_ppal_200, $titre_perio_530a, $champ_210, get_infos_notices_liees($notices_liees,'461','parent','b'));
1579                                break;
1580                        case 'a2' :
1581                                //Lien(s) vers Article
1582                                $tab_perio = get_infos_notices_liees($notices_liees,'461','perio');
1583                                $tab_bull = get_infos_notices_liees($notices_liees,'463','bull');
1584                                $tab_field = array("id_base"=>$id_unimarc, "titre"=> $titre_ppal_200);
1585                                /*print "xxxxxxxxxxxxxxxxxxxxxxxx".$notice_id;
1586                                print "<pre>";
1587                                print_r($tab_bull);
1588                                print_r($tab_perio);
1589                                print_r($tab_field);
1590                                print "</pre><br />";*/
1591                                creer_liens_pour_articles($tab_bull,$tab_perio, $tab_field);
1592                                break;
1593                        default:
1594                                break;
1595                }
1596        }
1597
1598        //Traitement des relations mères/filles
1599        $parents = get_infos_notices_liees($notices_liees,'','parent');
1600        if(count($parents)){
1601                foreach($parents as $key=>$parent){
1602                        //Si pas de titre, on évite de créer une notice sans titre
1603                        if(!isset($parent["t"])){
1604                                unset($parents[$key]);
1605                        }
1606                }
1607                //Reste-t-il des relations à créer après nettoyage ci-dessus ?
1608                if(count($parents)){
1609                        creer_relation_notice($parents);
1610                }
1611        }
1612
1613        $enfants = get_infos_notices_liees($notices_liees,'','child');
1614        if(count($enfants)){
1615                foreach($enfants as $key=>$enfant){
1616                        //Si pas de titre, on évite de créer une notice sans titre
1617                        if(!isset($enfant["t"])){
1618                                unset($enfants[$key]);
1619                        }
1620                }
1621                //Reste-t-il des relations à créer après nettoyage ci-dessus ?
1622                if(count($enfants)){
1623                        creer_relation_notice($enfants);
1624                }
1625        }
1626       
1627        //Traitement des relations horizontales
1628        $pairs = get_infos_notices_liees($notices_liees,'','pair');
1629        if(count($pairs)){
1630                foreach($pairs as $key=>$pair){
1631                        //Si pas de titre, on évite de créer une notice sans titre
1632                        if(!isset($pair["t"])){
1633                                unset($pairs[$key]);
1634                        }
1635                }
1636                //Reste-t-il des relations à créer après nettoyage ci-dessus ?
1637                if(count($pairs)){
1638                        creer_relation_notice($pairs);
1639                }
1640        }
1641
1642        //On traite les notices qui ont été mises en attente de création
1643        if($notices_a_creer[$id_unimarc]) {
1644                for($i=0;$i<sizeof($notices_a_creer[$id_unimarc]);$i++){
1645                        if($notices_a_creer[$id_unimarc][$i]['lnk'] == 'parent'){
1646                                //on a une relation vers un parent
1647                                if (!notice_relations::relation_exists($notices_a_creer[$id_unimarc][$i]['id_asso'], $notice_id, $notices_a_creer[$id_unimarc][$i]['type_lnk'])) {
1648                                        notice_relations::insert_from_import($notices_a_creer[$id_unimarc][$i]['id_asso'], $notice_id, $notices_a_creer[$id_unimarc][$i]['type_lnk'], $notices_a_creer[$id_unimarc][$i]['rank']);
1649                                }
1650                        } elseif($notices_a_creer[$id_unimarc][$i]['lnk'] == 'child'){
1651                                //on a une relation vers un enfant
1652                                if (!notice_relations::relation_exists($notice_id, $notices_a_creer[$id_unimarc][$i]['id_asso'], $notices_a_creer[$id_unimarc][$i]['type_lnk'])) {
1653                                        notice_relations::insert_from_import($notice_id, $notices_a_creer[$id_unimarc][$i]['id_asso'], $notices_a_creer[$id_unimarc][$i]['type_lnk'], $notices_a_creer[$id_unimarc][$i]['rank']);
1654                                }
1655                        } elseif($notices_a_creer[$id_unimarc][$i]['lnk'] == 'pair'){
1656                                //on a une relation vers une notice horizontale
1657                                if (!notice_relations::relation_exists($notice_id, $notices_a_creer[$id_unimarc][$i]['id_asso'], $notices_a_creer[$id_unimarc][$i]['type_lnk'])) {
1658                                        notice_relations::insert_from_import($notice_id, $notices_a_creer[$id_unimarc][$i]['id_asso'], $notices_a_creer[$id_unimarc][$i]['type_lnk'], $notices_a_creer[$id_unimarc][$i]['rank']);
1659                                }
1660                        } elseif($notices_a_creer[$id_unimarc][$i]['lnk'] == 'art'){
1661                                //on a un lien d'un article vers un periodique
1662                                if(!$notices_crees[$id_unimarc] ){//On ne peut pas passer par la
1663                                        $req_insert_art = "insert into notices (tit1, niveau_biblio, niveau_hierar, npages)
1664                                                                                                values( '".addslashes($notices_a_creer[$id_unimarc][$i]['titre_art'])."', 'a', '2','".addslashes($notices_a_creer[$id_unimarc][$i]['page'])."' )";
1665                                        pmb_mysql_query($req_insert_art,$dbh);
1666                                        $id_art = pmb_mysql_insert_id();
1667                                        audit::insert_creation(AUDIT_NOTICE,$id_art);
1668                                        //calcul des droits d'accès s'ils sont activés
1669                                        calc_notice_acces_rights($id_art);
1670                                        $notices_crees[$id_unimarc] = $id_art;
1671                                }
1672                                $id_perio=$notices_a_creer[$id_unimarc][$i]['id_asso'];
1673                                $bulletin=array();
1674                                $bulletin=array("titre"=>$notices_a_creer[$id_unimarc][$i]['titre'],"date"=>$notices_a_creer[$id_unimarc][$i]['date'],"mention"=>$notices_a_creer[$id_unimarc][$i]['mention'],"num"=>$notices_a_creer[$id_unimarc][$i]['num']);
1675                                creer_notice_article("","","",$id_art?$id_art:$notice_id,$bulletin,"","",$id_perio);
1676                        } elseif($notices_a_creer[$id_unimarc][$i]['lnk'] == 'perio'){
1677                                //On a un lien d'un periodique vers un article
1678                                if(!$notices_crees[$id_unimarc]){//On ne peut pas passer par la
1679                                        $req_insert_perio = "insert into notices (tit1, code, niveau_biblio, niveau_hierar)
1680                                                                                                values( '".addslashes($notices_a_creer[$id_unimarc][$i]['titre_perio'])."', '".addslashes($notices_a_creer[$id_unimarc][$i]['code']).", 's', '1' )";
1681                                        pmb_mysql_query($req_insert_perio,$dbh);
1682                                        $id_perio = pmb_mysql_insert_id();
1683                                        audit::insert_creation(AUDIT_NOTICE,$id_perio);
1684                                        //calcul des droits d'accès s'ils sont activés
1685                                        calc_notice_acces_rights($id_perio);
1686                                        $notices_crees[$id_unimarc] = $id_perio;
1687                                }else{
1688                                        $id_perio=$notices_crees[$id_unimarc];
1689                                }
1690                                $bulletin=array();
1691                                $bulletin=array("titre"=>$notices_a_creer[$id_unimarc][$i]['titre_bull'],"date"=>$notices_a_creer[$id_unimarc][$i]['date'],"mention"=>$notices_a_creer[$id_unimarc][$i]['mention'],"num"=>$notices_a_creer[$id_unimarc][$i]['num']);
1692                                creer_notice_article("","","",$notices_a_creer[$id_unimarc][$i]['id_asso'],$bulletin,"","",$id_perio);
1693                        }
1694                }
1695                unset($notices_a_creer[$id_unimarc]);
1696        }
1697        //On rattache le perio a ses notices de bulletin
1698        if ($bulletins_a_creer[$id_unimarc]){
1699                $id_perio=$notice_id;
1700                for($i=0;$i<sizeof($bulletins_a_creer[$id_unimarc]);$i++){
1701                        //Si on décomante la suite et qu on commente la fin ya un bulletin de créé qui ne doit pas exister (test avec export tt lien)
1702                        $bulletin=array();
1703                        $bulletin=array("titre"=>$bulletins_a_creer[$id_unimarc][$i]['titre'],"date"=>$bulletins_a_creer[$id_unimarc][$i]['date_date'],"mention"=>$bulletins_a_creer[$id_unimarc][$i]['mention'],"num"=>$bulletins_a_creer[$id_unimarc][$i]['bull_num']);
1704                        $id_bulletin= creer_bulletin($id_perio,$bulletin,"","");
1705                        creer_lien_notice_bulletin("",$id_perio,$id_bulletin,$bulletins_a_creer[$id_unimarc][$i]['bull_notice'],"",$bulletin);
1706                }
1707                unset($bulletins_a_creer[$id_unimarc]);
1708        }
1709}
1710/*
1711 * Récupération de sous tableaux correspondant aux critères
1712 */
1713function get_infos_notices_liees($notices_liees=array(), $cle_uni='', $lien='', $type_lien=''){
1714        $result_tab = array();
1715        $link_tab = array();
1716        $type_link_tab = array();
1717        if($cle_uni){
1718                $result_tab = $notices_liees[$cle_uni];
1719                if($lien && $result_tab){
1720                        foreach($result_tab as $field){
1721                                //on récupère toutes les options du $9 dans un tableau
1722                           $options=array();
1723                           for($i=0;$i<sizeof($field['9']);$i++){
1724                                        $chaine_parse = explode(':',$field['9'][$i]);
1725                                        if($chaine_parse[0] == 'lnk'){
1726                                                $options["lien"] = $chaine_parse[1];
1727                                        }
1728                                }
1729                            if($options["lien"] == $lien) $link_tab[] = $field;
1730                        }
1731                        $result_tab = $link_tab;
1732                        if($type_lien){
1733                                foreach($result_tab as $field){
1734                                        //on récupère toutes les options du $9 dans un tableau
1735                                   $options=array();
1736                                   for($i=0;$i<sizeof($field['9']);$i++){
1737                                                $chaine_parse = explode(':',$field['9'][$i]);
1738                                                if($chaine_parse[0] == 'type_lnk'){
1739                                                        $options["type_lnk"] = $chaine_parse[1];
1740                                                }
1741                                        }
1742                                    if($options["type_lnk"] == $type_lien) $type_link_tab[] = $field;
1743                                } $result_tab = $type_link_tab;
1744                        }
1745                }
1746        } elseif($lien){
1747                foreach($notices_liees as $fields){
1748                        foreach($fields as $field){
1749                                //on récupère toutes les options du $9 dans un tableau
1750                           $options=array();
1751                           for($i=0;$i<sizeof($field['9']);$i++){
1752                                        $chaine_parse = explode(':',$field['9'][$i]);
1753                                        if($chaine_parse[0] == 'lnk'){
1754                                                $options["lien"] = $chaine_parse[1];
1755                                        }
1756                                }
1757                            if($options["lien"] == $lien) $link_tab[] = $field;
1758                        }
1759                $result_tab = $link_tab;
1760                }
1761                if($type_lien && $result_tab){
1762                        foreach($result_tab as $field){
1763                                //on récupère toutes les options du $9 dans un tableau
1764                           $options=array();
1765                           for($i=0;$i<sizeof($field['9']);$i++){
1766                                        $chaine_parse = explode(':',$field['9'][$i]);
1767                                        if($chaine_parse[0] == 'type_lnk'){
1768                                                $options["type_lnk"] = $chaine_parse[1];
1769                                        }
1770                                }
1771                            if($options["type_lnk"] == $type_lien) $type_link_tab[] = $field;
1772                        }
1773                        $result_tab = $type_link_tab;
1774                }
1775        } elseif($type_lien){
1776                foreach($notices_liees as $fields){
1777                        foreach($fields as $field){
1778                                //on récupère toutes les options du $9 dans un tableau
1779                           $options=array();
1780                           for($i=0;$i<sizeof($field['9']);$i++){
1781                                        $chaine_parse = explode(':',$field['9'][$i]);
1782                                        if($chaine_parse[0] == 'type_lnk'){
1783                                                $options["type_lnk"] = $chaine_parse[1];
1784                                        }
1785                                }
1786                            if($options["type_lnk"] == $type_lien) $type_link_tab[] = $field;
1787                        }
1788                $result_tab = $type_link_tab;
1789                }
1790        }
1791        return $result_tab;
1792}
1793/*
1794 *  Fonction qui génère les liens pour les notices de bulletin
1795 */
1796function creer_liens_pour_bull_notice($titre200=array(), $titre530=array(), $champ210=array(), $tab_perio=array()){
1797        global $notice_id, $dbh, $notices_crees, $id_unimarc, $bulletins_a_creer, $bulletins_crees;
1798        if(!$tab_perio){
1799                if(!$notices_crees[$id_unimarc]){//On passe ici si on importe les liens pour une notice de bulletin qui n'a ni numéro ni lien vers un periodique (très improbable)
1800                        //On passe la notice en monographie
1801                        $requete="update notices set niveau_biblio='m' and niveau_hierar='0' where notice_id='".$notice_id."'";
1802                        pmb_mysql_query($requete,$dbh);
1803
1804                }else{
1805                        if(!trim($titre530[0]))$titre530[0]="Sans titre";
1806                        $id_perio=creer_notice_periodique(0,trim($titre530[0]),"");
1807                        $bulletin=array();
1808                        $bulletin=array("titre"=>trim($titre200[0]['i']),"date"=>trim($champ210[0]['h']),"mention"=>trim($champ210[0]['d']),"num"=>trim($titre200[0]['h']));
1809                        $id_bull=creer_bulletin($id_perio,$bulletin);
1810                        creer_lien_notice_bulletin($id_unimarc,$id_perio,$id_bull,$notice_id,"",$bulletin);
1811                }
1812        } else {
1813                if(!$notices_crees[get_valeur_champ9($tab_perio[0]['9'],'id')] && !$tab_perio[0]['0']['0']){
1814                        //On créé le periodique car il n'est pas créé et n'est pas à créé
1815                        if(!trim($titre530[0]))$titre530[0]="Sans titre";
1816                        if($tmp=get_valeur_champ9($tab_perio[0]['9'],'id')){
1817                                $id_perio=creer_notice_periodique($tmp,trim($titre530[0]),$tab_perio[0]['x']['0']);
1818                        }else{
1819                                $id_perio=creer_notice_periodique(0,trim($titre530[0]),$tab_perio[0]['x']['0']);
1820                        }
1821                        $bulletin=array();
1822                        $bulletin=array("titre"=>trim($titre200[0]['i']),"date"=>trim($champ210[0]['h']),"mention"=>trim($champ210[0]['d']),"num"=>trim($titre200[0]['h']));
1823                        $id_bull=creer_bulletin($id_perio,$bulletin);
1824                        creer_lien_notice_bulletin($id_unimarc,$id_perio,$id_bull,$notice_id,"",$bulletin);
1825                }elseif($notices_crees[get_valeur_champ9($tab_perio[0]['9'],'id')]){
1826                        //La notice de perio est déja créé
1827                        $id_perio=$notices_crees[get_valeur_champ9($tab_perio[0]['9'],'id')];
1828                        $bulletin=array();
1829                        $bulletin=array("titre"=>trim($titre200[0]['i']),"date"=>trim($champ210[0]['h']),"mention"=>trim($champ210[0]['d']),"num"=>trim($titre200[0]['h']));
1830                        $id_bull=creer_bulletin($id_perio,$bulletin);
1831                        creer_lien_notice_bulletin($id_unimarc,$id_perio,$id_bull,$notice_id,"",$bulletin);
1832                }elseif($tab_perio[0]['0']['0']){
1833                        //Le lien sera a refaire plus tard
1834                        $bulletins_a_creer[$tab_perio[0]['0'][0]][] = array ("bull_notice"=>$notices_crees[$id_unimarc], "bull_num"=>$titre200[0]['h'], "date_date"=>$champ210[0]['h'],"mention"=>$champ210[0]['d'],"titre"=>$titre200[0]['i']);
1835                }else{
1836                        //Si j'ai un bulletin avec un 461 qui ne rentre pas dans les autres cas je passe le bulletin en monographie (cas très peu probable)
1837                        $requete="select bulletin_id from bulletins where num_notice='".addslashes($notice_id)."' ";
1838                        $res = pmb_mysql_query($requete,$dbh);
1839                        if (!pmb_mysql_num_rows($res))  {
1840                                //Si il n'est pas déja relié je le passe en monographie sinon je n'y touche pas
1841                                $requete="update notices set niveau_biblio='m', niveau_hierar='0' where notice_id='".$notice_id."' ";
1842                                pmb_mysql_query($requete,$dbh);
1843                        }
1844                }
1845        }
1846}
1847/*
1848 *  Génère la création des liens pour les articles
1849 */
1850function creer_liens_pour_articles($tab_bull=array(),$tab_perio=array(), $tab_field=array()){
1851        global $notice_id, $dbh, $notices_crees, $bulletins_crees, $notices_a_creer,$serie,$champ_210;
1852                if(!$tab_bull && !$tab_perio){
1853                        //On regarde si on a les informations de bulletinage dans le 461
1854                        if(trim($serie[0]["t"]) and trim($serie[0]["v"])){
1855                                //J'ai les informations pour recréer le bulletinage
1856                                $bulletin=array();
1857                                $bulletin=array("titre"=>"Bulletin N°".trim($serie[0]["v"]),"date"=>"","mention"=>trim($champ_210[0]['d']),"num"=>trim($serie[0]["v"]));
1858                                creer_notice_article("","","",$notice_id,$bulletin,trim($serie[0]["t"]),"",0);
1859                        }else{
1860                                //Si elle a été créée mais qu'elle n'est pas a créer
1861                                if( !$tab_field['id_base'] || ($notices_crees[$tab_field['id_base']] && !$notices_a_creer[$tab_field['id_base']])){
1862                                        //On regarde si elle n'est pas reliée a un bulletin
1863                                        $requete="select analysis_bulletin from analysis where analysis_notice='".addslashes($notices_crees[$tab_field['id_base']])."' ";
1864                                        $res=pmb_mysql_query($requete,$dbh);
1865                                        if(!pmb_mysql_num_rows($res)){
1866                                                //Si elle n'est pas reliée on la passe en monographie, sinon c'est bien un article
1867                                                $requete="update notices set niveau_biblio='m', niveau_hierar='0' where notice_id='".addslashes($notice_id)."' ";
1868                                                pmb_mysql_query($requete,$dbh);
1869                                        }
1870                                }elseif(!$notices_crees[$tab_field['id_base']] && !$notices_a_creer[$tab_field['id_base']]){
1871                                        //on ne doit pas passer par là
1872                                        $req_insert_art = "insert into notices (tit1, niveau_biblio, niveau_hierar)
1873                                                                                                values( '".addslashes($tab_field['titre'][0]['a'])."', 'm', '0' )";
1874                                        pmb_mysql_query($req_insert_art,$dbh);
1875                                        $notices_crees[$tab_field['id_base']] = pmb_mysql_insert_id();
1876                                        audit::insert_creation(AUDIT_NOTICE,$notices_crees[$tab_field['id_base']]);
1877                                        //calcul des droits d'accès s'ils sont activés
1878                                        calc_notice_acces_rights($notices_crees[$tab_field['id_base']]);
1879                                }
1880                        }
1881                } elseif($tab_bull && !$tab_perio){
1882                        //On créé un periodique sans titre (On regarde avant si on en a pas déja créé une)
1883                        $bulletin=array();
1884                        $bulletin=array("titre"=>$tab_bull[0]['v'][0],"date"=>$tab_bull[0]['d'][0],"mention"=>$tab_bull[0]['e'][0],"num"=>$tab_bull[0]['v'][0]);
1885                        creer_notice_article("","","",$notice_id,$bulletin,"Sans titre","",0);
1886                } elseif(!$tab_bull && $tab_perio){
1887                        //On créé un bulletin générique pour rattacher les articles au pério
1888                        if(!$notices_crees[get_valeur_champ9($tab_perio[0]['9'],'id')] && !$tab_perio[0]['0'][0]){// Si le periodique n'est pas déja créé et si il ne sera pas a créer
1889                                $id_perio=creer_notice_periodique(get_valeur_champ9($tab_perio[0]['9'],'id'),$tab_perio[0]['t'][0],$tab_perio[0]['x'][0]);
1890                                $bulletin=array();
1891                                $bulletin=array("titre"=>"bull_générique","date"=>"0000-00-00","mention"=>"00/00/0000","num"=>"0");
1892                                creer_notice_article("","","",$notice_id,$bulletin,"","",$id_perio);
1893                        }elseif($notices_crees[get_valeur_champ9($tab_perio[0]['9'],'id')]){//Si il est déja créé
1894                                $id_perio=$notices_crees[get_valeur_champ9($tab_perio[0]['9'],'id')];
1895                                $bulletin=array();
1896                                $bulletin=array("titre"=>"bull_générique","date"=>"0000-00-00","mention"=>"00/00/0000","num"=>"0");
1897                                creer_notice_article("","","",$notice_id,$bulletin,"","",$id_perio);
1898                        }else{
1899                                // Les liens seront à creer plus tard pour cet article
1900                                $id=get_valeur_champ9($tab_perio[0]['9'],'id');
1901                                $type_lien =get_valeur_champ9($tab_perio[0]['9'],'type_lnk');
1902                                $lien=get_valeur_champ9($tab_perio[0]['9'],'lnk');
1903                                $rank=get_valeur_champ9($tab_perio[0]['9'],'rank')*1;
1904                                $notices_a_creer[$id][] = array( "type_lnk"=> $type_lien, "lnk"=> $lien, "rank"=>$rank, "titre_perio"=>$tab_perio[0]['t'][0],
1905                                                                                "code"=>$tab_perio[0]['x'][0], "id_asso"=>$notice_id, "num"=>"0",
1906                                                                                "mention"=>"00/00/0000","date"=>"0000-00-00","titre_bull"=>"bull_générique");
1907                        }
1908                } else {
1909                        for($i=0;$i<sizeof($tab_perio);$i++){
1910                                if(!$notices_crees[get_valeur_champ9($tab_perio[$i]['9'],'id')] && !$tab_perio[$i]['0'][0]){
1911                                        //On a les deux liens, on regarde si le perio existe déjà dans la base
1912                                        $id_perio=creer_notice_periodique(get_valeur_champ9($tab_perio[$i]['9'],'id'),$tab_perio[$i]['t'][0],$tab_perio[$i]['x'][0]);
1913                                        $bulletin=array();
1914                                        $bulletin=array("titre"=>$tab_bull[$i]['t'][0],"date"=>$tab_bull[$i]['d'][0],"mention"=>$tab_bull[$i]['e'][0],"num"=>$tab_bull[$i]['v'][0]);
1915                                        creer_notice_article("","","",$notice_id,$bulletin,"","",$id_perio);
1916                                } else{
1917                                        if($notices_crees[get_valeur_champ9($tab_perio[$i]['9'],'id')]){
1918                                                //Si il est créé on récupère son identifiant
1919                                                $id_perio=      $notices_crees[get_valeur_champ9($tab_perio[$i]['9'],'id')];
1920                                                //On regarde si le bulletin est déja créé
1921                                                $bulletin=array();
1922                                                $bulletin=array("titre"=>$tab_bull[$i]['t'][0],"date"=>$tab_bull[$i]['d'][0],"mention"=>$tab_bull[$i]['e'][0],"num"=>$tab_bull[$i]['v'][0]);
1923                                                creer_notice_article("","","",$notice_id,$bulletin,"","",$id_perio);
1924                                        } else {
1925                                                $id=get_valeur_champ9($tab_perio[$i]['9'],'id');
1926                                                $type_lien =get_valeur_champ9($tab_perio[$i]['9'],'type_lnk');
1927                                                $lien=get_valeur_champ9($tab_perio[$i]['9'],'lnk');
1928                                                $rank=get_valeur_champ9($tab_perio[$i]['9'],'rank')*1;
1929                                                $notices_a_creer[$id][] = array( "type_lnk"=> $type_lien, "lnk"=> $lien, "rank"=>$rank, "titre_perio"=>$tab_perio[$i]['t'][0],
1930                                                                                                "code"=>$tab_perio[$i]['x'][0], "id_asso"=>$notice_id, "num"=>$tab_bull[$i]['v'][0],
1931                                                                                                "mention"=>$tab_bull[$i]['e'][0],"date"=>$tab_bull[$i]['d'][0],"titre_bull"=>$tab_bull[$i]['t'][0]);
1932                                        }
1933                                }
1934                        }
1935                }
1936}
1937
1938/*
1939 * Fonction qui génère la création du bulletinage et les articles pour les périos
1940 */
1941function creer_bulletinage_et_articles($bull=array(), $art=array()){
1942        global $notice_id, $dbh, $notices_a_creer, $bulletins_crees, $notices_crees,$tit_200a,$isbn_OK,$id_unimarc,$msg;
1943        global $force_creation_notice_perio;
1944        //On regarde si la notice n'existe pas déjà dans la base
1945        $requete="select notice_id from notices where tit1 LIKE '".addslashes(clean_string(implode (" ; ",$tit_200a)))."' and niveau_biblio='s' and niveau_hierar='1' and notice_id !='".addslashes($notice_id)."' ";
1946        if($isbn_OK) $requete.= "and code = '".addslashes($isbn_OK)."'";
1947        $res=pmb_mysql_query($requete,$dbh);
1948        if((!isset($force_creation_notice_perio) || !$force_creation_notice_perio) && pmb_mysql_num_rows($res)){
1949                $id_perio_garde=0;
1950                while (($r=pmb_mysql_fetch_object($res)) && !$id_perio_garde) {
1951                        if(!array_search($r->notice_id,$notices_crees)){
1952                                //Si le periodique ne fait pas parti des notices créées (il était déja dans la base)
1953                                $id_perio_garde=$r->notice_id;
1954                        }
1955                }
1956                if($id_perio_garde){
1957                        pmb_mysql_query("insert into error_log (error_origin, error_text) values ('import_".addslashes(SESSid).".inc', '".$msg[542]." $id_unimarc "." $isbn_OK ".addslashes(clean_string(implode (" ; ",$tit_200a)))."') ",$dbh) ;
1958                        //Si j'ai déja une notice dans la base avec ce titre et ce code je supprime celle que je suis en train d'importer
1959                        $perio_traite = new serial($notice_id);
1960                        $perio_traite->replace($id_perio_garde);
1961                        $perio_traite->serial_delete();
1962                        //Je travail avec le periodique qui était dans la base
1963                        $notice_id=$id_perio_garde;
1964                        $notices_crees[$id_unimarc]=$id_perio_garde;
1965                }
1966        }
1967        if($bull){
1968                for($i=0;$i<sizeof($bull);$i++){
1969                        $bulletin=array();
1970                        $bulletin=array("titre"=>$bull[$i]['t'][0],"date"=>$bull[$i]['d'][0],"mention"=>$bull[$i]['e'][0],"num"=>$bull[$i]['v'][0]);
1971                        creer_bulletin($notice_id,$bulletin,"","");
1972                }
1973        }
1974        if($art){
1975                for($i=0;$i<sizeof($art);$i++){
1976                        if(!$notices_crees[get_valeur_champ9($art[$i]['9'],'id')] && !$art[$i]['0'][0]){
1977                                $bulletin=array();
1978                                $bulletin=array("titre"=>$art[$i]['t'][1],"date"=>$art[$i]['d'][0],"mention"=>$art[$i]['e'][0],"num"=>$art[$i]['v'][0]);
1979                                creer_notice_article(get_valeur_champ9($art[$i]['9'],'id'),$art[$i]['t'][0],get_valeur_champ9($art[$i]['9'],'page'),0,$bulletin,"","",$notice_id);
1980                        }elseif($art[$i]['0'][0]){
1981                                $id=get_valeur_champ9($art[$i]['9'],'id');
1982                                $type_lien =get_valeur_champ9($art[$i]['9'],'type_lnk');
1983                                $lien=get_valeur_champ9($art[$i]['9'],'lnk');
1984                                $rank=get_valeur_champ9($art[$i]['9'],'rank')*1;
1985                                $page=get_valeur_champ9($art[$i]['9'],'page');
1986                                //On enregistre les informations pour créer l'article plus tard
1987                                $notices_a_creer[$id][] = array( "type_lnk"=> $type_lien, "lnk"=> $lien, "rank"=>$rank, "titre_art"=>$art[$i]['t'][0], "titre"=>$art[$i]['t'][1], "num"=>$art[$i]['v'][0], "mention"=>$art[$i]['e'][0], "date"=>$art[$i]['d'][0], "id_asso"=>$notice_id, "page"=>$page);
1988                        }
1989                }
1990        }
1991}
1992
1993/*
1994 * Récupère la valeur du champ $9 en fonction du critère
1995 */
1996function get_valeur_champ9($champ9=array(),$crit=''){
1997        $options=array();
1998        $options[$crit]='';
1999   for($i=0;$i<sizeof($champ9);$i++){
2000                $chaine_parse = explode(':',$champ9[$i]);
2001                if($chaine_parse[0] == $crit) {
2002                        $options[$crit] = $chaine_parse[1];
2003                }
2004        }
2005        return $options[$crit];
2006}
2007
2008/*
2009 * Créer les relations entre notice
2010 */
2011function creer_relation_notice($notice_liee=array()){
2012        global $notice_id,$notices_crees;
2013        foreach ( $notice_liee as $key => $value ) {
2014                $id=get_valeur_champ9($value['9'],'id');
2015                $type_lien =get_valeur_champ9($value['9'],'type_lnk');
2016                $lien=get_valeur_champ9($value['9'],'lnk');
2017                $rank=get_valeur_champ9($value['9'],'rank')*1;
2018                $id_mere=0;
2019                $id_fille=0;
2020                $id_notice_liee=0;
2021                $ancien_id=get_valeur_champ9($value['9'],'id');
2022                if($notices_crees[$ancien_id]){
2023                        //Si la notice lié est créé
2024                        $id_notice_liee=$notices_crees[$ancien_id];
2025                }elseif($value['0'][0]){
2026                        //Le lien sera a creer plus tard
2027                        $notices_a_creer[$ancien_id][] = array( "type_lnk"=> $type_lien, "lnk"=> $lien, "rank"=>$rank, "id_asso"=>$notice_id);
2028                }else{
2029                        //Il faut la créer
2030                        $niveau_bilio=get_valeur_champ9($value['9'],'bl');
2031                        switch ( $niveau_bilio ) {
2032                                case 'm0':
2033                                        $id_notice_liee=creer_notice_monographie($ancien_id,$value['t'][0],$value['y'][0]);
2034                                        break;
2035                                case 's1':
2036                                        $id_notice_liee=creer_notice_periodique($ancien_id,$value['t'][0],$value['x'][0]);
2037                                        break;
2038                                case 'a2':
2039                                        $bulletin=array("titre"=>$value['t'][1],"date"=>$value['d'][0],"mention"=>$value['e'][0],"num"=>$value['v'][0]);
2040                                        $id_notice_liee=creer_notice_article($ancien_id,$value['t'][0],"","",$bulletin,$value['t'][2],$value['x'][0],"");
2041                                        break;
2042                                case 'b2':
2043                                        $bulletin=array("titre"=>$value['t'][1],"date"=>$value['d'][0],"mention"=>$value['e'][0],"num"=>$value['v'][0]);
2044                                        $id_notice_liee=creer_notice_bulletin($ancien_id,$value['t'][0],$bulletin,$value['t'][2],$value['x'][0]);
2045                                        break;
2046                        }
2047                }
2048
2049                if($lien == 'child'){
2050                        $direction = 'down';
2051                }elseif($lien == 'parent'){
2052                        $direction = 'up';
2053                }elseif($lien == 'pair'){
2054                        $direction = 'both';
2055                }
2056
2057                if($notice_id && $id_notice_liee && ($notice_id != $id_notice_liee)){
2058                        if (!notice_relations::relation_exists($notice_id, $id_notice_liee, $type_lien, $direction)) {
2059                                notice_relations::insert_from_import($notice_id, $id_notice_liee, $type_lien, $rank, $direction);
2060                        }
2061                }
2062        }
2063}
2064/*
2065 * Créer les notices de monographie
2066 */
2067function creer_notice_monographie($ancien_id=0,$titre="",$code=""){
2068        global $notices_crees,$dbh,$statutnot;
2069        global $isbn_dedoublonnage,$isbn_only;
2070        if((($isbn_dedoublonnage)&&(!$isbn_only))||(($isbn_dedoublonnage)&&($isbn_only)&&(isISBN($code)))){// Si dédoublonnage sur ISBN activé
2071                $requete="SELECT notice_id FROM notices WHERE niveau_biblio='m' and niveau_hierar='0' AND code='".addslashes($code)."' ";
2072                $res=pmb_mysql_query($requete,$dbh);
2073                if($res && (pmb_mysql_num_rows($res) == 1)){//J'ai déjà une notice dans la base avec ce code barre
2074                        $id=pmb_mysql_result($res,0,0);
2075                        if($ancien_id){
2076                                $notices_crees[$ancien_id]=$id;
2077                        }
2078                        return $id;
2079                }
2080        }
2081
2082        $requete="insert into notices (tit1, code, niveau_biblio, niveau_hierar,statut) values ('".addslashes($titre)."','".addslashes($code)."', 'm', '0','".$statutnot."')";
2083        pmb_mysql_query($requete,$dbh);
2084        $id=pmb_mysql_insert_id();
2085        audit::insert_creation(AUDIT_NOTICE,$id);
2086        // Mise à jour des index de la notice
2087        notice::majNotices($id);
2088        // Mise à jour de la table "notices_global_index"
2089        notice::majNoticesGlobalIndex($id);
2090        // Mise à jour de la table "notices_mots_global_index"
2091        notice::majNoticesMotsGlobalIndex($id);
2092        if($ancien_id){
2093                $notices_crees[$ancien_id]=$id;
2094        }
2095        return $id;
2096}
2097/*
2098 * Créer les notices de periodique
2099 */
2100function creer_notice_periodique($ancien_id=0,$titre="",$code=""){
2101        global $notices_crees,$dbh,$force_creation_notice_perio,$statutnot;
2102        //On regarde si il existe
2103        if($ancien_id){
2104                if($notices_crees[$ancien_id]){
2105                        $id_perio=$notices_crees[$ancien_id];
2106                }else{
2107                        $requete="select notice_id from notices where tit1 LIKE '".addslashes(clean_string($titre))."' and niveau_biblio='s' and niveau_hierar='1'";
2108                        if($code) $requete.=" and code='".addslashes($code)."'";
2109                        $res_perio = pmb_mysql_query($requete,$dbh);
2110                        if ((!isset($force_creation_notice_perio) || !$force_creation_notice_perio) && pmb_mysql_num_rows($res_perio))  {
2111                                $id_perio = pmb_mysql_result($res_perio,0,0);
2112                        }else{
2113                                $requete="insert into notices (tit1,code, niveau_biblio, niveau_hierar,statut) values('".addslashes(clean_string($titre))."','".addslashes($code)."', 's', '1','".$statutnot."')";
2114                                pmb_mysql_query($requete, $dbh);
2115                                $id_perio = pmb_mysql_insert_id();
2116                                audit::insert_creation(AUDIT_NOTICE,$id_perio);
2117                                // Mise à jour des index de la notice
2118                                notice::majNotices($id_perio);
2119                                // Mise à jour de la table "notices_global_index"
2120                                notice::majNoticesGlobalIndex($id_perio);
2121                                // Mise à jour de la table "notices_mots_global_index"
2122                                notice::majNoticesMotsGlobalIndex($id_perio);
2123                        }
2124                        $notices_crees[$ancien_id]=$id_perio;
2125                }
2126        }else{
2127                $requete="select notice_id from notices where tit1 LIKE '".addslashes(clean_string($titre))."' and niveau_biblio='s' and niveau_hierar='1'";
2128                if($code) $requete.=" and code='".addslashes($code)."'";
2129                $res_perio = pmb_mysql_query($requete,$dbh);
2130                if ((!isset($force_creation_notice_perio) || !$force_creation_notice_perio) && pmb_mysql_num_rows($res_perio))  {
2131                        $id_perio = pmb_mysql_result($res_perio,0,0);
2132                }else{
2133                        $requete="insert into notices (tit1,code, niveau_biblio, niveau_hierar,statut) values('".addslashes(clean_string($titre))."','".addslashes($code)."', 's', '1','".$statutnot."')";
2134                        pmb_mysql_query($requete, $dbh);
2135                        $id_perio = pmb_mysql_insert_id();
2136                        audit::insert_creation(AUDIT_NOTICE,$id_perio);
2137                        // Mise à jour des index de la notice
2138                        notice::majNotices($id_perio);
2139                        // Mise à jour de la table "notices_global_index"
2140                        notice::majNoticesGlobalIndex($id_perio);
2141                        // Mise à jour de la table "notices_mots_global_index"
2142                        notice::majNoticesMotsGlobalIndex($id_perio);
2143                }
2144        }
2145        return $id_perio;
2146}
2147/*
2148 * Créer les bulletins
2149 * Bulletin est un tableau avec les clés : titre, date, mention, num
2150 */
2151function creer_bulletin($id_perio=0,$bulletin=array(),$titre_perio="",$code_perio=""){
2152        global $bulletins_crees,$dbh;
2153
2154        if(!$id_perio){
2155                //Si je n'ai pas d'identifiant de periodique je vais en chercher un ou le créer
2156                $id_perio=creer_notice_periodique(0,$titre_perio,$code_perio);
2157        }
2158
2159        if(!$bulletins_crees[$id_perio][$bulletin["num"]][$bulletin["date"].$bulletin["mention"]]){
2160                //Si il n'est pas déja créé, on regarde si le bulletin est présent dans la base avant de le créer
2161                $requete="select bulletin_id from bulletins where bulletin_notice='".addslashes($id_perio)."' and bulletin_numero='".addslashes($bulletin["num"])."' and mention_date='".addslashes($bulletin["mention"])."'";
2162                if($bulletin["date"])$requete.=" and date_date='".addslashes($bulletin["date"])."' ";
2163                $res=pmb_mysql_query($requete, $dbh);
2164                if(pmb_mysql_num_rows($res)){
2165                        $id_bull = pmb_mysql_result($res,0,0);
2166                }else{
2167                        $requete_bulletin = "insert into bulletins (bulletin_numero, bulletin_notice, mention_date, date_date, bulletin_titre) values ('".addslashes($bulletin["num"])."', '".addslashes($id_perio)."', '".addslashes($bulletin["mention"])."', '".addslashes($bulletin["date"])."', '".addslashes($bulletin["titre"])."')";
2168                        pmb_mysql_query($requete_bulletin, $dbh);
2169                        $id_bull = pmb_mysql_insert_id();
2170                        audit::insert_creation(AUDIT_BULLETIN,$id_bull);
2171                }
2172                $bulletins_crees[$id_perio][$bulletin["num"]][$bulletin["date"].$bulletin["mention"]] = $id_bull;
2173        } else {
2174                $id_bull = $bulletins_crees[$id_perio][$bulletin["num"]][$bulletin["date"].$bulletin["mention"]];
2175        }
2176        return $id_bull;
2177}
2178
2179/*
2180 * Créer les notices d'article
2181 * Bulletin est un tableau avec les clés : titre, date, mention, num
2182 */
2183function creer_notice_article($ancien_id=0,$titre_article="",$npage_article="",$id_article=0,$bulletin=array(),$titre_perio="",$code_perio="",$id_perio=0){
2184        global $notices_crees,$dbh,$msg,$statutnot;
2185        if($ancien_id){
2186                if($notices_crees[$ancien_id]){
2187                        $id_article=$notices_crees[$ancien_id];
2188                }else{
2189                        //On va chercher le bulletin
2190                        if($id_perio){
2191                                $id_bulletin=creer_bulletin($id_perio,$bulletin,$titre_perio,$code_perio);
2192                        }else{
2193                                $id_bulletin=creer_bulletin(0,$bulletin,$titre_perio,$code_perio);
2194                        }
2195                        //On créer l'article
2196                        if(!$id_article){
2197                                $requete="insert into notices (tit1, npages, niveau_biblio, niveau_hierar,statut) values ('".addslashes(clean_string($titre_article))."','".addslashes($npage_article)."', 'a', '2','".$statutnot."')";
2198                                pmb_mysql_query($requete,$dbh);
2199                                $id_article=pmb_mysql_insert_id();
2200                                audit::insert_creation(AUDIT_NOTICE,$id_article);
2201                                //calcul des droits d'accès s'ils sont activés
2202                                calc_notice_acces_rights($id_article);
2203                                // Mise à jour des index de la notice
2204                                notice::majNotices($id_article);
2205                                // Mise à jour de la table "notices_global_index"
2206                                notice::majNoticesGlobalIndex($id_article);
2207                                // Mise à jour de la table "notices_mots_global_index"
2208                                notice::majNoticesMotsGlobalIndex($id_article);
2209                        }
2210                        //Je regarde si je n'ai pas un autre article avec ce titre
2211                        $requete="SELECT old.notice_id,old.tit1 FROM notices new, notices old JOIN analysis ON analysis_notice=old.notice_id WHERE new.notice_id='".addslashes($id_article)."' AND new.notice_id!=old.notice_id AND analysis_bulletin='".addslashes($id_bulletin)."' AND new.tit1=old.tit1 ";
2212                        $res_doubl=pmb_mysql_query($requete);
2213                        if(pmb_mysql_num_rows($res_doubl)){
2214                                notice::del_notice($id_article);
2215                                pmb_mysql_query("insert into error_log (error_origin, error_text) values ('import_".addslashes(SESSid).".inc', '".$msg[542]." $id_unimarc "." $isbn_OK ".addslashes(pmb_mysql_result($res_doubl,0,1))."') ",$dbh) ;
2216                                $id_article=pmb_mysql_result($res_doubl,0,0);//A voir pr modif
2217                        }else{
2218                                $requete="SELECT notice_id FROM notices WHERE notice_id='".addslashes($id_article)."'";
2219                                $res_art=pmb_mysql_query($requete);
2220                                if(pmb_mysql_num_rows($res_art)){
2221                                        //On créer le lien entre le bulletin et l'article
2222                                        $requete="insert into analysis (analysis_bulletin, analysis_notice) values ( '".addslashes($id_bulletin)."', '".addslashes($id_article)."' )";
2223                                        pmb_mysql_query($requete,$dbh);
2224                                }
2225                        }
2226                        $notices_crees[$ancien_id]=$id_article;
2227                }
2228        }else{
2229                //On va chercher le bulletin
2230                if($id_perio){
2231                        $id_bulletin=creer_bulletin($id_perio,$bulletin,$titre_perio,$code_perio);
2232                }else{
2233                        $id_bulletin=creer_bulletin(0,$bulletin,$titre_perio,$code_perio);
2234                }
2235                //On créer l'article
2236                if(!$id_article){
2237                        $requete="insert into notices (tit1, npages, niveau_biblio, niveau_hierar,statut) values ('".addslashes(clean_string($titre_article))."','".addslashes($npage_article)."', 'a', '2','".$statutnot."')";
2238                        pmb_mysql_query($requete,$dbh);
2239                        $id_article=pmb_mysql_insert_id();
2240                        audit::insert_creation(AUDIT_NOTICE,$id_article);
2241                        //calcul des droits d'accès s'ils sont activés
2242                        calc_notice_acces_rights($id_article);
2243                        // Mise à jour des index de la notice
2244                        notice::majNotices($id_article);
2245                        // Mise à jour de la table "notices_global_index"
2246                        notice::majNoticesGlobalIndex($id_article);
2247                        // Mise à jour de la table "notices_mots_global_index"
2248                        notice::majNoticesMotsGlobalIndex($id_article);
2249                }
2250                //Je regarde si je n'ai pas un autre article avec ce titre
2251                $requete="SELECT old.notice_id,old.tit1 FROM notices new, notices old JOIN analysis ON analysis_notice=old.notice_id WHERE new.notice_id='".addslashes($id_article)."' AND new.notice_id!=old.notice_id  AND analysis_bulletin='".addslashes($id_bulletin)."' AND new.tit1=old.tit1 ";
2252                $res_doubl=pmb_mysql_query($requete);
2253                if(pmb_mysql_num_rows($res_doubl)){
2254                        notice::del_notice($id_article);
2255                        pmb_mysql_query("insert into error_log (error_origin, error_text) values ('import_".addslashes(SESSid).".inc', '".$msg[542]." $id_unimarc "." $isbn_OK ".addslashes(pmb_mysql_result($res_doubl,0,1))."') ",$dbh) ;
2256                        $id_article=pmb_mysql_result($res_doubl,0,0);//A voir pr modif
2257                }else{
2258                        $requete="SELECT notice_id FROM notices WHERE notice_id='".addslashes($id_article)."'";
2259                        $res_art=pmb_mysql_query($requete);
2260                        if(pmb_mysql_num_rows($res_art)){
2261                                //On créer le lien entre le bulletin et l'article
2262                                $requete="insert into analysis (analysis_bulletin, analysis_notice) values ( '".addslashes($id_bulletin)."', '".addslashes($id_article)."' )";
2263                                pmb_mysql_query($requete,$dbh);
2264                        }
2265                }
2266        }
2267        if($id_article && ($bulletin["date"])){
2268                $requete="UPDATE notices SET year='".addslashes(substr($bulletin["date"],0,4))."', date_parution='".addslashes($bulletin["date"])."' WHERE notice_id='".$id_article."'";
2269                pmb_mysql_query($requete);
2270        }
2271        return $id_article;
2272}
2273
2274/*
2275 * Créer les notices de bulletin
2276 * Bulletin est un tableau avec les clés : titre, date, mention, num
2277 */
2278function creer_notice_bulletin($ancien_id=0,$titre_notice_bulletin="",$bulletin=array(),$titre_perio="",$code_perio=""){
2279        global $notices_crees,$dbh;
2280        if($ancien_id){
2281                if($notices_crees[$ancien_id]){
2282                        $id_notice_bulletin=$notices_crees[$ancien_id];
2283                }else{
2284                        //On va chercher le bulletin
2285                        $id_perio=creer_notice_periodique(0,$titre_perio,$code_perio);
2286                        $id_bulletin=creer_bulletin($id_perio,$bulletin,$titre_perio,$code_perio);
2287                        $id_notice_bulletin= creer_lien_notice_bulletin($ancien_id,$id_perio,$id_bulletin,0,$titre_notice_bulletin,$bulletin);
2288                }
2289        }else{
2290                //On va chercher le bulletin
2291                $id_perio=creer_notice_periodique(0,$titre_perio,$code_perio);
2292                $id_bulletin=creer_bulletin($id_perio,$bulletin,$titre_perio,$code_perio);
2293                $id_notice_bulletin= creer_lien_notice_bulletin($ancien_id,$id_perio,$id_bulletin,0,$titre_notice_bulletin,$bulletin);
2294        }
2295        return $id_notice_bulletin;
2296}
2297
2298/*
2299 * Faire les liens d'une notice de bulletin
2300 */
2301
2302function creer_lien_notice_bulletin($ancien_id=0,$id_perio=0,$id_bulletin=0,$id_not_bull=0,$titre_not_bull="",$bulletin){
2303        global $dbh, $msg,$isbn_OK,$tit_200a,$notice_id,$notices_crees,$statutnot;
2304        //On control que ce bulletin n'a pas déjà une notice
2305        $requete="select num_notice from bulletins where bulletin_id='".$id_bulletin."'";
2306        if($id_not_bull)$requete.=" and num_notice!='".$id_not_bull."'";
2307        $res=pmb_mysql_query($requete,$dbh);
2308        if(pmb_mysql_num_rows($res) && pmb_mysql_result($res,0,0)){
2309                //Si j'ai déja une notice associé à ce bulletin je la récupère
2310                if($id_not_bull){
2311                        //Si j'ai aussi un identifiant de notice de bulletin, je supprime le plus récent
2312                        notice::del_notice($id_not_bull);
2313                        pmb_mysql_query("insert into error_log (error_origin, error_text) values ('import_".addslashes(SESSid).".inc', '".$msg[542]." $id_unimarc "." $isbn_OK ".addslashes(clean_string(implode (" ; ",$tit_200a)))."') ",$dbh) ;
2314                        $id_notice_bulletin=pmb_mysql_result($res,0,0);//A voir pr modif
2315                }else{
2316                        $id_notice_bulletin= pmb_mysql_result($res,0,0);
2317                }
2318                $notice_id=$id_notice_bulletin;
2319        }else{
2320                if($titre_not_bull){
2321                        //Si j'ai un titre je créé la notice de bulletin
2322                        $requete="insert into notices (tit1,niveau_biblio, niveau_hierar,statut) values ('".addslashes(clean_string($titre_not_bull))."', 'b', '2','".$statutnot."')";
2323                        pmb_mysql_query($requete,$dbh);
2324                        $id_notice_bulletin=pmb_mysql_insert_id();
2325                        audit::insert_creation(AUDIT_NOTICE,$id_notice_bulletin);
2326                        //calcul des droits d'accès s'ils sont activés
2327                        calc_notice_acces_rights($id_notice_bulletin);
2328                        // Mise à jour des index de la notice
2329                        notice::majNotices($id_notice_bulletin);
2330                        // Mise à jour de la table "notices_global_index"
2331                        notice::majNoticesGlobalIndex($id_notice_bulletin);
2332                        // Mise à jour de la table "notices_mots_global_index"
2333                        notice::majNoticesMotsGlobalIndex($id_notice_bulletin);
2334                }else{
2335                        $id_notice_bulletin=$id_not_bull;
2336                }
2337                //On créer le lien entre le bulletin et la notice de bulletin
2338                $requete="update bulletins set num_notice='".$id_notice_bulletin."' where bulletin_id='".$id_bulletin."'";
2339                pmb_mysql_query($requete,$dbh);
2340        }
2341        $notices_crees[$ancien_id]=$id_notice_bulletin;
2342        //Lien entre la notice de bulletin et la notice de periodique
2343        notice_relations::insert($id_notice_bulletin, $id_perio, 'b', 'up', false);
2344        if($id_notice_bulletin && ($bulletin["date"])){
2345                $requete="UPDATE notices SET year='".addslashes(substr($bulletin["date"],0,4))."', date_parution='".addslashes($bulletin["date"])."' WHERE notice_id='".$id_notice_bulletin."'";
2346                pmb_mysql_query($requete);
2347        }
2348        return $id_notice_bulletin;
2349}
2350
2351function keep_authority_infos($authority_number,$type,$origin_authority,$notice_id,$authority_infos=array()){
2352        //on a un numéro d'autorité, on regarde si on l'a déjà rencontré
2353        $query = "select id_authority_source,num_authority from authorities_sources where authority_number = '".$authority_number."' and num_origin_authority='".$origin_authority."' and authority_type = '".$type."'";
2354        $result = pmb_mysql_query($query);
2355        if(pmb_mysql_num_rows($result)){
2356                $row = pmb_mysql_fetch_object($result);
2357                $num_authority = $row->num_authority;
2358                $num_authority_source= $row->id_authority_source;
2359                // on cherche la préférence... dès fois que...
2360                $query = "select id_authority_source, num_authority from authorities_sources where authority_number = '".$authority_number."' and authority_type = '".$type."' and authority_favorite = 1";
2361                $result = pmb_mysql_query($query);
2362                if(pmb_mysql_num_rows($result)){
2363                        $row = pmb_mysql_fetch_object($result);
2364                        $num_authority = $row->num_authority;
2365                        $num_authority_source= $row->id_authority_source;
2366                }
2367        }else{
2368                // c'est un petit nouveau
2369                switch($type){
2370                        case "author" :
2371                                $num_authority = auteur::import($authority_infos);
2372                                break;
2373                        case "uniform_title" :
2374                                $num_authority = titre_uniforme::import($authority_infos);
2375                                break;
2376                        case "category" :
2377                                $num_authority = category::import($authority_infos);
2378                                break;
2379                        case "collection" :
2380                                $num_authority = collection::import($authority_infos);
2381                                break;
2382                        case "subcollection" :
2383                                $num_authority = subcollection::import($authority_infos);
2384                                break;
2385                        case "serie" :
2386
2387                                break;
2388                }
2389                $query = "insert into authorities_sources set
2390                        num_authority = '$num_authority',
2391                        authority_number = '".$authority_number."',
2392                        authority_type = '$type',
2393                        num_origin_authority = ".$origin_authority.",
2394                        import_date = now()";
2395                pmb_mysql_query($query);
2396                $num_authority_source = pmb_mysql_insert_id();
2397        }
2398        //certaines autorités sont créés avant la notice...
2399        if($notice_id!=0){
2400                $query = "insert into notices_authorities_sources set
2401                num_authority_source = ".$num_authority_source.",
2402                num_notice = ".$notice_id;
2403                pmb_mysql_query($query);
2404        }
2405        return $num_authority;
2406}
2407
2408function calc_notice_acces_rights($id) {
2409        global $gestion_acces_active;
2410        global $gestion_acces_user_notice;
2411        global $gestion_acces_empr_notice;
2412
2413        if ($gestion_acces_active==1) {
2414                $ac= new acces();
2415                //traitement des droits acces user_notice
2416                if ($gestion_acces_user_notice==1) {
2417                        $dom_1= $ac->setDomain(1);
2418                        $dom_1->storeUserRights(0, $id);
2419                }
2420                //traitement des droits acces empr_notice
2421                if ($gestion_acces_empr_notice==1) {
2422                        $dom_2= $ac->setDomain(2);
2423                        $dom_2->storeUserRights(0, $id);
2424                }
2425        }
2426}
Note: See TracBrowser for help on using the repository browser.