source: pmb4.2/trunk/fuentes/pmb/classes/suggestions.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: 17.1 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2005 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: suggestions.class.php,v 1.39 2015-04-03 11:16:20 jpermanne Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9require_once($class_path.'/z3950_notice.class.php');
10
11class suggestions{
12       
13       
14        var $id_suggestion = 0;                                         //Identifiant de suggestion     
15        var $titre  = '';                                                       //Titre ouvrage
16        var $editeur = '';                                                      //Editeur ou diffuseur
17        var $auteur = '';                                                       //Auteur ouvrage
18        var $code = '';                                                         //ISBN, ISSN, ...                               
19        var $prix = '0.00';                                                     //Prix indicatif
20        var $nb = 1;                                                            //Quantité à commander
21        var $commentaires = '';                                         //Commentaires sur la suggestion
22        var $commentaires_gestion = '';                         //Commentaires de gestion sur la suggestion
23        var $date_creation = '0000-00-00';                     
24        var $date_decision = '0000-00-00';                      //Date de la décision
25        var $statut = '1';                                                      //Statut de la suggestion
26        var $num_produit = 0;                                           //Identifiant du type de produit
27        var $num_entite = 0;                                            //Identifiant de l'entité sur laquelle est affectée la suggestion
28        var $num_rubrique = 0;                                          //Identifiant de la rubrique budgetaire d'affectation
29        var $num_fournisseur = 0;                                       //Identifiant du fournisseur associé
30        var $num_notice = 0;                                            //Identifiant de notice si cataloguée                   
31        var $index_suggestion = '';                                     //Champ de recherche fulltext
32        var $url_suggestion = '';                                       //URL
33        var $num_categ = '1';                                           //Categorie associee a la suggestion
34        var $sugg_location = 0;                                 //localisation
35        var $date_publi='0000-00-00';                   //date de publication
36        var $sugg_src=0;                                                //source de la suggestion
37        var $sugg_explnum=0;                                            //explnum attaché
38        var $sugg_noti_unimarc='';                              //notice unimarc
39       
40        //Constructeur. 
41        function suggestions($id_suggestion= 0) {
42               
43                if ($id_suggestion) {
44                        $this->id_suggestion = $id_suggestion;
45                        $this->load(); 
46                }
47
48        }       
49       
50       
51        // charge une suggestion à partir de la base.
52        function load(){
53       
54                global $dbh;
55               
56                $q = "select * from suggestions left join explnum_doc_sugg on num_suggestion=id_suggestion where id_suggestion = '".$this->id_suggestion."' ";
57                $r = pmb_mysql_query($q, $dbh) ;
58                $obj = pmb_mysql_fetch_object($r);
59                $this->titre = $obj->titre;
60                $this->editeur = $obj->editeur;
61                $this->auteur = $obj->auteur;
62                $this->code = $obj->code;
63                $this->prix = $obj->prix;
64                $this->nb = $obj->nb;
65                $this->commentaires = $obj->commentaires;
66                $this->commentaires_gestion = $obj->commentaires_gestion;
67                $this->date_creation = $obj->date_creation;
68                $this->date_decision = $obj->date_decision;
69                $this->statut = $obj->statut;
70                $this->num_produit = $obj->num_produit;
71                $this->num_entite = $obj->num_entite;
72                $this->num_rubrique  = $obj->num_rubrique ;
73                $this->num_fournisseur = $obj->num_fournisseur;
74                $this->num_notice = $obj->num_notice;
75                $this->index_suggestion = $obj->index_suggestion;
76                $this->url_suggestion = $obj->url_suggestion;
77                $this->num_categ = $obj->num_categ;
78                $this->sugg_location = $obj->sugg_location;
79                $this->date_publi = $obj->date_publication;
80                $this->sugg_src = $obj->sugg_source;
81                $this->sugg_explnum = $obj->num_explnum_doc;
82                $this->sugg_noti_unimarc = $obj->notice_unimarc;
83        }
84
85       
86        // enregistre une suggestion en base.
87        function save($explnum_doc=""){
88               
89                global $dbh;
90               
91                if(($this->titre == '') || ((($this->editeur == '') && ($this->auteur == '')) && (!$this->code) && (!$this->sugg_explnum && !$explnum_doc))) 
92                        die("Erreur de création suggestions");
93       
94                if ($this->id_suggestion) {
95                       
96                        $q = "update suggestions set titre = '".addslashes($this->titre)."', editeur = '".addslashes($this->editeur)."', ";
97                        $q.= "auteur = '".addslashes($this->auteur)."', code = '".addslashes($this->code)."', prix = '".$this->prix."', nb = '".$this->nb."', commentaires = '".addslashes($this->commentaires)."', ";
98                        $q.= "commentaires_gestion = '".addslashes($this->commentaires_gestion)."', date_creation = '".$this->date_creation."', date_decision = '".$this->date_decision."', statut = '".$this->statut."', ";
99                        $q.= "num_produit = '".$this->num_produit."', num_entite = '".$this->num_entite."', num_rubrique = '".$this->num_rubrique."', ";
100                        $q.= "num_fournisseur = '".$this->num_fournisseur."', num_notice = '".$this->num_notice."', "; 
101                        $q.= "index_suggestion = ' ".strip_empty_words($this->titre)." ".strip_empty_words($this->editeur)." ".strip_empty_words($this->auteur)." ".$this->code." ".strip_empty_words($this->commentaires)." ', ";
102                        $q.= "url_suggestion = '".addslashes($this->url_suggestion)."', "; 
103                        $q.= "num_categ = '".$this->num_categ."', ";
104                        $q.= "sugg_location = '".$this->sugg_location."', ";
105                        $q.= "date_publication = '".$this->date_publi."', ";
106                        $q.= "sugg_source = '".$this->sugg_src."' ";
107                        $q.= "where id_suggestion = '".$this->id_suggestion."' ";
108                        pmb_mysql_query($q, $dbh);
109                       
110                } else {
111                        $q = "insert into suggestions set titre = '".addslashes($this->titre)."', editeur = '".addslashes($this->editeur)."', ";
112                        $q.= "auteur = '".addslashes($this->auteur)."', code = '".addslashes($this->code)."', prix = '".$this->prix."', nb = '".$this->nb."', commentaires = '".addslashes($this->commentaires)."', ";
113                        $q.= "commentaires_gestion = '".addslashes($this->commentaires_gestion)."', date_creation = '".$this->date_creation."', date_decision = '".$this->date_decision."', statut = '".$this->statut."', ";
114                        $q.= "num_produit = '".$this->num_produit."', num_entite = '".$this->num_entite."', num_rubrique = '".$this->num_rubrique."', ";
115                        $q.= "num_fournisseur = '".$this->num_fournisseur."', num_notice = '".$this->num_notice."', "; 
116                        $q.= "index_suggestion = ' ".addslashes(strip_empty_words($this->titre)." ".strip_empty_words($this->editeur)." ".strip_empty_words($this->auteur)." ".$this->code." ".strip_empty_words($this->commentaires))." ', ";
117                        $q.= "url_suggestion = '".addslashes($this->url_suggestion)."', ";
118                        $q.= "num_categ = '".$this->num_categ."', ";
119                        $q.= "sugg_location = '".$this->sugg_location."', ";
120                        $q.= "date_publication = '".$this->date_publi."', ";
121                        $q.= "sugg_source = '".$this->sugg_src."' ";                   
122                        pmb_mysql_query($q, $dbh);
123                        $this->id_suggestion = pmb_mysql_insert_id($dbh);
124               
125                }
126               
127                if($explnum_doc) {
128                        $explnum_doc->save();
129                        $req = "insert into explnum_doc_sugg set
130                                num_explnum_doc='".$explnum_doc->explnum_doc_id."',
131                                num_suggestion='".$this->id_suggestion."'";
132                        pmb_mysql_query($req,$dbh);
133                }
134        }
135
136
137        //Vérifie si une suggestion existe déjà en base
138        static function exists($origine, $titre, $auteur, $editeur, $isbn) {
139
140                global $dbh;
141               
142                $q = "select count(1) from suggestions_origine, suggestions where origine = '".$origine."' and titre = '".$titre."' and id_suggestion = num_suggestion and auteur='".$auteur."' and editeur = '".$editeur."' and code = '".$isbn."' ";
143                $q.= "and statut in (1,2,8) ";
144                $r = pmb_mysql_query($q, $dbh);
145                return pmb_mysql_result($r, 0, 0);
146
147        }
148
149
150        //supprime une suggestion de la base
151        function delete($id_suggestion= 0) {
152               
153                global $dbh;
154
155                if(!$id_suggestion) $id_suggestion = $this->id_suggestion;     
156
157                $q = "delete from suggestions where id_suggestion = '".$id_suggestion."' ";
158                pmb_mysql_query($q, $dbh);
159               
160                $q = "delete ed,eds from explnum_doc ed join explnum_doc_sugg eds on ed.id_explnum_doc=eds.num_explnum_doc where eds.num_suggestion=$id_suggestion";
161                pmb_mysql_query($q, $dbh);
162               
163        }
164
165
166        //Compte le nb de suggestion par statut pour une bibliothèque
167        static function getNbSuggestions($id_bibli=0, $statut='-1', $num_categ='-1', $mask, $aq=0, $location=0, $user_input='',$source=0, $user_id=array(), $user_statut=array()) {
168               
169                global $dbh;
170               
171                if($source) 
172                        $filtre_src = " sugg_source = '".$source."' ";
173                else $filtre_src=" 1 ";
174               
175                if (!$statut) $statut='-1';
176                if ($statut == '-1') { 
177                        $filtre1 = '1';
178                } elseif ($statut == $mask) {
179                        $filtre1 = "(statut & '".$mask."') = '".$mask."' ";
180                } else {
181                        $filtre1 = "(statut & '".$mask."') = 0 and (statut & '".$statut."') = '".$statut."' ";
182                }
183               
184                if ($num_categ == '-1') {
185                        $filtre2 = '1';
186                } else {
187                        $filtre2 = "num_categ = '".$num_categ."' ";
188                }
189                       
190                if (!$id_bibli) $filtre3 = '1';
191                        else $filtre3.= "num_entite = '".$id_bibli."' ";
192                if ($location == 0) {
193                        $filtre4 = '1';
194                } else {
195                        $filtre4 = "sugg_location = '".$location."' ";
196                }
197               
198                $filtre_empr='';
199                $tab_empr=array();
200                $filtre_user='';
201                $tab_user=array();
202                if (is_array($user_id) && count($user_id) && is_array($user_statut) && count($user_statut)) {
203                        foreach ($user_id as $k=>$id) {
204                                if ($user_statut[$k] == "0") {
205                                        $tab_user[] = $id;
206                                }
207                                if ($user_statut[$k] == "1") {
208                                        $tab_empr[] = $id;
209                                }
210                        }
211                }
212                if (is_array($tab_empr) && count($tab_empr)) {
213                        $filtre_empr = "suggestions_origine.origine in ('".implode("','",$tab_empr)."') and type_origine='1' ";
214                }
215                if (is_array($tab_user) && count($tab_user)) {         
216                        $filtre_user = "suggestions_origine.origine in ('".implode("','",$tab_user)."') and type_origine='0' ";
217                }
218                if ($filtre_empr!="" || $filtre_user!="") {
219                        $table_origine = ", suggestions_origine ";
220                        $join_origine = "  id_suggestion=num_suggestion  ";
221                        if ($filtre_empr && $filtre_user) {
222                                $clause_origine = " and ( (".$filtre_empr.") or (".$filtre_user.") ) and ";
223                        } elseif($filtre_empr) {
224                                $clause_origine = " and (".$filtre_empr.") and ";
225                        } elseif ($filtre_user){
226                                $clause_origine = " and (".$filtre_user.") and ";
227                        }
228                }
229               
230                if (!$aq) {
231                        $q = "select count(1) from suggestions $table_origine";
232                        $q.= "where $join_origine $clause_origine ".$filtre1." and ".$filtre2." and ".$filtre3." and ".$filtre4 ." and ".$filtre_src;
233                } else {
234                       
235                        $isbn = '';
236                        $t_codes = array();
237                       
238                        if ($user_input!=='') {
239                                if (isEAN($user_input)) {
240                                        // la saisie est un EAN -> on tente de le formater en ISBN
241                                        $isbn = EANtoISBN($user_input);
242                                        if($isbn) {
243                                                $t_codes[] = $isbn;
244                                                $t_codes[] = formatISBN($isbn,10);
245                                        }
246                                } elseif (isISBN($user_input)) {
247                                        // si la saisie est un ISBN
248                                        $isbn = formatISBN($user_input);
249                                        if($isbn) { 
250                                                $t_codes[] = $isbn ;
251                                                $t_codes[] = formatISBN($isbn,13);
252                                        }
253                                }
254                        }
255                       
256                        if (count($t_codes)) {
257                               
258                                $q = "select count(1) from suggestions $table_origine";
259                                $q.= "where $join_origine $clause_origine (".$filtre1." and ".$filtre2." and ".$filtre3." and ".$filtre4." and ".$filtre_src;
260                                $q.= ") "; 
261                                $q.= "and ('0' ";
262                                foreach ($t_codes as $v) {
263                                        $q.= "or code like '%".$v."%' ";
264                                }
265                                $q.=") ";
266                               
267                        } else {
268                                               
269                                $members = $aq->get_query_members("suggestions","concat(titre,' ',editeur,' ',auteur,' ',commentaires)","index_suggestion", "id_suggestion");
270                                                               
271                                $q = $q = "select count(1) from suggestions $table_origine ";
272                                $q.= "where $join_origine $clause_origine (".$filtre1." and ".$filtre2." and ".$filtre3." and ".$filtre4." and ".$filtre_src;
273                                $q.= ") "; 
274                                $q.= "and (".$members["where"]." )";
275                        }
276                }
277
278                $r = pmb_mysql_query($q, $dbh);
279                return pmb_mysql_result($r, 0, 0); 
280        }
281       
282       
283        //Retourne une requete pour liste des suggestions par statut pour une bibliothèque
284        static function listSuggestions($id_bibli=0, $statut='-1', $num_categ='-1', $mask, $debut=0, $nb_per_page=0, $aq=0, $order='',$location=0, $user_input='',$source=0, $user_id=0, $user_statut='-1') {
285               
286                if($source) 
287                        $filtre_src = " sugg_source = '".$source."' ";
288                else $filtre_src=" 1 ";
289               
290                if (!$statut) $statut='-1';
291                if ($statut == '-1') { 
292                        $filtre1 = '1';
293                } elseif ($statut == $mask) {
294                        $filtre1 = "(statut & '".$mask."') = '".$mask."' ";
295                } else {
296                        $filtre1 = "(statut & '".$mask."') = 0 and (statut & ".$statut.") = '".$statut."' ";
297                }
298                       
299                if ($num_categ == '-1') {
300                        $filtre2 = '1';
301                } else {
302                        $filtre2 = "num_categ = '".$num_categ."' ";
303                }
304
305                if (!$id_bibli) $filtre3 = '1';
306                        else $filtre3.= "num_entite = '".$id_bibli."' ";
307
308                if ($location == 0) {
309                        $filtre4 = '1';
310                } else {
311                        $filtre4 = "sugg_location = '".$location."' ";
312                }               
313               
314                $filtre_empr='';
315                $tab_empr=array();
316                $filtre_user='';
317                $tab_user=array();
318                if (is_array($user_id) && count($user_id) && is_array($user_statut) && count($user_statut)) {
319                        foreach ($user_id as $k=>$id) {
320                                if ($user_statut[$k] == "0") {
321                                        $tab_user[] = $id;
322                                }
323                                if ($user_statut[$k] == "1") {
324                                        $tab_empr[] = $id;
325                                }
326                        }
327                }
328                if (is_array($tab_empr) && count($tab_empr)) {
329                        $filtre_empr = "suggestions_origine.origine in ('".implode("','",$tab_empr)."') and type_origine='1' ";
330                }
331                if (is_array($tab_user) && count($tab_user)) {
332                        $filtre_user = "suggestions_origine.origine in ('".implode("','",$tab_user)."') and type_origine='0' ";
333                }
334                if ($filtre_empr!="" || $filtre_user!="") {
335                        $table_origine = ", suggestions_origine ";
336                        $join_origine = "  id_suggestion=num_suggestion  ";
337                        if ($filtre_empr && $filtre_user) {
338                                $clause_origine = " and ( (".$filtre_empr.") or (".$filtre_user.") ) and ";
339                        } elseif($filtre_empr) {
340                                $clause_origine = " and (".$filtre_empr.") and ";
341                        } elseif ($filtre_user){
342                                $clause_origine = " and (".$filtre_user.") and ";
343                        }
344                }
345               
346                if(!$aq) {
347                       
348                        $q = "select * from suggestions $table_origine";
349                        $q.= "where $join_origine $clause_origine ".$filtre1." and ".$filtre2." and ".$filtre3." and ".$filtre4 ." and ".$filtre_src;
350                        if(!$order) $q.="order by statut, date_creation desc ";
351                                else $q.= "order by".$order." ";
352                       
353                } else {
354                       
355                        $isbn = '';
356                        $t_codes = array();
357                       
358                        if ($user_input!=='') {
359                                if (isEAN($user_input)) {
360                                        // la saisie est un EAN -> on tente de le formater en ISBN
361                                        $isbn = EANtoISBN($user_input);
362                                        if($isbn) {
363                                                $t_codes[] = $isbn;
364                                                $t_codes[] = formatISBN($isbn,10);
365                                        }
366                                } elseif (isISBN($user_input)) {
367                                        // si la saisie est un ISBN
368                                        $isbn = formatISBN($user_input);
369                                        if($isbn) { 
370                                                $t_codes[] = $isbn ;
371                                                $t_codes[] = formatISBN($isbn,13);
372                                        }
373                                }
374                        }
375                       
376                        if (count($t_codes)) {
377
378                                $q = "select * from suggestions $table_origine";
379                                $q.= "where $join_origine $clause_origine (".$filtre1." and ".$filtre2." and ".$filtre3." and ".$filtre4." and ".$filtre_src;
380                                $q.= ") "; 
381                                $q.= "and ('0' ";
382                                foreach ($t_codes as $v) {
383                                        $q.= "or code like '%".$v."%' ";
384                                }
385                                $q.=") ";
386                                if(!$order) $q.="order by statut, date_creation desc ";
387                                        else $q.= "order by".$order." ";
388                               
389                        } else {
390                       
391                                $members=$aq->get_query_members("suggestions","concat(titre,' ',editeur,' ',auteur,' ',commentaires)","index_suggestion","id_suggestion");
392                               
393                                $q = $q = "select *, ".$members["select"]." as pert from suggestions $table_origine ";
394                                $q.= "where $join_origine $clause_origine (".$filtre1." and ".$filtre2." and ".$filtre3." and ".$filtre4." and ".$filtre_src;
395                                $q.= ") "; 
396                                $q.= "and (".$members["where"]." ";
397                                foreach ($t_codes as $v) {
398                                        $q.= "or index_suggestion like ('%".$v."%') ";
399                                }
400                                $q.=") ";
401                       
402                                if (!$order) {
403                                        $q.= "order by pert desc ";     
404                                } else {
405                                        $q.= "order by ".$order.", pert desc ";
406                                }
407                        }
408                }
409                if (!$debut && $nb_per_page) $q.= "limit ".$nb_per_page;
410                if ($debut && $nb_per_page) $q.= "limit ".$debut.",".$nb_per_page;
411                return $q;                             
412        }
413
414       
415        //Retourne  une requete pour liste des suggestions par origine
416        //type_origine: 0=utilisateur, 1=lecteur, 2=visiteur
417        static function listSuggestionsByOrigine($id_origine, $type_origine='1') { 
418               
419                $q = "select * from suggestions_origine, suggestions where origine = '".$id_origine."' ";
420                if ($type_origine != '-1') $q.= "and type_origine = '".$type_origine."' ";
421                $q.= "and id_suggestion=num_suggestion order by date_suggestion ";             
422                return $q;                             
423        }
424
425
426        //Retourne un tableau des origines pour une suggestion
427        function getOrigines($id_suggestion=0) {
428               
429                global $dbh;
430                $tab_orig=array();
431                if (!$id_suggestion) $id_suggestion = $this->id_suggestion;
432                $q = "select * from suggestions_origine where num_suggestion=$id_suggestion order by date_suggestion, type_origine ";
433                $r = pmb_mysql_query($q, $dbh);
434                       
435                for($i=0;$i<pmb_mysql_num_rows($r);$i++) {
436                        $tab_orig[] = pmb_mysql_fetch_array($r,MYSQL_ASSOC); 
437                }
438                return $tab_orig;
439        }
440       
441       
442        //optimization de la table suggestions
443        function optimize() {
444               
445                global $dbh;
446               
447                $opt = pmb_mysql_query('OPTIMIZE TABLE suggestions', $dbh);
448                return $opt;
449                               
450        }
451       
452        //Récupération du docnum associé
453        function get_explnum($champ=''){
454                global $dbh;
455               
456                $req = "select * from explnum_doc join explnum_doc_sugg on num_explnum_doc=id_explnum_doc where num_suggestion='".$this->id_suggestion."'";
457                $res= pmb_mysql_query($req,$dbh);
458                if(pmb_mysql_num_rows($res)){
459                        $tab = pmb_mysql_fetch_array($res);
460                        switch($champ){                         
461                                case 'id':
462                                        return $tab['id_explnum_doc'];
463                                        break;
464                                case 'nom':
465                                        return $tab['explnum_doc_nomfichier'];
466                                        break;
467                                case 'ext';
468                                        return $tab['explnum_doc_extfichier'];
469                                        break;
470                                case 'mime';
471                                        return $tab['explnum_doc_mimetype'];
472                                        break; 
473                        }
474                }
475                return 0;
476        }
477       
478        /*
479         * On catalogue la notice
480         */
481        function catalog_notice(){
482                global $dbh;
483               
484                if($this->sugg_noti_unimarc && !$this->num_notice){
485                        $z=new z3950_notice("unimarc",$this->sugg_noti_unimarc);
486                        $z->var_to_post();
487                        $ret=$z->insert_in_database();
488                        //On attache la notice à la suggestion
489                        $req = " update suggestions set num_notice='".$ret[1]."' where id_suggestion='".$this->id_suggestion."'";
490                        pmb_mysql_query($req,$dbh);
491                }
492               
493        }
494       
495}
496?>
Note: See TracBrowser for help on using the repository browser.