From 23dea242e3cbd82f54524e415bac06e4846bb853 Mon Sep 17 00:00:00 2001 From: RastaPopoulos <rastapopoulos@spip.org> Date: Sun, 14 Mar 2021 21:34:01 +0100 Subject: [PATCH] =?UTF-8?q?Dans=20l'API=20g=C3=A9n=C3=A9rique=20pour=20tou?= =?UTF-8?q?t=20objet=20:=20passer=20=C3=A0=20calculer=5Frubrique=5Fif=20au?= =?UTF-8?q?ssi=20l'info=20de=20quel=20objet=20on=20vient=20de=20modifi?= =?UTF-8?q?=C3=A9=E2=80=A6=20C'est=20quand=20m=C3=AAme=20une=20fonction=20?= =?UTF-8?q?qui=20teste=20une=20modif=20qui=20vient=20d'=C3=AAtre=20effectu?= =?UTF-8?q?=C3=A9e,=20et=20on=20n'avait=20pas=20l'info=20de=20quoi.=20Du?= =?UTF-8?q?=20coup=20=C3=A7a=20permet=20de=20tester=20les=20vrais=20statut?= =?UTF-8?q?s=20consid=C3=A9r=C3=A9s=20publi=C3=A9s=20de=20CET=20objet=20pr?= =?UTF-8?q?=C3=A9cis,=20pas=20un=20truc=20en=20dur.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecrire/action/editer_objet.php | 8 +++++++- ecrire/inc/rubriques.php | 37 +++++++++++++++++++++++++++++----- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/ecrire/action/editer_objet.php b/ecrire/action/editer_objet.php index 20c8a69a84..5a328d1e5a 100644 --- a/ecrire/action/editer_objet.php +++ b/ecrire/action/editer_objet.php @@ -501,7 +501,13 @@ function objet_editer_heritage($objet, $id, $id_rubrique, $statut, $champs, $con include_spip('inc/rubriques'); //$postdate = ($GLOBALS['meta']["post_dates"] == "non" AND isset($champs['date']) AND (strtotime($champs['date']) < time()))?$champs['date']:false; $postdate = false; - calculer_rubriques_if($id_rubrique, $champs, $statut, $postdate); + // On rajoute les infos de l'objet + $infos = array( + 'objet' => $objet, + 'id_objet' => $id, + 'statut_ancien' => $statut, + ); + calculer_rubriques_if($id_rubrique, $champs, $infos, $postdate); } } diff --git a/ecrire/inc/rubriques.php b/ecrire/inc/rubriques.php index 5b53432d16..57c1cd7569 100644 --- a/ecrire/inc/rubriques.php +++ b/ecrire/inc/rubriques.php @@ -46,16 +46,43 @@ if (!defined('_ECRIRE_INC_VERSION')) { * Peut avoir 2 index, 'statut' étant obligatoire : * - statut : indique le nouveau statut de la rubrique * - id_rubrique : indiquer la rubrique dans laquelle on déplace la rubrique (son nouveau parent donc) - * @param string $statut_ancien - * Ancien statut de la rubrique + * @param array $infos + * Infos sur l'objet modifié : statut_ancien, objet, id_objet… * @param bool $postdate * true pour recalculer aussi la date du prochain article post-daté * @return bool * true si le statut change effectivement **/ -function calculer_rubriques_if($id_rubrique, $modifs, $statut_ancien = '', $postdate = false) { +function calculer_rubriques_if($id_rubrique, $modifs, $infos = array(), $postdate = false) { $neuf = false; - if ($statut_ancien == 'publie') { + + // Compat avec l'ancienne signature + if (is_string($infos)) { + $infos = array('statut_ancien' => $infos); + } + if (!isset($infos['statut_ancien'])) { + $infos['statut_ancien'] = ''; + } + + // On recherche quels statuts tester + if ( + isset($infos['objet']) + and include_spip('inc/filtres') + and $declaration_statut = objet_info($infos['objet'], 'statut') + and is_array($declaration_statut) + ) { + foreach ($declaration_statut as $champ_statut) { + if ($champ_statut['champ'] == 'statut') { + $statuts_publies = array_map('trim', explode(',', $champ_statut['publie'])); + break; // stop on a trouvé le bon champ + } + } + } + else { + $statuts_publies = array('publie'); + } + + if (in_array($infos['statut_ancien'], $statuts_publies)) { if (isset($modifs['statut']) or isset($modifs['id_rubrique']) or ($postdate and strtotime($postdate) > time()) @@ -69,7 +96,7 @@ function calculer_rubriques_if($id_rubrique, $modifs, $statut_ancien = '', $post } elseif (isset($modifs['id_rubrique'])) { $neuf |= publier_branche_rubrique($modifs['id_rubrique']); } - } elseif (isset($modifs['statut']) and $modifs['statut'] == 'publie') { + } elseif (isset($modifs['statut']) and in_array($modifs['statut'], $statuts_publies)) { if ($postdate) { calculer_prochain_postdate(true); $neuf |= (strtotime($postdate) <= time()); // par securite -- GitLab