source: pmb4.2/trunk/fuentes/pmb/print_thesaurus.php @ 828

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

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 33.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: print_thesaurus.php,v 1.19 2015-04-03 11:16:23 jpermanne Exp $
6
7$base_path = ".";
8$base_auth = "AUTORITES_AUTH";
9$base_title = $msg[print_thes_title];
10$base_nobody=1;
11$base_noheader=1;
12
13
14require($base_path."/includes/init.inc.php");
15@set_time_limit(0);
16require_once("$class_path/thesaurus.class.php");
17require_once("$class_path/noeuds.class.php");
18require_once("$class_path/categories.class.php");
19require_once($class_path."/synchro_rdf.class.php");
20// constantes
21                        $color[1]="black";
22                        $color[2]="#c9e9ff"; // bleu
23                        $color[3]="#c6ffc5"; // vert
24                        $color[4]="#ffedc5"; // saumon
25                        $color[5]="#fcffc5"; // jaune
26                        $color[6]="#d7d8ff"; // violet
27               
28                        $fontsize[1]=" font-size:1.2em; ";
29                        $fontsize[2]=" font-size:1.0em; ";
30                        $fontsize[3]=" font-size:0.9em; "; 
31                        $fontsize[4]=" font-size:0.8em; "; 
32                        $fontsize[5]=" font-size:0.8em; "; 
33                        $fontsize[6]=" font-size:0.8em; "; 
34                        $fontsize[7]=" font-size:0.8em; "; 
35                        $fontsize[8]=" font-size:0.8em; "; 
36                        $fontsize[9]=" font-size:0.8em; "; 
37
38                        $paddingmargin[0]=" padding-bottom: 10px; ";
39                        $paddingmargin[1]=" padding-bottom: 10px; ";
40                        $paddingmargin[2]=" padding-bottom: 8px; ";
41                        $paddingmargin[3]=" padding-bottom: 6px; ";
42                        $paddingmargin[4]=" ";
43                        $paddingmargin[5]=" ";
44                        $paddingmargin[6]=" ";
45                        $paddingmargin[7]=" ";
46                        $paddingmargin[8]=" ";
47                        $paddingmargin[9]=" ";
48
49
50if ($action!="print") {
51        print $std_header;
52        print "<h3>".$msg[print_thes_title]."</h3>\n";
53        print "<form name='print_options' action='print_thesaurus.php?action=print' method='post'>
54                <b>".$msh[print_thes_options]."</b>
55                <blockquote>".$msg[print_thes_list_type]."
56                        <select name='typeimpression'>";
57        if ($id_noeud_origine){
58                print "\n<option value='arbo' selected>".$msg[print_thes_arbo]."</option>
59                                <option value='alph' disabled>".$msg[print_thes_alph]."</option>
60                                <option value='rota' disabled>".$msg[print_thes_rota]."</option>";
61                $val_enable="document.getElementById(\"options_xmlskos\").style.visibility=\"hidden\";";
62        }else{
63                print "\n<option value='arbo' selected>".$msg[print_thes_arbo]."</option>
64                                <option value='alph' >".$msg[print_thes_alph]."</option>
65                                <option value='rota' >".$msg[print_thes_rota]."</option>";
66                $val_enable="document.print_options.typeimpression.options[1].disabled = 0;print_options.typeimpression.options[2].disabled=0; document.getElementById(\"options_xmlskos\").style.visibility=\"hidden\";";
67        }
68       
69        print "\n</select>
70                </blockquote>
71                <blockquote>
72                        <input type='checkbox' name='aff_note_application' CHECKED value='1' />&nbsp;".$msg[print_thes_na]."<br />
73                        <input type='checkbox' name='aff_commentaire' CHECKED value='1' />&nbsp;".$msg[print_thes_comment]."<br />
74                        <input type='checkbox' name='aff_voir' CHECKED value='1'/>&nbsp;".$msg[print_thes_voir]."<br />
75                        <input type='checkbox' name='aff_voir_aussi' CHECKED value='1'/>&nbsp;".$msg[print_thes_ta]."<br />
76                        <input type='checkbox' name='aff_tg' CHECKED value='1'/>&nbsp;".$msg[print_thes_tg]."<br />
77                        <input type='checkbox' name='aff_ts' CHECKED value='1'/>&nbsp;".$msg[print_thes_ts]."
78                </blockquote>
79                <b>".$msg["print_output_title"]."</b>
80                <blockquote>
81                        <input type='radio' name='output' value='printer' checked onClick='".$val_enable."'/>&nbsp;".$msg["print_output_printer"]."<br />
82                        <input type='radio' name='output' value='tt' onClick='".$val_enable."'/>&nbsp;".$msg["print_output_writer"]."<br />
83                        <input type='radio' name='output' value='xml' onClick='document.print_options.typeimpression.selectedIndex= 0;document.print_options.typeimpression.options[1].disabled = 1;print_options.typeimpression.options[2].disabled = 1; document.getElementById(\"options_xmlskos\").style.visibility=\"hidden\";' />&nbsp;".$msg["print_output_xml"]."<br/>
84                        <input type='radio' name='output' value='xmlent' onClick='document.print_options.typeimpression.selectedIndex= 0;document.print_options.typeimpression.options[1].disabled = 1;print_options.typeimpression.options[2].disabled = 1; document.getElementById(\"options_xmlskos\").style.visibility=\"hidden\";' />&nbsp;".$msg["print_output_ent"]."
85                ";
86                if(!$id_noeud_origine){
87                        print "<br /><input type='radio' name='output' value='xmlskos' onClick='document.print_options.typeimpression.selectedIndex= 0;document.print_options.typeimpression.options[1].disabled = 1;print_options.typeimpression.options[2].disabled = 1;document.getElementById(\"options_xmlskos\").style.visibility=\"visible\";' />&nbsp;".$msg["print_output_skos"] ;
88                        print "<div id='options_xmlskos' name='options_xmlskos' style='visibility:hidden;'>".$msg["print_output_skos_uri"]."&nbsp;<input type='text' name='uri_thes_skos' value='".$pmb_opac_url."thesaurus/".$aff_num_thesaurus."'/><br/>";
89                        print "<input type='checkbox' name='do_polyhierarchie' CHECKED value='1' />&nbsp;".$msg[print_output_skos_polyhierarchie];
90                        print "</div";
91                }
92                print "
93                </blockquote>
94                <input type='hidden' name='aff_langue' value='fr_FR'>
95                <input type='hidden' name='id_noeud_origine' value='$id_noeud_origine'>
96                <input type='hidden' name='aff_num_thesaurus' value='";
97        if ($aff_num_thesaurus>0) print $aff_num_thesaurus;
98        else die( "> Error with # of thesaurus");
99        print "'><center><input type='submit' value='".$msg["print_print"]."' class='bouton'/>&nbsp;<input type='button' value='".$msg["print_cancel"]."' class='bouton' onClick='self.close();'/></center>";
100        print "</body></html>";
101        }
102
103$rqlang = "select langue_defaut from thesaurus where id_thesaurus=".$aff_num_thesaurus ;
104$reslang = pmb_mysql_query($rqlang) or die("<br />Query 'langue_defaut' failed ".pmb_mysql_error()."<br />".$rqlang);
105$objlang = pmb_mysql_fetch_object($reslang);
106if ($objlang->langue_defaut) $aff_langue = $objlang->langue_defaut;
107else $aff_langue ="fr_FR";
108
109if ($action=="print") {
110        if(substr($output,0,3) =="xml"){
111                if($output != "xmlent"){
112                        header("Content-Type: text/xml; charset=utf-8");
113                        if($output == "xmlskos"){
114                                header("Content-Disposition: attachement; filename=thesaurus.skos.xml");
115                        }else{
116                                header("Content-Disposition: attachement; filename=thesaurus.xml");
117                        }
118                }
119               
120                $thes = new thesaurus($aff_num_thesaurus);
121                if($thes && $thes->num_noeud_racine){
122                        if($id_noeud_origine){
123                                $id_noeud_debut=$id_noeud_origine;
124                        }else{
125                                $id_noeud_debut=$thes->num_noeud_racine;
126                        }
127                       
128                        //Je peux commencer le thésaurus
129                        $dom = new DOMDocument('1.0', 'UTF-8');
130                        //$dom->preserveWhiteSpace = false;
131                    $dom->formatOutput = true;
132                   
133                    if($output == "xml"){
134                        $racine=creer_noeud_xml($dom,$dom,"THESAURII");
135                            $noeud=creer_noeud_xml($dom,$racine,"DATE_EX",date('Y-m-d\TH:i:s'));
136                                $noeudthes=creer_noeud_xml($dom,$racine,"THES");
137                                creer_noeud_xml($dom,$noeudthes,"LIB_THES",$thes->libelle_thesaurus);
138                               
139                                $res=categories::listChilds($id_noeud_debut, $aff_langue,1, "libelle_categorie");
140                            if($res && pmb_mysql_num_rows($res)){
141                                while ($categ=pmb_mysql_fetch_object($res)) {
142                                                if(trim($categ->libelle_categorie)){
143                                                        creer_categ_xml($dom,$noeudthes,0,$categ->num_noeud,$categ->libelle_categorie,$categ->note_application,$categ->comment_public,$categ->num_parent);
144                                                }
145                                        }
146                            }
147                    }elseif(($output == "xmlskos")||($output == "xmlent")){
148                        if(!$uri_thes_skos){
149                                $uri_thes_skos=$pmb_opac_url."thesaurus/".$aff_num_thesaurus;
150                        }
151                        $uri_thes_skos.="/";
152                        $uri_noeud_skos=$uri_thes_skos;
153                        $uri_thes_skos.="#Thesaurus";
154                        if($output == "xmlent"){
155                                $synchro_rdf = new synchro_rdf();
156                                $uri_thes_skos=$synchro_rdf->baseURI."thesaurus#".$aff_num_thesaurus;
157                                $uri_noeud_skos=$synchro_rdf->baseURI."concept#";
158                        }
159                        //uri_thes_skos, do_polyhierarchie
160                        $racine=creer_noeud_xml($dom,$dom,"rdf:RDF","",array("xmlns:rdf" => "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "xmlns:skos" => "http://www.w3.org/2004/02/skos/core#"));
161                        $conceptScheme=creer_noeud_xml($dom,$racine,"skos:ConceptScheme","",array("rdf:about"=>$uri_thes_skos));
162                        $prefLabel=creer_noeud_xml($dom,$conceptScheme,"skos:prefLabel",$thes->libelle_thesaurus,array("xml:lang"=>substr($thes->langue_defaut,0,2)));
163                       
164                        //hasTopConcept
165                        $requete="SELECT id_noeud FROM noeuds WHERE num_parent='".$id_noeud_debut."' AND  num_renvoi_voir='0' AND autorite != 'ORPHELINS' AND num_thesaurus='".$aff_num_thesaurus."'";
166                                $res_hasTopConcept=pmb_mysql_query($requete);
167                                if($res_hasTopConcept && pmb_mysql_num_rows($res_hasTopConcept)){
168                                        while ($hasTopConcept=pmb_mysql_fetch_object($res_hasTopConcept)) {
169                                                creer_noeud_xml($dom,$conceptScheme,"skos:hasTopConcept","",array("rdf:resource"=>$uri_noeud_skos.$hasTopConcept->id_noeud));
170                                        }
171                                }
172                        cree_export_skos($dom,$racine,$thes->num_noeud_racine,$thes->num_noeud_orphelins);
173                    }
174                    if($output == "xmlent"){
175                        $filename=microtime();
176                        $filename=str_replace(".","",$filename);
177                        $filename=str_replace(" ","",$filename);
178                        $filename=$base_path."/temp/".$filename.".xml";
179                        $dom->save($filename);
180                        //on fait le ménage dans le store
181                        $synchro_rdf->deleteTriple("<".$uri_thes_skos.">",'?p','?o');
182                        $requete="SELECT id_noeud FROM noeuds WHERE num_thesaurus='".$aff_num_thesaurus."'";
183                        $res=pmb_mysql_query($requete);
184                        while ($row=pmb_mysql_fetch_object($res)) {
185                                $synchro_rdf->deleteTriple("<".$uri_noeud_skos.$row->id_noeud.">",'?p','?o');
186                        }
187                        //on charge le xml
188                        $synchro_rdf->store->query($synchro_rdf->store->prefix."LOAD <".$filename."> into <pmb>");
189                        unlink($filename);
190                        print "<script type='text/javascript' >window.close();</script>";
191                        die();
192                    }else{
193                                echo $dom->saveXML();
194                    }                   
195                }else{
196                        die("Load thesaurus failed");
197                }
198        }else{
199                if ($output=="tt") {
200                        header("Content-Type: application/word");
201                        header("Content-Disposition: attachement; filename=thesaurus.doc");
202                }
203                print "<html><body style='font-family : Arial, Helvetica, Verdana, sans-serif;'>";
204                print "<h2>".affiche_text($msg["print_thes_titre_".$typeimpression])."</h2>";
205                switch($typeimpression) {
206                        case "arbo":
207                                $res.="<td width=10% bgcolor='".$color[$niveau-9]."'> </td>";
208                               
209                                if ($id_noeud_origine) {
210                                        // un noeud était fourni pour n'imprimer que cette branche
211                                        $id_noeud_top = $id_noeud_origine ;
212                                } else {
213                                        $rqt_id_noeud_top = "select id_noeud from noeuds where autorite='TOP' and num_thesaurus=".$aff_num_thesaurus ;
214                                        $result_rqt_id_noeud_top = pmb_mysql_query($rqt_id_noeud_top) or die("Query 'TOP' failed");
215                                        $obj_id_noeud_top = pmb_mysql_fetch_object($result_rqt_id_noeud_top);
216                                        $id_noeud_top = $obj_id_noeud_top->id_noeud;
217                                }
218                               
219                                // premier parcours pour calculer la profondeur du thésaurus : $profondeurmax
220                                $niveau=0;
221                                $resultat="";
222                                $profondeurmax=0;
223                                enfants($id_noeud_top, $niveau, $resultat, $profondeurmax, false);
224                                /// deuxième parcours, cette fois-ci on imprime
225                                $niveau=0;
226                                $resultat="";
227                                echo "<table width=100% cellspacing=0 cellpadding=3>";
228                                enfants($id_noeud_top, $niveau, $resultat, $profondeurmax, true);
229                                echo "</table>" ;
230                                break;
231                        case "alph":
232                                $rqt = "select id_noeud from noeuds n, categories c where c.num_thesaurus=$aff_num_thesaurus and n.num_thesaurus=$aff_num_thesaurus and id_noeud=num_noeud and langue='$aff_langue' and autorite!='TOP' and autorite!='ORPHELINS' and autorite!='NONCLASSES' order by libelle_categorie ";
233                                $result = pmb_mysql_query($rqt) or die("Query alpha failed");
234                                while ($obj_id_noeud = pmb_mysql_fetch_object($result)){
235                                        echo infos_categorie($obj_id_noeud->id_noeud);
236                                }
237                                break;
238                        case "rota":
239                                $mots=array();
240                                if (file_exists("$include_path/marc_tables/$aff_langue/empty_words_thesaurus")) {
241                                        $mots_vides_thesaurus=true;
242                                        include("$include_path/marc_tables/$aff_langue/empty_words_thesaurus");
243                                } else $mots_vides_thesaurus=false; 
244                                $rqt = "select id_noeud, libelle_categorie, index_categorie from noeuds n, categories c where c.num_thesaurus=$aff_num_thesaurus and n.num_thesaurus=$aff_num_thesaurus and id_noeud=num_noeud and langue='$aff_langue' and autorite!='TOP' and autorite!='ORPHELINS' and autorite!='NONCLASSES' order by libelle_categorie ";
245                                $result = pmb_mysql_query($rqt) or die("Query rota failed");
246                                while ($obj = pmb_mysql_fetch_object($result)) {
247                                        // récupération de l'index du libellé, nettoyage
248                                        $icat=$obj->index_categorie ;
249                                        // si mots vides supplémentaires
250                                        if ($mots_vides_thesaurus) {
251                                                // suppression des mots vides
252                                                if (is_array($empty_word_thesaurus)) {
253                                                        foreach($empty_word_thesaurus as $dummykey=>$word) {
254                                                                $word = convert_diacrit($word);
255                                                                $icat = pmb_preg_replace("/^${word}$|^${word}\s|\s${word}\s|\s${word}\$/i", ' ', $icat);
256                                                        }
257                                                }
258                                        }
259                                        $icat = trim($icat);
260                                        // echo "<br />".$obj->id_noeud." - ".$icat ;
261                                        $icat = pmb_preg_replace('/\s+/', ' ', $icat);
262       
263                                        // l'index est propre, on va pouvoir exploser sur espace.
264                                        $mot=array();
265                                        // index non vide (des fois que le ménage précédent l'aie vidé complètement)
266                                        if ($icat) {
267                                                $mot = explode(' ',$icat);
268                                                for ($imot=0;$imot<count($mot);$imot++) {
269                                                        if ($mot[$imot]) {
270                                                                $mots[$mot[$imot]][]=$obj->id_noeud ;
271                                                        }
272                                                }
273                                        }
274                                }
275                                // on a un super tableau de mots
276                                ksort($mots, SORT_STRING);
277                                echo "<table>";
278                                foreach ($mots as $mot=>$idiz) {
279                                        // on parcourt tous les mots trouvés
280                                        $rqt="select libelle_categorie, num_noeud from categories where num_noeud in(".implode(",",$idiz).") and langue='".$aff_langue."' order by index_categorie";
281                                        $ressql = pmb_mysql_query($rqt) or die ($rqt."<br /><br />".pmb_mysql_error());
282                                        while ($data=pmb_mysql_fetch_object($ressql)) {
283                                                // on parcourt toutes les catégories utilisant ce mot pour chercher la position d'utilisation du mot
284                                                $catnette = " ".str_replace(" - ","   ",strtolower(strip_empty_chars_thesaurus($data->libelle_categorie)))." ";
285                                                $catnette = str_replace(" -","  ",$catnette);
286                                                $catnette = str_replace("- ","  ",$catnette);
287                                                $posdeb=strpos($catnette," ".$mot." ");
288                                                $posfin=$posdeb+strlen($mot);
289                                                // echo "<br /><br />deb $posdeb - fin: $posfin mot: $mot LIB: ".$data->libelle_categorie ;
290                                                echo "
291                                                        <tr>
292                                                                <td align=right valign=top>".affiche_text(substr($data->libelle_categorie,0,$posdeb))."</td>
293                                                                <td align=left valign=top><b>".affiche_text(substr($data->libelle_categorie,$posdeb,$posfin-$posdeb))."</b>".affiche_text(substr($data->libelle_categorie,$posfin));
294                                                echo infos_categorie($data->num_noeud, false, true)."</td></tr>";
295                                        }
296                                }
297                                // print_r($mots);
298                                echo "</table>";
299                                break;
300                }
301                // pied de page
302                print "</body></html>";
303        }
304       
305}
306
307pmb_mysql_close($dbh);
308
309function infos_noeud($idnoeud, $niveau, $profondeurmax) {
310
311        global $dbh, $aff_langue;
312        global $aff_note_application, $aff_commentaire, $aff_voir, $aff_voir_aussi, $aff_tg, $aff_ts;
313        global $color, $fontsize, $paddingmargin ;
314        global $id_noeud_origine;
315       
316        // récupération info du noeud
317        $rqt = "select num_noeud, libelle_categorie, num_parent, note_application, comment_public, case when langue='$aff_langue' then '' else langue end as trad, langue from categories,noeuds where num_noeud = id_noeud and num_noeud='$idnoeud' order by trad ";
318        $ressql = pmb_mysql_query($rqt) or die ($rqt."<br /><br />".pmb_mysql_error());
319        while ($data=pmb_mysql_fetch_object($ressql)) {
320                $res.= "\n<tr>";
321                $niv=$niveau-1;
322                switch($niv) {
323                        case 10:
324                                $res.="<td width=10% bgcolor='".$color[$niveau-9]."'> </td>";
325                        case 9:
326                                $res.="<td width=10% bgcolor='".$color[$niveau-8]."'> </td>";
327                        case 8:
328                                $res.="<td width=10% bgcolor='".$color[$niveau-7]."'> </td>";
329                        case 7:
330                                $res.="<td width=10% bgcolor='".$color[$niveau-6]."'> </td>";
331                        case 6:
332                                $res.="<td width=10% bgcolor='".$color[$niveau-5]."'> </td>";
333                        case 5:
334                                $res.="<td width=10% bgcolor='".$color[$niveau-4]."'> </td>";
335                        case 4:
336                                $res.="<td width=10% bgcolor='".$color[$niveau-3]."'> </td>";
337                        case 3:
338                                $res.="<td width=10% bgcolor='".$color[$niveau-2]."'> </td>";
339                        case 2:
340                                $res.="<td width=10% bgcolor='".$color[$niveau-1]."'> </td>";
341                        case 1:
342                                $res.="<td width=10% bgcolor='".$color[$niveau]."'> </td>";
343                }
344
345                $printingBranche = false;
346                // afin d'avoir les bons colspan sur la branche en cas d'impression d'une branche
347                if ($id_noeud_origine==$idnoeud){
348                        $niveau=$niveau+1 ;
349                        $printingBranche = true;
350                } 
351
352                if (($data->note_application || $data->comment_public) && ($aff_note_application || $aff_commentaire)) {
353                        $style="style='border-top: 1px dotted gray;border-bottom: 1px dotted gray; ";
354                        $largeur="40%";
355                } else {
356                        $style="style='";
357                        $largeur="70%";
358                }
359                $style.=" ".$fontsize[$niveau]." ".$paddingmargin[$niveau]." '";
360                if ($data->trad) $res.="<td colspan='".($profondeurmax-($niveau-1))."' width=$largeur valign=top $style><font color='blue'>".affiche_text($data->trad)."</font> ".affiche_text($data->libelle_categorie)."";
361                else $res.="<td colspan='".($profondeurmax-($niveau-1))."' width=$largeur valign=top $style>".affiche_text($data->libelle_categorie);
362
363                //TERME GÉNÉRAL DANS LE CAS DE L'IMPRESSION D'UNE BRANCHE
364                if ($printingBranche){
365                        $rqttg = "select libelle_categorie from categories where num_noeud = '".$data->num_parent."'";
366                        $restg = pmb_mysql_query($rqttg) or die ($rqttg."<br /><br />".pmb_mysql_error());
367                        if (pmb_mysql_num_rows($restg)) {
368                                $datatg=pmb_mysql_fetch_object($restg);
369                                $res.= "<br /><font color='blue'>TG ".affiche_text($datatg->libelle_categorie)."</font>";
370                        }               
371                } 
372                       
373                if ($aff_voir_aussi) {
374                        $rqtva = "select libelle_categorie from categories, voir_aussi where num_noeud_orig=$idnoeud and num_noeud=num_noeud_dest and categories.langue='".$data->langue."' and voir_aussi.langue='".$data->langue."' order by libelle_categorie " ;
375                        $resva = pmb_mysql_query($rqtva) or die ($rqtva."<br /><br />".pmb_mysql_error());
376                        if (pmb_mysql_num_rows($resva)) {
377                                $res.= "\n<font color='green'>";
378                                while ($datava=pmb_mysql_fetch_object($resva)) $res.= "<br />TA ".affiche_text($datava->libelle_categorie);
379                                $res.= "</font>";
380                        }
381                       
382                }
383                if ($aff_voir) {
384                        $rqtva = "select libelle_categorie from categories, noeuds where num_renvoi_voir=$idnoeud and num_noeud=id_noeud and categories.langue='".$data->langue."' order by libelle_categorie " ;
385                        $resva = pmb_mysql_query($rqtva) or die ($rqtva."<br /><br />".pmb_mysql_error());
386                        if (pmb_mysql_num_rows($resva)) {
387                                $res.= "\n<font size=-1>";
388                                while ($datava=pmb_mysql_fetch_object($resva)) $res.= "<br />EP <i>".affiche_text($datava->libelle_categorie)."</i>";
389                                $res.= "</font>";
390                        }
391                }
392                $res.="</td>";
393                if ($aff_note_application && $data->note_application) $res.="<td width=30% valign=top $style><font color=#ff706d>".affiche_text($data->note_application)."</font></td>";
394                if ($aff_commentaire && $data->comment_public) $res.="<td width=30% valign=top $style><font color=black>".affiche_text($data->comment_public)."</font></td>";
395                $res.="\n</tr>";
396        }
397        return $res ;
398}
399
400function infos_categorie($idnoeud, $printcategnoeud=true, $forcer_em=false) {
401
402        global $dbh, $aff_langue;
403        global $aff_note_application, $aff_commentaire, $aff_voir, $aff_voir_aussi, $aff_tg, $aff_ts;
404       
405        // récupération info du noeud
406        $rqt = "select num_noeud, num_parent, libelle_categorie, note_application, comment_public, case when langue='$aff_langue' then '' else langue end as trad, langue from categories join noeuds on num_noeud=id_noeud where num_noeud='$idnoeud' order by trad ";
407        $ressql = pmb_mysql_query($rqt) or die ($rqt."<br /><br />".pmb_mysql_error());
408        while ($data=pmb_mysql_fetch_object($ressql)) {
409
410                if ($data->trad) $res.="<br /><font color=blue>".affiche_text($data->trad)."</font> ".affiche_text($data->libelle_categorie)."";
411                elseif ($printcategnoeud) $res.="<br /><br /><b>".affiche_text($data->libelle_categorie)."</b>";
412
413                // EP et EM
414                if ($aff_voir) {
415                        $rqtva = "select libelle_categorie from categories, noeuds where num_renvoi_voir=$idnoeud and num_noeud=id_noeud and categories.langue='".$data->langue."' order by libelle_categorie " ;
416                        $resva = pmb_mysql_query($rqtva) or die ($rqtva."<br /><br />".pmb_mysql_error());
417                        if (pmb_mysql_num_rows($resva)) {
418                                $res.= "\n<font size=-1>";
419                                while ($datava=pmb_mysql_fetch_object($resva)) $res.= "<br />EP <i>".affiche_text($datava->libelle_categorie)."</i>";
420                                $res.= "</font>";
421                        }
422                }
423                if ($aff_voir || $forcer_em) {
424                        $rqtva = "select libelle_categorie from categories, noeuds where id_noeud=$idnoeud and num_noeud=num_renvoi_voir and categories.langue='".$data->langue."' order by libelle_categorie " ;
425                        $resva = pmb_mysql_query($rqtva) or die ($rqtva."<br /><br />".pmb_mysql_error());
426                        if (pmb_mysql_num_rows($resva)) {
427                                $res.= "\n<font size=-1>";
428                                while ($datava=pmb_mysql_fetch_object($resva)) $res.= "<br />EM <i>".affiche_text($datava->libelle_categorie)."</i>";
429                                $res.= "</font>";
430                        }
431                }
432
433                // TG
434                if ($aff_tg) {
435                        $rqttg = "select libelle_categorie from categories join noeuds on num_noeud=id_noeud where num_noeud='$data->num_parent' and libelle_categorie not like '~%' and categories.langue='".$data->langue."' " ;
436                        $restg = pmb_mysql_query($rqttg) or die ($rqttg."<br /><br />".pmb_mysql_error());
437                        if (pmb_mysql_num_rows($restg)) {
438                                        $res.= "\n<font color=black>";
439                                        while ($datatg=pmb_mysql_fetch_object($restg)) $res.= "<br />TG ".affiche_text($datatg->libelle_categorie);
440                                        $res.= "</font>";
441                                }
442                }
443               
444                // TS
445                if ($aff_ts) {
446                        $rqtts = "select libelle_categorie from categories join noeuds on num_noeud=id_noeud where num_parent='$data->num_noeud' and libelle_categorie not like '~%' and categories.langue='".$data->langue."' " ;
447                        $rests = pmb_mysql_query($rqtts) or die ($rqttg."<br /><br />".pmb_mysql_error());
448                        if (pmb_mysql_num_rows($rests)) {
449                                        $res.= "\n<font color=black>";
450                                        while ($datats=pmb_mysql_fetch_object($rests)) $res.= "<br />TS ".affiche_text($datats->libelle_categorie);
451                                        $res.= "</font>";
452                                }
453                }               
454                // TA
455                if ($aff_voir_aussi) {
456                        $rqtva = "select libelle_categorie from categories, voir_aussi where num_noeud_orig=$idnoeud and num_noeud=num_noeud_dest and categories.langue='".$data->langue."' and voir_aussi.langue='".$data->langue."' order by libelle_categorie " ;
457                        $resva = pmb_mysql_query($rqtva) or die ($rqtva."<br /><br />".pmb_mysql_error());
458                        if (pmb_mysql_num_rows($resva)) {
459                                $res.= "\n<font color=green>";
460                                while ($datava=pmb_mysql_fetch_object($resva)) $res.= "<br />TA ".affiche_text($datava->libelle_categorie);
461                                $res.= "</font>";
462                        }
463                       
464                }
465               
466                if ($aff_note_application && $data->note_application) $res.="<br /><font color=#ff706d>NA ".affiche_text($data->note_application)."</font>";
467                if ($aff_commentaire && $data->comment_public) $res.="<br /><font color=black>PU ".affiche_text($data->comment_public)."</font>";
468        }
469        return $res ;
470}
471
472function enfants($id, $niveau, &$resultat, &$profondeurmax, $imprimer=false) {
473
474        global $dbh, $aff_langue;
475
476        if ($imprimer) {
477                $resultat=infos_noeud($id, $niveau, $profondeurmax) ;
478                echo $resultat;
479                flush();
480        } elseif ($niveau>$profondeurmax) $profondeurmax=$niveau; 
481       
482        // chercher les enfants
483        $rqt = "select id_noeud from noeuds, categories where num_parent='$id' and id_noeud=num_noeud and langue='$aff_langue' and autorite!='TOP' and autorite!='ORPHELINS' and autorite!='NONCLASSES' order by libelle_categorie ";
484        $res = pmb_mysql_query($rqt) ;
485        if (pmb_mysql_num_rows($res)) {
486                $niveau++;
487                while ($data=pmb_mysql_fetch_object($res)) {
488                        enfants($data->id_noeud, $niveau, $resultat, $profondeurmax, $imprimer);
489                }
490        }
491}
492
493function strip_empty_chars_thesaurus($string) {
494        // traitement des diacritiques
495        $string = convert_diacrit($string);
496
497        // Mis en commentaire : qu'en est-il des caractères non latins ???
498        // SUPPRIME DU COMMENTAIRE : ER : 12/05/2004 : ça fait tout merder...
499        // RECH_14 : Attention : ici suppression des éventuels "
500        //          les " ne sont plus supprimés
501        $string = stripslashes($string) ;
502        $string = pmb_alphabetic('^a-z0-9\s', ' ',pmb_strtolower($string));
503       
504        // espaces en début et fin
505        $string = pmb_preg_replace('/^\s+|\s+$/', '', $string);
506       
507        return $string;
508}
509
510
511function affiche_text($string){
512        global $charset;
513        return htmlentities($string,ENT_QUOTES,$charset);
514}
515
516
517//Fonctions utilisées pour l'export du thésaurus en xml
518
519function creer_categ_xml($dom,$parent,$niveau, $num_noeud,$libelle_categorie,$note_application,$comment_public,$num_parent){
520        global $dbh, $aff_langue;
521        global $aff_note_application, $aff_commentaire, $aff_voir, $aff_voir_aussi, $aff_tg, $aff_ts;
522       
523       
524        $noeud_categ=creer_noeud_xml($dom,$parent,"DE");
525
526        //ID
527        creer_noeud_xml($dom,$noeud_categ,"ID",$num_noeud);
528
529    //Libellé
530    creer_noeud_xml($dom,$noeud_categ,"LIB_DE",$libelle_categorie);
531
532    //Note application
533    if($note_application && $aff_note_application){
534        creer_noeud_xml($dom,$noeud_categ,"NA",$note_application);
535    }
536   
537     //Commentaire public
538    if($comment_public && $aff_commentaire){
539        creer_noeud_xml($dom,$noeud_categ,"NOTE",$comment_public);
540    }
541   
542    //Voir aussi
543    if($aff_voir_aussi){
544        $requete="SELECT libelle_categorie,num_noeud_dest FROM voir_aussi JOIN categories ON num_noeud_dest=num_noeud AND categories.langue='".$aff_langue."' WHERE num_noeud_orig='".$num_noeud."' AND voir_aussi.langue='".$aff_langue."' ORDER BY libelle_categorie";
545            $res=pmb_mysql_query($requete);
546            if($res && pmb_mysql_num_rows($res)){
547                while ( $va=pmb_mysql_fetch_object($res) ) {
548                                if(trim($va->libelle_categorie)){
549                                        creer_noeud_xml($dom,$noeud_categ,"TA",$va->libelle_categorie);
550                                }
551                        }
552            }
553    }
554   
555    //Employé pour
556    if($aff_voir){
557        $requete="SELECT libelle_categorie,id_noeud FROM noeuds JOIN categories ON id_noeud=num_noeud AND categories.langue='".$aff_langue."' WHERE num_renvoi_voir='".$num_noeud."' ORDER BY libelle_categorie";
558            $res=pmb_mysql_query($requete);
559            if($res && pmb_mysql_num_rows($res)){
560                while ( $ep=pmb_mysql_fetch_object($res) ) {
561                                if(trim($ep->libelle_categorie)){
562                                        creer_noeud_xml($dom,$noeud_categ,"EP",$ep->libelle_categorie);
563                                }
564                        }
565            }
566    }
567   
568    //Terme générique
569    if($aff_tg && $num_parent){
570        $requete="SELECT libelle_categorie FROM categories WHERE langue='".$aff_langue."' AND num_noeud='".$num_parent."'";
571            $res=pmb_mysql_query($requete);
572            if($res && pmb_mysql_num_rows($res)){
573                while ( $tg=pmb_mysql_fetch_object($res) ) {
574                                if(trim($tg->libelle_categorie)){
575                                        creer_noeud_xml($dom,$noeud_categ,"TG",$tg->libelle_categorie);
576                                }
577                        }
578            }
579    }
580   
581    //TS
582    if($aff_ts){
583        $res=categories::listChilds($num_noeud, $aff_langue,0, "libelle_categorie");
584            if($res && pmb_mysql_num_rows($res)){
585                $noeud_ts=creer_noeud_xml($dom,$noeud_categ,"TS".$niveau);
586                while ($categ=pmb_mysql_fetch_object($res)) {
587                                if(trim($categ->libelle_categorie)){
588                                        creer_categ_xml($dom,$noeud_ts,($niveau+1),$categ->num_noeud,$categ->libelle_categorie,$categ->note_application,$categ->comment_public,$categ->num_parent);
589                                }
590                        }
591            }
592    } 
593   
594}
595
596function encode_libelle_xml($val){
597        global $charset;
598       
599        if($charset == "utf-8"){
600                return htmlspecialchars($val,ENT_QUOTES,$charset);
601        }else{
602                return htmlspecialchars(utf8_encode($val),ENT_QUOTES,$charset);
603        }
604}
605
606function creer_noeud_xml(&$dom,&$noeud_parent,$name,$val="",$att=array()){
607        if($val){
608                $noeud=$dom->createElement($name,encode_libelle_xml($val));
609        }else{
610                $noeud=$dom->createElement($name);
611        }
612        $noeud=$noeud_parent->appendChild($noeud);
613       
614        if(count($att)){
615                do_att_xml($dom,$noeud,$att);
616        }
617       
618        return $noeud;
619}
620
621function do_att_xml(&$dom,&$noeud_parent,$att=array()){
622        foreach ( $att as $name => $value ) {
623                $element_att = $dom->createAttribute($name);
624                $element_att->value = $value;
625                $noeud_parent->appendChild($element_att);
626        }
627}
628//Fin des fonctions utilisées pour l'export du thésaurus en xml
629
630function cree_export_skos(&$dom,&$racine,$num_noeud_racine,$num_noeud_orphelins){
631        global $aff_num_thesaurus,$uri_thes_skos,$uri_noeud_skos,$do_polyhierarchie,$aff_voir_aussi;
632        global $aff_note_application, $aff_commentaire,$aff_tg, $aff_ts,$aff_voir;
633       
634        //On corrige les renvoies de renvoies dans les noeuds si il y en a
635        $arrayId=array();
636        $monTest=true;
637        while($monTest){
638                $requete="SELECT n1.id_noeud, n2.num_renvoi_voir FROM noeuds n1 LEFT JOIN noeuds n2 ON n1.num_renvoi_voir=n2.id_noeud WHERE n1.num_renvoi_voir <>'0' AND  n2.num_renvoi_voir <>'0'";
639                $res=pmb_mysql_query($requete);
640                if(pmb_mysql_num_rows($res)){           
641                        while ($ligne=pmb_mysql_fetch_object($res)) {
642                                if(!in_array($ligne->id_noeud,$arrayId)){
643                                        $arrayId[]=$ligne->id_noeud;
644                                }
645                                pmb_mysql_query("UPDATE noeuds SET num_renvoi_voir=".$ligne->num_renvoi_voir." WHERE id_noeud=".$ligne->id_noeud);
646                        }
647                }else{
648                        $monTest=false;
649                }
650        }
651       
652        //Je récupère les ids de tous les noeuds qui n'ont pas de renvoie
653        $requete="SELECT * FROM noeuds WHERE num_thesaurus='".$aff_num_thesaurus."' AND num_renvoi_voir='0' AND id_noeud != ".$num_noeud_racine." AND autorite != 'ORPHELINS'";
654        $res=pmb_mysql_query($requete);
655        if($res && pmb_mysql_num_rows($res)){
656                while ($noeud=pmb_mysql_fetch_object($res)) {
657                        $concept=creer_noeud_xml($dom,$racine,"skos:Concept","",array("rdf:about"=>$uri_noeud_skos.$noeud->id_noeud));
658                       
659                        $noeud_liee=array();
660                        //On ne traite jamais les Orphelins et le noeud racine
661                        $noeud_liee[$num_noeud_orphelins]=1;
662                        $noeud_liee[$num_noeud_racine]=1;
663                       
664                        //Gestion des parents
665                        if($aff_tg && $noeud->num_parent){
666                                if($num_noeud_racine == $noeud->num_parent){
667                                        creer_noeud_xml($dom,$concept,"skos:topConceptOf","",array("rdf:resource"=>$uri_thes_skos));
668                                }else{
669                                        creer_noeud_xml($dom,$concept,"skos:broader","",array("rdf:resource"=>$uri_noeud_skos.$noeud->num_parent));
670                                }
671                                $noeud_liee[$noeud->num_parent] = 1;
672                        }
673                       
674                        //Les renvois
675                        if($aff_voir){
676                                $requete="SELECT id_noeud, num_parent, libelle_categorie, langue FROM noeuds JOIN categories ON id_noeud=num_noeud AND noeuds.num_thesaurus=categories.num_thesaurus WHERE num_renvoi_voir='".$noeud->id_noeud."' AND noeuds.num_thesaurus='".$aff_num_thesaurus."'";
677                                $res_renvoi=pmb_mysql_query($requete);
678                                if($res_renvoi && pmb_mysql_num_rows($res_renvoi)){
679                                        while ($renvoi=pmb_mysql_fetch_object($res_renvoi)) {
680                                                if($do_polyhierarchie){
681                                                        //Je regarde si le libellé du renvoie est le même que celui du noeuds
682                                                        $requete="SELECT * FROM categories WHERE num_noeud='".$noeud->id_noeud."' AND num_thesaurus='".$aff_num_thesaurus."' AND libelle_categorie='".addslashes($renvoi->libelle_categorie)."' AND langue='".addslashes($renvoi->langue)."'";
683                                                        $res2=pmb_mysql_query($requete);
684                                                        if($res2 && pmb_mysql_num_rows($res2)){//Dans ce cas il s'agit de la même categ qui a été duppliqué pour la polyhierarchie
685                                                                if(!$noeud_liee[$renvoi->num_parent]){
686                                                                        creer_noeud_xml($dom,$concept,"skos:broader","",array("rdf:resource"=>$uri_noeud_skos.$renvoi->num_parent));
687                                                                        $noeud_liee[$renvoi->num_parent]=1;
688                                                                }else{
689                                                                        creer_noeud_xml($dom,$concept,"skos:altLabel",$renvoi->libelle_categorie,array("xml:lang"=>substr($renvoi->langue,0,2)));
690                                                                }
691                                                        }else{
692                                                                creer_noeud_xml($dom,$concept,"skos:altLabel",$renvoi->libelle_categorie,array("xml:lang"=>substr($renvoi->langue,0,2)));
693                                                        }
694                                                }else{
695                                                        creer_noeud_xml($dom,$concept,"skos:altLabel",$renvoi->libelle_categorie,array("xml:lang"=>substr($renvoi->langue,0,2)));
696                                                }
697                                        }
698                                }
699                        }
700                       
701                        //Gestion des enfants
702                        if($aff_ts){
703                                //$requete="SELECT id_noeud FROM noeuds WHERE num_parent='".$noeud->id_noeud."' AND  num_renvoi_voir='0' AND num_thesaurus='".$aff_num_thesaurus."'";
704                                $requete="SELECT id_noeud, num_renvoi_voir FROM noeuds WHERE num_parent='".$noeud->id_noeud."' AND num_thesaurus='".$aff_num_thesaurus."'";
705                                $res_narrower=pmb_mysql_query($requete);
706                                if($res_narrower && pmb_mysql_num_rows($res_narrower)){
707                                        while ($narrower=pmb_mysql_fetch_object($res_narrower)) {
708                                                if($narrower->num_renvoi_voir){
709                                                        if(!$noeud_liee[$narrower->num_renvoi_voir]){
710                                                                creer_noeud_xml($dom,$concept,"skos:narrower","",array("rdf:resource"=>$uri_noeud_skos.$narrower->num_renvoi_voir));
711                                                                $noeud_liee[$narrower->num_renvoi_voir]=1;
712                                                        }
713                                                }elseif(!$noeud_liee[$narrower->id_noeud]){
714                                                        creer_noeud_xml($dom,$concept,"skos:narrower","",array("rdf:resource"=>$uri_noeud_skos.$narrower->id_noeud));
715                                                        $noeud_liee[$narrower->id_noeud]=1;
716                                                }
717                                               
718                                        }
719                                }
720                        }
721                       
722                       
723                        //Je vais chercher les informations des catégories
724                        $requete="SELECT * FROM categories WHERE num_noeud='".$noeud->id_noeud."' AND num_thesaurus='".$aff_num_thesaurus."'";
725                        $res_cat=pmb_mysql_query($requete);
726                        if($res_cat && pmb_mysql_num_rows($res_cat)){
727                                while ($categ=pmb_mysql_fetch_object($res_cat)) {
728                                        //Appartenance au schéma
729                                        creer_noeud_xml($dom,$concept,"skos:inScheme","",array("rdf:resource"=>$uri_thes_skos));
730                                       
731                                        //Libellé
732                                        if($tmp = trim($categ->libelle_categorie)){
733                                                creer_noeud_xml($dom,$concept,"skos:prefLabel",$categ->libelle_categorie,array("xml:lang"=>substr($categ->langue,0,2)));
734                                        }
735                                       
736                                         //Note application
737                                    if($aff_note_application){
738                                        if($tmp = trim($categ->note_application)){
739                                                        creer_noeud_xml($dom,$concept,"skos:scopeNote",$categ->note_application,array("xml:lang"=>substr($categ->langue,0,2)));
740                                                }
741                                    }
742                                   
743                                     //Commentaire public
744                                    if($aff_commentaire){
745                                        if($tmp = trim($categ->comment_public)){
746                                                        creer_noeud_xml($dom,$concept,"skos:note",$categ->comment_public,array("xml:lang"=>substr($categ->langue,0,2)));
747                                                }
748                                    }
749                                }
750                        }
751                       
752                        //Les voir aussi
753                        if($aff_voir_aussi){
754                                $requete="SELECT num_noeud_dest FROM voir_aussi WHERE num_noeud_orig='".$noeud->id_noeud."'";
755                                $res_related=pmb_mysql_query($requete);
756                                if($res_related && pmb_mysql_num_rows($res_related)){
757                                        while ($related=pmb_mysql_fetch_object($res_related)) {
758                                                if(!$noeud_liee[$related->num_noeud_dest]){
759                                                        creer_noeud_xml($dom,$concept,"skos:related","",array("rdf:resource"=>$uri_noeud_skos.$related->num_noeud_dest));
760                                                        $noeud_liee[$related->num_noeud_dest]=1;
761                                                }
762                                        }
763                                }
764                        }
765                }
766        }
767}
768
769?>
Note: See TracBrowser for help on using the repository browser.