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 à la corbeille --> -- GitLab