source: pmb4.2/trunk/fuentes/pmb/classes/index_concept.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: 9.5 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: index_concept.class.php,v 1.10 2015-06-25 12:04:37 arenou Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9require_once($class_path."/concept.class.php");
10require_once($include_path."/templates/index_concept_form.tpl.php");
11
12if(!defined(TYPE_NOTICE)){
13        define(TYPE_NOTICE,1);
14}
15if(!defined(TYPE_AUTHOR)){
16        define(TYPE_AUTHOR,2);
17}
18if(!defined(TYPE_CATEGORY)){
19        define(TYPE_CATEGORY,3);
20}
21if(!defined(TYPE_PUBLISHER)){
22        define(TYPE_PUBLISHER,4);
23}
24if(!defined(TYPE_COLLECTION)){
25        define(TYPE_COLLECTION,5);
26}
27if(!defined(TYPE_SUBCOLLECTION)){
28        define(TYPE_SUBCOLLECTION,6);
29}
30if(!defined(TYPE_SERIE)){
31        define(TYPE_SERIE,7);
32}
33if(!defined(TYPE_TITRE_UNIFORME)){
34        define(TYPE_TITRE_UNIFORME,8);
35}
36if(!defined(TYPE_INDEXINT)){
37        define(TYPE_INDEXINT,9);
38}
39if(!defined(TYPE_EXPL)){
40        define(TYPE_EXPL,10);
41}
42if(!defined(TYPE_EXPLNUM)){
43        define(TYPE_EXPLNUM,11);
44}
45if(!defined(TYPE_AUTHPERSO)){
46        define(TYPE_AUTHPERSO,12);
47}
48
49/**
50 * class index_concept
51 * Pour l'indexation des concepts
52 */
53class index_concept {
54       
55        /**
56         * Type d'objet à indexer
57         * @var int
58         */
59        private $object_type;
60       
61        /**
62         * Identifiant de l'objet indexé (si il existe)
63         * @var int
64         */
65        private $object_id;
66       
67        /**
68         * Tableau des concepts associés à l'objet
69         * @var concept
70         */
71        private $concepts = array();
72       
73        public function __construct($object_id, $object_type) {
74                $this->object_id = $object_id;
75                $this->object_type = $object_type;
76        }
77       
78        /**
79         * Retourne le formulaire d'indexation des concepts
80         * @param string $caller Nom du formulaire
81         * @return string
82         */
83        public function get_form($caller) {
84                global $index_concept_form, $index_concept_script, $index_concept_add_button_form, $index_concept_text_form;
85               
86                if (!count($this->concepts)) {
87                        $this->get_concepts();
88                }
89
90                $form = $index_concept_form;
91
92                $max_concepts = count($this->concepts) ;
93               
94                $tab_concept_order="";
95                $concepts_repetables = $index_concept_script.$index_concept_add_button_form;
96               
97                $concepts_repetables = str_replace("!!caller!!", $caller, $concepts_repetables);
98               
99                if ( count($this->concepts)==0 ) {
100                        $current_concept_form = str_replace('!!iconcept!!', "0", $index_concept_text_form) ;
101                        $current_concept_form = str_replace('!!concept_display_label!!', '', $current_concept_form);
102                        $current_concept_form = str_replace('!!concept_uri!!', '', $current_concept_form);
103                        $current_concept_form = str_replace('!!concept_type!!', '', $current_concept_form);
104                        $tab_concept_order = "0";
105                        $concepts_repetables.= $current_concept_form;
106                } else {
107                        foreach ($this->concepts as $i => $concept) {
108                                $current_concept_form = str_replace('!!iconcept!!', $i, $index_concept_text_form) ;
109                               
110                                $current_concept_form = str_replace('!!concept_display_label!!', htmlentities($concept->get_display_label(),ENT_QUOTES, $charset), $current_concept_form);
111                                $current_concept_form = str_replace('!!concept_uri!!', $concept->get_uri(), $current_concept_form);
112                                $current_concept_form = str_replace('!!concept_type!!', $concept->get_type(), $current_concept_form);
113                               
114                                if($tab_concept_order!="")$tab_concept_order.=",";
115                                $tab_concept_order.= $i;
116                                $concepts_repetables.= $current_concept_form;
117                        }
118                }
119                $form = str_replace('!!max_concepts!!', $max_concepts, $form);
120                $form = str_replace('!!concepts_repetables!!', $concepts_repetables, $form);
121                $form = str_replace('!!tab_concept_order!!', $tab_concept_order, $form);
122               
123                return $form;
124        }
125       
126        /**
127         * Instancie les concepts d'après les données du formulaire
128         */
129        private function get_from_form() {
130                global $concept, $tab_concept_order;
131                $concept_order = explode(",", $tab_concept_order);
132                foreach ($concept_order as $index) {
133                        if (isset($concept[$index]['value']) && $concept[$index]['value']) {
134                                $this->concepts[] = new concept(0, $concept[$index]['value'], $concept[$index]['type'], $concept[$index]['display_label']);
135                        }
136                }
137        }
138       
139        public function add_concept($concept){
140                if(!in_array($concept,$this->concepts)){
141                        $this->concepts[] = $concept;
142                }
143        }
144       
145        public static function is_concept_in_form() {
146                global $concept;
147               
148                if (count($concept)) {
149                        foreach ($concept as $index => $object) {
150                                if (isset($object['value']) && $object['value']) {
151                                        return true;
152                                }
153                        }
154                }
155                return false;
156        }
157       
158        /**
159         * Sauvegarde
160         */
161        public function save($from_form = true) {
162                global $dbh;
163               
164                // On commence par supprimer l'existant
165                $query = "delete from index_concept where num_object = ".$this->object_id." and type_object = ".$this->object_type;
166                pmb_mysql_query($query, $dbh);
167               
168                // On sauvegarde les infos transmise par le formulaire
169                if($from_form){
170                        $this->get_from_form();
171                }
172                foreach ($this->concepts as $order => $concept) {
173                        $query = "insert into index_concept (num_object, type_object, num_concept, order_concept) values (".$this->object_id.",".$this->object_type.",".$concept->get_id().",".$order.")";
174                        pmb_mysql_query($query, $dbh);
175                }
176        }
177       
178        public function get_concepts() {
179                global $dbh;
180                if (!count($this->concepts) && $this->object_id) {
181                        $query = "select num_concept, order_concept from index_concept where num_object = ".$this->object_id." and type_object = ".$this->object_type." order by order_concept";
182                        $result = pmb_mysql_query($query, $dbh);
183                        if ($result && pmb_mysql_num_rows($result)) {
184                                while ($row = pmb_mysql_fetch_object($result)){
185                                        $this->concepts[$row->order_concept] = new concept($row->num_concept);
186                                }
187                        }
188                }
189                return $this->concepts;
190        }
191       
192        /**
193         * Retourne la liste des concepts pour l'affichage dans l'aperçu de notice
194         * @return string
195         */
196        public function get_isbd_display() {
197                global $thesaurus_concepts_affichage_ordre, $thesaurus_concepts_concept_in_line;
198                global $index_concept_isbd_display_concept_link;
199                global $msg;
200
201                if (!count($this->concepts)) {
202                        $this->get_concepts();
203                }
204               
205                $isbd_display = "";
206               
207                if (count($this->concepts)) {
208                        $concepts_list = "";
209                       
210                        // On trie le tableau des concepts selon leurs schemas
211                        $sorted_concepts = array();
212                       
213                        foreach ($this->concepts as $concept) {
214                                if ($concept->get_scheme()) {
215                                        $scheme = $concept->get_scheme();
216                                } else {
217                                        $scheme = $msg['index_concept_label'];
218                                }
219                                $sorted_concepts[$scheme][$concept->get_id()] = $concept->get_display_label();
220                        }
221                       
222                        //On génère la liste
223                        foreach ($sorted_concepts as $scheme => $concepts) {
224                                $isbd_display .= "<br />";
225                                // Si affichage en ligne, on affiche le nom du schema qu'une fois
226                                if ($thesaurus_concepts_concept_in_line == 1) {
227                                        $isbd_display .= "<b>".$scheme."</b><br />";
228                                }
229                               
230                                $concepts_list = "";
231                               
232                                // On trie par ordre alphabétique si spécifié en paramètre
233                                if ($thesaurus_concepts_affichage_ordre != 1) {
234                                        asort($concepts);
235                                }
236                                foreach ($concepts as $concept_id => $concept_display_label) {
237                                        $current_concept = "";
238                                       
239                                        // Si affichage les uns en dessous des autres, on affiche le schema à chaque fois
240                                        if ($thesaurus_concepts_concept_in_line != 1) {
241                                                $current_concept = "[".$scheme."] ";
242                                        }
243                                        $current_concept .= $index_concept_isbd_display_concept_link;
244                                        $current_concept = str_replace("!!concept_id!!", $concept_id, $current_concept);
245                                        $current_concept = str_replace("!!concept_display_label!!", $concept_display_label, $current_concept);
246                                       
247                                        if ($concepts_list) {
248                                                // On va chercher le séparateur spécifié dans les paramètres
249                                                if ($thesaurus_concepts_concept_in_line == 1) {
250                                                        $concepts_list .= " ; ";
251                                                } else {
252                                                        $concepts_list .= "<br />";
253                                                }
254                                        }
255                                        $concepts_list .= $current_concept;
256                                }
257                                $isbd_display.= $concepts_list;
258                        }
259                }
260               
261                return $isbd_display;
262        }
263
264        /**
265         * Retourne les données des concepts pour l'affichage dans les template
266         * @return string
267         */
268        public function get_data() {
269                global $thesaurus_concepts_affichage_ordre, $thesaurus_concepts_concept_in_line;
270                global $index_concept_isbd_display_concept_link;
271                global $msg;
272       
273                if (!count($this->concepts)) {
274                        $this->get_concepts();
275                }
276                $concepts_list = array();
277                if (count($this->concepts)) {                                                   
278                        // On trie le tableau des concepts selon leurs schemas
279                        $sorted_concepts = array();                             
280                        foreach ($this->concepts as $concept) {
281                                if ($concept->get_scheme()) {
282                                        $scheme = $concept->get_scheme();
283                                } else {
284                                        $scheme = $msg['index_concept_label'];
285                                }
286                                $sorted_concepts[$scheme][$concept->get_id()] = $concept->get_display_label();
287                        }                               
288                        //On génère la liste
289                        foreach ($sorted_concepts as $scheme => $concepts) {   
290                                // On trie par ordre alphabétique si spécifié en paramètre
291                                if ($thesaurus_concepts_affichage_ordre != 1) {
292                                        asort($concepts);
293                                }
294                                foreach ($concepts as $concept_id => $concept_display_label) {
295                                        $concept_data = array();
296                                        $concept_data['sheme']=$scheme;
297                                        $link=str_replace("!!concept_id!!", $concept_id, $index_concept_isbd_display_concept_link);
298                                        $link=str_replace("!!concept_display_label!!", $concept_display_label, $link);
299                                        $concept_data['link']=$link;
300                                        $concept_data['id']=$concept_id;
301                                        $concept_data['label']=$concept_display_label; 
302                                        $concepts_list[]=$concept_data;
303                                }
304                        }
305                }       
306                return $concepts_list;
307        }
308               
309        /**
310         * Suppression
311         */
312        public function delete() {
313                global $dbh;
314       
315                if ($this->object_id) {
316                        $query = "delete from index_concept where num_object = ".$this->object_id." and type_object = ".$this->object_type;
317                        pmb_mysql_query($query, $dbh);
318                }       
319        }
320} // fin de définition de la classe index_concept
Note: See TracBrowser for help on using the repository browser.