Your IP : 216.73.216.59


Current Path : /home/quelfutuu/www/plugins/auto/couteau_suisse/v1.17.0/outils/
Upload File :
Current File : /home/quelfutuu/www/plugins/auto/couteau_suisse/v1.17.0/outils/corbeille_action_rapide.php

<?php

// module inclu dans la description de l'outil en page de configuration

//include_spip('inc/actions');
//include_spip('inc/actions_compat');
include_spip('couteau_suisse_fonctions'); // pour cs_lien()

function corbeille_action_rapide($actif) {
	if(!$actif)
		return str_replace(':', '', _T('couteauprive:corbeille_vider'));
	foreach(cs_corbeille_table_infos() as $_table => $obj) {
		list($nb, $nb_lies, $ids, $statut, $title_lies) = cs_corbeille_gerer($_table, -1);
		$table = isset($obj['table']) ? $obj['table'] : $_table;
		$objet = objet_type($table);
		$lib = ($nb && defined('_SPIP30000'))
			? cs_lien(generer_url_ecrire('action_rapide', "arg=corbeille|liste_objets&script=foo&objet=$objet&statut=$statut"), $obj['libelle'])
			: $obj['libelle'];
		$ids = implode(',', $ids);
		$infos = $nb ? _T('couteauprive:corbeille_objets', array('nb' => $nb)) : _T('couteauprive:corbeille_objets_vide');
		if($nb_lies > 0)
			$infos .= " <span title=\"$title_lies\">" . _T('couteauprive:corbeille_objets_lies', array('nb_lies' => $nb_lies)) . '</span>';
		$objets[] = "<label><input type='checkbox' value='$_table:$ids'"
			. (($statut !== 'spam' && $nb) ? " checked='checked'" : '') 
			. " name='$_table'/>$lib.
<span class='ar_edit_info'>$infos</span></label>";
	}
	return ajax_action_rapide_simple('purge_corbeille', implode("<br/>\n", $objets), 'couteauprive:corbeille_objets_vider', 'couteauprive:corbeille_vider')
		. bouton_actualiser_action_rapide();
}

// pour ajouter des tables dans la corbeille, utiliser le tableau : global $corbeille_params['nvelle_table_SPIP'];
/*
	"statut" => statut de mise a la corbeille,
	"table" => nom eventuel de la table, pour definir plusieurs noisettes avec une meme table mais des statuts differents,
	"libelle" => libelle court,
	"tableliee"  => tableau des tables spip a vider en meme temps
*/
function cs_corbeille_table_infos($table = false) {
	static $params = NULL;
	if(is_null($params)) {
		global $corbeille_params;
		if(defined('_SPIP30000')) {
			foreach (lister_tables_objets_sql() as $sql => $o) {
				$t = $o['table_objet'];
				if (!isset($params[$t]) && isset($o['field']['statut']) && $o['principale'] /*&& $o['editable']*/
					&& $t != ''
					&& ( ($t == 'auteurs' && $p = '5poubelle') || ($t == 'messages' && $p = 'poub')
						|| ($t == 'signatures' && $p = 'poubelle') || ($t == 'petitions' && $p = 'poubelle') // 2 objets non editables
						|| isset($o['statut_titres'][$p = 'poubelle']) || isset($o['statut_textes_instituer'][$p = 'poubelle']) // articles
						|| isset($o['statut_titres'][$p = 'refuse']) || isset($o['statut_textes_instituer'][$p = 'refuse']) // breves, sites
					)//	|| ($o['editable'] && $t!='rubriques' && $t!='documents' && $p='?poubelle')) // et les autres objets editables ?
				) {
					$params[$t] = array(
						"statut" => $p,
						"libelle" => $o['texte_objets'],
					);
					if (count($o['tables_jointures']))
						$params[$t]["tableliee"] = $o['tables_jointures'];
				}
				//texte_objets
			}
			// particularites
			$params = array_merge($params, array(
				"forums_publics" => array( "statut" => "off",
					"table" => "forum",
					"libelle" => 'forum:titre_forum',
				),
				"forums_internes" => array( "statut" => "privoff",
					"table" => "forum",
					"libelle" => 'forum:titre_cadre_forum_interne',
				),
				"forums_spam" => array( "statut" => "spam",
					"table" => "forum",
					"libelle" => 'forum:messages_spam',
				),
			));
		} else {
			$params = array(
				"articles" => array( "statut" => "poubelle",
					"tableliee"=> array("spip_auteurs_articles","spip_documents_liens","spip_mots_articles","spip_signatures","spip_versions","spip_versions_fragments","spip_forum"),
					"libelle" => 'icone_articles',
				),
				"auteurs" => array( "statut" => "5poubelle",
					"libelle" => 'icone_auteurs',
				),
				"breves" => array( "statut" => "refuse",
					"libelle" => defined('_SPIP30000')?'breves:icone_breves':'icone_breves',
				),
				"sites" => array( "statut" => "refuse",
					"tableliee"=> array("spip_syndic_articles","spip_mots_syndic"),
					"libelle" => 'couteau:objet_syndics',
				),
				"signatures" => array( "statut" => "poubelle",
					"libelle" => 'couteau:objet_petitions',
				),
				"forums_publics" => array( "statut" => "off",
					"table"=>"forum",
					"libelle" => 'spip:titre_forum',
				),
				"forums_prives" => array( "statut" => "privoff",
					"table" => "forum",
					"libelle" => 'spip:icone_forum_administrateur',
				),
				"forums_spam" => array( "statut" => "spam",
					"table" => "forum",
					"libelle" => 'public:spam',
				),
			);
		}
		if(is_array($corbeille_params))
			$params = array_merge($params, $corbeille_params);
		array_walk($params, function(&$val) { $val['libelle'] = _T($val['libelle']); });
		uasort($params, function($a, $b) { return strcmp(strtolower($a['libelle']), strtolower($b['libelle'])); });
	}
	if(!$table) return $params;
	if(isset($params[$table])) return $params[$table];
	return false;
}

/**
 * supprime/compte les elements listes d'un type donne
 *
 * @param nom $table
 * @param tableau $ids (si $ids == -1, on vide/compte tout)
 * @param booleen $compter
 * @return array(nb objets, nb objets lies, ids trouves)
 */
function cs_corbeille_gerer($table, $ids = array(), $vider = false) {
	$params = cs_corbeille_table_infos($table);
	if(isset($params['table'])) $table = $params['table'];
	include_spip('base/abstract_sql');
	$type = objet_type($table);
	$table_sql = table_objet_sql($type);
	$id_table = id_table_objet($type);
	if (!$params['statut'])
		return false;
//echo "<hr>$table - $type - $table_sql - $id_table";
	// determine les index des elements a supprimer
	$where = 'statut=' . sql_quote($params['statut']);
	if(is_array($ids))
		$where .= ' AND ' . sql_in($id_table, $ids);
	$ids = array_column(sql_allfetsel($id_table, $table_sql, $where), $id_table);
	if(!count($ids))
		return array(0, 0, array(), '', '');
	// compte/supprime les elements definis par la liste des index
	if($vider) sql_delete($table_sql, sql_in($id_table, $ids));
	$nb = count($ids);
	// compte/supprime des elements lies
	$nb_lies = 0;
	$title_liees = array();
	$f = $vider ? 'sql_delete' : 'sql_countsel';
	if(isset($params['tableliee']) && ($table_liee = $params['tableliee'])) {
		$trouver_table = charger_fonction('trouver_table','base');
		foreach($table_liee as $k => $unetable) {
			$desc = $trouver_table($unetable);
//echo "<hr>$table/$unetable/",table_objet_sql($unetable),'/';print_r(array_keys($desc['field']));
			$nb_res = 0;
			if(isset($desc['field'][$id_table]))
				$nb_res = $f($desc['table'], sql_in($id_table, $ids));
			elseif(isset($desc['field']['id_objet']) && isset($desc['field']['objet']))
		 		$nb_res = $f($desc['table'], sql_in('id_objet', $ids) . " AND objet=" . sql_quote($type));
			if($nb_res) {
				$nb_lies += $nb_res;
				$title_liees[] = $desc['table'] . " ({$nb_res}x)";
			}
		}
	}
	return array($nb, $vider ? '-1' : $nb_lies, $ids, $params['statut'], implode(', ', $title_liees));
}

// fonction {$outil}_{$arg}_action() appelee par action/action_rapide.php
function corbeille_purge_corbeille_action() {
	// purger la corbeille
	foreach(cs_corbeille_table_infos() as $table=>$objet)
		if(preg_match(',^(.*?):(.*)$,', _request($table), $regs)) {
			$ids = explode(',', $regs[2]);
			// purger !
			cs_corbeille_gerer($regs[1], $ids, true);
		}
}

// Fonction appelee par exec/action_rapide : ?exec=action_rapide&arg=corbeille|liste_objets (pipe obligatoire)
// Renvoie la liste des objets mis a la poubelle (SPIP >= 3.0)
function corbeille_liste_objets_exec() {
	$res = $id = '';
	include_spip('base/abstract_sql');
	if($s=_request('suppr')) {
		$table_sql = table_objet_sql(_request('objet'));
		$id_table = id_table_objet(_request('objet'));
		sql_delete($table_sql, $x = "$id_table=$s");
		include_spip('inc/headers');
		redirige_par_entete(parametre_url(self(), 'suppr', '', '&'));
	}
	include_spip('inc/texte');
	include_spip('inc/presentation');
	include_spip('public/assembler');
	include_spip('inc/pipelines');
	include_spip('inc/commencer_page');
	$f = defined('_SPIP30000') ? 'init_head' : 'envoi_link';
	echo '<html><head>' . f_jQuery($f(couteauprive_T('corbeille:nom')))
		. '<meta http-equiv="Content-Type" content="text/html; charset='
		. $GLOBALS['meta']['charset'] . '" /></head><body style="text-align:center">'
		. (recuperer_fond('fonds/corbeille', array('objet' => _request('objet'), 'statut' => _request('statut'))))
		. '</body></html>';
}

?>