[PLUGINS] ~maj plugins-dist
[lhc/web/www.git] / www / plugins-dist / medias / inc / determiner_statut_document.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2020 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 /**
14 * Gestion des modes de documents
15 *
16 * @package SPIP\Medias\Modes
17 */
18 if (!defined('_ECRIRE_INC_VERSION')) {
19 return;
20 }
21
22 /**
23 * Determiner le statut automatique d'un document
24 * @param int $id_document
25 * @param string $statut_ancien
26 * @param string $date_publication_ancienne
27 * @return array|false
28 */
29 function inc_determiner_statut_document($id_document, $statut_ancien, $date_publication_ancienne) {
30
31 $statut = 'prepa';
32
33 $trouver_table = charger_fonction('trouver_table', 'base');
34 $res = sql_select(
35 'id_objet,objet',
36 'spip_documents_liens',
37 "objet!='document' AND id_document=" . intval($id_document)
38 );
39
40 // On aura 19 jours 3h14 et 7 secondes pour corriger en 2038 (limitation de la représentation POSIX du temps sur les 32 bits)
41 $date_publication = strtotime('2038-01-01 00:00:00');
42 include_spip('base/objets');
43 while ($row = sql_fetch($res)) {
44 if (
45 // cas particulier des rubriques qui sont publiees des qu'elles contiennent un document !
46 $row['objet'] == 'rubrique'
47 // ou si objet publie selon sa declaration
48 or objet_test_si_publie($row['objet'], $row['id_objet'])
49 ) {
50 $statut = 'publie';
51 $date_publication = 0;
52 continue;
53 } // si pas publie, et article, il faut checker la date de post-publi eventuelle
54 elseif ($row['objet'] == 'article'
55 and $row2 = sql_fetsel(
56 'date',
57 'spip_articles',
58 'id_article=' . intval($row['id_objet']) . " AND statut='publie'"
59 )
60 ) {
61 $statut = 'publie';
62 $date_publication = min($date_publication, strtotime($row2['date']));
63 }
64 }
65
66 $date_publication = date('Y-m-d H:i:s', $date_publication);
67 if ($statut == 'publie' and $statut_ancien == 'publie' and $date_publication == $date_publication_ancienne) {
68 return false;
69 }
70 if ($statut != 'publie' and $statut_ancien != 'publie' and $statut_ancien != '0') {
71 return false;
72 }
73
74 $champs = [];
75 if ($statut !== $statut_ancien) {
76 $champs['statut'] = $statut;
77 }
78 if ($date_publication !== $date_publication_ancienne) {
79 $champs['date_publication'] = $date_publication;
80 }
81
82 return $champs;
83 }