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