source: pmb4.2/trunk/fuentes/pmb/classes/noeuds.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: 21.2 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2005 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: noeuds.class.php,v 1.42 2015-06-10 07:14:04 jpermanne Exp $
6
7if (stristr($_SERVER['REQUEST_URI'], ".class.php")) die("no access");
8
9require_once($class_path."/thesaurus.class.php");
10require_once($class_path."/category.class.php");
11require_once($include_path."/templates/category.tpl.php");
12require_once("$include_path/user_error.inc.php");
13require_once("$include_path/misc.inc.php");
14require_once("$class_path/aut_link.class.php");
15require_once("$class_path/aut_pperso.class.php");
16require_once("$class_path/audit.class.php");
17require_once($class_path."/synchro_rdf.class.php");
18
19class noeuds{
20       
21       
22        var $id_noeud = 0;                              //Identifiant du noeud
23        var $autorite = '';
24        var $num_parent = 0;
25        var $num_renvoi_voir = 0;
26        var $visible = '1';
27        var     $num_thesaurus = 0;                     //Identifiant du thesaurus de rattachement
28        var     $authority_import_denied = 0;                   //Interdit l'import de l'autorité
29        var $not_use_in_indexation = 0; // Interdir l'utilisation de la catégorie en indexation de notice
30         
31        //Constructeur. 
32        function noeuds($id=0) {
33               
34                global $dbh;
35       
36                if ($id) {
37                        $this->id_noeud = $id;
38                        $this->load(); 
39                }       
40        }
41       
42               
43        // charge le noeud à partir de la base.
44        function load(){
45       
46                global $dbh;
47                $q = "select * from noeuds where id_noeud = '".$this->id_noeud."' ";
48                $r = pmb_mysql_query($q, $dbh) ;
49                $obj = pmb_mysql_fetch_object($r);
50                $this->id_noeud = $obj->id_noeud;
51                $this->autorite = $obj->autorite;
52                $this->num_parent = $obj->num_parent;
53                $this->num_renvoi_voir = $obj->num_renvoi_voir;
54                $this->visible = $obj->visible;
55                $this->num_thesaurus = $obj->num_thesaurus;
56                $this->path = $obj->path;
57                $this->not_use_in_indexation = $obj->not_use_in_indexation;
58                $this->authority_import_denied = $obj->authority_import_denied;
59        }
60
61       
62        // enregistre le noeud en base.
63        function save(){
64               
65                global $dbh;
66               
67                if (!$this->num_thesaurus) die ('Erreur de création noeud');
68               
69                if ($this->id_noeud) {  //Mise à jour noeud
70                       
71                        $q = 'update noeuds set autorite =\''.addslashes($this->autorite).'\', ';
72                        $q.= 'num_parent = \''.$this->num_parent.'\', num_renvoi_voir = \''.$this->num_renvoi_voir.'\', ';
73                        $q.= 'visible = \''.$this->visible.'\', num_thesaurus = \''.$this->num_thesaurus.'\', ';
74                        $q.= 'authority_import_denied = \''.$this->authority_import_denied.'\', not_use_in_indexation = \''.$this->not_use_in_indexation.'\' ';
75                        $q.= 'where id_noeud = \''.$this->id_noeud.'\' ';
76                        pmb_mysql_query($q, $dbh);
77                        audit::insert_modif (AUDIT_CATEG, $this->id_noeud) ;
78
79                } else {
80                       
81                        $q = 'insert into noeuds set autorite = \''.addslashes($this->autorite).'\', ';
82                        $q.= 'num_parent = \''.$this->num_parent.'\', num_renvoi_voir = \''.$this->num_renvoi_voir.'\', ';
83                        $q.= 'visible = \''.$this->visible.'\', num_thesaurus = \''.$this->num_thesaurus.'\', ';
84                        $q.= 'authority_import_denied = \''.$this->authority_import_denied.'\', not_use_in_indexation = \''.$this->not_use_in_indexation.'\' ';
85                        pmb_mysql_query($q, $dbh);
86                        $this->id_noeud = pmb_mysql_insert_id($dbh);
87                        audit::insert_creation (AUDIT_CATEG, $this->id_noeud) ;
88                }
89               
90                // Mis à jour du path de lui-meme, et de tous les fils
91                $thes = thesaurus::getByEltId($this->id_noeud);
92
93                $id_top = $thes->num_noeud_racine;
94                $path='';               
95                $id_tmp=$this->id_noeud;
96                while (true) {
97                        $q = "select num_parent from noeuds where id_noeud = '".$id_tmp."' limit 1";
98                        $r = pmb_mysql_query($q, $dbh);
99                        $id_tmp= $id_cur = pmb_mysql_result($r, 0, 0);
100                        if (!$id_cur || $id_cur == $id_top) break;
101                        if($path) $path='/'.$path;
102                        $path=$id_tmp.$path;                   
103                }
104                noeuds::process_categ_path($this->id_noeud,$path);
105        }
106       
107        static function process_categ_path($id_noeud=0, $path='') {
108                global $dbh;
109
110                if(!$id_noeud) return; 
111               
112                if($path) $path.='/';
113                $path.=$id_noeud;
114               
115                $res = noeuds::listChilds($id_noeud, 0);
116                while (($row = pmb_mysql_fetch_object($res))) {
117                        // la categorie a des filles qu'on va traiter
118                        noeuds::process_categ_path ($row->id_noeud,$path);
119                }               
120                $req="update noeuds set path='$path' where id_noeud=$id_noeud";
121                pmb_mysql_query($req,$dbh);             
122        }
123
124        static function process_categ($id_noeud) {
125                global $dbh;
126               
127                global $deleted;
128                global $lot;
129               
130                $res = noeuds::listChilds($id_noeud, 0);
131                $total = pmb_mysql_num_rows($res);
132                if ($total) {
133                        while ($row = pmb_mysql_fetch_object($res)) {
134                                // la categorie a des filles qu'on va traiter
135                                noeuds::process_categ ($row->id_noeud);
136                        }
137                       
138                        // après ménage de ses filles, reste-t-il des filles ?
139                        $total_filles = noeuds::hasChild($id_noeud);
140                       
141                        // categ utilisée en renvoi voir ?
142                        $total_see = noeuds::isTarget($id_noeud);
143                       
144                        // est-elle utilisée ?
145                        $iuse = noeuds::isUsedInNotices($id_noeud) + noeuds::isUsedinSeeALso($id_noeud);
146                       
147                        if(!$iuse && !$total_filles && !$total_see) {
148                                $deleted++ ;
149                                noeuds::delete($id_noeud);
150                        }
151                       
152                } else { // la catégorie n'a pas de fille on va la supprimer si possible
153                        // regarder si categ utilisée
154                        $iuse = noeuds::isUsedInNotices($id_noeud) + noeuds::isUsedinSeeALso($id_noeud);
155                        if(!$iuse) {
156                                $deleted++ ;
157                                noeuds::delete($id_noeud);
158                        }
159                }
160                               
161        }
162
163        //fonctions !!!
164
165        //supprime un noeud et toutes ses références
166        function delete($id_noeud=0) {
167               
168                global $dbh;
169
170                if(!$id_noeud && (is_object($this))) $id_noeud = $this->id_noeud;       
171
172                // Supprime les categories.
173                $q = "delete from categories where num_noeud = '".$id_noeud."' ";
174                pmb_mysql_query($q, $dbh);
175               
176                //Import d'autorité
177                noeuds::delete_autority_sources($id_noeud);
178               
179                // Supprime les renvois voir_aussi vers ce noeud.
180                $q= "delete from voir_aussi where num_noeud_dest = '".$id_noeud."' ";
181                pmb_mysql_query($q, $dbh);
182               
183                // Supprime les renvois voir_aussi depuis ce noeud.
184                $q= "delete from voir_aussi where num_noeud_orig = '".$id_noeud."' ";
185                pmb_mysql_query($q, $dbh);
186               
187                // Supprime les associations avec des notices.
188                $q= "delete from notices_categories where num_noeud = '".$id_noeud."' ";
189                pmb_mysql_query($q, $dbh);
190
191                //Supprime les emprises du noeud
192                $req = "select map_emprise_id from map_emprises where map_emprise_type=2 and map_emprise_obj_num=".$id_noeud;
193                $result = pmb_mysql_query($req, $dbh);
194                if (pmb_mysql_num_rows($result)) {
195                        $row = pmb_mysql_fetch_object($result);
196                        $q= "delete from map_emprises where map_emprise_obj_num ='".$id_noeud."' and map_emprise_type = 2";
197                        pmb_mysql_query($q, $dbh);
198                        $req_areas="delete from map_hold_areas where type_obj=2 and id_obj=".$row->map_emprise_id;
199                        pmb_mysql_query($req_areas,$dbh);
200                }
201               
202                //suppression des renvois voir restants
203                $q = "update noeuds set num_renvoi_voir = '0' where num_renvoi_voir = '".$id_noeud."' ";
204                pmb_mysql_query($q, $dbh);
205               
206                // Supprime le noeud.
207                $q = "delete from noeuds where id_noeud = '".$id_noeud."' ";
208                pmb_mysql_query($q, $dbh);
209               
210                audit::delete_audit(AUDIT_CATEG,$id_noeud);
211               
212                // liens entre autorités
213                $aut_link= new aut_link(AUT_TABLE_CATEG,$id_noeud);
214                $aut_link->delete();
215               
216                $aut_pperso= new aut_pperso("categ",$id_noeud);
217                $aut_pperso->delete();
218                               
219        }
220
221        // ---------------------------------------------------------------
222        //              delete_autority_sources($idcol=0) : Suppression des informations d'import d'autorité
223        // ---------------------------------------------------------------
224        static function delete_autority_sources($idnoeud=0){
225                $tabl_id=array();
226                if(!$idnoeud){
227                        $requete="SELECT DISTINCT num_authority FROM authorities_sources LEFT JOIN noeuds ON num_authority=id_noeud  WHERE authority_type = 'category' AND id_noeud IS NULL";
228                        $res=pmb_mysql_query($requete);
229                        if(pmb_mysql_num_rows($res)){
230                                while ($ligne = pmb_mysql_fetch_object($res)) {
231                                        $tabl_id[]=$ligne->num_authority;
232                                }
233                        }
234                }else{
235                        $tabl_id[]=$idnoeud;
236                }
237                foreach ( $tabl_id as $value ) {
238               //suppression dans la table de stockage des numéros d'autorités...
239                        $query = "select id_authority_source from authorities_sources where num_authority = ".$value." and authority_type = 'category'";
240                        $result = pmb_mysql_query($query);
241                        if(pmb_mysql_num_rows($result)){
242                                while ($ligne = pmb_mysql_fetch_object($result)) {
243                                        $query = "delete from notices_authorities_sources where num_authority_source = ".$ligne->id_authority_source;
244                                        pmb_mysql_query($query);
245                                }
246                        }
247                        $query = "delete from authorities_sources where num_authority = ".$value." and authority_type = 'category'";
248                        pmb_mysql_query($query);
249                }
250        }
251
252        // recherche si une autorite existe deja dans un thesaurus,
253        // et retourne le noeud associe
254        function searchAutorite($num_thesaurus, $autorite) {
255               
256                global $dbh;
257               
258                $q = "select id_noeud from noeuds where num_thesaurus = '".$num_thesaurus."' ";
259                $q.= "and autorite = '".addslashes($autorite)."' limit 1";
260                $r = pmb_mysql_query($q, $dbh);
261                if (pmb_mysql_num_rows($r) == 0) return FALSE;
262                $noeud = new noeuds(pmb_mysql_result($r, 0, 0));
263                return $noeud;
264        }
265       
266       
267        //recherche si un noeud a des fils
268        static function hasChild($id_noeud=0) {
269       
270                global $dbh;
271
272                if(!$id_noeud && (is_object($this))) $id_noeud = $this->id_noeud;       
273                if($id_noeud){
274                        $q = "select count(1) from noeuds where num_parent = '".$id_noeud."' ";
275                        $r = pmb_mysql_query($q, $dbh);
276                        return pmb_mysql_result($r, 0, 0);
277                }
278                return 0;
279        }       
280
281               
282        //recherche si un noeud est le renvoi voir d'un autre noeud.
283        static function isTarget($id_noeud=0) {
284               
285                global $dbh;
286               
287                if(!$id_noeud && (is_object($this))) $id_noeud = $this->id_noeud; 
288                if($id_noeud){
289                        $q = "select count(1) from noeuds where num_renvoi_voir = '".$id_noeud."' ";
290                        $r = pmb_mysql_query($q, $dbh);
291                        return pmb_mysql_result($r, 0, 0);
292                }
293                return 0;
294        }               
295
296
297        //Indique si un noeud est protégé (TOP, ORPHELINS et NONCLASSES).
298        static function isProtected($id_noeud=0) {
299               
300                global $dbh;
301               
302                if(!$id_noeud && (is_object($this))) $id_noeud = $this->id_noeud; 
303                $q = "select autorite from noeuds where id_noeud = '".$id_noeud."' ";
304                $r = pmb_mysql_query($q, $dbh);
305                $a = pmb_mysql_result($r, 0, 0);
306                if( $a=='TOP' || $a=='ORPHELINS' || $a=='NONCLASSES') return TRUE;
307                        else return FALSE;
308        }               
309
310
311        //Indique si un noeud est racine (non modifiable).
312        static function isRacine($id_noeud=0) {
313               
314                global $dbh;
315               
316                if (!$id_noeud) return FALSE;
317                $q = "select * from thesaurus where num_noeud_racine = '".$id_noeud."' limit 1 ";
318                $r = pmb_mysql_query($q, $dbh);
319                if( pmb_mysql_num_rows($r)) return TRUE;
320                        else return FALSE;
321        }               
322
323
324        //Liste les ancetres d'un noeud et les retourne sous forme d'un tableau
325        static function listAncestors($id_noeud=0) {
326               
327                global $dbh;
328                if(!$id_noeud && (is_object($this))) {
329                        $id_noeud = $this->id_noeud;
330                        $path= $this->path;
331                } else {
332                        $q = "select path from noeuds where id_noeud = '".$id_noeud."' ";
333                        $r = pmb_mysql_query($q, $dbh);
334                        if($r && pmb_mysql_num_rows($r)){
335                                $path=pmb_mysql_result($r, 0, 0);
336                        }
337                }
338                if ($path){ 
339                        $id_list=explode('/',$path);
340                        krsort($id_list);
341                        return $id_list;               
342                }
343                $thes = thesaurus::getByEltId($id_noeud);
344
345                $id_top = $thes->num_noeud_racine;
346                $i = 0;         
347                $id_list[$i] = $id_noeud;
348                while (true) {
349                        $q = "select num_parent from noeuds where id_noeud = '".$id_list[$i]."' limit 1";
350                        $r = pmb_mysql_query($q, $dbh);
351                        $id_cur = pmb_mysql_result($r, 0, 0);
352                        if (!$id_cur || $id_cur == $id_top) break;
353                        $i++;
354                        $id_list[$i] = pmb_mysql_result($r, 0, 0);
355                }
356                return $id_list;               
357        }
358       
359       
360        //Liste les enfants d'un noeud sous forme de resultset (si $renvoi=0, ne retourne pas les noeuds renvoyés)
361        static function listChilds($id_noeud=0, $renvoi=0) {
362       
363                global $dbh;
364
365                if(!$id_noeud && (is_object($this))) $id_noeud = $this->id_noeud;       
366                $q = "select id_noeud from noeuds where num_parent = '".$id_noeud."' ";
367                $q.= "and autorite not in ('ORPHELINS', 'NONCLASSES') ";
368                if (!$renvoi) $q.= "and num_renvoi_voir = '0' ";
369                $r = pmb_mysql_query($q, $dbh);
370                return $r;
371        }
372
373        //Liste les noeuds qui ont un renvoi voir d'un autre noeud sous forme de resultset
374        static function listTargets($id_noeud=0) {
375       
376                global $dbh;
377               
378                if(!$id_noeud && (is_object($this))) $id_noeud = $this->id_noeud;       
379                $q = "select id_noeud from noeuds where num_renvoi_voir = '".$id_noeud."' ";
380                $q.= "and autorite not in ('ORPHELINS', 'NONCLASSES') ";
381                $r = pmb_mysql_query($q, $dbh);
382                return $r;
383        }
384       
385        //Liste les noeuds termes orphelins qui ont un renvoi voir d'un autre noeud sous forme de tableau
386        static function listTargetsOrphansOnly($id_noeud=0) {
387               
388                global $dbh;
389               
390                $id_list = array();
391                if(!$id_noeud && (is_object($this))) $id_noeud = $this->id_noeud;
392               
393                $thes = thesaurus::getByEltId($id_noeud);
394               
395                $q = "select id_noeud from noeuds where num_renvoi_voir = '".$id_noeud."' ";
396                $q.= "and autorite not in ('ORPHELINS', 'NONCLASSES') ";
397                $r = pmb_mysql_query($q, $dbh);
398                if (mysql_num_rows($r)) {
399                        while ($row = pmb_mysql_fetch_object($r)) {
400                                $id_list_ancestors = noeuds::listAncestors($row->id_noeud);
401                                if (count($id_list_ancestors)) {
402                                        if (in_array($thes->num_noeud_orphelins,$id_list_ancestors)) {
403                                                $id_list[] = $row->id_noeud;
404                                        }
405                                }
406                        }
407                }
408               
409                return $id_list;
410        }
411       
412        //Liste les noeuds sauf termes orphelins qui ont un renvoi voir d'un autre noeud sous forme de tableau
413        static function listTargetsExceptOrphans($id_noeud=0) {
414       
415                global $dbh;
416       
417                $id_list = array();
418                if(!$id_noeud && (is_object($this))) $id_noeud = $this->id_noeud;
419       
420                $thes = thesaurus::getByEltId($id_noeud);
421       
422                $q = "select id_noeud from noeuds where num_renvoi_voir = '".$id_noeud."' ";
423                $q.= "and autorite not in ('ORPHELINS', 'NONCLASSES') ";
424                $r = pmb_mysql_query($q, $dbh);
425                if (mysql_num_rows($r)) {
426                        while ($row = pmb_mysql_fetch_object($r)) {
427                                $id_list_ancestors = noeuds::listAncestors($row->id_noeud);
428                                if (count($id_list_ancestors)) {
429                                        if (!in_array($thes->num_noeud_orphelins,$id_list_ancestors)) {
430                                                $id_list[] = $row->id_noeud;
431                                        }
432                                } else {
433                                        $id_list[] = $row->id_noeud;
434                                }
435                        }
436                }
437       
438                return $id_list;
439        }
440       
441        //recherche si un noeud est utilisé dans une notice.
442        static function isUsedInNotices($id_noeud=0) {
443               
444                global $dbh;
445               
446                if(!$id_noeud) return 0; 
447                $q = "select count(1) from notices_categories where num_noeud = '".$id_noeud."' ";
448                $r = pmb_mysql_query($q, $dbh);
449                return pmb_mysql_result($r, 0, 0);
450        }               
451
452
453        //recherche si un noeud est utilisé dans la table voir_aussi.
454        static function isUsedInSeeAlso($id_noeud=0) {
455               
456                global $dbh;
457               
458                if(!$id_noeud) return 0; 
459                $q = "select count(1) from voir_aussi where num_noeud_orig = '".$id_noeud."' ";
460                $q.= "or num_noeud_dest = '".$id_noeud."' ";
461                $r = pmb_mysql_query($q, $dbh);
462                return pmb_mysql_result($r, 0, 0);
463        }               
464
465        //Liste les noeuds de la table voir_aussi sous forme de resultset
466        function listUsedInSeeAlso($id_noeud=0) {
467       
468                global $dbh;
469               
470                if(!$id_noeud && (is_object($this))) $id_noeud = $this->id_noeud;       
471                $q = "select distinct if(num_noeud_orig!= ".$id_noeud.",num_noeud_orig,num_noeud_dest)as id_noeud from voir_aussi where num_noeud_orig = '".$id_noeud."' ";
472                $q.= "or num_noeud_dest = '".$id_noeud."' ";
473                $r = pmb_mysql_query($q, $dbh);
474                return $r;
475        }
476       
477        //optimization de la table noeuds
478        static function optimize() {
479               
480                global $dbh;
481               
482                $opt = pmb_mysql_query('OPTIMIZE TABLE noeuds', $dbh);
483                return $opt;
484                               
485        }
486       
487        //vérification de l'unicité du numéro d'autorité dans le thésaurus
488        static function isUnique($num_thesaurus, $num_aut='', $id_noeud=0) {
489               
490                global $dbh;
491                if ($num_aut=='') return true;
492                $q = 'select count(1) from noeuds where num_thesaurus=\''.$num_thesaurus.'\' ';
493                $q.= 'and autorite=\''.addslashes($num_aut).'\' ';
494                if ($id_noeud) $q.= 'and id_noeud != \''.$id_noeud.'\' ';
495                $r = pmb_mysql_query($q, $dbh);
496                if(pmb_mysql_result($r, 0, 0)==0) return true;
497                        else return false;
498        }
499       
500        // ---------------------------------------------------------------
501        //              replace_categ_form : affichage du formulaire de remplacement
502        // ---------------------------------------------------------------
503        function replace_categ_form($parent=0) {
504                global $form_categ_replace;
505                global $thesaurus_mode_pmb;
506                global $msg;
507               
508                if(!$this->id_noeud) {
509                        error_message($msg[161], $msg[162], 1, "./autorites.php?categ=categories&sub=&parent=".$parent."&id=0");//Voir éventuelement pour mettre un message valable quand le cas se présentera
510                        return false;
511                }
512               
513                $categ = new category($this->id_noeud);
514                if ($thesaurus_mode_pmb) $nom_thesaurus='['.$categ->thes->getLibelle().'] ' ;
515                else $nom_thesaurus='' ;
516                $form_categ_replace=str_replace('!!old_categ_libelle!!',$nom_thesaurus.$categ->catalog_form, $form_categ_replace);
517                $form_categ_replace=str_replace('!!id!!',$this->id_noeud, $form_categ_replace);
518                $form_categ_replace=str_replace('!!parent!!',$this->num_parent, $form_categ_replace);
519                print pmb_bidi($form_categ_replace);
520                return true;
521        }               
522       
523        // ---------------------------------------------------------------
524        //              replace : Remplacement d'un noeud du thésaurus par un autre
525        // ---------------------------------------------------------------
526        function replace($by=0,$link_save=0) {
527                global $msg,$dbh;
528                global $pmb_synchro_rdf;
529               
530                if (($this->id_noeud == $by) || (!$this->id_noeud) || (!$by))  {
531                        return $msg["categ_imposible_remplace_elle_meme"];
532                }
533               
534                $aut_link= new aut_link(AUT_TABLE_CATEG,$this->id_noeud);
535                // "Conserver les liens entre autorités" est demandé
536                if($link_save) {
537                        // liens entre autorités
538                        $aut_link->add_link_to(AUT_TABLE_CATEG,$by);           
539                }
540                $aut_link->delete();
541               
542                //synchro_rdf : on empile les noeuds impactés pour les traiter plus loin
543                if($pmb_synchro_rdf){
544                        $arrayIdImpactes=array();
545                        $arrayThesImpactes=array();
546                        $thes = thesaurus::getByEltId($this->id_noeud);
547                        $arrayThesImpactes[]=$thes->id_thesaurus;
548                        //parent
549                        if($this->num_parent!=$thes->num_noeud_racine){
550                                $arrayIdImpactes[]=$this->num_parent;
551                        }
552                        //enfants
553                        $res=noeuds::listChilds($this->id_noeud,1);
554                        if(pmb_mysql_num_rows($res)){
555                                while($row=pmb_mysql_fetch_array($res)){
556                                        $arrayIdImpactes[]=$row[0];
557                                }
558                        }
559                        //renvoi_voir
560                        if($this->num_renvoi_voir){
561                                $arrayIdImpactes[]=$this->num_renvoi_voir;
562                        }
563                }
564               
565                $noeuds_a_garder = new noeuds($by);
566               
567                //Si les noeuds sont du même thésaurus
568                if($noeuds_a_garder->num_thesaurus == $this->num_thesaurus){
569                        //On déplace les catégories qui renvoi vers l'ancien noeuds pour qu'elle renvoie vers le nouveau
570                        if(noeuds::isTarget($this->id_noeud)){
571                                $requete="UPDATE noeuds SET num_renvoi_voir='".$by."' WHERE num_renvoi_voir='".$this->id_noeud."' and id_noeud!='".$by."' ";
572                                @pmb_mysql_query($requete, $dbh);
573                        }
574                        //On garde les liens voir_aussi
575                        $requete="UPDATE ignore voir_aussi SET num_noeud_orig='".$by."' WHERE num_noeud_orig='".$this->id_noeud."' and num_noeud_dest!='".$by."' ";
576                        @pmb_mysql_query($requete, $dbh);
577                        $requete="UPDATE ignore voir_aussi SET num_noeud_dest='".$by."' WHERE num_noeud_dest='".$this->id_noeud."' and num_noeud_orig!='".$by."'";
578                        @pmb_mysql_query($requete, $dbh);
579                }
580               
581                if(noeuds::isTarget($this->id_noeud)){//Si le noeuds à supprimé est utilisé pour des renvois et qu'il reste des liens on les supprime
582                        //On supprime les renvoies
583                        $requete="UPDATE noeuds SET num_renvoi_voir='0' WHERE num_renvoi_voir='".$this->id_noeud."'";
584                        @pmb_mysql_query($requete, $dbh);
585                }
586               
587                //On déplace les notices liées
588                $requete= "UPDATE ignore notices_categories SET num_noeud='".$by."' where num_noeud = '".$this->id_noeud."' ";
589                @pmb_mysql_query($requete, $dbh);
590
591                //nettoyage d'autorities_sources
592                $query = "select * from authorities_sources where num_authority = ".$this->id_noeud." and authority_type = 'category'";
593                $result = pmb_mysql_query($query);
594                if(pmb_mysql_num_rows($result)){
595                        while($row = pmb_mysql_fetch_object($result)){
596                                if($row->authority_favorite == 1){
597                                        //on suprime les références si l'autorité a été importée...
598                                        $query = "delete from notices_authorities_sources where num_authority_source = ".$row->id_authority_source;
599                                        pmb_mysql_result($query);
600                                        $query = "delete from authorities_sources where id_authority_source = ".$row->id_authority_source;
601                                        pmb_mysql_result($query);
602                                }else{
603                                        //on fait suivre le reste
604                                        $query = "update authorities_sources set num_authority = ".$by." where num_authority_source = ".$row->id_authority_source;
605                                        pmb_mysql_query($query);
606                                }
607                        }
608                }
609                //On supprime le noeuds
610                $this->delete();
611               
612                //synchro_rdf
613                if($pmb_synchro_rdf){
614                        //on ajoute les noeuds impactés par le $by
615                        $thesBy = thesaurus::getByEltId($by);
616                        if(!in_array($thesBy->id_thesaurus,$arrayThesImpactes)){
617                                $arrayThesImpactes[]=$thesBy->id_thesaurus;
618                        }
619                        $arrayIdImpactes[]=$by;
620                        //parent
621                        if($noeuds_a_garder->num_parent!=$thesBy->num_noeud_racine){
622                                $arrayIdImpactes[]=$noeuds_a_garder->num_parent;
623                        }
624                        //enfants
625                        $res=noeuds::listChilds($noeuds_a_garder->id_noeud,1);
626                        if(pmb_mysql_num_rows($res)){
627                                while($row=pmb_mysql_fetch_array($res)){
628                                        $arrayIdImpactes[]=$row[0];
629                                }
630                        }
631                        //renvoi_voir
632                        if($noeuds_a_garder->num_renvoi_voir){
633                                $arrayIdImpactes[]=$noeuds_a_garder->num_renvoi_voir;
634                        }
635                        //On met le tout à jour
636                        $synchro_rdf=new synchro_rdf();
637                        $synchro_rdf->delConcept($this->id_noeud);
638                        if(count($arrayIdImpactes)){
639                                foreach($arrayIdImpactes as $idNoeud){
640                                        $synchro_rdf->delConcept($idNoeud);
641                                        $synchro_rdf->storeConcept($idNoeud);
642                                }
643                        }
644                        if(count($arrayThesImpactes)){
645                                foreach($arrayThesImpactes as $idThes){
646                                        $synchro_rdf->updateAuthority($idThes, 'thesaurus');
647                                }
648                        }
649                }
650               
651                return "";
652        }
653}
654?>
Note: See TracBrowser for help on using the repository browser.