From 024383f4da2b409221d231f907d085241ca8e9c1 Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Fri, 28 May 2010 20:26:10 +0000 Subject: [PATCH] report de [15711] et [15712] --- ecrire/action/editer_article.php | 6 ++- ecrire/inc/rubriques.php | 90 ++++++++++++++++++++++---------- 2 files changed, 65 insertions(+), 31 deletions(-) diff --git a/ecrire/action/editer_article.php b/ecrire/action/editer_article.php index 92d4269bd2..cf8dbd425c 100644 --- a/ecrire/action/editer_article.php +++ b/ecrire/action/editer_article.php @@ -225,7 +225,8 @@ function instituer_article($id_article, $c, $calcul_rub=true) { 'args' => array( 'table' => 'spip_articles', 'id_objet' => $id_article, - 'action'=>'instituer' + 'action'=>'instituer', + 'statut_ancien' => $statut_ancien, ), 'data' => $champs ) @@ -255,7 +256,8 @@ function instituer_article($id_article, $c, $calcul_rub=true) { 'args' => array( 'table' => 'spip_articles', 'id_objet' => $id_article, - 'action'=>'instituer' + 'action'=>'instituer', + 'statut_ancien' => $statut_ancien, ), 'data' => $champs ) diff --git a/ecrire/inc/rubriques.php b/ecrire/inc/rubriques.php index 478737c219..beed991acb 100644 --- a/ecrire/inc/rubriques.php +++ b/ecrire/inc/rubriques.php @@ -77,45 +77,77 @@ function publier_branche_rubrique($id_rubrique) return $id_pred != $id_rubrique; } -// Fonction a appeler lorsqu'on depublie ou supprime qqch dans une rubrique -// retourne Vrai si le statut change effectivement +/** + * Fonction a appeler lorsqu'on depublie ou supprime qqch dans une rubrique + * retourne Vrai si le statut change effectivement + * + * http://doc.spip.org/@depublier_branche_rubrique_if + * + * @param int $id_rubrique + * @return bool + */ +function depublier_branche_rubrique_if($id_rubrique){ + $date = date('Y-m-d H:i:s'); // figer la date + + # spip_log("depublier_branche_rubrique($id_rubrique ?"); + $id_pred = $id_rubrique; + while ($id_pred) { -// http://doc.spip.org/@depublier_branche_rubrique_if -function depublier_branche_rubrique_if($id_rubrique) -{ + if (!depublier_rubrique_if($id_pred,$date)) + return $id_pred != $id_rubrique; + // passer au parent si on a depublie + $r = sql_fetsel("id_parent", "spip_rubriques", "id_rubrique=$id_pred"); + $id_pred = $r['id_parent']; + } + + return $id_pred != $id_rubrique; +} + +/** + * Depublier une rubrique si aucun contenu publie connu + * retourne true si la rubrique a ete depubliee + * + * @param int $id_rubrique + * @param string $date + * @return bool + */ +function depublier_rubrique_if($id_rubrique,$date=null){ + if (is_null($date)) + $date = date('Y-m-d H:i:s'); $postdates = ($GLOBALS['meta']["post_dates"] == "non") ? - " AND date <= ".sql_quote(date('Y-m-d H:i:s')) : ''; + " AND date <= ".sql_quote($date) : ''; -# spip_log("depublier_branche_rubrique($id_rubrique ?"); - $id_pred = $id_rubrique; - while ($id_pred) { + if (!$id_rubrique=intval($id_rubrique)) + return false; - if (sql_countsel("spip_articles", "id_rubrique=$id_pred AND statut='publie'$postdates")) - return $id_pred != $id_rubrique;; - - if (sql_countsel("spip_breves", "id_rubrique=$id_pred AND statut='publie'")) - return $id_pred != $id_rubrique;; + // verifier qu'elle existe et est bien publiee + $r = sql_fetsel('id_rubrique,statut','spip_rubriques',"id_rubrique=$id_rubrique"); + if (!$r OR $r['statut']!=='publie') + return false; - if (sql_countsel("spip_syndic", "id_rubrique=$id_pred AND statut='publie'")) - return $id_pred != $id_rubrique;; - - if (sql_countsel("spip_rubriques", "id_parent=$id_pred AND statut='publie'")) - return $id_pred != $id_rubrique;; + if (sql_countsel("spip_articles", "id_rubrique=$id_rubrique AND statut='publie'$postdates")) + return false; - $compte = pipeline('objet_compte_enfants',array('args'=>array('objet'=>'rubrique','id_objet'=>$id_pred,'statut'=>'publie'),'data'=>array())); - foreach($compte as $objet => $n) - if ($n) - return $id_pred != $id_rubrique; + if (sql_countsel("spip_breves", "id_rubrique=$id_rubrique AND statut='publie'")) + return false; - sql_updateq("spip_rubriques", array("statut" => '0'), "id_rubrique=$id_pred"); -# spip_log("depublier_rubrique $id_pred"); + if (sql_countsel("spip_syndic", "id_rubrique=$id_rubrique AND statut='publie'")) + return false; - $r = sql_fetsel("id_parent", "spip_rubriques", "id_rubrique=$id_pred"); + if (sql_countsel("spip_rubriques", "id_parent=$id_rubrique AND statut='publie'")) + return false; - $id_pred = $r['id_parent']; - } + if (sql_countsel("spip_documents_liens", "id_objet=$id_rubrique AND objet='rubrique'")) + return false; - return $id_pred != $id_rubrique;; + $compte = pipeline('objet_compte_enfants',array('args'=>array('objet'=>'rubrique','id_objet'=>$id_rubrique,'statut'=>'publie','date'=>$date),'data'=>array())); + foreach($compte as $objet => $n) + if ($n) + return false; + + sql_updateq("spip_rubriques", array("statut" => '0'), "id_rubrique=$id_rubrique"); +# spip_log("depublier_rubrique $id_pred"); + return true; } // -- GitLab