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

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

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 25.7 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: subcollection.class.php,v 1.50 2015-06-05 13:04:00 dgoron Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9// définition de la classe de gestion des 'sous-collections'
10
11if ( ! defined( 'SUB_COLLECTION_CLASS' ) ) {
12  define( 'SUB_COLLECTION_CLASS', 1 );
13
14require_once($class_path."/notice.class.php");
15require_once("$class_path/aut_link.class.php");
16require_once($class_path."/subcollection.class.php");
17require_once("$class_path/aut_pperso.class.php");
18require_once("$class_path/audit.class.php");
19require_once($class_path."/index_concept.class.php");
20require_once($class_path."/vedette/vedette_composee.class.php");
21
22class subcollection {
23
24// ---------------------------------------------------------------
25//              propriétés de la classe
26// ---------------------------------------------------------------
27        var $id;                                // MySQL id in table 'collections'
28        var $name;                              // collection name
29        var $parent;                    // MySQL id of parent collection
30        var $parent_libelle;    // name of parent collection
31        var $editeur;                   // MySQL id of publisher
32        var $editeur_libelle;   // name of parent publisher
33        var $editor_isbd;               // isbd form of publisher
34        var $display;                   // usable form for displaying   ( _collection_. _name_ (_editeur_) )
35        var $isbd_entry;                // ISBD form ( _collection_. _name_ )
36        var $issn;                              // ISSN of sub collection
37        var $isbd_entry_lien_gestion ; // lien sur le nom vers la gestion
38        var $subcollection_web;                 // web de sous-collection
39        var $subcollection_web_link;    // lien web de sous-collection
40
41        // ---------------------------------------------------------------
42        //              subcollection($id) : constructeur
43        // ---------------------------------------------------------------
44        function subcollection($id=0) {
45                if($id) {
46                        // on cherche à atteindre une notice existante
47                        $this->id = $id;
48                        $this->getData();
49                } else {
50                        // la notice n'existe pas
51                        $this->id = 0;
52                        $this->getData();
53                }
54        }
55       
56        // ---------------------------------------------------------------
57        //              getData() : récupération infos sous collection
58        // ---------------------------------------------------------------
59        function getData() {
60                global $dbh;
61                if(!$this->id) {
62                        // pas d'identifiant. on retourne un tableau vide
63                        $this->id = 0;
64                        $this->name                             =       '';
65                        $this->parent                   =       0;
66                        $this->parent_libelle   =       '';
67                        $this->editeur                  =       0;
68                        $this->editeur_libelle  =       '';
69                        $this->display                  =       '';
70                        $this->isbd_entry               =       '';
71                        $this->issn                             =       '';
72                        $this->subcollection_web        = '';
73                        $this->subcollection_web_link = "" ;
74                        $this->comment = "" ;
75                } else {
76                        $requete = "SELECT * FROM sub_collections WHERE sub_coll_id=$this->id LIMIT 1 ";
77                        $result = @pmb_mysql_query($requete, $dbh);
78                        if(pmb_mysql_num_rows($result)) {
79                                $temp = pmb_mysql_fetch_object($result);
80                                pmb_mysql_free_result($result);
81                                $this->id= $temp->sub_coll_id;
82                                $this->name= $temp->sub_coll_name;
83                                $this->parent= $temp->sub_coll_parent;
84                                $this->issn= $temp->sub_coll_issn;
85                                $this->subcollection_web        = $temp->subcollection_web;
86                                $this->comment  = $temp->subcollection_comment;
87                                if($temp->subcollection_web) $this->subcollection_web_link = " <a href='$temp->subcollection_web' target=_blank><img src='./images/globe.gif' border=0 /></a>";
88                                else $this->subcollection_web_link = "" ;
89                                $parent = new collection($temp->sub_coll_parent);
90                                $this->parent_libelle = $parent->name;
91                                $parent_libelle_lien_gestion = $parent->isbd_entry_lien_gestion ;
92                                $this->editeur = $parent->parent;
93                                $editeur = new editeur($parent->parent);
94                                $this->editeur_libelle = $editeur->name;
95                                $this->editor_isbd = $editeur->isbd_entry;
96                                $this->issn ? $this->isbd_entry = $this->parent_libelle.'.&nbsp;'.$this->name.', ISSN '.$this->issn : $this->isbd_entry = $this->parent_libelle.'.&nbsp;'.$this->name ;
97                                $this->display = $this->parent_libelle.'. '.$this->name.' ('.$this->editeur_libelle.')';
98                                // Ajoute un lien sur la fiche sous-collection si l'utilisateur à accès aux autorités
99                                if (SESSrights & AUTORITES_AUTH) {
100                                        if ($this->issn) 
101                                                $lien_lib = $this->name.', ISSN '.$this->issn ;
102                                        else 
103                                                $lien_lib = $this->name ;
104                                        $this->isbd_entry_lien_gestion = $parent_libelle_lien_gestion.".&nbsp;<a href='./autorites.php?categ=souscollections&sub=collection_form&id=".$this->id."' class='lien_gestion'>".$lien_lib."</a>";
105                                } else 
106                                        $this->isbd_entry_lien_gestion = $this->isbd_entry;
107                                       
108                        } else {
109                                // pas de sous-collection avec cette clé
110                                $this->id = 0;
111                                $this->name                             =       '';
112                                $this->parent                   =       0;
113                                $this->parent_libelle   =       '';
114                                $this->editeur                  =       0;
115                                $this->editeur_libelle  =       '';
116                                $this->display                  =       '';
117                                $this->isbd_entry               =       '';
118                                $this->issn                             =       '';
119                                $this->subcollection_web = '';
120                                $this->comment = '';
121                                $this->subcollection_web_link = "" ;
122                        }
123                }
124        }
125       
126        // ---------------------------------------------------------------
127        //              delete() : suppression de la sous collection
128        // ---------------------------------------------------------------
129        function delete() {
130                global $dbh;
131                global $msg;
132               
133                if(!$this->id)
134                        // impossible d'accéder à cette notice de sous-collection
135                        return $msg[406];
136       
137                // récupération du nombre de notices affectées
138                $requete = "SELECT COUNT(1) FROM notices WHERE ";
139                $requete .= "subcoll_id=".$this->id;
140                $res = pmb_mysql_query($requete, $dbh);
141                $nbr_lignes = pmb_mysql_result($res, 0, 0);
142                if(!$nbr_lignes) {
143
144                        // On regarde si l'autorité est utilisée dans des vedettes composées
145                        $attached_vedettes = vedette_composee::get_vedettes_built_with_element($this->id, "subcollection");
146                        if (count($attached_vedettes)) {
147                                // Cette autorité est utilisée dans des vedettes composées, impossible de la supprimer
148                                return '<strong>'.$this->display."</strong><br />".$msg["vedette_dont_del_autority"];
149                        }
150                       
151                        // sous collection non-utilisée dans des notices : Suppression OK
152                        // effacement dans la table des collections
153                        $requete = "DELETE FROM sub_collections WHERE sub_coll_id=".$this->id;
154                        $result = pmb_mysql_query($requete, $dbh);
155                        //suppression dans la table de stockage des numéros d'autorités...
156                        //Import d'autorité
157                        subcollection::delete_autority_sources($this->id);
158                        // liens entre autorités
159                        $aut_link= new aut_link(AUT_TABLE_SUB_COLLECTIONS,$this->id);
160                        $aut_link->delete();
161                        $aut_pperso= new aut_pperso("subcollection",$this->id);
162                        $aut_pperso->delete();
163                       
164                        // nettoyage indexation concepts
165                        $index_concept = new index_concept($this->id, TYPE_SUBCOLLECTION);
166                        $index_concept->delete();
167                       
168                        audit::delete_audit(AUDIT_SUB_COLLECTION,$this->id);
169                        return false;
170                } else {
171                        // Cette collection est utilisé dans des notices, impossible de la supprimer
172                        return '<strong>'.$this->display."</strong><br />${msg[407]}";
173                }
174        }
175       
176        // ---------------------------------------------------------------
177        //              delete_autority_sources($idcol=0) : Suppression des informations d'import d'autorité
178        // ---------------------------------------------------------------
179        static function delete_autority_sources($idsubcol=0){
180                $tabl_id=array();
181                if(!$idsubcol){
182                        $requete="SELECT DISTINCT num_authority FROM authorities_sources LEFT JOIN sub_collections ON num_authority=sub_coll_id  WHERE authority_type = 'subcollection' AND sub_coll_id IS NULL";
183                        $res=pmb_mysql_query($requete);
184                        if(pmb_mysql_num_rows($res)){
185                                while ($ligne = pmb_mysql_fetch_object($res)) {
186                                        $tabl_id[]=$ligne->num_authority;
187                                }
188                        }
189                }else{
190                        $tabl_id[]=$idsubcol;
191                }
192                foreach ( $tabl_id as $value ) {
193               //suppression dans la table de stockage des numéros d'autorités...
194                        $query = "select id_authority_source from authorities_sources where num_authority = ".$value." and authority_type = 'subcollection'";
195                        $result = pmb_mysql_query($query);
196                        if(pmb_mysql_num_rows($result)){
197                                while ($ligne = pmb_mysql_fetch_object($result)) {
198                                        $query = "delete from notices_authorities_sources where num_authority_source = ".$ligne->id_authority_source;
199                                        pmb_mysql_query($query);
200                                }
201                        }
202                        $query = "delete from authorities_sources where num_authority = ".$value." and authority_type = 'subcollection'";
203                        pmb_mysql_query($query);
204                }
205        }
206       
207        // ---------------------------------------------------------------
208        //              replace($by) : remplacement de la collection
209        // ---------------------------------------------------------------
210        function replace($by,$link_save=0) {
211       
212                global $msg;
213                global $dbh;
214       
215                if(!$by) {
216                        // pas de valeur de remplacement !!!
217                        return "serious error occured, please contact admin...";
218                }
219       
220                if (($this->id == $by) || (!$this->id))  {
221                        // impossible de remplacer une collection par elle-même
222                        return $msg[226];
223                }
224                // a) remplacement dans les notices
225                // on obtient les infos de la nouvelle collection
226       
227                $n_collection = new subcollection($by);
228                if(!$n_collection->parent) {
229                        // la nouvelle collection est foireuse
230                        return $msg[406];
231                }
232               
233                $aut_link= new aut_link(AUT_TABLE_SUB_COLLECTIONS,$this->id);
234                // "Conserver les liens entre autorités" est demandé
235                if($link_save) {
236                        // liens entre autorités
237                        $aut_link->add_link_to(AUT_TABLE_SUB_COLLECTIONS,$by);         
238                }
239                $aut_link->delete();
240               
241                $requete = "UPDATE notices SET ed1_id=".$n_collection->editeur;
242                $requete .= ", coll_id=".$n_collection->parent;
243                $requete .= ", subcoll_id=$by WHERE subcoll_id=".$this->id;
244                $res = pmb_mysql_query($requete, $dbh);
245       
246                // b) suppression de la collection
247                $requete = "DELETE FROM sub_collections WHERE sub_coll_id=".$this->id;
248                $res = pmb_mysql_query($requete, $dbh);
249               
250                //nettoyage d'autorities_sources
251                $query = "select * from authorities_sources where num_authority = ".$this->id." and authority_type = 'subcollection'";
252                $result = pmb_mysql_query($query);
253                if(pmb_mysql_num_rows($result)){
254                        while($row = pmb_mysql_fetch_object($result)){
255                                if($row->authority_favorite == 1){
256                                        //on suprime les références si l'autorité a été importée...
257                                        $query = "delete from notices_authorities_sources where num_authority_source = ".$row->id_authority_source;
258                                        pmb_mysql_result($query);
259                                        $query = "delete from authorities_sources where id_authority_source = ".$row->id_authority_source;
260                                        pmb_mysql_result($query);
261                                }else{
262                                        //on fait suivre le reste
263                                        $query = "update authorities_sources set num_authority = ".$by." where num_authority_source = ".$row->id_authority_source;
264                                        pmb_mysql_query($query);
265                                }
266                        }
267                }       
268                audit::delete_audit (AUDIT_COLLECTION, $this->id);
269               
270                subcollection::update_index($by);
271       
272                return FALSE;
273        }
274       
275       
276        // ---------------------------------------------------------------
277        //              show_form : affichage du formulaire de saisie
278        // ---------------------------------------------------------------
279        function show_form() {
280       
281                global $msg;
282                global $sub_collection_form;
283                global $charset;
284                global $pmb_type_audit;
285                global $thesaurus_concepts_active;
286       
287                if($this->id) {
288                        $action = "./autorites.php?categ=souscollections&sub=update&id=$this->id";
289                        $libelle = $msg[178];
290                        $button_replace = "<input type='button' class='bouton' value='$msg[158]' ";
291                        $button_replace .= "onClick=\"unload_off();document.location='./autorites.php?categ=souscollections&sub=replace&id=$this->id';\">";
292       
293                        $button_voir = "<input type='button' class='bouton' value='$msg[voir_notices_assoc]' ";
294                        $button_voir .= "onclick='unload_off();document.location=\"./catalog.php?categ=search&mode=2&etat=aut_search&aut_type=subcoll&aut_id=$this->id\"'>";
295       
296                        $button_delete = "<input type='button' class='bouton' value='$msg[63]' ";
297                        $button_delete .= "onClick=\"confirm_delete();\">";
298                } else {
299                        $action = './autorites.php?categ=souscollections&sub=update&id=';
300                        $libelle = $msg[177];
301                        $button_replace = '';
302                        $button_delete ='';
303                }
304                $aut_link= new aut_link(AUT_TABLE_SUB_COLLECTIONS,$this->id);
305                $sub_collection_form = str_replace('<!-- aut_link -->', $aut_link->get_form('saisie_sub_collection') , $sub_collection_form);
306               
307                $aut_pperso= new aut_pperso("subcollection",$this->id);
308                $sub_collection_form = str_replace('!!aut_pperso!!',    $aut_pperso->get_form(), $sub_collection_form);
309               
310                $sub_collection_form = str_replace('!!id!!', $this->id, $sub_collection_form);
311                $sub_collection_form = str_replace('!!libelle!!', $libelle, $sub_collection_form);
312                $sub_collection_form = str_replace('!!action!!', $action, $sub_collection_form);
313                $sub_collection_form = str_replace('!!collection_nom!!', htmlentities($this->name,ENT_QUOTES, $charset), $sub_collection_form);
314                $sub_collection_form = str_replace('!!coll_id!!', $this->parent, $sub_collection_form);
315                $sub_collection_form = str_replace('!!coll_libelle!!', htmlentities($this->parent_libelle,ENT_QUOTES, $charset), $sub_collection_form);
316                $sub_collection_form = str_replace('!!ed_libelle!!', htmlentities($this->editeur_libelle,ENT_QUOTES, $charset), $sub_collection_form);
317                $sub_collection_form = str_replace('!!ed_id!!', $this->editeur, $sub_collection_form);
318                $sub_collection_form = str_replace('!!issn!!', $this->issn, $sub_collection_form);
319                $sub_collection_form = str_replace('!!delete!!', $button_delete, $sub_collection_form);
320                $sub_collection_form = str_replace('!!remplace!!', $button_replace, $sub_collection_form);
321                $sub_collection_form = str_replace('!!voir_notices!!', $button_voir, $sub_collection_form);
322                $sub_collection_form = str_replace('!!subcollection_web!!',             htmlentities($this->subcollection_web,ENT_QUOTES, $charset),    $sub_collection_form);
323                $sub_collection_form = str_replace('!!comment!!',               htmlentities($this->comment,ENT_QUOTES, $charset),      $sub_collection_form);
324                // pour retour à la bonne page en gestion d'autorités
325                // &user_input=".rawurlencode(stripslashes($user_input))."&nbr_lignes=$nbr_lignes&page=$page
326                global $user_input, $nbr_lignes, $page ;
327                $sub_collection_form = str_replace('!!user_input_url!!',                rawurlencode(stripslashes($user_input)),                        $sub_collection_form);
328                $sub_collection_form = str_replace('!!user_input!!',                    htmlentities($user_input,ENT_QUOTES, $charset),         $sub_collection_form);
329                $sub_collection_form = str_replace('!!nbr_lignes!!',                    $nbr_lignes,                                                                            $sub_collection_form);
330                $sub_collection_form = str_replace('!!page!!',                                  $page,                                                                                          $sub_collection_form);
331                if( $thesaurus_concepts_active == 1){
332                        $index_concept = new index_concept($this->id, TYPE_SUBCOLLECTION);
333                        $sub_collection_form = str_replace('!!concept_form!!',                  $index_concept->get_form('saisie_sub_collection'),      $sub_collection_form);
334                }else{
335                        $sub_collection_form = str_replace('!!concept_form!!',                  "",     $sub_collection_form);
336                }
337                if ($pmb_type_audit && $this->id)
338                        $bouton_audit= "&nbsp;<input class='bouton' type='button' onClick=\"openPopUp('./audit.php?type_obj=".AUDIT_SUB_COLLECTION."&object_id=".$this->id."', 'audit_popup', 700, 500, -2, -2, 'scrollbars=yes, toolbar=no, dependent=yes, resizable=yes')\" title=\"".$msg['audit_button']."\" value=\"".$msg['audit_button']."\" />&nbsp;";
339               
340                $sub_collection_form = str_replace('!!audit_bt!!',                              $bouton_audit,                                                                                          $sub_collection_form);
341               
342                print $sub_collection_form;
343        }
344       
345        // ---------------------------------------------------------------
346        //              replace_form : affichage du formulaire de remplacement
347        // ---------------------------------------------------------------
348        function replace_form() {
349                global $sub_coll_rep_form;
350                global $msg;
351                global $include_path;
352               
353                if(!$this->id || !$this->name) {
354                        require_once("$include_path/user_error.inc.php");
355                        error_message($msg[161], $msg[162], 1, './autorites.php?categ=collections&sub=&id=');
356                        return false;
357                }
358       
359                $sub_coll_rep_form=str_replace('!!id!!', $this->id, $sub_coll_rep_form);
360                $sub_coll_rep_form=str_replace('!!subcoll_name!!', $this->display, $sub_coll_rep_form);
361                print $sub_coll_rep_form;
362        }
363       
364       
365        // ---------------------------------------------------------------
366        //              ?? update($value) : mise à jour de la collection
367        // ---------------------------------------------------------------
368        function update($value,$force_creation = false) {
369       
370                global $dbh;
371                global $msg,$charset;
372                global $include_path;
373                global $thesaurus_concepts_active;
374               
375                //si on a pas d'id, on peut avoir les infos de la collection
376                if(!$value['parent']){
377                        if($value['collection']){
378                                //on les a, on crée l'éditeur
379                                $value['collection']=stripslashes_array($value['collection']);//La fonction d'import fait les addslashes contrairement à l'update
380                                $value['parent'] = collection::import($value['collection']);
381                        }
382                }
383               
384                if(!$value['name'] || !$value['parent'])
385                        return false;
386       
387                // nettoyage des valeurs en entrée
388                $value['name'] = clean_string($value['name']);
389       
390                // construction de la requête
391                $requete = "SET sub_coll_name='$value[name]', ";
392                $requete .= "sub_coll_parent='$value[parent]', ";
393                $requete .= "sub_coll_issn='$value[issn]', ";
394                $requete .= "subcollection_web='$value[subcollection_web]', ";
395                $requete .= "subcollection_comment='$value[comment]', ";
396                $requete .= "index_sub_coll=' ".strip_empty_words($value[name])." ".strip_empty_words($value["issn"])." '";
397       
398                if($this->id) {
399                        // update
400                        $requete = 'UPDATE sub_collections '.$requete;
401                        $requete .= ' WHERE sub_coll_id='.$this->id.' ';
402                        if(pmb_mysql_query($requete, $dbh)) {
403                                $requete = "select collection_parent from collections WHERE collection_id='".$value[parent]."' ";
404                                $res = pmb_mysql_query($requete, $dbh) ;
405                                $ed_parent = pmb_mysql_result($res, 0, 0);
406                                $requete = "update notices set ed1_id='$ed_parent', coll_id='".$value[parent]."' WHERE subcoll_id='".$this->id."' ";
407                                $res = pmb_mysql_query($requete, $dbh) ;
408                                $aut_link= new aut_link(AUT_TABLE_SUB_COLLECTIONS,$this->id);
409                                $aut_link->save_form();
410                                $aut_pperso= new aut_pperso("subcollection",$this->id);
411                                $aut_pperso->save_form();
412                                audit::insert_modif (AUDIT_SUB_COLLECTION, $this->id) ;
413                                subcollection::update_index($this->id);
414                        } else {
415                                require_once("$include_path/user_error.inc.php");
416                                warning($msg[178],htmlentities($msg[182]." -> ".$this->display,ENT_QUOTES, $charset));
417                                return FALSE;
418                        }
419                } else {
420                        if(!$force_creation){
421                                // création : s'assurer que la sous-collection n'existe pas déjà
422                                if ($id_subcollection_exists = subcollection::check_if_exists($value)) {
423                                        $subcollection_exists = new subcollection($id_subcollection_exists);
424                                        require_once("$include_path/user_error.inc.php");
425                                        warning($msg[177],htmlentities($msg[219]." -> ".$subcollection_exists->display,ENT_QUOTES, $charset));
426                                        return FALSE;
427                                }
428                        }
429                        $requete = 'INSERT INTO sub_collections '.$requete.';';
430                        if(pmb_mysql_query($requete, $dbh)) {
431                                $this->id=pmb_mysql_insert_id();
432                                $aut_link= new aut_link(AUT_TABLE_SUB_COLLECTIONS,$this->id);
433                                $aut_link->save_form();                 
434                                $aut_pperso= new aut_pperso("subcollection",$this->id);
435                                $aut_pperso->save_form();
436                                audit::insert_creation (AUDIT_SUB_COLLECTION, $this->id) ;
437                        } else {
438                                require_once("$include_path/user_error.inc.php");
439                                warning($msg[177],htmlentities($msg[182]." -> ".$requete,ENT_QUOTES, $charset));
440                                return FALSE;
441                        }
442                }
443                // Indexation concepts
444                if( $thesaurus_concepts_active == 1){
445                        $index_concept = new index_concept($this->id, TYPE_SUBCOLLECTION);
446                        $index_concept->save();
447                }
448
449                // Mise à jour des vedettes composées contenant cette autorité
450                vedette_composee::update_vedettes_built_with_element($this->id, "subcollection");
451               
452                return TRUE;
453        }
454       
455        // ---------------------------------------------------------------
456        //              import() : import d'une sous-collection
457        // ---------------------------------------------------------------
458        // fonction d'import de sous-collection (membre de la classe 'subcollection');
459        function import($data) {
460       
461                // cette méthode prend en entrée un tableau constitué des informations éditeurs suivantes :
462                //      $data['name']   Nom de la collection
463                //      $data['coll_parent']    id de l'éditeur parent de la collection
464                //      $data['issn']   numéro ISSN de la collection
465       
466                global $dbh;
467       
468                // check sur le type de  la variable passée en paramètre
469                if(!sizeof($data) || !is_array($data)) {
470                        // si ce n'est pas un tableau ou un tableau vide, on retourne 0
471                        return 0;
472                }
473       
474                // check sur les éléments du tableau (data['name'] est requis).
475               
476                $long_maxi_name = pmb_mysql_field_len(pmb_mysql_query("SELECT sub_coll_name FROM sub_collections limit 1"),0);
477                $data['name'] = rtrim(substr(preg_replace('/\[|\]/', '', rtrim(ltrim($data['name']))),0,$long_maxi_name));
478       
479                //si on a pas d'id, on peut avoir les infos de la collection
480                if(!$data['coll_parent']){
481                        if($data['collection']){
482                                //on les a, on crée l'éditeur
483                                $data['coll_parent'] = collection::import($data['collection']);
484                        }
485                }       
486               
487                if($data['name']=="" || $data['coll_parent']==0) /* il nous faut impérativement une collection parente */
488                        return 0;
489       
490                // préparation de la requête
491                $key0 = addslashes($data['name']);
492                $key1 = $data['coll_parent'];
493                $key2 = addslashes($data['issn']);
494               
495                /* vérification que la collection existe bien ! */
496                $query = "SELECT collection_id FROM collections WHERE collection_id='${key1}' LIMIT 1 ";
497                $result = @pmb_mysql_query($query, $dbh);
498                if(!$result) die("can't SELECT colections ".$query);
499                if (pmb_mysql_num_rows($result)==0) 
500                        return 0;
501       
502                /* vérification que la sous-collection existe */
503                $query = "SELECT sub_coll_id FROM sub_collections WHERE sub_coll_name='${key0}' AND sub_coll_parent='${key1}' LIMIT 1 ";
504                $result = @pmb_mysql_query($query, $dbh);
505                if(!$result) die("can't SELECT sub_collections ".$query);
506                $subcollection  = pmb_mysql_fetch_object($result);
507       
508                /* la sous-collection existe, on retourne l'ID */
509                if($subcollection->sub_coll_id)
510                        return $subcollection->sub_coll_id;
511       
512                // id non-récupérée, il faut créer la forme.
513                $query = "INSERT INTO sub_collections SET sub_coll_name='$key0', ";
514                $query .= "sub_coll_parent='$key1', ";
515                $query .= "sub_coll_issn='$key2', ";
516                $query .= "subcollection_web='".addslashes($data["subcollection_web"])."', ";
517                $query .= "subcollection_comment='".addslashes($data["comment"])."', ";
518                $query .= "index_sub_coll=' ".strip_empty_words($key0)." ".strip_empty_words($key2)." ' ";
519                $result = @pmb_mysql_query($query, $dbh);
520                if(!$result) die("can't INSERT into sub_collections".$query);
521                $id=pmb_mysql_insert_id($dbh);
522                audit::insert_creation (AUDIT_COLLECTION, $id) ;
523                return $id;
524        }
525               
526        // ---------------------------------------------------------------
527        //              search_form() : affichage du form de recherche
528        // ---------------------------------------------------------------
529        static function search_form() {
530                global $user_query, $user_input;
531                global $msg, $charset;
532       
533                $user_query = str_replace ('!!user_query_title!!', $msg[357]." : ".$msg[137] , $user_query);
534                $user_query = str_replace ('!!action!!', './autorites.php?categ=souscollections&sub=reach&id=', $user_query);
535                $user_query = str_replace ('!!add_auth_msg!!', $msg[176] , $user_query);
536                $user_query = str_replace ('!!add_auth_act!!', './autorites.php?categ=souscollections&sub=collection_form', $user_query);
537                $user_query = str_replace ('<!-- lien_derniers -->', "<a href='./autorites.php?categ=souscollections&sub=collection_last'>$msg[1313]</a>", $user_query);
538                $user_query = str_replace("!!user_input!!",htmlentities(stripslashes($user_input),ENT_QUOTES, $charset),$user_query);
539                print pmb_bidi($user_query) ;
540        }
541       
542        //---------------------------------------------------------------
543        // update_index($id) : maj des n-uplets la table notice_global_index en rapport avec cet sous collection       
544        //---------------------------------------------------------------
545        static function update_index($id) {
546                global $dbh;
547                // On cherche tous les n-uplet de la table notice correspondant à cet auteur.
548                $found = pmb_mysql_query("select distinct notice_id from notices where subcoll_id='".$id."'",$dbh);
549                // Pour chaque n-uplet trouvés on met a jour la table notice_global_index avec l'auteur modifié :
550                while(($mesNotices = pmb_mysql_fetch_object($found))) {
551                        $notice_id = $mesNotices->notice_id;
552                        notice::majNoticesGlobalIndex($notice_id);
553                        notice::majNoticesMotsGlobalIndex($notice_id,'subcollection');
554                }
555        }
556       
557        static function get_informations_from_unimarc($fields,$from_collection=false){
558                $data = array();
559               
560                if($from_collection){
561                        for($i=0 ; $i<count($fields['411']) ; $i++){
562                                $sub = array();
563                                $sub['authority_number'] = $fields['411'][$i]['0'][0];
564                                $sub['issn'] = $fields['411'][$i]['x'][0];
565                                $sub['name'] = $fields['411'][$i]['t'][0];     
566                                $data[] = $sub;
567                        }
568                }else{
569                        $data['name'] = $fields['200'][0]['a'][0];
570                        if(count($fields['200'][0]['i'])){
571                                foreach ( $fields['200'][0]['i'] as $value ) {
572                                $data['name'].= ". ".$value;
573                                }
574                        }
575                        if(count($fields['200'][0]['e'])){
576                                foreach ( $fields['200'][0]['e'] as $value ) {
577                                $data['name'].= " : ".$value;
578                                }
579                        } 
580                        $data['issn'] = $fields['011'][0]['a'][0];     
581                        $data['collection'] = collection::get_informations_from_unimarc($fields,true);
582                       
583                }
584                return $data;
585        }
586       
587        static function check_if_exists($data){
588                global $dbh;
589       
590                if (!$data['coll_parent'] && $data['parent']) $data['coll_parent'] = $data['parent'];
591                //si on a pas d'id, on peut avoir les infos de la collection
592                if(!$data['coll_parent']){
593                        if($data['collection']){
594                                //on les a, on crée l'éditeur
595                                $data['coll_parent'] = collection::check_if_exists($data['collection']);
596                        }
597                }       
598       
599                // préparation de la requête
600                $key0 = addslashes($data['name']);
601                $key1 = $data['coll_parent'];
602                $key2 = addslashes($data['issn']);
603               
604                /* vérification que la sous-collection existe */
605                $query = "SELECT sub_coll_id FROM sub_collections WHERE sub_coll_name='${key0}' AND sub_coll_parent='${key1}' LIMIT 1 ";
606                $result = @pmb_mysql_query($query, $dbh);
607                if(!$result) die("can't SELECT sub_collections ".$query);
608                $subcollection  = pmb_mysql_fetch_object($result);
609       
610                /* la sous-collection existe, on retourne l'ID */
611                if($subcollection->sub_coll_id)
612                        return $subcollection->sub_coll_id;
613                return 0;
614        }
615} # fin de définition de la classe collection
616
617} # fin de délaration
Note: See TracBrowser for help on using the repository browser.