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

Last change on this file since 6883 was 6883, checked in by jrpelegrina, 20 months ago

Added original pmb5.0 files

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