Skip to content
Extraits de code Groupes Projets
Valider dbb7f981 rédigé par Fil's avatar Fil
Parcourir les fichiers

syndication d'un feed sans link (ou contenant plusieurs fois le meme link) ;...

syndication d'un feed sans link (ou contenant plusieurs fois le meme link) ; on se base alors sur le titre comme cle de syndication
+ quelques globales #877
parent c17b96bf
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -22,9 +22,10 @@ function exec_sites_dist() ...@@ -22,9 +22,10 @@ function exec_sites_dist()
{ {
global $spip_lang_left, $spip_lang_right, $spip_display; global $spip_lang_left, $spip_lang_right, $spip_display;
global $cherche_mot, $select_groupe, $id_syndic; $cherche_mot = _request('cherche_mot');
$select_groupe = _request('select_groupe');
$id_syndic = intval(_request('id_syndic'));
$id_syndic = intval($id_syndic);
$commencer_page = charger_fonction('commencer_page', 'inc'); $commencer_page = charger_fonction('commencer_page', 'inc');
if (!autoriser('voir','site',$id_syndic)){ if (!autoriser('voir','site',$id_syndic)){
echo $commencer_page("$titre_page","naviguer","sites", $id_rubrique); echo $commencer_page("$titre_page","naviguer","sites", $id_rubrique);
......
...@@ -126,8 +126,11 @@ function afficher_titre_syndic_article($row){ ...@@ -126,8 +126,11 @@ function afficher_titre_syndic_article($row){
$lesauteurs=typo($row["lesauteurs"]); $lesauteurs=typo($row["lesauteurs"]);
$statut=$row["statut"]; $statut=$row["statut"];
$descriptif=safehtml($row["descriptif"]); $descriptif=safehtml($row["descriptif"]);
$s = "<a href='$url'>$titre</a>"; if ($url)
$s = "<a href='$url'>$titre</a>";
else
$s = $titre;
$date = affdate_court($date); $date = affdate_court($date);
if (strlen($lesauteurs) > 0) $date = $lesauteurs.', '.$date; if (strlen($lesauteurs) > 0) $date = $lesauteurs.', '.$date;
......
...@@ -377,16 +377,35 @@ function analyser_backend($rss, $url_syndic='') { ...@@ -377,16 +377,35 @@ function analyser_backend($rss, $url_syndic='') {
// Insere un article syndique (renvoie true si l'article est nouveau) // Insere un article syndique (renvoie true si l'article est nouveau)
// //
// http://doc.spip.org/@inserer_article_syndique // http://doc.spip.org/@inserer_article_syndique
function inserer_article_syndique ($data, $now_id_syndic, $statut, $url_site, $url_syndic, $resume, $documents) { function inserer_article_syndique ($data, $now_id_syndic, $statut, $url_site, $url_syndic, $resume, $documents, &$faits) {
// Creer le lien s'il est nouveau - cle=(id_syndic,url) // Creer le lien s'il est nouveau - cle=(id_syndic,url)
// On coupe a 255 caracteres pour eviter tout doublon sur une URL de plus de 255 qui // On coupe a 255 caracteres pour eviter tout doublon
// exloserait la base de donnees // sur une URL de plus de 255 qui exloserait la base de donnees
$le_lien = substr($data['url'], 0,255); $le_lien = substr($data['url'], 0,255);
$s = spip_query("SELECT * FROM spip_syndic_articles WHERE url=" . _q($le_lien) . " AND id_syndic=$now_id_syndic ORDER BY maj LIMIT 0,1"); // Chercher les liens de meme cle
if ($a = spip_fetch_array($s)) { $s = spip_query("SELECT id_syndic_article,titre FROM spip_syndic_articles WHERE url=" . _q($le_lien) . " AND id_syndic=$now_id_syndic ORDER BY maj DESC");
// S'il y a plusieurs liens qui repondent, il faut choisir le plus proche
// (ie meme titre et pas deja fait), le mettre a jour et ignorer les autres
if (spip_num_rows($s) > 1) {
while ($a = spip_fetch_array($s))
if ($a['titre'] == $data['titre']
AND !in_array($a['id_syndic_article'], $faits)) {
$id_syndic_article = $a['id_syndic_article'];
break;
}
}
// Sinon, s'il y en a un, on verifie qu'on ne vient pas de l'ecrire avec
// un autre item du meme feed qui aurait le meme link
else if ($a = spip_fetch_array($s)
AND !in_array($a['id_syndic_article'], $faits)) {
$id_syndic_article = $a['id_syndic_article']; $id_syndic_article = $a['id_syndic_article'];
} else { }
// Si l'article n'existe pas, on le cree
if (!isset($id_syndic_article)) {
if (spip_sql_error()) { if (spip_sql_error()) {
return; return;
} else { } else {
...@@ -395,6 +414,7 @@ function inserer_article_syndique ($data, $now_id_syndic, $statut, $url_site, $u ...@@ -395,6 +414,7 @@ function inserer_article_syndique ($data, $now_id_syndic, $statut, $url_site, $u
$ajout = true; $ajout = true;
} }
} }
$faits[] = $id_syndic_article;
// Descriptif, en mode resume ou mode 'full text' // Descriptif, en mode resume ou mode 'full text'
// on prend en priorite data['descriptif'] si on est en mode resume, // on prend en priorite data['descriptif'] si on est en mode resume,
...@@ -482,22 +502,22 @@ function syndic_a_jour($now_id_syndic, $statut = 'off') { ...@@ -482,22 +502,22 @@ function syndic_a_jour($now_id_syndic, $statut = 'off') {
// Les enregistrer dans la base // Les enregistrer dans la base
if (is_array($articles)) { if (is_array($articles)) {
$urls = array(); $urls = array();
$faits = array();
foreach ($articles as $data) { foreach ($articles as $data) {
inserer_article_syndique ($data, $now_id_syndic, $moderation, $url_site, $url_syndic, $row['resume'], $row['documents']); inserer_article_syndique ($data, $now_id_syndic, $moderation, $url_site, $url_syndic, $row['resume'], $row['documents'], $faits);
$urls[] = $data['url'];
} }
// moderation automatique des liens qui sont sortis du feed // moderation automatique des liens qui sont sortis du feed
if (count($urls) > 0 if (count($faits) > 0
AND $row['miroir'] == 'oui') { AND $row['miroir'] == 'oui') {
spip_query("UPDATE spip_syndic_articles SET statut='off', maj=maj WHERE id_syndic=$now_id_syndic AND NOT (url IN (" . join(",", array_map('_q',$urls)) . "))"); spip_query("UPDATE spip_syndic_articles SET statut='off', maj=maj WHERE id_syndic=$now_id_syndic AND NOT (id_syndic_article IN (" . join(",", $faits) . "))");
} }
// suppression apres 2 mois des liens qui sont sortis du feed // suppression apres 2 mois des liens qui sont sortis du feed
if (count($urls) > 0 if (count($faits) > 0
AND $row['oubli'] == 'oui') { AND $row['oubli'] == 'oui') {
$time = date('U') - 61*24*3600; # deux mois $time = date('U') - 61*24*3600; # deux mois
spip_query("DELETE FROM spip_syndic_articles WHERE id_syndic=$now_id_syndic AND UNIX_TIMESTAMP(maj) < $time AND UNIX_TIMESTAMP(date) < $time AND NOT (url IN (" . join(",", array_map('_q',$urls)) . "))"); spip_query("DELETE FROM spip_syndic_articles WHERE id_syndic=$now_id_syndic AND UNIX_TIMESTAMP(maj) < $time AND UNIX_TIMESTAMP(date) < $time AND NOT (id_syndic_article IN (" . join(",", $faits) . "))");
} }
......
...@@ -56,8 +56,8 @@ if (defined('_INC_PUBLIC')) { ...@@ -56,8 +56,8 @@ if (defined('_INC_PUBLIC')) {
include_spip('inc/headers'); include_spip('inc/headers');
$var_f = charger_fonction($action, 'action'); $var_f = charger_fonction($action, 'action');
$var_f(); $var_f();
if (isset($redirect) && $redirect) if (_request('redirect'))
redirige_par_entete(urldecode($redirect)); redirige_par_entete(urldecode(_request('redirect')));
if (!headers_sent()) if (!headers_sent())
http_status(204); // No Content http_status(204); // No Content
exit; exit;
......
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