1 | <?php |
---|
2 | |
---|
3 | if (!defined("_ECRIRE_INC_VERSION")) { |
---|
4 | return; |
---|
5 | } |
---|
6 | |
---|
7 | include_spip('base/abstract_sql'); |
---|
8 | include_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 | |
---|
14 | function dim2to1($t, $nom_champ){ |
---|
15 | $u = array(); |
---|
16 | foreach ($t as $x) { |
---|
17 | $u[] = $x[$nom_champ]; |
---|
18 | } |
---|
19 | return $u; |
---|
20 | } |
---|
21 | |
---|
22 | |
---|
23 | function 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 | ?> |
---|