source: spip-zone/_plugins_/noizetier/trunk/action/vider_page.php @ 113480

Last change on this file since 113480 was 113480, checked in by eric@…, 4 months ago

Corriger l'autorisation de suppression d'une composition virtuelle (il faut configurerpage aussi).
Simplifier l'action vider_page en utilisant l'API conteneur_vider.
Corriger l'action supprimer_composition en ajoutant le vidage des noisettes des blocs de la composition (avec l'API conteneur_vider).

  • Property svn:eol-style set to native
File size: 2.8 KB
Line 
1<?php
2/**
3 * Ce fichier contient l'action `vider_page` lancée par un utilisateur pour
4 * supprimer de façon sécurisée toutes les noisettes d'une page, d'une composition ou d'un objet.
5 *
6 * @package SPIP\NOIZETIER\PAGE\ACTION
7 */
8
9if (!defined('_ECRIRE_INC_VERSION')) return;
10
11/**
12 * Cette action permet à l'utilisateur de supprimer de sa base de données, de façon sécurisée,
13 * toutes les noisettes d'une page ou d'un objet.
14 * Les compositions de page explicites ou virtuelles (créée par le noizetier) sont aussi prises en compte.
15 *
16 * Cette action est réservée aux utilisateurs autorisés.
17 * Elle nécessite des arguments dont la liste dépend du contexte.
18 *
19 * @return void
20 */
21function action_vider_page_dist() {
22
23        // Sécurisation et autorisation.
24        // Les arguments attendus dépendent du contexte et la chaine peut prendre les formes suivantes:
25        // - page:id_page, pour supprimer toutes les noisettes d'une page (y compris les compositions)
26        // - objet:id_objet:type_objet, pour supprimer toutes les noisettes d'un objet précis
27        $securiser_action = charger_fonction('securiser_action', 'inc');
28        $arguments = $securiser_action();
29
30        if ($arguments) {
31                // On construit le tableau $options pour l'autorisation et on détermine l'invalideur.
32                // L'identifiant de la page ou de l'objet se reconnait par le nombre d'éléments.
33                $identifiants = explode(':', $arguments);
34                if (count($identifiants) > 2) {
35                        $options['objet'] = $identifiants[2];
36                        $options['id_objet'] = $identifiants[1];
37                        $invalideur = "id='{$options['objet']}/{$options['id_objet']}'";
38                } else {
39                        $options['page'] = $identifiants[1];
40                        $invalideur = "id='page/{$options['page']}'";
41                }
42
43                // Verification des autorisations.
44                if (!autoriser('configurerpage', 'noizetier', '', 0, $options)) {
45                        include_spip('inc/minipres');
46                        echo minipres();
47                        exit();
48                }
49
50                // On récupère la liste des blocs ayant des noisettes
51                if ($options['page']) {
52                        include_spip('inc/noizetier_page');
53                        $blocs = noizetier_page_compter_noisettes($options['page']);
54                        $page_ou_objet = $options['page'];
55                } else {
56                        include_spip('inc/noizetier_objet');
57                        $blocs = noizetier_objet_compter_noisettes($options['objet'], $options['id_objet']);
58                        $page_ou_objet = $options;
59                }
60
61                // Suppression des noisettes concernées en utilisant l'API de vidage d'un conteneur, le conteneur étant
62                // chaque bloc de la page ou de l'objet contenant des noisettes.
63                if ($blocs) {
64                        include_spip('inc/ncore_conteneur');
65                        include_spip('inc/noizetier_conteneur');
66                        foreach (array_keys($blocs) as $_bloc) {
67                                // On calcule le conteneur sous sa forme identifiant chaine.
68                                $id_conteneur = noizetier_conteneur_composer($page_ou_objet, $_bloc);
69                                conteneur_vider('noizetier', $id_conteneur);
70                        }
71                }
72
73                // On invalide le cache
74                include_spip('inc/invalideur');
75                suivre_invalideur($invalideur);
76        }
77}
Note: See TracBrowser for help on using the repository browser.