Skip to content
Extraits de code Groupes Projets
Valider 55ba07f8 rédigé par esj's avatar esj
Parcourir les fichiers

Rendre surchargeables les fonctions produisant des flux RSS: c'était déjà...

Rendre surchargeables les fonctions produisant des flux RSS: c'était déjà presque le cas avec le "function_exists('affiche_rss'....)" et ses 3 fonctions prédéfinies qui sont donc maintenant 3 fichiers.

Le répertoire inc/ commençant à contenir vraiment trop de fichiers, les 3 fichiers en question sont abrités dans un nouveau répertoire nommé xml/. On pourrait d'ailleurs convenir plus généralement que tout fichier dont le role est de construire un texte dans un certain format MIME aille dans un répertoire à ce nom, ça permetrait de réorganiser inc/. 

A noter que l'appel de action/rss.php avec le format dit "ical"  ne semble déclenché nulle part (ça tombe bien, il ne devrait pas etre dans un répertoire nommé xml/ ...).
parent 16171d80
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -506,6 +506,9 @@ ecrire/safehtml/readme.txt -text ...@@ -506,6 +506,9 @@ ecrire/safehtml/readme.txt -text
ecrire/urls/page.php -text ecrire/urls/page.php -text
ecrire/urls/propres-qs.php -text ecrire/urls/propres-qs.php -text
ecrire/win_png.htc -text ecrire/win_png.htc -text
ecrire/xml/atom.php -text
ecrire/xml/ical.php -text
ecrire/xml/rss.php -text
/inc-public.php3 -text /inc-public.php3 -text
/index.php -text /index.php -text
/rien.gif -text /rien.gif -text
......
...@@ -23,178 +23,10 @@ function trier_par_date($a, $b) { ...@@ -23,178 +23,10 @@ function trier_par_date($a, $b) {
return ($a['date'] < $b['date']); return ($a['date'] < $b['date']);
} }
//
// Prend un tableau et l'affiche au format rss
// (fonction inverse de analyser_backend)
// A completer (il manque des tests, des valeurs par defaut, les enclosures,
// differents formats de sortie, etc.)
//
// http://doc.spip.org/@affiche_rss
function affiche_rss($rss, $intro = '', $fmt='') {
if (!$fmt) $fmt = 'rss';
if (function_exists($f = 'affiche_rss_'.$fmt)) {
return $f($rss, $intro);
}
else
spip_log("Format $fmt inconnu");
}
// http://doc.spip.org/@affiche_rss_rss
function affiche_rss_rss($rss, $intro = '') {
// entetes
$u = '<'.'?xml version="1.0" encoding="'.$GLOBALS['meta']['charset'].'"?'.">\n";
$u .= '
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>'.texte_backend($intro['title']).'</title>
<link>'.texte_backend(url_absolue($intro['url'])).'</link>
<description>'.texte_backend($intro['description']).'</description>
<language>'.texte_backend($intro['language']).'</language>
';
// elements
if (is_array($rss)) {
usort($rss, 'trier_par_date');
foreach ($rss as $article) {
$u .= '
<item>
<title>'.texte_backend($article['title']).'</title>
<link>'.texte_backend(url_absolue($article['url'])).'</link>
<guid isPermaLink="true">'.texte_backend(url_absolue($article['url'])).'</guid>
<dc:date>'.date_iso($article['date']).'</dc:date>
<dc:format>text/html</dc:format>';
if ($article['lang']) $u .= '
<dc:language>'.texte_backend($article['lang']).'</dc:language>';
if ($article['author']) {
if ($article['email'])
$article['author'].=' <'.$article['email'].'>';
$u .= '
<dc:creator>'.texte_backend($article['author']).'</dc:creator>';
}
$u .= '
<description>'.texte_backend(liens_absolus($article['description'])).'</description>
</item>
';
}
}
// pied
$u .= '
</channel>
</rss>
';
return array($u, 'Content-Type: text/xml; charset='.$GLOBALS['meta']['charset']);
}
// http://doc.spip.org/@affiche_rss_atom
function affiche_rss_atom($rss, $intro = '') {
// entetes
$u = '<'.'?xml version="1.0" encoding="'.$GLOBALS['meta']['charset']
.'"?'.">\n";
$u .= '<feed xmlns="http://www.w3.org/2005/Atom"';
if ($intro['language'])
$u .= ' xml:lang="'.$intro['language'].'"';
$u .= '>
<title>'.texte_backend($intro['title']).'</title>
<id>'.texte_backend(url_absolue($intro['url'])).'</id>
<link href="'.texte_backend(url_absolue($intro['url'])).'"/>';
if ($intro['description']) $u .= '<subtitle>'.texte_backend($intro['description']).'</subtitle>';
$u .= '<link rel="self" type="application/atom+xml" href="'.texte_backend(url_absolue($_SERVER['REQUEST_URI'])).'"/>
<updated>'.gmdate("Y-m-d\TH:i:s\Z").'</updated>'; // probleme, <updated> pourrait etre plus precis
// elements
if (is_array($rss)) {
usort($rss, 'trier_par_date');
foreach ($rss as $article) {
$u .= "\n\t<entry";
if ($article['lang'])
$u .= ' xml:lang="'.texte_backend($article['lang']).'"';
$u .= '>
<title>'.texte_backend($article['title']).'</title>
<id>'.texte_backend(url_absolue($article['url'])).'</id>
<link rel="alternate" type="text/html" href="'.texte_backend(url_absolue($article['url'])).'"/>
<published>'.date_iso($article['date']).'</published>
<updated>'.date_iso($article['date']).'</updated>';
if ($article['author']) {
$u .= '
<author><name>'.texte_backend($article['author']).'</name>';
if ($article['email'])
$u .= '<email>'.texte_backend($article['email']).'</email>';
$u .= '</author>';
}
$u .='
<summary type="html">'.texte_backend(liens_absolus($article['description'])).'</summary>
</entry>
';
}
}
// pied
$u .= '
</feed>
';
return array($u, 'Content-Type: text/xml; charset='.$GLOBALS['meta']['charset']);
}
// http://doc.spip.org/@affiche_rss_ical
function affiche_rss_ical($rss, $intro = '') {
// entetes
$u =
'BEGIN:VCALENDAR
CALSCALE:GREGORIAN
X-WR-CALNAME;VALUE=TEXT:'.filtrer_ical($intro['title']).'
X-WR-RELCALID:'.filtrer_ical(url_absolue($intro['url'])).'
';
// elements
if (is_array($rss)) {
usort($rss, 'trier_par_date');
foreach ($rss as $article) {
// Regler la date de fin a h+60min
if (!$article['enddate'])
$article['enddate'] = date_ical($article['date'],60);
else
$article['enddate'] = date_ical($article['enddate']);
// Type d'evenement
if ($article['type'] == 'todo')
$type = 'VTODO';
else
$type = 'VEVENT';
$u .=
'BEGIN:'.$type.'
SUMMARY:'.filtrer_ical($article['title']).'
URL:'.filtrer_ical(url_absolue($article['url'])).'
DTSTAMP:'. date_ical($article['date']).'
DTSTART:'. date_ical($article['date']).'
DTEND:'. $article['enddate'].'
DESCRIPTION:'.filtrer_ical(liens_absolus($article['description'])).'
ORGANIZER:'.filtrer_ical($article['author']).'
CATEGORIES:--
END:'.$type.'
';
}
}
// pied
$u .= 'END:VCALENDAR';
return array($u, 'Content-Type: text/calendar; charset=utf-8');
}
// //
// Fonctions de remplissage du RSS // Fonctions de remplissage du RSS
// //
// Suivi des revisions d'articles // Suivi des revisions d'articles
// http://doc.spip.org/@rss_suivi_versions // http://doc.spip.org/@rss_suivi_versions
function rss_suivi_versions($a) { function rss_suivi_versions($a) {
...@@ -240,8 +72,6 @@ function rss_suivi_forums($a, $from, $where, $lien_moderation=false) { ...@@ -240,8 +72,6 @@ function rss_suivi_forums($a, $from, $where, $lien_moderation=false) {
return $rss; return $rss;
} }
// Suivi de la messagerie privee // Suivi de la messagerie privee
// http://doc.spip.org/@rss_suivi_messagerie // http://doc.spip.org/@rss_suivi_messagerie
function rss_suivi_messagerie($a) { function rss_suivi_messagerie($a) {
...@@ -467,21 +297,13 @@ switch($op) { ...@@ -467,21 +297,13 @@ switch($op) {
break; break;
} }
// if (!$fmt) $fmt = 'rss';
// Envoyer le RSS $f = charger_fonction($fmt, 'xml');
// $f($rss, array(
$intro = array(
'title' => "[".$GLOBALS['meta']['nom_site']."] RSS ".$title, 'title' => "[".$GLOBALS['meta']['nom_site']."] RSS ".$title,
'url' => $url, 'url' => $url,
'language'=> $GLOBALS['spip_lang'] 'language'=> $GLOBALS['spip_lang']));
);
spip_log("spip_rss applique $f sur '$fmt $opt $args'. Tempsd: " . spip_timer('rss'));
list($content,$header) = affiche_rss($rss, $intro, $fmt);
if ($header) @header($header);
echo $content;
spip_log("spip_rss: ".spip_timer('rss'));
} }
?> ?>
...@@ -293,7 +293,15 @@ function bandeau_gadgets($largeur, $options, $id_rubrique) { ...@@ -293,7 +293,15 @@ function bandeau_gadgets($largeur, $options, $id_rubrique) {
// GADGET Menu rubriques // GADGET Menu rubriques
. "\n<div id='bandeautoutsite' class='bandeau_couleur_sous' style='$spip_lang_left: 0px;'>" . "\n<div id='bandeautoutsite' class='bandeau_couleur_sous' style='$spip_lang_left: 0px;'>"
. "<a href='" . generer_url_ecrire("articles_tous") . "' class='lien_sous'>"._T('icone_site_entier')."</a>" . "<a href='"
. generer_url_ecrire("articles_tous")
. "' class='lien_sous'"
/* retire par la 7033 car bugge. a reintroduire ?
onmouseover=\"findObj_forcer('bandeautoutsite').style.visibility='visible'; charger_id_url_si_vide('" . generer_url_ecrire('rubriquer',"&var_ajax=1&id=$id_rubrique") . "','nav-recherche');\" */
. ">"
._T('icone_site_entier')
. "</a>"
. "<div id='nav-recherche'></div>"
. "<div id='gadget-rubriques'></div>" . "<div id='gadget-rubriques'></div>"
. "</div>"; . "</div>";
// FIN GADGET Menu rubriques // FIN GADGET Menu rubriques
......
...@@ -42,7 +42,7 @@ function inc_informer_dist($id, $col, $exclus, $rac, $type) ...@@ -42,7 +42,7 @@ function inc_informer_dist($id, $col, $exclus, $rac, $type)
} }
$rac = htmlentities($rac); $rac = htmlentities($rac);
spip_log("info $res");
# ce lien provoque la selection (directe) de la rubrique cliquee # ce lien provoque la selection (directe) de la rubrique cliquee
$onClick = "findObj_forcer('id_parent').value=$id;"; $onClick = "findObj_forcer('id_parent').value=$id;";
# et l'affichage de son titre dans le bandeau # et l'affichage de son titre dans le bandeau
......
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2006 *
* 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. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/minipres');
include_spip('inc/acces');
include_spip('inc/texte'); // utile pour l'espace public, deja fait sinon
function xml_atom_dist($rss, $intro = '') {
// entetes
$u = '<'.'?xml version="1.0" encoding="'.$GLOBALS['meta']['charset']
.'"?'.">\n";
$u .= '<feed xmlns="http://www.w3.org/2005/Atom"';
if ($intro['language'])
$u .= ' xml:lang="'.$intro['language'].'"';
$u .= '>
<title>'.texte_backend($intro['title']).'</title>
<id>'.texte_backend(url_absolue($intro['url'])).'</id>
<link href="'.texte_backend(url_absolue($intro['url'])).'"/>';
if ($intro['description']) $u .= '<subtitle>'.texte_backend($intro['description']).'</subtitle>';
$u .= '<link rel="self" type="application/atom+xml" href="'.texte_backend(url_absolue($_SERVER['REQUEST_URI'])).'"/>
<updated>'.gmdate("Y-m-d\TH:i:s\Z").'</updated>'; // probleme, <updated> pourrait etre plus precis
// elements
if (is_array($rss)) {
usort($rss, 'trier_par_date');
foreach ($rss as $article) {
$u .= "\n\t<entry";
if ($article['lang'])
$u .= ' xml:lang="'.texte_backend($article['lang']).'"';
$u .= '>
<title>'.texte_backend($article['title']).'</title>
<id>'.texte_backend(url_absolue($article['url'])).'</id>
<link rel="alternate" type="text/html" href="'.texte_backend(url_absolue($article['url'])).'"/>
<published>'.date_iso($article['date']).'</published>
<updated>'.date_iso($article['date']).'</updated>';
if ($article['author']) {
$u .= '
<author><name>'.texte_backend($article['author']).'</name>';
if ($article['email'])
$u .= '<email>'.texte_backend($article['email']).'</email>';
$u .= '</author>';
}
$u .='
<summary type="html">'.texte_backend(liens_absolus($article['description'])).'</summary>
</entry>
';
}
}
// pied
$u .= '
</feed>
';
header('Content-Type: text/xml; charset='.$GLOBALS['meta']['charset']);
echo $u;
}
?>
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2006 *
* 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. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/minipres');
include_spip('inc/acces');
include_spip('inc/texte'); // utile pour l'espace public, deja fait sinon
function xml_ical_dist($rss, $intro = '') {
// entetes
$u =
'BEGIN:VCALENDAR
CALSCALE:GREGORIAN
X-WR-CALNAME;VALUE=TEXT:'.filtrer_ical($intro['title']).'
X-WR-RELCALID:'.filtrer_ical(url_absolue($intro['url'])).'
';
// elements
if (is_array($rss)) {
usort($rss, 'trier_par_date');
foreach ($rss as $article) {
// Regler la date de fin a h+60min
if (!$article['enddate'])
$article['enddate'] = date_ical($article['date'],60);
else
$article['enddate'] = date_ical($article['enddate']);
// Type d'evenement
if ($article['type'] == 'todo')
$type = 'VTODO';
else
$type = 'VEVENT';
$u .=
'BEGIN:'.$type.'
SUMMARY:'.filtrer_ical($article['title']).'
URL:'.filtrer_ical(url_absolue($article['url'])).'
DTSTAMP:'. date_ical($article['date']).'
DTSTART:'. date_ical($article['date']).'
DTEND:'. $article['enddate'].'
DESCRIPTION:'.filtrer_ical(liens_absolus($article['description'])).'
ORGANIZER:'.filtrer_ical($article['author']).'
CATEGORIES:--
END:'.$type.'
';
}
}
// pied
$u .= 'END:VCALENDAR';
header('Content-Type: text/calendar; charset=utf-8');
echo $u;
}
?>
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2006 *
* 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. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/minipres');
include_spip('inc/acces');
include_spip('inc/texte'); // utile pour l'espace public, deja fait sinon
function xml_rss_dist($rss, $intro = '') {
// entetes
$u = '<'.'?xml version="1.0" encoding="'.$GLOBALS['meta']['charset'].'"?'.">\n";
$u .= '
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>'.texte_backend($intro['title']).'</title>
<link>'.texte_backend(url_absolue($intro['url'])).'</link>
<description>'.texte_backend($intro['description']).'</description>
<language>'.texte_backend($intro['language']).'</language>
';
// elements
if (is_array($rss)) {
usort($rss, 'trier_par_date');
foreach ($rss as $article) {
$u .= '
<item>
<title>'.texte_backend($article['title']).'</title>
<link>'.texte_backend(url_absolue($article['url'])).'</link>
<guid isPermaLink="true">'.texte_backend(url_absolue($article['url'])).'</guid>
<dc:date>'.date_iso($article['date']).'</dc:date>
<dc:format>text/html</dc:format>';
if ($article['lang']) $u .= '
<dc:language>'.texte_backend($article['lang']).'</dc:language>';
if ($article['author']) {
if ($article['email'])
$article['author'].=' <'.$article['email'].'>';
$u .= '
<dc:creator>'.texte_backend($article['author']).'</dc:creator>';
}
$u .= '
<description>'.texte_backend(liens_absolus($article['description'])).'</description>
</item>
';
}
}
// pied
$u .= '
</channel>
</rss>
';
header('Content-Type: text/xml; charset='.$GLOBALS['meta']['charset']);
echo $u;
}
?>
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter