From edc3f0c8b18662253771d64644ba388be22b081e Mon Sep 17 00:00:00 2001
From: JamesRezo <james@rezo.net>
Date: Thu, 18 May 2023 10:46:14 +0200
Subject: [PATCH] feat: version compatible SPIP4.2

---
 README.md                        |   2 +-
 action/corbeille_vider.php       | 282 ++++++++++++++++---------------
 corbeille_fonctions.php          |  49 +++---
 formulaires/editer_corbeille.php |  81 ++++-----
 genie/optimiser.php              |  56 +++---
 paquet.xml                       |   6 +-
 6 files changed, 242 insertions(+), 234 deletions(-)

diff --git a/README.md b/README.md
index 6a8d6e5..dbc90c3 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Calendrier Mini
+# Corbeille
 
 ## Documentation
 
diff --git a/action/corbeille_vider.php b/action/corbeille_vider.php
index f283e16..9352256 100644
--- a/action/corbeille_vider.php
+++ b/action/corbeille_vider.php
@@ -1,139 +1,143 @@
-<?php
-/**
- * Plugin Corbeille 3.0
- * 
- * Collectif
- * Licence GPL
- */
-if (!defined("_ECRIRE_INC_VERSION")) {
-	return;
-}
-include_spip('inc/utils');
-/**
- * Parametres de configuration personnalisables/surchargeables de la corbeille :
- * global $corbeille_params;
- * 
- * $corbeille_params["nom de l'objet SPIP"] = array (
- * 			[voir la structure ci-dessous] 
- * );
- * 
- * la fonction corbeille_table_infos($objet) renverra :
- *		- si $objet==-1, la liste des objets renseignes
- * 		- sinon, la globale $corbeille_params[$objet] si elle existe
- * 		- sinon, la valeur par defaut $param[$objet] si elle existe
- * 		- sinon, false
- * 
- * "nom de l'objet spip" => array (
- * 			"statut" => nom du statut dans la base de donnees (bdd),
- * 			"table" => nom eventuel de la table, pour definir plusieurs noisettes avec une meme table mais des statuts differents
- * 			"tableliee"  => tableau des tables spip a vider en meme temps 
- * )
- * 
- * @param string $table
- * @return array
- */
-function corbeille_table_infos($table=-1){
-	global $corbeille_params;
-	if (!is_array($corbeille_params))
-		$corbeille_params = array();
-	if (isset($corbeille_params[$table]))
-		return $corbeille_params[$table];
-
-	$param = 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"),
-		),
-		"auteurs" => array(
-			"statut" => "5poubelle",
-			"tableliee"=> array("spip_documents_liens"),
-		),					
-		"breves"=> array(
-			"statut" => "refuse",
-			"tableliee"=> array("spip_documents_liens"),
-		),
-		"forums_publics" => array(
-			"statut" => "off",
-			"table"=>"forum",
-		),
-		"forums_prives" => array(
-			"statut" => "privoff",
-			"table"=>"forum",
-		),
-		"signatures"=> array(
-			"statut" => "poubelle", 
-		),
-		"sites" => array(
-			"statut" => "refuse",
-			"tableliee"=> array("spip_syndic_articles","spip_mots_syndic","spip_documents_liens"),
-		),
-	);
-	$param = pipeline('corbeille_table_infos', $param);
-	
-	if (isset($param[$table]))
-		return $param[$table];
-	if ($table==-1) 
-		return array_merge(array_keys($corbeille_params), array_keys($param));
-	return false;
-}
-
-/**
- * supprime les elements listes d'un type donne
- *
- * @param nom $table
- * @param tableau $ids
- * @return $ids trouves (sinon false)
- */
-function corbeille_vider($table, $ids=array()) {
-	include_spip('base/abstract_sql');
-	$params = corbeille_table_infos($table);
-	if (isset($params['table']))
-		$table = $params['table'];
-	
-	$type = objet_type($table);
-	$table_sql = table_objet_sql($type);
-	$id_table = id_table_objet($type);
-
-	$statut = $params['statut'];
-	if (!$statut)
-		return false;
-
-	// determine les index des elements a supprimer
-	if ($ids===-1) {
-		// recupere les identifiants des objets a supprimer
-		$ids = array_column(sql_allfetsel($id_table,$table_sql,'statut='.sql_quote($statut)), $id_table);
-	}
-	else {
-		// verifions les ids qui existent vraiment
-		$ids = array_column(sql_allfetsel($id_table,$table_sql,sql_in($id_table,$ids).' AND statut='.sql_quote($statut)), $id_table);
-	}
-	if (!count($ids))
-		return false;
-		
-	if ($pre_suppression=charger_fonction($table."_pre_suppression","corbeille", true)) {
-		$pre_suppression($ids);
-	}
-
-	// supprime les elements definis par la liste des index
-	sql_delete($table_sql,sql_in($id_table,$ids));
-	spip_log("Numeros des entrees". implode(',',$ids)." supprimees dans la table $table_sql", "corbeille");
-
-
-	// suppresion des elements lies
-	if (isset($params['tableliee']) and $table_liee=$params['tableliee']) {
-		$trouver_table = charger_fonction('trouver_table','base');
-		foreach($table_liee as $unetable) {
-			$desc = $trouver_table($unetable);
-			if (isset($desc['field'][$id_table])){
-				sql_delete($unetable,sql_in($id_table,$ids));
-				spip_log("Numeros des entrees ". implode(',',$ids)." supprimees dans la table $unetable","corbeille");
-			} elseif(isset($desc['field']['id_objet']) AND isset($desc['field']['objet'])){
-				sql_delete($unetable,sql_in('id_objet',$ids)." AND objet=".sql_quote($type));		
-				spip_log("Numeros des entrees ". implode(',',$ids)." supprimees dans la table $unetable","corbeille");
-			}
-		}
-	}
-	return $ids;
-}
-
-
+<?php
+
+/**
+ * Plugin Corbeille 3.0
+ *
+ * Collectif
+ * Licence GPL
+ */
+
+if (!defined('_ECRIRE_INC_VERSION')) {
+	return;
+}
+include_spip('inc/utils');
+/**
+ * Parametres de configuration personnalisables/surchargeables de la corbeille :
+ * global $corbeille_params;
+ *
+ * $corbeille_params["nom de l'objet SPIP"] = array (
+ * 			[voir la structure ci-dessous]
+ * );
+ *
+ * la fonction corbeille_table_infos($objet) renverra :
+ *		- si $objet==-1, la liste des objets renseignes
+ * 		- sinon, la globale $corbeille_params[$objet] si elle existe
+ * 		- sinon, la valeur par defaut $param[$objet] si elle existe
+ * 		- sinon, false
+ *
+ * "nom de l'objet spip" => array (
+ * 			"statut" => nom du statut dans la base de donnees (bdd),
+ * 			"table" => nom eventuel de la table, pour definir plusieurs noisettes avec une meme table mais des statuts differents
+ * 			"tableliee"  => tableau des tables spip a vider en meme temps
+ * )
+ *
+ * @param string $table
+ * @return array
+ */
+function corbeille_table_infos($table = -1) {
+	global $corbeille_params;
+	if (!is_array($corbeille_params)) {
+			$corbeille_params = [];
+	}
+	if (isset($corbeille_params[$table])) {
+		return $corbeille_params[$table];
+	}
+
+	$param =  [
+		'articles' => [
+			'statut' => 'poubelle',
+			'tableliee' => ['spip_auteurs_articles','spip_documents_liens','spip_mots_articles','spip_signatures','spip_versions','spip_versions_fragments','spip_forum'],
+		],
+		'auteurs' => [
+			'statut' => '5poubelle',
+			'tableliee' => ['spip_documents_liens'],
+		],
+		'breves' => [
+			'statut' => 'refuse',
+			'tableliee' => ['spip_documents_liens'],
+		],
+		'forums_publics' => [
+			'statut' => 'off',
+			'table' => 'forum',
+		],
+		'forums_prives' => [
+			'statut' => 'privoff',
+			'table' => 'forum',
+		],
+		'signatures' => [
+			'statut' => 'poubelle',
+		],
+		'sites' => [
+			'statut' => 'refuse',
+			'tableliee' => ['spip_syndic_articles','spip_mots_syndic','spip_documents_liens'],
+		],
+	];
+	$param = pipeline('corbeille_table_infos', $param);
+	if (isset($param[$table])) {
+			return $param[$table];
+	}
+	if ($table == -1) {
+		return array_merge(array_keys($corbeille_params), array_keys($param));
+	}
+	return false;
+}
+
+/**
+ * supprime les elements listes d'un type donne
+ *
+ * @param nom $table
+ * @param tableau $ids
+ * @return $ids trouves (sinon false)
+ */
+function corbeille_vider($table, $ids = []) {
+
+	include_spip('base/abstract_sql');
+	$params = corbeille_table_infos($table);
+	if (isset($params['table'])) {
+			$table = $params['table'];
+	}
+
+	$type = objet_type($table);
+	$table_sql = table_objet_sql($type);
+	$id_table = id_table_objet($type);
+	$statut = $params['statut'];
+	if (!$statut) {
+		return false;
+	}
+
+	// determine les index des elements a supprimer
+	if ($ids === -1) {
+		// recupere les identifiants des objets a supprimer
+		$ids = array_column(sql_allfetsel($id_table, $table_sql, 'statut=' . sql_quote($statut)), $id_table);
+	}
+	else {
+		// verifions les ids qui existent vraiment
+		$ids = array_column(sql_allfetsel($id_table, $table_sql, sql_in($id_table, $ids) . ' AND statut=' . sql_quote($statut)), $id_table);
+	}
+	if (!count($ids)) {
+		return false;
+	}
+
+	if ($pre_suppression = charger_fonction($table . '_pre_suppression', 'corbeille', true)) {
+		$pre_suppression($ids);
+	}
+
+	// supprime les elements definis par la liste des index
+	sql_delete($table_sql, sql_in($id_table, $ids));
+	spip_log('Numeros des entrees' . implode(',', $ids) . " supprimees dans la table $table_sql", 'corbeille');
+	// suppresion des elements lies
+	if (isset($params['tableliee']) and $table_liee = $params['tableliee']) {
+		$trouver_table = charger_fonction('trouver_table', 'base');
+		foreach ($table_liee as $unetable) {
+			$desc = $trouver_table($unetable);
+			if (isset($desc['field'][$id_table])) {
+				sql_delete($unetable, sql_in($id_table, $ids));
+				spip_log('Numeros des entrees ' . implode(',', $ids) . " supprimees dans la table $unetable", 'corbeille');
+			} elseif (isset($desc['field']['id_objet']) and isset($desc['field']['objet'])) {
+				sql_delete($unetable, sql_in('id_objet', $ids) . ' AND objet=' . sql_quote($type));
+				spip_log('Numeros des entrees ' . implode(',', $ids) . " supprimees dans la table $unetable", 'corbeille');
+			}
+		}
+	}
+	return $ids;
+}
diff --git a/corbeille_fonctions.php b/corbeille_fonctions.php
index 9863e1c..1d6b235 100644
--- a/corbeille_fonctions.php
+++ b/corbeille_fonctions.php
@@ -1,24 +1,25 @@
-<?php
-/**
- * Plugin Corbeille 3.0
- * 
- * Collectif
- * Licence GPL
- */
-if (!defined("_ECRIRE_INC_VERSION")) return;
-
- 
-/**
- * Corbeille_icone_poubelle() affiche l'icone poubelle (vide ou pleine)
- * @param $total_table nb d'elÂŽments supprimable pour un objet donnÂŽ
- */
-function corbeille_icone_poubelle($total_table) {
-	if (empty($total_table)) {
-		return "<img src='".chemin_image('trash-empty-32.png')."' alt='trash empty'/>";
-	} else {
-		return "<img src='".chemin_image('trash-full-32.png')."'  alt='trash full'/>";
-	}
-}
-
-
-
+<?php
+
+/**
+ * Plugin Corbeille 3.0
+ *
+ * Collectif
+ * Licence GPL
+ */
+
+if (!defined('_ECRIRE_INC_VERSION')) { return;
+}
+
+
+/**
+ * Corbeille_icone_poubelle() affiche l'icone poubelle (vide ou pleine)
+ * @param $total_table nb d'elÂŽments supprimable pour un objet donnÂŽ
+ */
+function corbeille_icone_poubelle($total_table) {
+
+	if (empty($total_table)) {
+		return "<img src='" . chemin_image('trash-empty-32.png') . "' alt='trash empty'/>";
+	} else {
+		return "<img src='" . chemin_image('trash-full-32.png') . "'  alt='trash full'/>";
+	}
+}
diff --git a/formulaires/editer_corbeille.php b/formulaires/editer_corbeille.php
index 3aaa88f..20563bf 100644
--- a/formulaires/editer_corbeille.php
+++ b/formulaires/editer_corbeille.php
@@ -1,38 +1,43 @@
-<?php
-/**
- * Plugin Corbeille 3.0
- * 
- * Collectif
- * Licence GPL
- */
-if (!defined("_ECRIRE_INC_VERSION")) {
-	return;
-}
-
-function formulaires_editer_corbeille_charger_dist($table){
-	include_spip('action/corbeille_vider');
-	$params = corbeille_table_infos($table);
-	return array('table'=>$table,'elements'=>array(),'recherche'=>_request('recherche'),'_statut'=>$params['statut']);
-}
-
-
-function formulaires_editer_corbeille_traiter_dist($table){
-	include_spip('action/corbeille_vider');
-	include_spip('inc/objet');
-	if(_request('effacer_tout'))
-		$res = corbeille_vider($table,-1);
-	else
-		$res = corbeille_vider($table,_request('elements'));
-	$objet_sg = objet_type($table);
-	$objet_pl = table_objet($table);
-	if ($res){
-		if (count($res)>1)
-			$message = _T('corbeille:elements_supprimes',array('objet'=>$objet_pl,'ids'=>'#'.join(', #',$res)));
-		else
-			$message = _T('corbeille:element_supprime',array('objet'=>$objet_sg,'ids'=>'#'.join(', #',$res)));
-	}
-	else
-		$message = _T('corbeille:aucun_element_supprime');
-	
-	return array('message_ok'=>$message);
-}
+<?php
+
+/**
+ * Plugin Corbeille 3.0
+ *
+ * Collectif
+ * Licence GPL
+ */
+
+if (!defined('_ECRIRE_INC_VERSION')) {
+	return;
+}
+
+function formulaires_editer_corbeille_charger_dist($table) {
+	include_spip('action/corbeille_vider');
+	$params = corbeille_table_infos($table);
+	return ['table' => $table,'elements' => [],'recherche' => _request('recherche'),'_statut' => $params['statut']];
+}
+
+
+function formulaires_editer_corbeille_traiter_dist($table) {
+
+	include_spip('action/corbeille_vider');
+	include_spip('inc/objet');
+	if (_request('effacer_tout')) {
+			$res = corbeille_vider($table, -1);
+	} else {
+		$res = corbeille_vider($table, _request('elements'));
+	}
+	$objet_sg = objet_type($table);
+	$objet_pl = table_objet($table);
+	if ($res) {
+		if (count($res) > 1) {
+			$message = _T('corbeille:elements_supprimes', ['objet' => $objet_pl,'ids' => '#' . join(', #', $res)]);
+		} else {
+			$message = _T('corbeille:element_supprime', ['objet' => $objet_sg,'ids' => '#' . join(', #', $res)]);
+		}
+	} else {
+		$message = _T('corbeille:aucun_element_supprime');
+	}
+
+	return ['message_ok' => $message];
+}
diff --git a/genie/optimiser.php b/genie/optimiser.php
index e34e823..757a1b7 100644
--- a/genie/optimiser.php
+++ b/genie/optimiser.php
@@ -1,29 +1,27 @@
-<?php
-/**
- * Plugin Corbeille 3.0
- * 
- * Collectif
- * Licence GPL
- */
-if (!defined("_ECRIRE_INC_VERSION")) return;
-
-include_once _DIR_RESTREINT."genie/optimiser.php";
-
-/**
- * Pas d'optimisation auto avec le plugin corbeille !
- *
- * @param unknown_type $t
- * @return unknown
- */
-function genie_optimiser($t){
-
-	optimiser_base_une_table();
-
-	// la date souhaitee pour le tour suivant = apres-demain a 4h du mat ;
-	// sachant qu'on a un delai de 48h, on renvoie aujourd'hui a 4h du mat
-	// avec une periode de flou entre 2h et 6h pour ne pas saturer un hebergeur
-	// qui aurait beaucoup de sites SPIP
-	return -(mktime(2,0,0) + rand(0, 3600*4));
-}
-
-
+<?php
+
+/**
+ * Plugin Corbeille 3.0
+ *
+ * Collectif
+ * Licence GPL
+ */
+
+if (!defined('_ECRIRE_INC_VERSION')) { return;
+}
+
+include_once _DIR_RESTREINT . 'genie/optimiser.php';
+/**
+ * Pas d'optimisation auto avec le plugin corbeille !
+ *
+ * @param unknown_type $t
+ * @return unknown
+ */
+function genie_optimiser($t) {
+	optimiser_base_une_table();
+	// la date souhaitee pour le tour suivant = apres-demain a 4h du mat ;
+	// sachant qu'on a un delai de 48h, on renvoie aujourd'hui a 4h du mat
+	// avec une periode de flou entre 2h et 6h pour ne pas saturer un hebergeur
+	// qui aurait beaucoup de sites SPIP
+	return -(mktime(2, 0, 0) + rand(0, 3600 * 4));
+}
diff --git a/paquet.xml b/paquet.xml
index 30fc157..a6eb911 100644
--- a/paquet.xml
+++ b/paquet.xml
@@ -1,12 +1,12 @@
 <paquet
 	prefix="corbeille"
 	categorie="maintenance"
-	version="3.2.2"
+	version="4.0.0"
 	etat="stable"
-	compatibilite="[3.2.0;4.1.*]"
+	compatibilite="[4.1.0;4.2.*]"
 	logo="prive/themes/spip/images/trash-full-32.png"
 	documentation="https://contrib.spip.net/2855"
->	
+>
 
 	<nom>Corbeille</nom>
 	<!-- Gestion des documents mis &#224; la corbeille -->
-- 
GitLab