From 740d4e5aa136a619983deacd472fec204205b8be Mon Sep 17 00:00:00 2001
From: James <james@rezo.net>
Date: Tue, 12 Sep 2006 20:58:58 +0000
Subject: [PATCH] =?UTF-8?q?deux=20nouveaux=20param=C3=A8tres=20pour=20recu?=
 =?UTF-8?q?perer=5Fpage():?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

- $date_verif pour arrêter la recuperation si le Header Last-modified: prouve que la page n'a pas été modifiée depuis la dernière visite sur ce lien : attention c'est en GMT.
- $uri_referer pour préciser una autre url que celle de la page d'accueil du site. Une url publique d'un article par exemple.
---
 ecrire/inc/distant.php | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/ecrire/inc/distant.php b/ecrire/inc/distant.php
index c7c753670a..a6994c2f74 100644
--- a/ecrire/inc/distant.php
+++ b/ecrire/inc/distant.php
@@ -126,9 +126,12 @@ function prepare_donnees_post($donnees, $boundary = '') {
 // datas, une chaine ou un tableau pour faire un POST de donnees
 // boundary, pour forcer l'envoi par cette methode
 // et refuser_gz pour forcer le refus de la compression (cas des serveurs orthographiques)
+// date_verif, un timestamp unix pour arreter la recuperation si la page distante n'a pas ete modifiee depuis une date donnee
+// uri_referer, preciser un referer different 
 // http://doc.spip.org/@recuperer_page
-function recuperer_page($url, $munge_charset=false, $get_headers=false, $taille_max = 1048576,
-  $datas='', $boundary='', $refuser_gz = false) {
+function recuperer_page($url, $munge_charset=false, $get_headers=false,
+	$taille_max = 1048576, $datas='', $boundary='', $refuser_gz = false,
+	$date_verif = '', $uri_referer = '') {
   	$gz = false;
 
 	// Accepter les URLs au format feed:// ou qui ont oublie le http://
@@ -146,7 +149,7 @@ function recuperer_page($url, $munge_charset=false, $get_headers=false, $taille_
 	}
 
 	for ($i=0;$i<10;$i++) {	// dix tentatives maximum en cas d'entetes 301...
-		list($f, $fopen) = init_http($get, $url, $refuser_gz);
+		list($f, $fopen) = init_http($get, $url, $refuser_gz, $uri_referer);
 
 		// si on a utilise fopen() - passer a la suite
 		if ($fopen) {
@@ -178,6 +181,13 @@ function recuperer_page($url, $munge_charset=false, $get_headers=false, $taille_
 					$location = suivre_lien($url, $r[1]);
 					spip_log("Location: $location");
 				}
+				if ($date_verif AND preg_match(',^Last-Modified: (.*),', $s, $r)) {
+					if(strtotime($date_verif)>=strtotime($r[1])) {
+						//Cas ou la page distante n'a pas bouge depuis
+						//la derniere visite
+						return $status;
+					}
+				}
 				if (preg_match(",^Content-Encoding: .*gzip,i", $s))
 					$gz = true;
 			}
@@ -332,7 +342,7 @@ function recuperer_infos_distantes($source, $max=0) {
 // retourne un descripteur de fichier
 //
 // http://doc.spip.org/@init_http
-function init_http($get, $url, $refuse_gz=false) {
+function init_http($get, $url, $refuse_gz=false, $uri_referer = '') {
 	$via_proxy = ''; $proxy_user = ''; $fopen = false;
 	$http_proxy = $GLOBALS['meta']["http_proxy"];
 	if (!eregi("^http://", $http_proxy))
@@ -378,8 +388,10 @@ function init_http($get, $url, $refuse_gz=false) {
 			. base64_encode($proxy_user . ":" . $proxy_pass) . "\r\n");
 		}
 		// Referer = c'est nous !
-		if ($referer = $GLOBALS['meta']["adresse_site"])
-			fputs($f, "Referer: $referer/\r\n");
+		if ($referer = $GLOBALS['meta']["adresse_site"]) {
+			$referer .= '/'.$uri_referer;
+			fputs($f, "Referer: $referer\r\n");
+		}
 
 		// On sait lire du gzip
 		if ($GLOBALS['flag_gz'] AND !$refuse_gz)
-- 
GitLab