source: pmb4.1/trunk/fuentes/pmb/catalog/serials/analysis/analysis_update.inc.php @ 478

Last change on this file since 478 was 478, checked in by mabarracus, 4 years ago

copy trusty code 4.1

  • Property svn:executable set to *
File size: 13.0 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: analysis_update.inc.php,v 1.51.2.2 2014-11-26 09:55:26 mbertin Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".inc.php")) die("no access");
8
9require_once($class_path."/notice_doublon.class.php");
10
11if ($forcage == 1) {
12        $tab= unserialize( urldecode($ret_url) );
13        foreach($tab->GET as $key => $val){
14                $GLOBALS[$key] = $val;     
15        }       
16        foreach($tab->POST as $key => $val){
17                $GLOBALS[$key] = $val;
18        }
19} elseif ($pmb_notice_controle_doublons != 0 && !$analysis_id) {       
20        //Si control de dédoublonnage activé   
21        $sign = new notice_doublon();
22        $signature = $sign->gen_signature();
23       
24        $requete="select signature, niveau_biblio ,notice_id from notices where signature='$signature'";
25        if($serial_id)  $requete.= " and notice_id != '$analysis_id' ";
26        $requete.= " limit 1 ";
27               
28        $result=mysql_query($requete, $dbh);   
29        if (($r=mysql_fetch_object($result))) {
30                //affichage de l'erreur, en passant tous les param postés (serialise) pour l'éventuel forcage
31                $tab = new stdClass();
32                $tab->POST = addslashes_array($_POST);
33                $tab->GET = addslashes_array($_GET);
34                $ret_url= urlencode(serialize($tab));
35                require_once("$class_path/mono_display.class.php");
36                require_once("$class_path/serial_display.class.php");
37           
38                print "
39                        <br /><div class='erreur'>$msg[540]</div>
40                        <script type='text/javascript' src='./javascript/tablist.js'></script>
41                        <div class='row'>
42                                <div class='colonne10'>
43                                        <img src='./images/error.gif' align='left'>
44                                </div>
45                                <div class='colonne80'>
46                                        <strong>".$msg["gen_signature_erreur_similaire"]."</strong>
47                                </div>
48                        </div>
49                        <div class='row'>
50                                <form class='form-$current_module' name='dummy'  method='post' action='./catalog.php?categ=serials&sub=analysis&action=update&bul_id=$bul_id&analysis_id=$analysis_id'>
51                                        <input type='hidden' name='forcage' value='1'>
52                                        <input type='hidden' name='signature' value='$signature'>
53                                        <input type='hidden' name='ret_url' value='$ret_url'>
54                                        <input type='button' name='ok' class='bouton' value=' $msg[76] ' onClick='history.go(-1);'>
55                                        <input type='submit' class='bouton' name='bt_forcage' value=' ".htmlentities($msg["gen_signature_forcage"], ENT_QUOTES,$charset)." '>
56                                </form>
57                               
58                        </div>
59                        ";
60                if($r->niveau_biblio != 's' && $r->niveau_biblio != 'a') {
61                        // notice de monographie
62                        $nt = new mono_display($r->notice_id,1,'catalog.php?categ=isbd&id='.$r->notice_id);
63                } elseif($r->niveau_biblio == 's'){
64                        // on a affaire à un périodique
65                        $nt = new serial_display($r->notice_id,1,'catalog.php?categ=serials&sub=view&serial_id='.$r->notice_id);
66                }else{
67                        // on a affaire à un article
68                        $bulletin_id = analysis::getBulletinIdFromAnalysisId($r->notice_id);
69                        $nt = new serial_display($r->notice_id,1,'','catalog.php?categ=serials&sub=bulletinage&action=view&bul_id='.$bulletin_id);
70                }
71                echo "
72                        <div class='row'>
73                        $nt->result
74                    </div>
75                        <script>document.getElementById('el".$r->notice_id."Child').setAttribute('startOpen','Yes');</script>
76                        <script type='text/javascript'>document.forms['dummy'].elements['ok'].focus();</script>";       
77                exit();
78        }
79}
80
81       
82//verification des droits de modification notice
83//droits d'acces
84if ($gestion_acces_active==1) {
85        require_once("$class_path/acces.class.php");
86        $ac= new acces();
87}
88
89$acces_m=1;
90if ($gestion_acces_active==1 && $gestion_acces_user_notice==1) {
91        $dom_1= $ac->setDomain(1);
92        $acces_m = $dom_1->getRights($PMBuserid,$serial_id,8);
93}
94
95if ($acces_m==0) {
96
97        if (!$analysis_id) {
98                error_message('', htmlentities($dom_1->getComment('mod_bull_error'), ENT_QUOTES, $charset), 1, '');
99        } else {
100                error_message('', htmlentities($dom_1->getComment('mod_depo_error'), ENT_QUOTES, $charset), 1, '');
101        }
102
103} else {
104
105       
106        // script d'update d'un dépouillement de périodique
107       
108        // mise à jour des champs avec autorité
109        // si l'utilisateur vide les champs, l'id est mise à zéro
110        if(!$f_indexint) $f_indexint_id = 0;
111       
112        // nettoyage des valeurs du form
113        // les valeurs passées sont mises en tableau pour être passées
114        // à la méthode d'update
115        $table = array();
116        $table['doc_type']      =  $typdoc;
117        $table['typdoc']        =  $typdoc;
118        $table['statut']                =  $form_notice_statut;
119        $table['b_level']       =  $b_level;
120        $table['h_level']       =  $h_level;
121        $table['f_tit1']        =  clean_string($f_tit1);
122        $table['f_tit2']        =  clean_string($f_tit2);
123        $table['f_tit3']        =  clean_string($f_tit3);
124        $table['f_tit4']        =  clean_string($f_tit4);
125        $table['f_commentaire_gestion'] =  $f_commentaire_gestion ;
126        $table['f_thumbnail_url'] =  $f_thumbnail_url ;
127        $table['indexation_lang'] = $indexation_lang;
128       
129        // auteur principal
130        $f_aut[] = array (
131                        'id' => $f_aut0_id,
132                        'fonction' => $f_f0_code,
133                        'type' => '0',
134                        'ordre' => 0 );
135        // autres auteurs
136        for ($i=0; $i<$max_aut1; $i++) {
137                $var_autid = "f_aut1_id$i" ;
138                $var_autfonc = "f_f1_code$i" ;
139                $f_aut[] = array (
140                                'id' => $$var_autid,
141                                'fonction' => $$var_autfonc,
142                                'type' => '1',
143                                'ordre' => $i );
144                }
145        // auteurs secondaires
146        for ($i=0; $i<$max_aut2 ; $i++) {
147       
148                $var_autid = "f_aut2_id$i" ;
149                $var_autfonc = "f_f2_code$i" ;
150                $f_aut[] = array (
151                                'id' => $$var_autid,
152                                'fonction' => $$var_autfonc,
153                                'type' => '2',
154                                'ordre' => $i );
155                }
156       
157        $table['pages']                   =  clean_string($pages);
158        $table['f_n_contenu']             =  $f_n_contenu;
159        $table['f_n_gen']                 =  $f_n_gen;
160        $table['f_n_resume']              =  $f_n_resume;
161       
162// catégories           
163        if($tab_categ_order){
164                $categ_order=explode(",",$tab_categ_order);
165                $order=0;
166                foreach($categ_order as $old_order){
167                        $var_categid = "f_categ_id$old_order" ;
168                        if($var_categid){
169                                $f_categ[] = array (
170                                                'id' => $$var_categid,
171                                                'ordre' => $order );
172                                $order++;
173                        }       
174                }
175        }else{
176                for ($i=0; $i< $max_categ ; $i++) {
177                        $var_categid = "f_categ_id$i" ;
178                        $f_categ[] = array (
179                                        'id' => $$var_categid,
180                                        'ordre' => $i );
181                }
182        }
183       
184        $table['f_indexint_id']     =  $f_indexint_id;
185        $table['f_indexation']      =  clean_string($f_indexation);
186        $table['f_lien']            =  clean_string($f_lien);
187        $table['f_eformat']         =  clean_string($f_eformat);
188        $table['signature']                     = $signature;
189       
190        // mise à jour de l'entête de page
191        echo str_replace('!!page_title!!', $msg[4000].$msg[1003].$msg[4023], $serial_header);
192       
193        $p_perso=new parametres_perso("notices");
194        $nberrors=$p_perso->check_submited_fields();
195       
196        //Pour la synchro rdf
197        if($pmb_synchro_rdf){
198                require_once($class_path."/synchro_rdf.class.php");
199                $synchro_rdf=new synchro_rdf();
200                if($analysis_id){
201                        $synchro_rdf->delRdf($analysis_id,0);
202                }
203        }
204       
205        //Traitement des périos et bulletins
206        global $perio_type, $bull_type;
207        global  $f_perio_new, $f_perio_new_issn;
208        global  $f_bull_new_num, $f_bull_new_date, $f_bull_new_mention, $f_bull_new_titre;
209        //Perios
210        if($perio_type == 'insert_new' && !$serial_id){
211                $new_serial = new serial();
212                $values = array();
213                $values['tit1'] = $f_perio_new;
214                $values['code'] = $f_perio_new_issn;
215                $values['niveau_biblio'] = "s";
216                $values['niveau_hierar'] = "1";
217                $serial_id =  $new_serial->update($values);
218                if($pmb_synchro_rdf){
219                        $synchro_rdf->addRdf($serial_id,0);
220                }
221        }       
222        //Bulletin
223        if($bull_type == 'insert_new' && !$bul_id) {
224                $req = "insert into bulletins set bulletin_numero='".$f_bull_new_num."',
225                          mention_date='".$f_bull_new_mention."',
226                          date_date='".$f_bull_new_date."',
227                          bulletin_titre='".$f_bull_new_titre."',
228                          bulletin_notice='".$serial_id."'";
229                mysql_query($req,$dbh);
230                $bul_id = mysql_insert_id();
231                if($pmb_synchro_rdf){
232                        $synchro_rdf->addRdf(0,$bul_id);
233                }
234        }
235        $table['serial_id']     =  $serial_id;
236        $table['bul_id']        =  $bul_id;
237       
238       
239        if (!$nberrors) {
240                $myAnalysis = new analysis($analysis_id, $bul_id);
241                $result = $myAnalysis->analysis_update($table);
242        } else {
243                error_message_history($msg["notice_champs_perso"],$p_perso->error_message,1);
244                exit();
245        }
246       
247        if($id_sug && $result){
248                $req_sug = "update suggestions set num_notice='".$result."' where id_suggestion='".$id_sug."'";
249                mysql_query($req_sug,$dbh); 
250        }
251       
252        if ($result) {
253                //Traitement des liens
254                $requete="DELETE FROM notices_relations WHERE num_notice='$result' OR linked_notice='$result'";
255                mysql_query($requete);
256                for ($i=0; $i<$max_rel; $i++) {
257                        $f_rel="f_rel_type_".$i;
258                        $f_rel=explode('-', ${$f_rel});
259                        $f_rel_id="f_rel_id_".$i;
260                        $f_rel_rank="f_rel_rank_".$i;
261                        $f_rel_type=$f_rel[0];
262                        $f_rel_direction=$f_rel[1];
263                       
264                        $f_rel_rank=${$f_rel_rank};
265                        $f_rel_id=${$f_rel_id};
266                       
267                        if ($f_rel_id) {
268                                if($f_rel_direction=='up'){
269                                        $requete="INSERT INTO notices_relations VALUES('$result','$f_rel_id','$f_rel_type','$f_rel_rank')";
270                                        @mysql_query($requete);
271                                }elseif($f_rel_direction=='down'){
272                                        $requete="INSERT INTO notices_relations VALUES('$f_rel_id','$result','$f_rel_type','$f_rel_rank')";
273                                        @mysql_query($requete);
274                                }
275                        }
276                }
277               
278                // traitement des auteurs
279                $rqt_del = "DELETE FROM responsability WHERE responsability_notice='$result' ";
280                $res_del = mysql_query($rqt_del, $dbh);
281                $rqt_ins = "INSERT INTO responsability (responsability_author, responsability_notice, responsability_fonction, responsability_type, responsability_ordre) VALUES ";
282                $i=0;
283                while ($i<=count ($f_aut)-1) {
284                        $id_aut=$f_aut[$i]['id'];
285                        if ($id_aut) {
286                                $fonc_aut=$f_aut[$i]['fonction'];
287                                $type_aut=$f_aut[$i]['type'];
288                                $ordre_aut = $f_aut[$i]['ordre'];
289                                $rqt = $rqt_ins . " ('$id_aut','$result','$fonc_aut','$type_aut', $ordre_aut) " ; 
290                                $res_ins = @mysql_query($rqt, $dbh);
291                        }
292                        $i++;
293                }
294               
295                // traitement des categories
296                $rqt_del = "DELETE FROM notices_categories WHERE notcateg_notice='$result' ";
297                $res_del = mysql_query($rqt_del, $dbh);
298                $rqt_ins = "INSERT INTO notices_categories (notcateg_notice, num_noeud, ordre_categorie) VALUES ";
299                while (list ($key, $val) = each ($f_categ)) {
300                        $id_categ=$val['id'];
301                        if ($id_categ) {
302                                $ordre_categ = $val['ordre'];
303                                $rqt = $rqt_ins . " ('$result','$id_categ', $ordre_categ ) " ; 
304                                $res_ins = mysql_query($rqt, $dbh);
305                        }
306                }
307       
308                // traitement des langues
309                // langues
310                $f_lang_form = array();
311                $f_langorg_form = array() ;
312                for ($i=0; $i< $max_lang ; $i++) {
313                        $var_langcode = "f_lang_code$i" ;
314                        if ($$var_langcode) $f_lang_form[] =  array ('code' => $$var_langcode,'ordre' => $i);
315                }
316       
317                // langues originales
318                for ($i=0; $i< $max_langorg ; $i++) {
319                        $var_langorgcode = "f_langorg_code$i" ;
320                        if ($$var_langorgcode) $f_langorg_form[] =  array ('code' => $$var_langorgcode,'ordre' => $i);
321                }
322       
323                $rqt_del = "delete from notices_langues where num_notice='$result' ";
324                $res_del = mysql_query($rqt_del, $dbh);
325                $rqt_ins = "insert into notices_langues (num_notice, type_langue, code_langue, ordre_langue) VALUES ";
326                while (list ($key, $val) = each ($f_lang_form)) {
327                        $tmpcode_langue=$val['code'];
328                        if ($tmpcode_langue) {
329                                $tmpordre_langue = $val['ordre'];
330                                $rqt = $rqt_ins . " ('$result',0, '$tmpcode_langue', $tmpordre_langue) " ; 
331                                $res_ins = mysql_query($rqt, $dbh);
332                        }
333                }
334               
335                // traitement des langues originales
336                $rqt_ins = "insert into notices_langues (num_notice, type_langue, code_langue, ordre_langue) VALUES ";
337                while (list ($key, $val) = each ($f_langorg_form)) {
338                        $tmpcode_langue=$val['code'];
339                        if ($tmpcode_langue) {
340                                $tmpordre_langue = $val['ordre'];
341                                $rqt = $rqt_ins . " ('$result',1, '$tmpcode_langue', $tmpordre_langue) " ; 
342                                $res_ins = @mysql_query($rqt, $dbh);
343                        }
344                }
345                //Traitement des champs persos
346                $p_perso->rec_fields_perso($result);
347               
348                // Mise à jour de la table notices_global_index
349                notice::majNoticesGlobalIndex($result);
350                // Mise à jour de la table notices_mots_global_index
351                notice::majNoticesMotsGlobalIndex($result);
352               
353                if ($gestion_acces_active==1) {
354
355                        //mise a jour des droits d'acces user_notice (idem notice mere perio)
356                        if ($gestion_acces_user_notice==1) {
357                                $q = "replace into acces_res_1 select $result, res_prf_num, usr_prf_num, res_rights, res_mask from acces_res_1 where res_num=".$myAnalysis->bulletin_notice;
358                                mysql_query($q, $dbh);
359                        } 
360       
361                        //mise a jour des droits d'acces empr_notice
362                        if ($gestion_acces_empr_notice==1) {
363                                $dom_2 = $ac->setDomain(2);
364                                if ($analysis_id) {     
365                                        $dom_2->storeUserRights(1, $result, $res_prf, $chk_rights, $prf_rad, $r_rad);
366                                } else {
367                                        $dom_2->storeUserRights(0, $result, $res_prf, $chk_rights, $prf_rad, $r_rad);
368                                }
369                        } 
370                       
371                }
372       
373        }
374       
375        if($pmb_synchro_rdf){
376                $synchro_rdf->addRdf($myAnalysis->analysis_id,0);
377        }
378       
379        if($result) {
380                print "<div class='row'><div class='msg-perio'>".$msg[maj_encours]."</div></div>";
381                $retour = "./catalog.php?categ=serials&sub=view&sub=bulletinage&action=view&bul_id=".$myAnalysis->bulletin_id;
382                print "
383                        <form class='form-$current_module' name=\"dummy\" method=\"post\" action=\"$retour\" style=\"display:none\">
384                                <input type=\"hidden\" name=\"id_form\" value=\"$id_form\">
385                        </form>
386                        <script type=\"text/javascript\">document.dummy.submit();</script>
387                        ";
388        } else {
389                error_message(  $msg[4023] ,$msg['catalog_serie_modif_depouill_imp'] ,1,"./catalog.php?categ=serials&sub=bulletinage&action=view&serial_id=$serial_id&bul_id=$bul_id");
390        }
391
392}
393?>
394
Note: See TracBrowser for help on using the repository browser.