source: spip-zone/_plugins_/coup_de_balai/action/balayer.php @ 106913

Last change on this file since 106913 was 106913, checked in by romain_k@…, 4 years ago

correction : 'poubelle' -> poubelle

File size: 3.8 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) {
4        return;
5}
6
7include_spip('base/abstract_sql');
8include_spip('action/editer_article');
9
10// Récupère le tableau des $t[k]['nom_champ']
11// Il y a probablement plus simple
12// et plus idiomatique que ce "truc"...
13
14function dim2to1($t, $nom_champ){
15  $u = array();
16  foreach ($t as $x) {
17    $u[] = $x[$nom_champ];
18  }
19  return $u;
20}
21
22
23function action_balayer_dist(){
24  $securiser_action = charger_fonction('securiser_action', 'inc');
25  $arg = $securiser_action();
26
27        // Détermine les rubriques directement protégées
28        $rub_protegees = sql_select('id_objet', 'spip_balai', "objet = 'rubrique'");
29  $tableau_rub_protegees = dim2to1(sql_fetch_all($rub_protegees), 'id_objet');
30
31        // Puis leurs filles
32  $rub_parent = $tableau_rub_protegees;
33  $c = count($rub_parent);
34  while ($c >0){
35    $rub_parent = sql_select('id_rubrique', 'spip_rubriques', sql_in('id_parent', $rub_parent));
36    $rub_parent = dim2to1(sql_fetch_all($rub_parent), 'id_rubrique');
37    $tableau_rub_protegees = array_merge($tableau_rub_protegees, $rub_parent);
38    $c = count($rub_parent);
39  };
40
41        // On déprotège les articles qui ont été mis à la poubelle afin qu'ils n'interfèrent pas dans le calcul
42        $art_poubelle = sql_select('id_article', 'spip_articles', 'statut = "poubelle"');
43        $tableau_art_poubelle = sql_fetch_all($art_poubelle);
44        $tableau_art_poubelle = dim2to1($tableau_art_poubelle, 'id_article');
45        sql_delete('spip_balai', array('objet="article"', sql_in('id_objet', $tableau_art_poubelle)));
46
47        // Les articles directement protégés
48  $art_proteges = sql_select('id_objet', 'spip_balai', "objet='article'");
49  $tableau_art_proteges = sql_fetch_all($art_proteges);
50  $tableau_art_proteges = dim2to1($tableau_art_proteges, 'id_objet');
51
52        // Les articles protégés par héritage
53  $art_proteges_par_heritage = sql_select('id_article', 'spip_articles', sql_in('id_rubrique', $tableau_rub_protegees));
54  $tableau_art_proteges_par_heritage = sql_fetch_all($art_proteges_par_heritage);
55  $tableau_art_proteges_par_heritage = dim2to1($tableau_art_proteges_par_heritage, 'id_article');
56
57        // Les articles protégés (directement ou par héritable)
58  $tableau_art_proteges = array_merge($tableau_art_proteges, $tableau_art_proteges_par_heritage);
59
60        // D'où les articles à supprimer
61        $tableau_art_a_supprimer = dim2to1(sql_fetch_all(sql_select('id_article', 'spip_articles', sql_in('id_article', $tableau_art_proteges, 'NOT'))), 'id_article');
62
63        // Rubriques contenant un aticle protégé
64        $tableau_rub_contient_art_protege = dim2to1(sql_fetch_all(sql_select('id_rubrique', 'spip_articles', sql_in('id_article', $tableau_art_proteges))), 'id_rubrique');
65
66        // D'où des rubriques à ne pas supprimer
67        $tableau_rub_ne_pas_supprimer = array_unique(array_merge($tableau_rub_contient_art_protege, $tableau_rub_protegees));
68
69        // Ajoutons les rubriques contenant une rubrique protégée
70        $rub_fille = $tableau_rub_ne_pas_supprimer;
71        $c = count($rub_fille);
72        while($c>0){
73                $rub_fille = sql_select('id_parent', 'spip_rubriques', sql_in('id_rubrique', $rub_fille). ' AND id_parent <>0');
74                $rub_fille = dim2to1(sql_fetch_all($rub_fille), 'id_parent');
75                $tableau_rub_ne_pas_supprimer = array_merge($tableau_rub_ne_pas_supprimer, $rub_fille);
76                $c = count($rub_fille);
77        }
78        $tableau_rub_ne_pas_supprimer = array_unique($tableau_rub_ne_pas_supprimer);
79        $tableau_rub_a_supprimer = dim2to1(sql_fetch_all(sql_select('id_rubrique', 'spip_rubriques', sql_in('id_rubrique', $tableau_rub_ne_pas_supprimer, 'NOT'))), 'id_rubrique');
80
81        //Ouf. Passons à l'action !
82        foreach ($tableau_art_a_supprimer as $a){
83                article_instituer($a, array('statut'=>"poubelle"), true);
84        }
85
86        $supprimer_rubrique = charger_fonction('supprimer_rubrique', 'action');
87  foreach ($tableau_rub_a_supprimer as $r) {
88        $supprimer_rubrique($r);
89  }
90
91  return;
92};
93?>
Note: See TracBrowser for help on using the repository browser.