From e2351924cbb42f30ab4e366548b0d68988c87ed6 Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Mon, 10 Oct 2005 22:08:58 +0000 Subject: [PATCH] syndication "full-html" --- dist/site.html | 2 +- ecrire/inc_filtres.php3 | 5 +++ ecrire/inc_majbase.php3 | 9 +++++ ecrire/inc_serialbase.php3 | 6 ++-- ecrire/inc_sites.php3 | 69 ++++++++++++++++++++++++-------------- ecrire/inc_version.php3 | 2 +- ecrire/sites.php3 | 29 +++++++++++++++- 7 files changed, 92 insertions(+), 30 deletions(-) diff --git a/dist/site.html b/dist/site.html index 97a03aab45..a6f3fc84d9 100644 --- a/dist/site.html +++ b/dist/site.html @@ -70,7 +70,7 @@ <div class="liste-articles"> <BOUCLE_articles(SYNDIC_ARTICLES) {id_syndic} {par date}{inverse}{0,10}> - <h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|textebrut|entites_html)"]>#TITRE</a></h2> + <h2><a href="#URL_ARTICLE" [title="(#DESCRIPTIF|couper{400}|textebrut|entites_html)"]>#TITRE</a></h2> <div class="detail"> [(#DATE|nom_jour)] [(#DATE|affdate)] </div> diff --git a/ecrire/inc_filtres.php3 b/ecrire/inc_filtres.php3 index 0c42832090..dc79218ed9 100644 --- a/ecrire/inc_filtres.php3 +++ b/ecrire/inc_filtres.php3 @@ -127,6 +127,11 @@ function texte_backend($texte) { return $texte; } +// Encode du HTML pour transmission XML +function html_backend($texte) { + return texte_backend(str_replace('&', '&', liens_absolus($texte))); +} + // Enleve le numero des titres numerotes ("1. Titre" -> "Titre") function supprimer_numero($texte) { $texte = preg_replace(",^[[:space:]]*[0-9]+[.)".chr(176)."][[:space:]]+,", "", $texte); diff --git a/ecrire/inc_majbase.php3 b/ecrire/inc_majbase.php3 index afb5133b5c..47e43f6b6b 100644 --- a/ecrire/inc_majbase.php3 +++ b/ecrire/inc_majbase.php3 @@ -1054,6 +1054,15 @@ function maj_base() { maj_version(1.826); } + // Syndication : ajout de l'option resume=oui/non et de la langue + if ($version_installee < 1.901) { + spip_query("ALTER TABLE spip_syndic + ADD resume VARCHAR(3) DEFAULT 'oui'"); + spip_query("ALTER TABLE spip_syndic_articles + ADD lang VARCHAR(10) DEFAULT '' NOT NULL"); + maj_version(1.901); + } + return true; } diff --git a/ecrire/inc_serialbase.php3 b/ecrire/inc_serialbase.php3 index 553eb37dc0..cdf3dea878 100644 --- a/ecrire/inc_serialbase.php3 +++ b/ecrire/inc_serialbase.php3 @@ -253,7 +253,8 @@ $spip_syndic = array( "extra" => "longblob NULL", "moderation" => "VARCHAR(3) DEFAULT 'non'", "miroir" => "VARCHAR(3) DEFAULT 'non'", - "oubli" => "VARCHAR(3) DEFAULT 'non'" + "oubli" => "VARCHAR(3) DEFAULT 'non'", + "resume" => "VARCHAR(3) DEFAULT 'oui'" ); $spip_syndic_key = array( @@ -272,7 +273,8 @@ $spip_syndic_articles = array( "lesauteurs" => "text NOT NULL", "maj" => "TIMESTAMP", "statut" => "VARCHAR(10) NOT NULL", - "descriptif" => "blob NOT NULL"); + "descriptif" => "blob NOT NULL", + "lang" => "VARCHAR(10) DEFAULT '' NOT NULL"); $spip_syndic_articles_key = array( "PRIMARY KEY" => "id_syndic_article", diff --git a/ecrire/inc_sites.php3 b/ecrire/inc_sites.php3 index 6143865d14..71a3a7a9c0 100644 --- a/ecrire/inc_sites.php3 +++ b/ecrire/inc_sites.php3 @@ -338,11 +338,11 @@ function analyser_site($url) { } // Inserer les references aux fichiers joints -function traiter_les_enclosures_rss($enclosures,$id_syndic,$lelien) { +function traiter_les_enclosures_rss($enclosures,$id_syndic,$le_lien) { list($id_syndic_article) = spip_fetch_array(spip_query( "SELECT id_syndic_article FROM spip_syndic_articles - WHERE id_syndic=$id_syndic AND url='$lelien'")); + WHERE id_syndic=$id_syndic AND url='".addslashes($le_lien)."'")); // Attention si cet article est deja vu, ne pas doubler les references spip_query("DELETE FROM spip_documents_syndic @@ -357,7 +357,7 @@ function traiter_les_enclosures_rss($enclosures,$id_syndic,$lelien) { $enclosure, $enc_regs_type)) { $url = substr(urldecode($enc_regs_url[1]), 0,255); - $url = addslashes(abs_url($url, $lelien)); + $url = addslashes(abs_url($url, $le_lien)); $type = $enc_regs_type[1]; // Verifier que le content-type nous convient @@ -550,21 +550,19 @@ function analyser_backend($rss) { $data['lesauteurs'] = $match[1]; else $data['lesauteurs'] = $les_auteurs_du_site; + // Description if (preg_match($syndic_regexp['description'],$item,$match)) { $data['descriptif'] = $match[1]; } - else if (preg_match($syndic_regexp['descriptionbis'],$item,$match)) - $data['descriptif'] = $match[1]; - else - $data['descriptif'] = ""; + if (preg_match($syndic_regexp['descriptionbis'],$item,$match)) + $data['content'] = $match[1]; // Nettoyer les donnees et remettre les CDATA en place foreach ($data as $var => $val) { $data[$var] = filtrer_entites($data[$var]); foreach ($echappe_cdata as $n => $e) $data[$var] = str_replace("@@@SPIP_CDATA$n@@@",$e, $data[$var]); - $data[$var] = trim(textebrut($data[$var])); } // Honorer le <lastbuilddate> en forcant la date @@ -594,44 +592,55 @@ function analyser_backend($rss) { // // Insere un article syndique (renvoie true si l'article est nouveau) // -function inserer_article_syndique ($data, $now_id_syndic, $statut, $url_site) { +function inserer_article_syndique ($data, $now_id_syndic, $statut, $url_site, $resume) { // Creer le lien s'il est nouveau - cle=(id_syndic,url) - $le_lien = addslashes(substr($data['url'], 0,255)); + $le_lien = substr($data['url'], 0,255); if (spip_num_rows(spip_query( "SELECT * FROM spip_syndic_articles - WHERE url='$le_lien' + WHERE url='".addslashes($le_lien)."' AND id_syndic=$now_id_syndic" )) == 0 and !spip_sql_error()) { spip_query("INSERT INTO spip_syndic_articles (id_syndic, url, date, statut) VALUES - ('$now_id_syndic', '$le_lien', + ('$now_id_syndic', '".addslashes($le_lien)."', FROM_UNIXTIME(".$data['date']."), '$statut')"); $ajout = true; } - // Nettoyer le descriptif par une fonction personnalisee ? - if (function_exists('nettoyer_descriptif_syndication')) { - $data['descriptif'] = nettoyer_descriptif_syndication( - $data['descriptif'], $now_id_syndic, $url_site - ); + // Descriptif, en mode resume ou mode 'full text' + // on prend en priorite data['descriptif'] si on est en mode resume, + // et data['content'] si on est en mode "full syndication" + if ($resume != 'non') { + // mode "resume" + $desc = strlen($data['descriptif']) ? + $data['descriptif'] : $data['content']; + $desc = couper(trim(textebrut($desc)), 300); } else { - // fonction standard - $data['descriptif'] = couper($data['descriptif'], 300); + // mode "full syndication" + // 1. choisir le contenu pertinent + $desc = strlen($data['content']) ? + $data['content'] : $data['descriptif']; + // 2. refaire les liens relatifs + $desc = liens_absolus($desc, $le_lien); + // 3. securiser (XSS et XHTML) + $desc = safehtml($desc); + // 4. eviter propre() + if (strlen($desc)) $desc = "<html>$desc</html>"; } // Mise a jour du contenu (titre,auteurs,description) spip_query ("UPDATE spip_syndic_articles SET titre='".addslashes($data['titre'])."', lesauteurs='".addslashes($data['lesauteurs'])."', - descriptif='".addslashes($data['descriptif'])."' - WHERE id_syndic='$now_id_syndic' AND url='$le_lien'"); + descriptif='".addslashes($desc)."' + WHERE id_syndic='$now_id_syndic' AND url='".addslashes($le_lien)."'"); // Mettre a jour la date si lastbuilddate if ($data['lastbuilddate']) spip_query("UPDATE spip_syndic_articles SET date = FROM_UNIXTIME(".$data['lastbuilddate'].") - WHERE id_syndic='$now_id_syndic' AND url='$le_lien'"); + WHERE id_syndic='$now_id_syndic' AND url='".addslashes($le_lien)."'"); // Inserer les enclosures if ($data['enclosures']) { @@ -683,7 +692,7 @@ function syndic_a_jour($now_id_syndic, $statut = 'off') { $urls = array(); foreach ($articles as $data) { if ($data['url']) { - inserer_article_syndique ($data, $now_id_syndic, $moderation, $url_site); + inserer_article_syndique ($data, $now_id_syndic, $moderation, $url_site, $row['resume']); $urls[] = $data['url']; } } @@ -1033,13 +1042,23 @@ function executer_une_syndication() { // On va tenter un site 'sus' ou 'off' de plus de 24h, et le passer en 'off' // s'il echoue - if ($row = spip_fetch_array(spip_query("SELECT * FROM spip_syndic WHERE syndication IN ('sus','off') AND statut='publie' AND date_syndic < DATE_SUB(NOW(), INTERVAL 24 HOUR) ORDER BY date_syndic LIMIT 1"))) { + $s = spip_query("SELECT * FROM spip_syndic + WHERE syndication IN ('sus','off') + AND statut='publie' + AND date_syndic < DATE_SUB(NOW(), INTERVAL 24 HOUR) + ORDER BY date_syndic LIMIT 1"); + if ($row = spip_fetch_array($s)) { $id_syndic = $row["id_syndic"]; syndic_a_jour($id_syndic, 'off'); } // Et un site 'oui' de plus de 2 heures, qui passe en 'sus' s'il echoue - if ($row = spip_fetch_array(spip_query("SELECT * FROM spip_syndic WHERE syndication='oui' AND statut='publie' AND date_syndic < DATE_SUB(NOW(), INTERVAL 2 HOUR) ORDER BY date_syndic LIMIT 1"))) { + $s = spip_query("SELECT * FROM spip_syndic + WHERE syndication='oui' + AND statut='publie' + AND date_syndic < DATE_SUB(NOW(), INTERVAL 2 HOUR) + ORDER BY date_syndic LIMIT 1"); + if ($row = spip_fetch_array($s)) { $id_syndic = $row["id_syndic"]; syndic_a_jour($id_syndic, 'sus'); } diff --git a/ecrire/inc_version.php3 b/ecrire/inc_version.php3 index 93916a508d..0d33a4cec1 100644 --- a/ecrire/inc_version.php3 +++ b/ecrire/inc_version.php3 @@ -379,7 +379,7 @@ define_once('_AUTH_USER_FILE', '.htpasswd'); // (utilise pour les modifs de la base de donnees) // version de la base -$spip_version = 1.826; +$spip_version = 1.901; // version de spip $spip_version_affichee = "1.9 alpha"; diff --git a/ecrire/sites.php3 b/ecrire/sites.php3 index 4d056ce127..f8c83b31a3 100644 --- a/ecrire/sites.php3 +++ b/ecrire/sites.php3 @@ -139,7 +139,8 @@ if (strval($nom_site)!='' AND $modifier_site == 'oui' AND $flag_editable) { descriptif='$descriptif', syndication='$syndication', statut='$statut' $add_extra WHERE id_syndic=$id_syndic"); - if ($syndication_old != $syndication OR $url_syndic != $old_syndic) + if ($syndication_old != $syndication + OR $url_syndic != $old_syndic) $reload = "oui"; if ($syndication_old != $syndication AND $syndication == "non") @@ -182,6 +183,15 @@ if ($redirect AND $redirect_ok == 'oui') { redirige_par_entete($redirect); } +// Appliquer le choix resume/fulltexte (necessite un reload) +if ($flag_editable AND ($resume == 'oui' OR $resume == 'non')) { + list($old_resume) = spip_fetch_array(spip_query( + "SELECT resume FROM spip_syndic WHERE id_syndic=$id_syndic")); + if ($old_resume <> $resume) $reload = 'oui'; + spip_query("UPDATE spip_syndic SET resume='$resume' + WHERE id_syndic=$id_syndic"); +} + // // reload @@ -449,6 +459,23 @@ if ($syndication == "oui" OR $syndication == "off" OR $syndication == "sus") { echo "</ul>\n"; + + // Prendre les resumes ou le texte integral ? + # appliquer les choix + if ($resume == 'oui' OR $resume == 'non') + spip_query("UPDATE spip_syndic SET resume='$resume' + WHERE id_syndic=$id_syndic"); + if (!$resume AND !$resume = $row['resume']) $resume = 'oui'; + echo "<p><div align='$spip_lang_left'>" + . _T('syndic_choix_resume') . "<br />\n"; + afficher_choix('resume', $resume, + array( + 'oui' => _T('syndic_option_resume_oui'), + 'non' => _T('syndic_option_resume_non') + )); + echo "</li>\n"; + + // Bouton "Valider" echo "<div style='text-align:$spip_lang_right'><INPUT TYPE='submit' NAME='Valider' VALUE='"._T('bouton_valider')."' CLASS='fondo'></div>"; -- GitLab