feat: version compatible SPIP4.2

pull/7/head
JamesRezo 3 weeks ago
parent 560acb8864
commit edc3f0c8b1

@ -1,4 +1,4 @@
# Calendrier Mini
# Corbeille
## Documentation

@ -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;
}

@ -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'/>";
}
}

@ -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];
}

@ -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));
}

@ -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 -->

Loading…
Cancel
Save