source: pmb4.2/trunk/fuentes/pmb/classes/categ_browser.class.php

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

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 10.8 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: categ_browser.class.php,v 1.23 2015-04-03 11:16:19 jpermanne Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9// définition de la classe de gestion le l'explorateur de catégories
10if ( ! defined( 'CATEG_BROWSER_CLASS' ) ) {
11  define( 'CATEG_BROWSER_CLASS', 1 );
12
13require_once($class_path."/thesaurus.class.php");
14
15class categ_browser {
16
17        // properties
18        // browser images
19        var $up_folder = "<img src='./images/folderup.gif' />";
20        var $closed_folder = "<img src='./images/folderclosed.gif' />";
21        var $open_folder = "<img src='./images/folderopen.gif' />";
22        var $document = "<img src='./images/doc.gif' />";
23        var $see_img = "<img src='./images/see.gif' />";
24       
25        var $parent = 0;                        //      current parent
26        var $level = 0;                         //      current level in browser tree
27        var $parents_tab;                       //      array parents values
28        var $children_tab;                      //      array for children values
29        var $display = '';                      //      string to display
30        var $offset = 18;                       //      offset for margin
31        var $current_margin = 0;        //      actual margin
32        var $folder_link = '';          //      link to use if a folder is clicked
33        var $document_link = '';        //      link to use if a document or name is clicked
34        var $id_thes = 0;                       //  identifiant de thesaurus
35        var $thes;                                      //  objet thesaurus
36       
37        // constructor
38        function categ_browser($parent=0, $folder_link='', $document_link='', $id_thes=0) {
39                global $PHP_SELF;
40
41                $this->parent = $parent;
42                $this->folder_link = $folder_link;
43                $this->document_link = $document_link;
44
45
46                //recuperation du thesaurus session
47                if(!$id_thes) {
48                        $id_thes = thesaurus::getSessionThesaurusId();
49                } else {
50                        thesaurus::setSessionThesaurusId($id_thes);
51                }
52
53                if ($id_thes != -1) {
54                        $this->thes = new thesaurus($id_thes);
55                }
56
57                $this->id_thes = $id_thes; 
58               
59                if ($this->id_thes != -1) { // 1 seul thesaurus
60
61                        if (!$this->parent) {
62                                $this->parent = $this->thes->num_noeud_racine;
63                        }
64       
65                        $this->parents_tab = array();
66                        $this->children_tab = array();
67                        $caller = preg_replace('/\/.*\//', './', $PHP_SELF);
68       
69                        if(!$this->folder_link)
70                                $this->folder_link = "<a href='".$caller."?parent=!!id!!'>";
71                        if(!$this->document_link)
72                                $this->document_link = "<a href='".$caller."?id=!!id!!'>";
73       
74                        $this->get_children();
75                        $this->get_parents();
76                }
77
78                return TRUE;
79        }
80
81        // getting images location if required
82        function set_images($up_folder='', $closed_folder='', $open_folder='', $document='', $see='') {
83                if($up_folder)
84                        $this->up_folder = $up_folder;
85                if($closed_folder)
86                        $this->closed_folder = $closed_folder;
87                if($open_folder)
88                        $this->open_folder = $open_folder;
89                if($document)
90                        $this->document = $document;
91                if($see)
92                        $this->see_img = $see;
93        }
94
95        // do_browser() : drawing final browser
96        function do_browser() {
97
98                global $msg;
99                global $dbh;
100
101                // display up link if applying
102                $up_link = str_replace('!!id!!', '0', $this->folder_link);
103                if($this->parent != $this->thes->num_noeud_racine)
104                        $this->display = "<div style='margin:$this->current_margin'>".$up_link.$this->up_folder."<...</a></div>\n";
105               
106                // adding path
107                while(list($cle, $valeur) = each($this->parents_tab)) {
108                        $link = str_replace('!!id!!', $valeur['id'], $this->folder_link);
109                        $doc_l = str_replace('!!id!!', $valeur['id'], $this->document_link);
110
111                        $this->display .=  "\n<div style='margin-left:".$this->current_margin."px'>";
112                        $this->display .= $link.$this->open_folder.'</a>';
113                        if($valeur['has_records'])
114                                $this->display .= $doc_l.$valeur['name']."</a></div>";
115                        else
116                                $this->display .= $valeur['name'].'</div>';
117                                //$this->display.="</div>";
118                        $this->current_margin = $this->current_margin + $this->offset;
119                }
120
121                // adding children
122                while(list($cle, $valeur) = each($this->children_tab)) {
123                        if($valeur['has_children']) {
124                                $link = str_replace('!!id!!', $valeur['id'], $this->folder_link);
125                                $doc_l = str_replace('!!id!!', $valeur['id'], $this->document_link);
126                                $icon = $this->closed_folder;
127                                $this->display .= "\n<div style='margin-left:".$this->current_margin."px'>";
128                                $this->display .= $link;
129                                $this->display .= $icon.'</a>';
130                                if($valeur['has_records']) {
131                                        $this->display .= $doc_l;
132                                        $this->display .= $valeur['name'];
133                                        $this->display .= '</a>';
134                                        $this->display .= '</div>';
135                                } else {
136                                        $this->display .= $valeur['name'].'</div>';
137                                }
138                        }
139                        else {
140                                $icon = $this->document;
141                                if($valeur['see']) {
142                                        // il y a renvoi vers une autre catégorie
143                                        $icon = $this->see_img;
144                                        $valeur['id'] = $valeur['see'];
145                                        $valeur['name'] = '<i>'.$valeur['name'].'@</i>';
146                                        // on regarde si la catégorie cible a des enfants
147                                        $see_requete = "SELECT count(1) FROM noeuds WHERE num_parent=${valeur['id']} LIMIT 1";
148
149                                        $count_result = pmb_mysql_query($see_requete, $dbh);
150                                        if(@pmb_mysql_result($count_result, 0, 0)) {
151                                                // la catégorie cible à des enfants -> tous les liens pointent vers l'affichage catégorie
152                                                $link = str_replace('!!id!!', $valeur['id'], $this->folder_link);
153                                                $doc_l = $link;
154                                        } else {
155                                                // la catégorie cible n'a pas d'enfants -> tous les liens pointent vers la recherche notice
156                                                $link = str_replace('!!id!!', $valeur['id'], $this->document_link);
157                                                $doc_l = $link;
158                                        }
159                                        $this->display .=  "\n<div style='margin-left:".$this->current_margin."px'>";
160                                        $this->display .= $doc_l;
161                                        $this->display .= $icon.$valeur[name];
162                                        $this->display .= "</a></div>";
163                                } else {
164                                        if($valeur['has_records']) {
165                                                $link = str_replace('!!id!!', $valeur['id'], $this->folder_link);
166                                                $doc_l = str_replace('!!id!!', $valeur['id'], $this->document_link);
167                                                $this->display .=  "\n<div style='margin-left:".$this->current_margin."px'>";
168                                                $this->display .= $doc_l;
169                                                $this->display .= $icon.$valeur[name];
170                                                $this->display .= "</a></div>";
171                                        } else {
172                                                $this->display .=  "\n<div style='margin-left:".$this->current_margin."px'>";
173                                                $this->display .= $icon.$valeur['name'].'</div>';
174                                        }
175                                }
176                        }
177                }
178        }
179
180
181        // get_parents() method : retrieves parents infos
182        function get_parents() {
183
184                global $dbh;
185                global $lang;
186
187                if(!$this->parent) {
188                        $this->parents_tab = array();
189                        return 0;
190                }
191               
192                $temp = $this->parent;
193
194       
195                while($temp != $this->thes->num_noeud_racine) {
196                        // fetching category information
197
198                        $requete = "select catdef.num_noeud as categ_id, ";
199                        $requete.= "if (catlg.num_noeud is null, catdef.libelle_categorie, catlg.libelle_categorie) as categ_libelle, ";
200                        $requete.= "noeuds.num_parent as categ_parent, ";
201                        $requete.= "noeuds.num_renvoi_voir as categ_see, ";
202                        $requete.= "if (catlg.num_noeud is null, catdef.note_application, catlg.note_application) as categ_comment, ";
203                        $requete.= "if (catlg.num_noeud is null, catdef.index_categorie, catlg.index_categorie) as index_categorie "; 
204                        $requete.= "from noeuds left join categories as catdef on noeuds.id_noeud = catdef.num_noeud and catdef.langue = '".$this->thes->langue_defaut."' ";
205                        $requete.= "left join categories as catlg on catdef.num_noeud = catlg.num_noeud and catlg.langue = '".$lang."' ";
206                        $requete.= "where catdef.num_noeud = '".$temp."' ";     
207                        $requete.= "limit 1 ";
208
209                        $result = pmb_mysql_query($requete, $dbh);
210
211                        $upper = pmb_mysql_fetch_object($result);
212
213                        // getting number of associated records
214                        $requete = "select count(1) from notices_categories where num_noeud ='".$upper->categ_id."' ";
215
216                        $count_result = pmb_mysql_query($requete, $dbh);
217
218                        $has_records = pmb_mysql_result($count_result, 0, 0);
219                        $this->parents_tab[] = array(   id => $upper->categ_id,
220                                                        name => $upper->categ_libelle,
221                                                        has_records => $has_records);
222                        $temp = $upper->categ_parent;
223                }
224                if(sizeof($this->parents_tab)) $this->parents_tab = array_reverse($this->parents_tab);
225        }
226
227
228        function get_children() {
229               
230                global $dbh;
231                global $thesaurus_categories_show_empty_categ;
232                global $lang;
233               
234                // getting infos for children categories
235
236                $requete = "select catdef.num_noeud as categ_id, ";
237                $requete.= "if (catlg.num_noeud is null, catdef.libelle_categorie, catlg.libelle_categorie) as categ_libelle, ";
238                $requete.= "noeuds.num_parent as categ_parent, ";
239                $requete.= "noeuds.num_renvoi_voir as categ_see, ";
240                $requete.= "if (catlg.num_noeud is null, catdef.note_application, catlg.note_application) as categ_comment, ";
241                $requete.= "if (catlg.num_noeud is null, catdef.index_categorie, catlg.index_categorie) as index_categorie "; 
242                $requete.= "from noeuds left join categories as catdef on noeuds.id_noeud = catdef.num_noeud and catdef.langue = '".$this->thes->langue_defaut."' ";
243                $requete.= "left join categories as catlg on catdef.num_noeud = catlg.num_noeud and catlg.langue = '".$lang."' ";
244                $requete.= "where noeuds.num_parent = '".$this->parent."' ";   
245                $requete.= "order by categ_libelle limit 200 ";
246                $result = pmb_mysql_query($requete, $dbh);
247
248
249                while($current=pmb_mysql_fetch_object($result)) {
250                        $count_child = "select count(1) from noeuds where num_parent = '".$current->categ_id."' limit 1";
251                        $count_result = pmb_mysql_query($count_child, $dbh);
252
253
254                        // getting number of associated records
255                        $query = "select count(1) from notices_categories where num_noeud = '".$current->categ_id."' ";
256                        $count_records = pmb_mysql_query($query, $dbh);
257
258                        if (((pmb_mysql_result($count_records, 0, 0)||$thesaurus_categories_show_empty_categ)||(pmb_mysql_result($count_result, 0, 0)))&&($current->categ_libelle[0]!="~")) {
259                                $this->children_tab[] = array(  id => $current->categ_id,
260                                                                name => $current->categ_libelle,
261                                                                see => $current->categ_see,
262                                                                has_children => pmb_mysql_num_rows($count_result),
263                                                                has_records => pmb_mysql_num_rows($count_records));
264                        }
265                }
266        }
267
268
269// ---------------------------------------------------------------
270//              search_form() : affichage du form de recherche
271// ---------------------------------------------------------------
272static function search_form($categ_id=0) {
273        global $user_query;
274        global $msg;
275        global $user_input,$id_thes,$charset;
276       
277       
278        $user_query = str_replace ('!!user_query_title!!', $msg[357]." : ".$msg[134] , $user_query);
279        $user_query = str_replace ('!!action!!', './autorites.php?categ=categories&sub=search', $user_query);
280        $user_query = str_replace ('!!add_auth_msg!!', $msg[317] , $user_query);
281        $user_query = str_replace ('!!add_auth_act!!', "./autorites.php?categ=categories&sub=categ_form&parent=$categ_id&id=0", $user_query);
282        if ($id_thes>=1)
283                $lien_derniers = "<a href='./autorites.php?categ=categories&sub=categorie_last&id_thes=$id_thes'>".$msg["autorites_categ_last"]."</a>&nbsp;";
284        else
285                $lien_derniers = "" ;
286        $user_query = str_replace("<!-- lien_derniers -->",$lien_derniers,$user_query);
287        $user_query = str_replace("!!user_input!!",htmlentities(stripslashes($user_input),ENT_QUOTES, $charset),$user_query);
288       
289        print pmb_bidi($user_query) ;
290        }
291
292
293} # fin de définition de la classe 'categ_browser'
294
295} # fin de délaration
296
Note: See TracBrowser for help on using the repository browser.