diff --git a/action/editer_document.php b/action/editer_document.php index 8d2b6acd63be8f9f9f4acfc6f0b9ec2da3f53b62..e39986c2c79f1061b262873bf916ef3cc3c911a1 100644 --- a/action/editer_document.php +++ b/action/editer_document.php @@ -189,55 +189,28 @@ function document_instituer($id_document, $champs = array()) { $statut_ancien = $row['statut']; $date_publication_ancienne = $row['date_publication']; + $champs = array(); + /* Autodetermination du statut si non fourni */ if (is_null($statut)) { - $statut = 'prepa'; + $determiner_statut_document = charger_fonction('determiner_statut_document', 'inc'); + $champs = $determiner_statut_document($id_document, $statut_ancien, $date_publication_ancienne); - $trouver_table = charger_fonction('trouver_table', 'base'); - $res = sql_select( - 'id_objet,objet', - 'spip_documents_liens', - "objet!='document' AND id_document=" . intval($id_document) - ); - // On aura 19 jours 3h14 et 7 secondes pour corriger en 2038 (limitation de la représentation POSIX du temps sur les 32 bits) - $date_publication = strtotime('2038-01-01 00:00:00'); - include_spip('base/objets'); - while ($row = sql_fetch($res)) { - if ( - // cas particulier des rubriques qui sont publiees des qu'elles contiennent un document ! - $row['objet'] == 'rubrique' - // ou si objet publie selon sa declaration - or objet_test_si_publie($row['objet'], $row['id_objet']) - ) { - $statut = 'publie'; - $date_publication = 0; - continue; - } // si pas publie, et article, il faut checker la date de post-publi eventuelle - elseif ($row['objet'] == 'article' - and $row2 = sql_fetsel( - 'date', - 'spip_articles', - 'id_article=' . intval($row['id_objet']) . " AND statut='publie'" - ) - ) { - $statut = 'publie'; - $date_publication = min($date_publication, strtotime($row2['date'])); - } - } - $date_publication = date('Y-m-d H:i:s', $date_publication); - if ($statut == 'publie' and $statut_ancien == 'publie' and $date_publication == $date_publication_ancienne) { + // rien a faire + if ($champs === false) { return false; } - if ($statut != 'publie' and $statut_ancien != 'publie' and $statut_ancien != '0') { - return false; + + } + else { + if ($statut !== $statut_ancien) { + $champs['statut'] = $statut; } } - $champs = array(); - if ($statut !== $statut_ancien) { - $champs['statut'] = $statut; - } - if ($date_publication != $date_publication_ancienne) { + if (!is_null($date_publication) + and empty($champs['date_publication']) + and $date_publication != $date_publication_ancienne) { $champs['date_publication'] = $date_publication; } diff --git a/inc/determiner_statut_document.php b/inc/determiner_statut_document.php new file mode 100644 index 0000000000000000000000000000000000000000..35aac533ff76bcbb3a4f7dddc35b9c77476c1f3e --- /dev/null +++ b/inc/determiner_statut_document.php @@ -0,0 +1,83 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2020 * + * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * + * * + * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * + * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * +\***************************************************************************/ + +/** + * Gestion des modes de documents + * + * @package SPIP\Medias\Modes + */ +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +/** + * Determiner le statut automatique d'un document + * @param int $id_document + * @param string $statut_ancien + * @param string $date_publication_ancienne + * @return array|false + */ +function inc_determiner_statut_document($id_document, $statut_ancien, $date_publication_ancienne) { + + $statut = 'prepa'; + + $trouver_table = charger_fonction('trouver_table', 'base'); + $res = sql_select( + 'id_objet,objet', + 'spip_documents_liens', + "objet!='document' AND id_document=" . intval($id_document) + ); + + // On aura 19 jours 3h14 et 7 secondes pour corriger en 2038 (limitation de la représentation POSIX du temps sur les 32 bits) + $date_publication = strtotime('2038-01-01 00:00:00'); + include_spip('base/objets'); + while ($row = sql_fetch($res)) { + if ( + // cas particulier des rubriques qui sont publiees des qu'elles contiennent un document ! + $row['objet'] == 'rubrique' + // ou si objet publie selon sa declaration + or objet_test_si_publie($row['objet'], $row['id_objet']) + ) { + $statut = 'publie'; + $date_publication = 0; + continue; + } // si pas publie, et article, il faut checker la date de post-publi eventuelle + elseif ($row['objet'] == 'article' + and $row2 = sql_fetsel( + 'date', + 'spip_articles', + 'id_article=' . intval($row['id_objet']) . " AND statut='publie'" + ) + ) { + $statut = 'publie'; + $date_publication = min($date_publication, strtotime($row2['date'])); + } + } + + $date_publication = date('Y-m-d H:i:s', $date_publication); + if ($statut == 'publie' and $statut_ancien == 'publie' and $date_publication == $date_publication_ancienne) { + return false; + } + if ($statut != 'publie' and $statut_ancien != 'publie' and $statut_ancien != '0') { + return false; + } + + $champs = []; + if ($statut !== $statut_ancien) { + $champs['statut'] = $statut; + } + if ($date_publication !== $date_publication_ancienne) { + $champs['date_publication'] = $date_publication; + } + + return $champs; +} diff --git a/paquet.xml b/paquet.xml index 8116b8c1cabb57817bbb8a9c7ab15b0046f7a7e4..621cb618084fc3eb3d93beab62027378dbddec66 100644 --- a/paquet.xml +++ b/paquet.xml @@ -1,7 +1,7 @@ <paquet prefix="medias" categorie="multimedia" - version="2.20.32" + version="2.20.33" etat="stable" compatibilite="[3.2.0;3.2.*]" logo="prive/themes/spip/images/portfolio-32.png"