diff --git a/ecrire/exec/sites.php b/ecrire/exec/sites.php index bb35fa7338bfb0531400bc7c84e1f22dbe92d950..a41c626f5d199b58c33e2ba3632b88e356c5b8d0 100644 --- a/ecrire/exec/sites.php +++ b/ecrire/exec/sites.php @@ -22,9 +22,10 @@ function exec_sites_dist() { 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'); if (!autoriser('voir','site',$id_syndic)){ echo $commencer_page("$titre_page","naviguer","sites", $id_rubrique); diff --git a/ecrire/inc/afficher_objets.php b/ecrire/inc/afficher_objets.php index d2cb225c7e2fa79df0a050be6b92e67b44c0b584..f6c51d22eb400713d46a13eaec5f58d8d8ba2aad 100644 --- a/ecrire/inc/afficher_objets.php +++ b/ecrire/inc/afficher_objets.php @@ -126,8 +126,11 @@ function afficher_titre_syndic_article($row){ $lesauteurs=typo($row["lesauteurs"]); $statut=$row["statut"]; $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); if (strlen($lesauteurs) > 0) $date = $lesauteurs.', '.$date; diff --git a/ecrire/inc/syndic.php b/ecrire/inc/syndic.php index 1c7800525b37f144cfe9b11f8cd3cae4d234fe2d..0baa818882bf75c43b7c59e458382615dbe84658 100644 --- a/ecrire/inc/syndic.php +++ b/ecrire/inc/syndic.php @@ -377,16 +377,35 @@ function analyser_backend($rss, $url_syndic='') { // Insere un article syndique (renvoie true si l'article est nouveau) // // 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) - // On coupe a 255 caracteres pour eviter tout doublon sur une URL de plus de 255 qui - // exloserait la base de donnees + // On coupe a 255 caracteres pour eviter tout doublon + // sur une URL de plus de 255 qui exloserait la base de donnees $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"); - if ($a = spip_fetch_array($s)) { + // Chercher les liens de meme cle + $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']; - } else { + } + + // Si l'article n'existe pas, on le cree + if (!isset($id_syndic_article)) { if (spip_sql_error()) { return; } else { @@ -395,6 +414,7 @@ function inserer_article_syndique ($data, $now_id_syndic, $statut, $url_site, $u $ajout = true; } } + $faits[] = $id_syndic_article; // Descriptif, en mode resume ou mode 'full text' // 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') { // Les enregistrer dans la base if (is_array($articles)) { $urls = array(); + $faits = array(); foreach ($articles as $data) { - inserer_article_syndique ($data, $now_id_syndic, $moderation, $url_site, $url_syndic, $row['resume'], $row['documents']); - $urls[] = $data['url']; + inserer_article_syndique ($data, $now_id_syndic, $moderation, $url_site, $url_syndic, $row['resume'], $row['documents'], $faits); } // moderation automatique des liens qui sont sortis du feed - if (count($urls) > 0 + if (count($faits) > 0 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 - if (count($urls) > 0 + if (count($faits) > 0 AND $row['oubli'] == 'oui') { $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) . "))"); } diff --git a/ecrire/public.php b/ecrire/public.php index 8964516dba0aac1abbc0fa271972c84538fac58a..c6c7353f1cf1517b5fe7522d74473626300a5c87 100644 --- a/ecrire/public.php +++ b/ecrire/public.php @@ -56,8 +56,8 @@ if (defined('_INC_PUBLIC')) { include_spip('inc/headers'); $var_f = charger_fonction($action, 'action'); $var_f(); - if (isset($redirect) && $redirect) - redirige_par_entete(urldecode($redirect)); + if (_request('redirect')) + redirige_par_entete(urldecode(_request('redirect'))); if (!headers_sent()) http_status(204); // No Content exit;