source: spip-zone/_plugins_/corbeille/trunk/action/corbeille_vider.php @ 101457

Last change on this file since 101457 was 101457, checked in by maieul@…, 3 years ago

un peu de log

File size: 4.1 KB
Line 
1<?php
2/**
3 * Plugin Corbeille 3.0
4 * La corbeille pour Spip 3.0
5 * Collectif
6 * Licence GPL
7 */
8if (!defined("_ECRIRE_INC_VERSION")) return;
9
10/**
11 * Parametres de configuration personnalisables/surchargeables de la corbeille :
12 * global $corbeille_params;
13 *
14 * $corbeille_params["nom de l'objet SPIP"] = array (
15 *                      [voir la structure ci-dessous]
16 * );
17 *
18 * la fonction corbeille_table_infos($objet) renverra :
19 *              - si $objet==-1, la liste des objets renseignes
20 *              - sinon, la globale $corbeille_params[$objet] si elle existe
21 *              - sinon, la valeur par defaut $param[$objet] si elle existe
22 *              - sinon, false
23 *
24 * "nom de l'objet spip" => array (
25 *                      "statut" => nom du statut dans la base de donnees (bdd),
26 *                      "table" => nom eventuel de la table, pour definir plusieurs noisettes avec une meme table mais des statuts differents
27 *                      "tableliee"  => tableau des tables spip a vider en meme temps
28 * )
29 *
30 * @param string $table
31 * @return array
32 */
33function corbeille_table_infos($table=-1){
34        global $corbeille_params;
35        if (!is_array($corbeille_params))
36                $corbeille_params = array();
37        if (isset($corbeille_params[$table]))
38                return $corbeille_params[$table];
39
40        $param = array (
41                "articles" => array(
42                        "statut" => "poubelle",
43                        "tableliee"=> array("spip_auteurs_articles","spip_documents_liens","spip_mots_articles","spip_signatures","spip_versions","spip_versions_fragments","spip_forum"),
44                ),
45                "auteurs" => array(
46                        "statut" => "5poubelle",
47                        "tableliee"=> array("spip_documents_liens"),
48                ),                                     
49                "breves"=> array(
50                        "statut" => "refuse",
51                        "tableliee"=> array("spip_documents_liens"),
52                ),
53                "forums_publics" => array(
54                        "statut" => "off",
55                        "table"=>"forum",
56                ),
57                "forums_prives" => array(
58                        "statut" => "privoff",
59                        "table"=>"forum",
60                ),
61                "signatures"=> array(
62                        "statut" => "poubelle", 
63                ),
64                "sites" => array(
65                        "statut" => "refuse",
66                        "tableliee"=> array("spip_syndic_articles","spip_mots_syndic","spip_documents_liens"),
67                ),
68        );
69        $param = pipeline('corbeille_table_infos', $param);
70       
71        if (isset($param[$table]))
72                return $param[$table];
73        if ($table==-1) 
74                return array_merge(array_keys($corbeille_params), array_keys($param));
75        return false;
76}
77
78/**
79 * supprime les elements listes d'un type donne
80 *
81 * @param nom $table
82 * @param tableau $ids
83 * @return $ids trouves (sinon false)
84 */
85function corbeille_vider($table, $ids=array()) {
86        include_spip('base/abstract_sql');
87        $params = corbeille_table_infos($table);
88        if (isset($params['table']))
89                $table = $params['table'];
90       
91        $type = objet_type($table);
92        $table_sql = table_objet_sql($type);
93        $id_table = id_table_objet($type);
94
95        $statut = $params['statut'];
96        if (!$statut)
97                return false;
98
99        // determine les index des elements a supprimer
100        if ($ids===-1) {
101                // recupere les identifiants des objets a supprimer
102                $ids = array_map('reset',sql_allfetsel($id_table,$table_sql,'statut='.sql_quote($statut)));
103        }
104        else {
105                // verifions les ids qui existent vraiment
106                $ids = array_map('reset',sql_allfetsel($id_table,$table_sql,sql_in($id_table,$ids).' AND statut='.sql_quote($statut)));
107        }
108        if (!count($ids))
109                return false;
110               
111
112        // supprime les elements definis par la liste des index
113        sql_delete($table_sql,sql_in($id_table,$ids));
114        spip_log("Numeros des entrees". implode($ids,",")." supprimees dans la table $table_sql", "corbeille");
115
116
117        // suppresion des elements lies
118        if (isset($params['tableliee']) and $table_liee=$params['tableliee']) {
119                $trouver_table = charger_fonction('trouver_table','base');
120                foreach($table_liee as $unetable) {
121                        $desc = $trouver_table($unetable);
122                        if (isset($desc['field'][$id_table])){
123                                sql_delete($unetable,sql_in($id_table,$ids));
124                                spip_log("Numeros des entrees". implode($ids,",")." supprimees dans la table $unetable","corbeille");
125                        } elseif(isset($desc['field']['id_objet']) AND isset($desc['field']['objet'])){
126                                sql_delete($unetable,sql_in('id_objet',$ids)." AND objet=".sql_quote($type));           
127                                spip_log("Numeros des entrees". implode($ids,",")." supprimees dans la table $unetable","corbeille");
128                        }
129                }
130        }
131        return $ids;
132}
133
134
Note: See TracBrowser for help on using the repository browser.