source: pmb4.2/trunk/fuentes/pmb/catalog/z3950/func_rameau_categ_categorise_cnl.inc.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.2 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// | creator : Eric ROBERT                                                    |
5// | modified : ...                                                           |
6// +-------------------------------------------------+
7// $Id: func_rameau_categ_categorise_cnl.inc.php,v 1.3 2015-04-03 11:16:22 jpermanne Exp $
8
9if (stristr($_SERVER['REQUEST_URI'], ".inc.php")) die("no access");
10
11// enregistrement de la notices dans les catégories
12require_once($class_path."/thesaurus.class.php");
13require_once($class_path."/categories.class.php");
14global $thesaurus_defaut;
15
16//Attention, dans le multithesaurus, le thesaurus dans lequel on importe est le thesaurus par defaut
17$thes = new thesaurus($thesaurus_defaut);
18$rac = $thes->num_noeud_racine;
19// DEBUT paramétrage propre à la base de données d'importation :
20// récupération du 606 : récup en catégories en essayant de classer :
21//      les sujets sous le terme "Recherche par terme"
22        $id_rech_theme = categories::searchLibelle('Recherche par terme', $thesaurus_defaut, 'fr_FR');
23    if (!$id_rech_theme) $id_rech_theme = create_categ($rac, 'Recherche par terme', strip_empty_words('Recherche par terme', 'fr_FR'));
24               
25//      les précisions géographiques sous le terme "Recherche géographique"
26        $id_rech_geo = categories::searchLibelle('Recherche géographique', $thesaurus_defaut, 'fr_FR');
27    if (!$id_rech_geo)  $id_rech_geo = create_categ($rac, 'Recherche géographique', strip_empty_words('Recherche géographique', 'fr_FR'));
28
29//      les précisions de période sous le terme "Recherche chronologique"
30        $id_rech_chrono = categories::searchLibelle('Recherche chronologique', $thesaurus_defaut, 'fr_FR');
31    if (!$id_rech_chrono) $id_rech_chrono = create_categ($rac, 'Recherche chronologique', strip_empty_words('Recherche chronologique', 'fr_FR'));
32
33// FIN paramétrage
34
35function traite_categories_enreg($notice_retour,$categories,$thesaurus_traite=0) {
36
37        global $dbh;
38       
39        // si $thesaurus_traite fourni, on ne delete que les catégories de ce thesaurus, sinon on efface toutes
40        //  les indexations de la notice sans distinction de thesaurus
41        if (!$thesaurus_traite) $rqt_del = "delete from notices_categories where notcateg_notice='$notice_retour' ";
42        else $rqt_del = "delete from notices_categories where notcateg_notice='$notice_retour' and num_noeud in (select id_noeud from noeuds where num_thesaurus='$thesaurus_traite' and id_noeud=notices_categories.num_noeud) ";
43        $res_del = @pmb_mysql_query($rqt_del, $dbh);
44       
45        $rqt_ins = "insert into notices_categories (notcateg_notice, num_noeud, ordre_categorie) VALUES ";
46       
47        for($i=0 ; $i< sizeof($categories) ; $i++) {
48                $id_categ=$categories[$i]['categ_id'];
49                if ($id_categ) {
50                        $rqt = $rqt_ins . " ('$notice_retour','$id_categ',$i) " ; 
51                        $res_ins = @pmb_mysql_query($rqt, $dbh);
52                }
53        }
54}
55
56
57function traite_categories_for_form($tableau_600="",$tableau_601="",$tableau_602="",$tableau_605="",$tableau_606="",$tableau_607="",$tableau_608="") {
58       
59        global $charset, $pmb_keyword_sep, $rameau;
60        $info_606_a = $tableau_606["info_606_a"] ;
61        $info_606_j = $tableau_606["info_606_j"] ;
62        $info_606_x = $tableau_606["info_606_x"] ;
63        $info_606_y = $tableau_606["info_606_y"] ;
64        $info_606_z = $tableau_606["info_606_z"] ;
65       
66        $champ_rameau="";
67        for ($a=0; $a<sizeof($info_606_a); $a++) {
68                $libelle_final="";
69                $libelle_j="";
70                for ($j=0; $j<sizeof($info_606_j[$a]); $j++) {
71                        if (!$libelle_j) $libelle_j .= trim($info_606_j[$a][$j]) ;
72                                else $libelle_j .= " $pmb_keyword_sep ".trim($info_606_j[$a][$j]) ;
73                }
74                if (!$libelle_j) $libelle_final = trim($info_606_a[$a][0]) ; else $libelle_final = trim($info_606_a[$a][0])." $pmb_keyword_sep ".$libelle_j ;
75                if (!$libelle_final) break ;
76                for ($j=0; $j<sizeof($info_606_x[$a]); $j++) {
77                        $libelle_final .= " $pmb_keyword_sep ".trim($info_606_x[$a][$j]) ;
78                }
79                for ($j=0; $j<sizeof($info_606_y[$a]); $j++) {
80                        $libelle_final .= " $pmb_keyword_sep ".trim($info_606_y[$a][$j]) ;
81                }
82                for ($j=0; $j<sizeof($info_606_z[$a]); $j++) {
83                        $libelle_final .= " $pmb_keyword_sep ".trim($info_606_z[$a][$j]) ;
84                }
85                if ($champ_rameau) $champ_rameau.=" $pmb_keyword_sep ";
86                $champ_rameau.=$libelle_final;
87        } 
88
89        $rameau_form = serialize($tableau_606) ;
90       
91        // $rameau est la variable traitée par la fonction traite_categories_from_form,
92        // $rameau est normalement POSTée, afin de pouvoir être traitée en lot, donc hors
93        // formulaire, il faut l'affecter.
94        $rameau = addslashes(serialize($tableau_606)) ;
95
96        return array(
97                "form" => "<input type='hidden' name='rameau' value='".htmlentities($rameau_form,ENT_QUOTES,$charset)."' />",
98                "message" => "Rameau sera intégré sous forme d'arborescence répartie Recherche par terme \$a \$x Recherche géographique \$y Recherche chronologique \$z : <b>".htmlentities($champ_rameau,ENT_QUOTES,$charset)."</b>"
99        );
100}
101
102
103function traite_categories_from_form() {
104               
105        global $rameau ;
106        global $dbh;
107        global $thes;
108        global $id_rech_geo, $id_rech_chrono, $id_rech_theme ;
109       
110        $tableau_606 = unserialize(stripslashes($rameau)) ;
111       
112        $info_606_a = $tableau_606["info_606_a"] ;
113        $info_606_j = $tableau_606["info_606_j"] ;
114        $info_606_x = $tableau_606["info_606_x"] ;
115        $info_606_y = $tableau_606["info_606_y"] ;
116        $info_606_z = $tableau_606["info_606_z"] ;
117       
118        // ici récupération du code de admin/import/func_cnl.inc.php puis modif pour création du tableau des catégories, ce qui doit être retourné par la fonction
119        $libelle_j = "" ;
120        for ($a=0; $a<sizeof($info_606_a); $a++) {
121                for ($j=0; $j<sizeof($info_606_j[$a]); $j++) {
122                        if (!$libelle_j) $libelle_j .= trim($info_606_j[$a][$j]) ;
123                                else $libelle_j .= " ** ".trim($info_606_j[$a][$j]) ;
124                        }
125                if (!$libelle_j) $libelle_final = trim($info_606_a[$a][0]) ;
126                        else $libelle_final = trim($info_606_a[$a][0])." ** ".$libelle_j ;
127                if (!$libelle_final) break ; 
128                $res_a = categories::searchLibelle(addslashes($libelle_final), $thes->id_thesaurus, 'fr_FR', $id_rech_theme);
129                if ($res_a) {
130                        $categid_a = $res_a;
131                } else {
132                        $categid_a = create_categ($id_rech_theme, $libelle_final, strip_empty_words($libelle_final));
133                }
134                // récup des sous-categ en cascade sous $a
135                $categ_parent =  $categid_a ;
136                for ($x=0 ; $x < sizeof($info_606_x[$a]) ; $x++) {
137                        $res_x = categories::searchLibelle(addslashes(trim($info_606_x[$a][$x])), $thes->id_thesaurus, 'fr_FR', $categ_parent);
138                        if ($res_x) {
139                                $categ_parent = $res_x;
140                        } else {
141                                $categ_parent = create_categ($categ_parent, trim($info_606_x[$a][$x]), strip_empty_words($info_606_x[$a][$x]));
142                        }
143                } // fin récup des $x en cascade sous l'id de la catégorie 606$a
144               
145                if ($categ_parent != $id_rech_theme) {
146                        $categ_retour[]['categ_id'] = $categ_parent ;
147                        }
148               
149                // récup des categ géo à loger sous la categ géo principale
150                $categ_parent =  $id_rech_geo ;
151                for ($y=0 ; $y < sizeof($info_606_y[$a]) ; $y++) {
152                        $res_y = categories::searchLibelle(addslashes(trim($info_606_y[$a][$y])), $thes->id_thesaurus, 'fr_FR', $categ_parent);
153                        if ($res_y) {
154                                $categ_parent = $res_y;         
155                        } else {
156                                $categ_parent = create_categ($categ_parent, trim($info_606_y[$a][$y]), strip_empty_words($info_606_y[$a][$y]));
157                        }
158                } // fin récup des $y en cascade sous l'id de la catégorie principale thème géo
159               
160                if ($categ_parent != $id_rech_geo) {
161                        $categ_retour[]['categ_id'] = $categ_parent ;
162                        }
163               
164                // récup des categ chrono à loger sous la categ chrono principale
165                $categ_parent =  $id_rech_chrono ;
166                for ($z=0 ; $z < sizeof($info_606_z[$a]) ; $z++) {
167                        $res_z = categories::searchLibelle(addslashes(trim($info_606_z[$a][$z])), $thes->id_thesaurus, 'fr_FR', $categ_parent);
168                        if ($res_z) {
169                                $categ_parent = $res_z;
170                        } else {
171                                $categ_parent = create_categ($categ_parent, trim($info_606_z[$a][$z]), strip_empty_words($info_606_z[$a][$z]));
172                        }
173                } // fin récup des $z en cascade sous l'id de la catégorie principale thème chrono
174               
175                if ($categ_parent != $id_rech_chrono) {
176                        $categ_retour[]['categ_id'] = $categ_parent ;
177                }
178        }
179// DEBUG echo "<pre>"; print_r($categ_retour) ; echo "</pre>"; exit ;
180return $categ_retour ;
181}
182
183
184function create_categ($num_parent, $libelle, $index) {
185       
186        global $thes;
187        $n = new noeuds();
188        $n->num_thesaurus = $thes->id_thesaurus;
189        $n->num_parent = $num_parent;
190        $n->save();
191       
192        $c = new categories($n->id_noeud, 'fr_FR');
193        $c->libelle_categorie = $libelle;
194        $c->index_categorie = $index;
195        $c->save();
196       
197        return $n->id_noeud;
198}       
199
200// Permet de mémoriser la valeur d'un import extern pour ensuite l'intégré dans un champ perso de la notice avec param_perso_form
201function param_perso_prepare($record) {
202        global $param_perso_910_a;
203        $param_perso_910_a='';
204        for ($i=0;$i<count($record->inner_directory);$i++) {
205                $cle=$record->inner_directory[$i]['label'];
206                switch($cle) {
207                        case "910": /* isbn */
208                                $param_perso_910_a=$record->get_subfield_array($cle, 'a');
209                        break;
210                }
211        }                                       
212}
213
214function param_perso_form(&$p_perso) {
215        global $param_perso_910_a;
216        $tab_date=explode("/",$param_perso_910_a[0]);
217        $param_perso_910_sql=$tab_date[2].'-'.$tab_date[1].'-'.$tab_date[0];
218        $q = "select idchamp from notices_custom where name='dateparution' limit 1 "; 
219        $r = pmb_mysql_query($q);
220        if (pmb_mysql_num_rows($r)) {
221                $field_dateparution = pmb_mysql_result($r,0,0); 
222                $p_perso->values[$field_dateparution][0]=$param_perso_910_sql;
223        }
224       
225}
226                               
Note: See TracBrowser for help on using the repository browser.