source: spip-zone/_plugins_/_stable_/couteau_suisse/outils/corbeille_action_rapide.php @ 24646

Last change on this file since 24646 was 24646, checked in by patfr@…, 11 years ago

<?php et non <? !

File size: 5.3 KB
Line 
1<?php
2
3// module inclu dans la description de l'outil en page de configuration
4
5include_spip('inc/actions');
6
7function corbeille_action_rapide() {
8        foreach(cs_corbeille_table_infos() as $table=>$obj) {
9                list($nb, $nb_lies, $ids) = cs_corbeille_gerer($table, -1);
10                $ids = join(',', $ids);
11                $infos = 
12                        ($nb?_T('couteauprive:corbeille_objets', array('nb'=>$nb)):_T('couteauprive:corbeille_objets_vide'))
13                        .($nb_lies>0?' '._T('couteauprive:corbeille_objets_lies', array('nb_lies'=>$nb_lies)):'');
14                $objets[] = "<label><input type='checkbox' value='$table:$ids'".($nb?" checked='checked'":"")." name='$table'/>$obj[libelle_court].
15<span class='ar_edit_info'>$infos</span></label>";
16        }
17        return ajax_action_auteur('action_rapide', 'corbeille', 'admin_couteau_suisse', "arg=purger_cache&cmd=descrip&outil=corbeille#cs_action_rapide",
18                        "\n<div style='padding:0.4em;'><fieldset><legend>"._T('couteauprive:corbeille_vider').'</legend>'
19                        . join("<br/>\n",$objets) . "<div style='text-align: right;'><input class='fondo' type='submit' value=\""
20                        . attribut_html(_T('couteauprive:corbeille_objets_vider'))
21                        . '" /></div></fieldset></div>');
22}
23
24// pour ajouter des tables dans la corbeille, utiliser le tableau : global $corbeille_params['nvelle_table_SPIP'];
25/*
26 "nvelle_table_SPIP" => array (
27        "statut" => nom du statut dans la base de donnees (bdd),
28        "titre" => nom du champ retourne dans le listing,
29        "table" => nom de la table spip dans la bdd,
30        "id" => clef primaire dans la table,
31        "temps" => aucune idee a quoi ça peut servir,
32        "page_voir" => parametres pour voir le detail d'un objet
33        "libelle" => texte long dans la partie droite de l'affichage,
34        "libelle_court" => texte court dans le menu gauche,
35        "tableliee"  => tableau des tables spip à vider en meme temps    )
36*/
37function cs_corbeille_table_infos($table=false) {
38        static $params = null;
39        if(is_null($params)) {
40                global $corbeille_params;
41                $params = array (
42                        "articles" => array( "statut" => "poubelle",
43                                "tableliee"=> array("spip_auteurs_articles","spip_documents_liens","spip_mots_articles","spip_signatures","spip_versions","spip_versions_fragments","spip_forum"),
44                                "temps" => "date",
45                                "libelle_court" => _T('icone_articles')
46                                ),
47                        "auteurs" => array( "statut" => "5poubelle",
48                                "temps" => "maj",
49                                "libelle_court" => _T('icone_auteurs')
50                                ),                                     
51                        "breves" => array( "statut" => "refuse", 
52                                "temps" => "date_heure",
53                                "libelle_court" => _T('icone_breves')
54                                ),
55                        "forums_publics" => array( "statut" => "off",
56                                "table"=>"forum",
57                                "temps" => "date_heure",
58                                "libelle_court" => _T('titre_forum')
59                                ),
60                        "forums_prives" => array( "statut" => "privoff",
61                                "table"=>"forum",
62                                "temps" => "date_heure",
63                                "libelle_court" => _T('icone_forum_administrateur')
64                                ),
65                        "signatures" => array( "statut" => "poubelle", 
66                                "temps" => "date_time",
67                                "page_voir" => array("signatures",'id_document'),
68                                "libelle_court" => _T('couteau:objet_petitions'),
69                                ),
70                        "sites" => array( "statut" => "refuse",
71                                "tableliee"=> array("spip_syndic_articles","spip_mots_syndic"),
72                                "temps" => "maj",
73                                "page_voir" => array("sites",'id_syndic'),
74                                "libelle_court" => _T('couteau:objet_syndics')
75                                )       ,
76                );
77                if(is_array($corbeille_params)) $params = array_merge($corbeille_params, $params);
78        }
79        if(!$table) return $params;
80        if(isset($params[$table])) return $params[$table];
81        return false;
82}
83
84/**
85 * supprime/compte les elements listes d'un type donne
86 *
87 * @param nom $table
88 * @param tableau $ids (si $id==-1, on vide/compte tout)
89 * @param booleen $compter
90 * @return array(nb objets, nb objets lies, ids trouves)
91 */
92function cs_corbeille_gerer($table, $ids=array(), $vider=false) {
93        $params = cs_corbeille_table_infos($table);
94        if (isset($params['table'])) $table = $params['table'];
95        include_spip('base/abstract_sql');
96        $type = objet_type($table);
97        $table_sql = table_objet_sql($type);
98        $id_table = id_table_objet($type);
99        if (!$params['statut']) return false;
100
101        // determine les index des elements a supprimer
102        $ids = $ids===-1
103                ?array_map('reset',sql_allfetsel($id_table,$table_sql,'statut='.sql_quote($params['statut'])))
104                :array_map('reset',sql_allfetsel($id_table,$table_sql,sql_in($id_table,$ids).' AND statut='.sql_quote($params['statut'])));
105        if (!count($ids)) return array(0, 0, array());
106        // compte/supprime les elements definis par la liste des index
107        if($vider) sql_delete($table_sql,sql_in($id_table,$ids));
108        $nb = count($ids);
109
110        // compte/supprime des elements lies
111        $nb_lies = 0;
112        $f = $vider?'sql_delete':'sql_countsel';
113        if ($table_liee=$params['tableliee']) {
114                $trouver_table = charger_fonction('trouver_table','base');
115                foreach($table_liee as $unetable) {
116                        $desc = $trouver_table($unetable);
117                        if (isset($desc['field'][$id_table]))
118                                $nb_lies += $f($unetable,sql_in($id_table,$ids));
119                        elseif(isset($desc['field']['id_objet']) AND isset($desc['field']['objet']))
120                                $nb_lies += $f($unetable,sql_in('id_objet',$ids)." AND objet=".sql_quote($type));
121                }
122        }
123        return array($nb, $vider?'-1':$nb_lies, $ids);
124}
125
126function action_rapide_purge_corbeille() {
127        foreach(cs_corbeille_table_infos() as $table=>$objet)   
128                if(preg_match(',^(.*?):(.*)$,', _request($table), $regs)) {
129                        $ids = explode(',', $regs[2]);
130                        // purger !
131                        cs_corbeille_gerer($regs[1], $ids, true);
132                }
133}
134
135?>
Note: See TracBrowser for help on using the repository browser.