From d12a5d1afb86352af538c275aaddd44cce995f37 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Sun, 18 Mar 2007 00:57:38 +0000
Subject: [PATCH] lien (bla {blabla}->url) etait casse, sauf dans le cas ou on
 avait un hreflang (francois) ; voir aussi le tests/propre/liens.php

---
 ecrire/action/instituer_article.php |  8 +++++++-
 ecrire/inc/instituer_article.php    | 11 ++++++++++-
 ecrire/inc/rubriques.php            | 13 +++++++++++++
 ecrire/inc/texte.php                |  2 +-
 ecrire/public/cacher.php            | 12 ++++++++++++
 5 files changed, 43 insertions(+), 3 deletions(-)

diff --git a/ecrire/action/instituer_article.php b/ecrire/action/instituer_article.php
index c69975b2ac..5b93b059e6 100644
--- a/ecrire/action/instituer_article.php
+++ b/ecrire/action/instituer_article.php
@@ -26,7 +26,13 @@ function action_instituer_article_dist() {
 
 	include_spip('action/editer_article');
 
-	instituer_article($id_article, array('statut' => $statut));
+	$c = array('statut' => $statut);
+
+	// si on a envoye une 'date_posterieure', l'enregistrer
+	if ($d = _request('date_posterieure'))
+		$c['date'] = $d;
+
+	instituer_article($id_article, $c);
 
 }
 
diff --git a/ecrire/inc/instituer_article.php b/ecrire/inc/instituer_article.php
index 522ecddf02..85101a536a 100644
--- a/ecrire/inc/instituer_article.php
+++ b/ecrire/inc/instituer_article.php
@@ -17,6 +17,12 @@ function inc_instituer_article_dist($id_article, $statut=-1)
 {
 	if ($statut == -1) return demande_publication($id_article);
 
+	// menu de date pour les articles post-dates (plugin)
+	if ($statut <> 'publie'
+	AND $GLOBALS['meta']['post_dates'] == 'non'
+	AND function_exists('menu_postdates'))
+		list($postdates,$postdates_js) = menu_postdates();
+
 	$res =
 	"\n<div style='text-align: center;' id='instituer_article-$id_article'>" .
 	"<b>" .
@@ -26,7 +32,9 @@ function inc_instituer_article_dist($id_article, $statut=-1)
 	"onchange=\"this.nextSibling.nextSibling.src='" .
 	_DIR_IMG_PACK .
 	"' + puce_statut(options[selectedIndex].value);" .
-	" setvisibility('valider_statut', 'visible');\">\n" .
+	" setvisibility('valider_statut', 'visible');"
+	. $postdates_js
+	. "\">\n" .
 	"<option"  . mySel("prepa", $statut)  ." style='background-color: white'>" ._T('texte_statut_en_cours_redaction') ."</option>\n" .
 	"<option"  . mySel("prop", $statut)  . " style='background-color: #FFF1C6'>" ._T('texte_statut_propose_evaluation') ."</option>\n" .
 	"<option"  . mySel("publie", $statut)  . " style='background-color: #B4E8C5'>" ._T('texte_statut_publie') ."</option>\n" .
@@ -41,6 +49,7 @@ function inc_instituer_article_dist($id_article, $statut=-1)
 	"<input type='submit' value='"._T('bouton_valider')."' class='fondo' />" .
 	"</span>" .
 	aide("artstatut")
+	. $postdates
 	. '</div>';
   
 	return redirige_action_auteur('instituer_article',$id_article,'articles', "id_article=$id_article", $res, " method='post'");
diff --git a/ecrire/inc/rubriques.php b/ecrire/inc/rubriques.php
index e5536e7ed8..672600aec9 100644
--- a/ecrire/inc/rubriques.php
+++ b/ecrire/inc/rubriques.php
@@ -117,6 +117,9 @@ function calculer_rubriques() {
 	// pour recalculer les langues utilisees sur le site
 	include_spip('inc/lang');
 	calculer_langues_utilisees();
+
+	// on calcule la date du prochain article post-date
+	calculer_prochain_postdate();
 }
 
 // http://doc.spip.org/@propager_les_secteurs
@@ -254,6 +257,16 @@ function calcul_branche ($generation) {
 	}
 }
 
+function calculer_prochain_postdate() {
+	include_spip('inc/meta');
+	$s = spip_query("SELECT UNIX_TIMESTAMP(date) AS ts FROM spip_articles WHERE statut='publie' AND date>"._q(date('Y-m-d H:i:s'))." ORDER BY date LIMIT 0,1");
+	if ($t = spip_fetch_array($s))
+		ecrire_meta('date_prochain_postdate', $t['ts']);
+	else
+		effacer_meta('date_prochain_postdate');
+	ecrire_metas();
+}
+
 // http://doc.spip.org/@cron_rubriques
 function cron_rubriques($t) {
 	calculer_rubriques();
diff --git a/ecrire/inc/texte.php b/ecrire/inc/texte.php
index ca8df2eda9..fcad00aa4d 100644
--- a/ecrire/inc/texte.php
+++ b/ecrire/inc/texte.php
@@ -1178,7 +1178,7 @@ function traiter_raccourci_lien($regs) {
 			}
 			// sinon c'est un italique
 			else {
-				$m[1] .= '{'.$m[3].'}';
+				$m[1] .= $m[4];
 			}
 		}
 		// S'il n'y a pas de hreflang sous la forme {}, ce qui suit le |
diff --git a/ecrire/public/cacher.php b/ecrire/public/cacher.php
index 644c03f803..1e7d72db7b 100644
--- a/ecrire/public/cacher.php
+++ b/ecrire/public/cacher.php
@@ -86,6 +86,18 @@ function cache_valide(&$page, $date) {
 	AND $date < $GLOBALS['meta']['derniere_modif'])
 		return 1;
 
+	// Apparition d'un nouvel article post-date ?
+	if ($GLOBALS['meta']['post_dates'] == 'non'
+	AND $GLOBALS['meta']['date_prochain_postdate']
+	AND time() > $GLOBALS['meta']['date_prochain_postdate']) {
+		spip_log('Un article post-date invalide le cache');
+		include_spip('inc/meta');
+		include_spip('inc/rubriques');
+		ecrire_meta('derniere_modif', time());
+		calculer_prochain_postdate(); // fera le ecrire_metas()
+		return 1;
+	}
+
 	// Sinon comparer l'age du fichier a sa duree de cache
 	$duree = intval($page['entetes']['X-Spip-Cache']);
 	if ($duree == 0)  #CACHE{0}
-- 
GitLab