[SPIP] ~maj v2.1.25-->2.1.26
[velocampus/web/www.git] / www / plugins / auto / couteau_suisse / couteau_suisse / outils / corbeille_action_rapide.php
1 <?php
2
3 // module inclu dans la description de l'outil en page de configuration
4
5 include_spip('inc/actions');
6
7 function 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'/>"._T($obj[libelle]).".
15 <span class='ar_edit_info'>$infos</span></label>";
16 }
17 return ajax_action_auteur('action_rapide', 'purge_corbeille', 'admin_couteau_suisse', "arg=corbeille|description_outil&cmd=descrip#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 "statut" => nom du statut dans la base de donnees (bdd),
27 "table" => nom eventuel de la table, pour definir plusieurs noisettes avec une meme table mais des statuts differents,
28 "libelle" => libelle court,
29 "tableliee" => tableau des tables spip � vider en meme temps )
30 */
31 function cs_corbeille_table_infos($table=false) {
32 static $params = NULL;
33 if(is_null($params)) {
34 global $corbeille_params;
35 $params = array (
36 "articles" => array( "statut" => "poubelle",
37 "tableliee"=> array("spip_auteurs_articles","spip_documents_liens","spip_mots_articles","spip_signatures","spip_versions","spip_versions_fragments","spip_forum"),
38 "libelle" => 'icone_articles',
39 ),
40 "auteurs" => array( "statut" => "5poubelle",
41 "temps" => "maj",
42 "libelle" => 'icone_auteurs',
43 ),
44 "breves" => array( "statut" => "refuse",
45 "libelle" => defined('_SPIP30000')?'breves:icone_breves':'icone_breves',
46 ),
47 "signatures" => array( "statut" => "poubelle",
48 "libelle" => 'couteau:objet_petitions',
49 ),
50 "sites" => array( "statut" => "refuse",
51 "tableliee"=> array("spip_syndic_articles","spip_mots_syndic"),
52 "libelle" => 'couteau:objet_syndics',
53 ),
54 );
55 // TODO: declaration de la corbeille dans le plugin _core/forum (SPIP 2.1)
56 if(!defined('_SPIP20100')) $params = array_merge($params, array(
57 "forums_publics" => array( "statut" => "off",
58 "table"=>"forum",
59 "libelle" => 'titre_forum',
60 ),
61 "forums_prives" => array( "statut" => "privoff",
62 "table"=>"forum",
63 "libelle" => 'icone_forum_administrateur',
64 ),
65 ));
66 if(is_array($corbeille_params)) $params = array_merge($params, $corbeille_params);
67 }
68 if(!$table) return $params;
69 if(isset($params[$table])) return $params[$table];
70 return false;
71 }
72
73 /**
74 * supprime/compte les elements listes d'un type donne
75 *
76 * @param nom $table
77 * @param tableau $ids (si $id==-1, on vide/compte tout)
78 * @param booleen $compter
79 * @return array(nb objets, nb objets lies, ids trouves)
80 */
81 function cs_corbeille_gerer($table, $ids=array(), $vider=false) {
82 $params = cs_corbeille_table_infos($table);
83 if (isset($params['table'])) $table = $params['table'];
84 include_spip('base/abstract_sql');
85 $type = objet_type($table);
86 $table_sql = table_objet_sql($type);
87 $id_table = id_table_objet($type);
88 if (!$params['statut']) return false;
89 //echo "$type - $table_sql - $id_table - ",table_objet_sql($type),'<hr>';
90 // determine les index des elements a supprimer
91 $ids = $ids===-1
92 ?array_map('reset',sql_allfetsel($id_table,$table_sql,'statut='.sql_quote($params['statut'])))
93 :array_map('reset',sql_allfetsel($id_table,$table_sql,sql_in($id_table,$ids).' AND statut='.sql_quote($params['statut'])));
94 if (!count($ids)) return array(0, 0, array());
95 // compte/supprime les elements definis par la liste des index
96 if($vider) sql_delete($table_sql,sql_in($id_table,$ids));
97 $nb = count($ids);
98
99 // compte/supprime des elements lies
100 $nb_lies = 0;
101 $f = $vider?'sql_delete':'sql_countsel';
102 if ($table_liee=$params['tableliee']) {
103 $trouver_table = charger_fonction('trouver_table','base');
104 foreach($table_liee as $unetable) {
105 $desc = $trouver_table($unetable);
106 if (isset($desc['field'][$id_table]))
107 $nb_lies += $f($unetable,sql_in($id_table,$ids));
108 elseif(isset($desc['field']['id_objet']) AND isset($desc['field']['objet']))
109 $nb_lies += $f($unetable,sql_in('id_objet',$ids)." AND objet=".sql_quote($type));
110 }
111 }
112 return array($nb, $vider?'-1':$nb_lies, $ids);
113 }
114
115 // fonction {$outil}_{$arg}_action() appelee par action/action_rapide.php
116 function corbeille_purge_corbeille_action() {
117 // purger la corbeille
118 foreach(cs_corbeille_table_infos() as $table=>$objet)
119 if(preg_match(',^(.*?):(.*)$,', _request($table), $regs)) {
120 $ids = explode(',', $regs[2]);
121 // purger !
122 cs_corbeille_gerer($regs[1], $ids, true);
123 }
124 }
125 ?>