Compare commits

...

44 Commits
master ... 3.0

Author SHA1 Message Date
spip.franck@lien-d-amis.net 5a8c5e5c6a Bonne année spip 3.0 4 years ago
spip.franck@lien-d-amis.net e5396749ef Bonne année aussi aux plugins-dist :-D 5 years ago
spip.franck@lien-d-amis.net fed401d4c5 trad.spip est maintenant en https, donc j'ajoute le "s" à http 6 years ago
spip.franck@lien-d-amis.net 38c0a5149f contrib.spip est maintenant en https, donc, j'ajoute le "s" à http 6 years ago
spip.franck@lien-d-amis.net 50ce35c7b6 code.spip est maintenant en https, donc j'ajoute le "s" à http 6 years ago
cedric@yterium.com 34b3e0fb1f Certains flux RSS publient l'integralite de leur contenus (par exemple http://www.lelotenaction.org/pages/do/rss.xml) ce qui produit inevitablement un timeout lors de l'analyse et de la syndication. 7 years ago
denisb@a-working-class-hero-is-something-to.be 9038715e65 bonne année. 7 years ago
cedric@yterium.com c2753631a3 version 7 years ago
cedric@yterium.com 6d790612e5 passer l'action 'syndiquer' a objet_modifier_champs 7 years ago
cedric@yterium.com d2f97a6483 utiliser objet_modifier_champs plutot que sql_updateq, cela permet de passer par les pipelines pre/post edition 7 years ago
cedric@yterium.com a22489e6a0 Un hreflang sur les articles syndiques qui ne sont pas dans la langue courante 7 years ago
cedric@yterium.com 72821c6b3f quand syndication=non mais qu'il y a des articles, afficher la liste en plus du bouton pour purger, car sinon on ne sait pas ce qu'on purge 7 years ago
cedric@yterium.com 6a11dd1f7b On etend la prise en charge de _SYNDICATION_DEREFERENCER_URL a tout flux en verifiant que les URLs syndiquees ne sont pas des redirections, et en recuperant l'URL finale le cas echeant 7 years ago
cedric@yterium.com b01c26b630 Robustesse de la detection du titre qui pouichait quand la balise title etait sur plusieurs lignes (contexte.com) 7 years ago
marcimat@rezo.net 2bbce7e880 Report de r92728: Il manquait le préfixe sur l'appel d'une chaine de langue. 7 years ago
brunobergot@gmail.com 34246c6fc5 report de r92522 : éviter une erreur PHP Strict Standards: Only variables should be passed by reference (Eric Camus) 7 years ago
cedric@yterium.com a144140467 ne pas syndiquer un site en refuse 8 years ago
spip.franck@lien-d-amis.net 5805f7eac7 Evitons une redirection, ce n'est plus http://doc.spip.org mais http://code.spip.net 8 years ago
brunobergot@gmail.com 9e62230ecc revert de r88815 : plus de reports de langues de la 3.1 vers la 3.0 8 years ago
ben.spip@gmail.com ea319e3afc Report de lang avant 3.0.18 ~/svn/spip-zone/_outils_/CReportLangTrunk30.ksh 8 years ago
cedric@yterium.com 47fcd8c6e4 Tester l'existence du flag exist ET sa valeur 8 years ago
spip.franck@lien-d-amis.net e4e8d5b5ec Ce n'est plus spip-contrib.mais contrib.spip 9 years ago
taffit@debian.org 72714e632d Suppression de profils ICC inutiles 9 years ago
cedric@yterium.com 78bda51461 nettoyer nom_site et descriptif avec filtrer_entites() 9 years ago
cedric@yterium.com 7945451ddc Revert de r80130 qui introduit des incompatibilites (chaines de langue supprimees) 9 years ago
ben.spip@gmail.com a0d0e5f53c report de langues 9 years ago
brunobergot@gmail.com 87dc9ae7af Version 1.7.12 : report de r79820 r79821 et r79822 pour réparer la syndication des flux ATOM dont la balise link est vide 9 years ago
denisb@a-working-class-hero-is-something-to.be 05d861b585 feliĉan novan jaron 2014 ! 9 years ago
suske@brubel.net 9aab5cd507 report de z79345 - prive/rss/a_suivre-breves.html et prive/rss/a_suivre-sites.html pour le fil rss "A suivre" de l'accueil de SPIP + increment de version - complément à 21050 à 21052 9 years ago
cedric@yterium.com e5b730c3d3 - bugfix : la detection de flux echouait si la balise dans la balise <link on avait un retour ligne au lieu d'un espace (compression HTML) : on utilise la fonction standard extraire_balises 9 years ago
ben.spip@gmail.com 5a08aabf52 langues 9 years ago
brunobergot@gmail.com e877cb548b Version 1.7.9 : report de r77830 / ferme http://core.spip.org/issues/3079 / afficher le bouton "Effacer tous les articles syndiqués" même si la syndication est désactivé 9 years ago
suske@brubel.net 5b2da28d0e préparons 3.0.11 - report des langues des plugins-dist 10 years ago
cedric@yterium.com 0e957b33c7 http://core.spip.org/issues/2889 : 10 years ago
kent1@arscenic.info 376f1a073b Report de z72204 10 years ago
ben.spip@gmail.com 79691fe031 report de langues Pre 3.0.8 10 years ago
kent1@arscenic.info 1736c56bc9 Report de r71392 10 years ago
ben.spip@gmail.com b70c23665d lang des plugins 10 years ago
marcimat@rezo.net b50ad28e24 Report de r70316 : Fermer http://core.spip.org/issues/2941 : Prendre en compte les documents attachés qu'ils soient via enclosure, media:content ou les deux 10 years ago
jack@lmpe.fr 3148e5a9d2 On est en 2013 (suite) 10 years ago
jack@lmpe.fr 05ea196ee1 On est en 2013 ! 10 years ago
guy.cesaro@gmail.com bca42902e3 oups (cerdic) 10 years ago
guy.cesaro@gmail.com fe3b4fb1ff report de r69026 dans cette branche aussi 10 years ago
cedric@yterium.com 5ac7d22c12 le trunk se mets en 4 pour SPIP 11 years ago
  1. 7
      .gitattributes
  2. 8
      action/editer_site.php
  3. 2
      action/exporter_bookmarks.php
  4. 2
      action/importer_bookmarks_netscape.php
  5. 4
      action/instituer_syndic_article.php
  6. 2
      action/purger_site.php
  7. 4
      action/syndiquer_site.php
  8. 6
      balise/formulaire_site.php
  9. 2
      base/sites.php
  10. 2
      formulaires/configurer_sites.php
  11. 2
      formulaires/editer_site.php
  12. 2
      formulaires/editer_site_fonctions.php
  13. 2
      formulaires/exporter_sites.php
  14. 2
      formulaires/importer_sites.php
  15. 2
      formulaires/regler_moderation_site.php
  16. 2
      formulaires/site.php
  17. 17
      genie/syndic.php
  18. 211
      inc/feedfinder.php
  19. 19
      inc/site.php
  20. 143
      inc/syndic.php
  21. 53
      lang/paquet-sites.xml
  22. 2
      lang/paquet-sites_ar.php
  23. 2
      lang/paquet-sites_de.php
  24. 2
      lang/paquet-sites_en.php
  25. 2
      lang/paquet-sites_es.php
  26. 2
      lang/paquet-sites_fa.php
  27. 15
      lang/paquet-sites_fr_fem.php
  28. 2
      lang/paquet-sites_it.php
  29. 15
      lang/paquet-sites_lb.php
  30. 15
      lang/paquet-sites_nl.php
  31. 15
      lang/paquet-sites_pt.php
  32. 2
      lang/paquet-sites_pt_br.php
  33. 2
      lang/paquet-sites_ru.php
  34. 2
      lang/paquet-sites_sk.php
  35. 202
      lang/sites.xml
  36. 2
      lang/sites_ar.php
  37. 81
      lang/sites_ast.php
  38. 138
      lang/sites_ay.php
  39. 54
      lang/sites_bg.php
  40. 153
      lang/sites_br.php
  41. 54
      lang/sites_bs.php
  42. 75
      lang/sites_ca.php
  43. 83
      lang/sites_co.php
  44. 76
      lang/sites_cpf.php
  45. 59
      lang/sites_cpf_hat.php
  46. 54
      lang/sites_cs.php
  47. 66
      lang/sites_da.php
  48. 2
      lang/sites_de.php
  49. 4
      lang/sites_en.php
  50. 68
      lang/sites_en_hx.php
  51. 66
      lang/sites_eo.php
  52. 113
      lang/sites_es.php
  53. 56
      lang/sites_eu.php
  54. 2
      lang/sites_fa.php
  55. 107
      lang/sites_fi.php
  56. 68
      lang/sites_fon.php
  57. 30
      lang/sites_fr.php
  58. 152
      lang/sites_fr_fem.php
  59. 86
      lang/sites_fr_tu.php
  60. 53
      lang/sites_gl.php
  61. 137
      lang/sites_hac.php
  62. 108
      lang/sites_he.php
  63. 54
      lang/sites_hu.php
  64. 56
      lang/sites_id.php
  65. 148
      lang/sites_is.php
  66. 12
      lang/sites_it.php
  67. 67
      lang/sites_it_fem.php
  68. 54
      lang/sites_ja.php
  69. 54
      lang/sites_km.php
  70. 193
      lang/sites_lb.php
  71. 56
      lang/sites_my.php
  72. 110
      lang/sites_nl.php
  73. 151
      lang/sites_no.php
  74. 75
      lang/sites_oc_auv.php
  75. 105
      lang/sites_oc_gsc.php
  76. 69
      lang/sites_oc_lms.php
  77. 78
      lang/sites_oc_lnc.php
  78. 76
      lang/sites_oc_ni.php
  79. 77
      lang/sites_oc_ni_la.php
  80. 75
      lang/sites_oc_prv.php
  81. 75
      lang/sites_oc_va.php
  82. 56
      lang/sites_pl.php
  83. 151
      lang/sites_pt.php
  84. 53
      lang/sites_pt_br.php
  85. 53
      lang/sites_ro.php
  86. 225
      lang/sites_ru.php
  87. 10
      lang/sites_sk.php
  88. 73
      lang/sites_sv.php
  89. 55
      lang/sites_tr.php
  90. 57
      lang/sites_vi.php
  91. 66
      lang/sites_zh.php
  92. 2
      liens/implicite_site.php
  93. 8
      paquet.xml
  94. 5
      prive/objets/liste/syndic_articles.html
  95. 2
      prive/objets/liste/syndic_articles_fonctions.php
  96. 12
      prive/rss/a_suivre-sites.html
  97. 9
      prive/squelettes/contenu/site.html
  98. BIN
      prive/themes/spip/images/syndic-statut-dispo-24.png
  99. BIN
      prive/themes/spip/images/syndic-statut-off-24.png
  100. BIN
      prive/themes/spip/images/syndic-statut-publie-24.png
  101. Some files were not shown because too many files have changed in this diff Show More

7
.gitattributes vendored

@ -23,6 +23,7 @@ formulaires/site.php -text
genie/syndic.php -text
images/actions-24.png -text
images/actions-filigrane-24.png -text
inc/feedfinder.php -text
inc/site.php -text
inc/syndic.php -text
lang/paquet-sites.xml -text
@ -31,7 +32,11 @@ lang/paquet-sites_de.php -text
lang/paquet-sites_en.php -text
lang/paquet-sites_es.php -text
lang/paquet-sites_fa.php -text
lang/paquet-sites_fr_fem.php -text
lang/paquet-sites_it.php -text
lang/paquet-sites_lb.php -text
lang/paquet-sites_nl.php -text
lang/paquet-sites_pt.php -text
lang/paquet-sites_pt_br.php -text
lang/paquet-sites_ru.php -text
lang/paquet-sites_sk.php -text
@ -58,6 +63,7 @@ lang/sites_fa.php -text
lang/sites_fi.php -text
lang/sites_fon.php -text
lang/sites_fr.php -text
lang/sites_fr_fem.php -text
lang/sites_fr_tu.php -text
lang/sites_gl.php -text
lang/sites_hac.php -text
@ -101,6 +107,7 @@ prive/objets/liste/sites.html -text
prive/objets/liste/syndic.html -text
prive/objets/liste/syndic_articles.html -text
prive/objets/liste/syndic_articles_fonctions.php -text
prive/rss/a_suivre-sites.html -text
prive/squelettes/contenu/controler_syndication.html -text
prive/squelettes/contenu/site.html -text
prive/squelettes/contenu/site_edit.html -text

8
action/editer_site.php

@ -3,7 +3,7 @@
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2011 *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
@ -12,7 +12,7 @@
if (!defined("_ECRIRE_INC_VERSION")) return;
// http://doc.spip.org/@action_editer_site_dist
// https://code.spip.net/@action_editer_site_dist
function action_editer_site_dist($arg=null) {
if (is_null($arg)){
@ -42,7 +42,7 @@ function action_editer_site_dist($arg=null) {
/**
* Inserer un nouveau site en base
*
* http://doc.spip.org/@insert_syndic
* https://code.spip.net/@insert_syndic
*
* @param $id_rubrique
* @return bool
@ -164,7 +164,7 @@ function insert_syndic($id_rubrique) {
function syndic_set($id_syndic, $set=false) {
return site_modifier($id_syndic,$set);
}
// http://doc.spip.org/@revisions_sites
// https://code.spip.net/@revisions_sites
function revisions_sites($id_syndic, $set=false){
return site_modifier($id_syndic,$set);
}

2
action/exporter_bookmarks.php

@ -3,7 +3,7 @@
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2011 *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *

2
action/importer_bookmarks_netscape.php

@ -3,7 +3,7 @@
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2011 *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *

4
action/instituer_syndic_article.php

@ -3,7 +3,7 @@
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2011 *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
@ -12,7 +12,7 @@
if (!defined("_ECRIRE_INC_VERSION")) return;
// http://doc.spip.org/@action_instituer_syndic_article_dist
// https://code.spip.net/@action_instituer_syndic_article_dist
function action_instituer_syndic_article_dist() {
$securiser_action = charger_fonction('securiser_action', 'inc');

2
action/purger_site.php

@ -3,7 +3,7 @@
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2011 *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *

4
action/syndiquer_site.php

@ -3,7 +3,7 @@
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2011 *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
@ -12,7 +12,7 @@
if (!defined("_ECRIRE_INC_VERSION")) return;
// http://doc.spip.org/@action_editer_site_dist
// https://code.spip.net/@action_editer_site_dist
function action_syndiquer_site_dist($id_syndic=null) {
if (is_null($id_syndic)){

6
balise/formulaire_site.php

@ -3,7 +3,7 @@
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2011 *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
@ -15,12 +15,12 @@ if (!defined("_ECRIRE_INC_VERSION")) return; #securite
// Le contexte indique dans quelle rubrique le visiteur peut proposer le site
// http://doc.spip.org/@balise_FORMULAIRE_SITE
// https://code.spip.net/@balise_FORMULAIRE_SITE
function balise_FORMULAIRE_SITE ($p) {
return calculer_balise_dynamique($p,'FORMULAIRE_SITE', array('id_rubrique'));
}
// http://doc.spip.org/@balise_FORMULAIRE_SITE_stat
// https://code.spip.net/@balise_FORMULAIRE_SITE_stat
function balise_FORMULAIRE_SITE_stat($args, $context_compil) {
// Pas d'id_rubrique ? Erreur de contexte

2
base/sites.php

@ -3,7 +3,7 @@
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2011 *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *

2
formulaires/configurer_sites.php

@ -3,7 +3,7 @@
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2011 *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *

2
formulaires/editer_site.php

@ -3,7 +3,7 @@
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2011 *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *

2
formulaires/editer_site_fonctions.php

@ -3,7 +3,7 @@
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2011 *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *

2
formulaires/exporter_sites.php

@ -3,7 +3,7 @@
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2011 *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *

2
formulaires/importer_sites.php

@ -3,7 +3,7 @@
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2011 *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *

2
formulaires/regler_moderation_site.php

@ -3,7 +3,7 @@
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2011 *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *

2
formulaires/site.php

@ -3,7 +3,7 @@
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2011 *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *

17
genie/syndic.php

@ -3,7 +3,7 @@
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2011 *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
@ -21,7 +21,7 @@ if (!defined('_PERIODE_SYNDICATION_SUSPENDUE'))
define('_PERIODE_SYNDICATION_SUSPENDUE', 24*60);
// http://doc.spip.org/@genie_syndic_dist
// https://code.spip.net/@genie_syndic_dist
function genie_syndic_dist($t) {
return executer_une_syndication();
}
@ -31,12 +31,13 @@ function genie_syndic_dist($t) {
// retourne 0 si aucun a faire ou echec lors de la tentative
//
// http://doc.spip.org/@executer_une_syndication
// https://code.spip.net/@executer_une_syndication
function executer_une_syndication() {
// On va tenter un site 'sus' ou 'off' de plus de 24h, et le passer en 'off'
// s'il echoue
$where = sql_in("syndication", array('sus','off')) . "
AND statut<>'refuse'
AND NOT(" . sql_date_proche('date_syndic', (0 - _PERIODE_SYNDICATION_SUSPENDUE) , "MINUTE") . ')';
$id_syndic = sql_getfetsel("id_syndic", "spip_syndic", $where, '', "date_syndic", "1");
if ($id_syndic) {
@ -46,6 +47,7 @@ function executer_une_syndication() {
// Et un site 'oui' de plus de 2 heures, qui passe en 'sus' s'il echoue
$where = "syndication='oui'
AND statut<>'refuse'
AND NOT(" . sql_date_proche('date_syndic', (0 - _PERIODE_SYNDICATION) , "MINUTE") . ')';
$id_syndic = sql_getfetsel("id_syndic", "spip_syndic", $where, '', "date_syndic", "1");
@ -64,7 +66,7 @@ function executer_une_syndication() {
* sur un meme site: un verrouillage a du etre pose en amont.
* => elle doit toujours etre appelee par job_queue_add
*
* http://doc.spip.org/@syndic_a_jour
* https://code.spip.net/@syndic_a_jour
*
* @param int $now_id_syndic
* @return bool|string
@ -141,7 +143,7 @@ function syndic_a_jour($now_id_syndic) {
// en verifiant qu'on ne vient pas de l'ecrire avec
// un autre item du meme feed qui aurait le meme link
//
// http://doc.spip.org/@inserer_article_syndique
// https://code.spip.net/@inserer_article_syndique
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
@ -266,8 +268,9 @@ function inserer_article_syndique ($data, $now_id_syndic, $statut, $url_site, $u
// Mettre a jour la date si lastbuilddate
if ($data['lastbuilddate'])
$vals['date']= date("Y-m-d H:i:s", $data['lastbuilddate']);
sql_updateq('spip_syndic_articles', $vals, "id_syndic_article=$id_syndic_article");
include_spip('inc/modifier');
objet_modifier_champs('syndic_article',$id_syndic_article,array('data'=>$vals,'action'=>'syndiquer'),$vals);
// Point d'entree post_syndication
pipeline('post_syndication',

211
inc/feedfinder.php

@ -0,0 +1,211 @@
<?php
/**
* adaptation en php de feedfinder.py :
*
* """Ultra-liberal feed finder, de Mark Pilgrim
* <http://diveintomark.org/projects/feed_finder/>
* Par: courcy.michael@wanadoo.fr
*
* adaptation en php, je ne reprends qu'une partie de cette algorithme
*
* 0) A chaque etape on verifie si les feed indiques sont reellement des feeds
* 1) Si l'uri passe est un feed on retourne le resultat tout simplement
* 2) Si le header de la page contient des balises LINK qui renvoient vers des feed on les retourne
* 3) on cherche les liens <a> qui se termine par ".rss", ".rdf", ".xml", ou ".atom"
* 4) on cherche les liens <a> contenant "rss", "rdf", "xml", ou "atom"
*
* j'integre pas l'interrogation avec xml_rpc de syndic8, mais on peut le faire assez facilement
* dans la phase de test sur differentes url je n'ai constate aucune diffrerence entre les reponses
* donnees par feedfinder.py et les miennes donc je ne suis pas sur de voir l'interet
*
* Je ne me preoccupe pas comme l'auteur de savoir si mes liens de feed sont sur le meme serveur ou pas
*
* exemple d'utilisation
*
* print_r (get_feed_from_url("http://willy.boerland.com/myblog/"));
*
* on obtient
*
* Array
* (
* [0] => http://willy.boerland.com/myblog/atom/feed
* [1] => http://willy.boerland.com/myblog/blogapi/rsd
* [2] => http://willy.boerland.com/myblog/rss.xml
* [3] => http://willy.boerland.com/myblog/node/feed
* )
*/
if (!defined('_ECRIRE_INC_VERSION')) return;
$verif_complete = 0; //mettez le a 1 si vous voulez controler la validite des feed trouves mais le temps d'execution
//est alors plus long
/**
* une fonction qui permet de si un lien est un feed ou nom,
* si c'est un feed elle retourne son type, si c'est pas un feed elle retourne 0,
* cette verification est évidemment très très légère
*
* @param string $url
* URL à analyser
* @return string|0
* Retourne son type (rss|atom|rdf) ou 0 si pas feed
*/
function is_feed($url){
/**
* méthode SPIP
*/
if (function_exists('recuperer_page')) {
$buffer = recuperer_page($url);
if (preg_match("/<(\w*) .*/", $buffer, $matches)){
//ici on detecte la premiere balise
$type_feed = $matches[1];
switch ($type_feed) {
case "rss": return "rss";
case "feed": return "atom";
case "rdf": return "rdf";
}
}
return '';
}
$fp = @fopen($url, "r");
if (!$fp )
return 0;
//verifion la nature de ce fichier
while (!feof($fp)) {
$buffer = fgets($fp, 4096);
if (preg_match("/<(\w*) .*/", $buffer, $matches)){
//ici on detecte la premiere balise
$type_feed = $matches[1];
switch ($type_feed) {
case "rss": fclose($fp); return "rss";
case "feed": fclose($fp); return "atom";
case "rdf": fclose($fp); return "rdf";
default : fclose($fp); return 0;
}
}
}
}
/*****************test is_feed******************************
echo is_feed("https://contrib.spip.net/spip.php?page=backend" _EXTENSIO_PHP") . "<br />"; //retourne rss
echo is_feed("http://liberation.fr/rss.php") . "<br />"; //retourne rss
echo is_feed("http://liberation.fr/rss.php") . "<br />"; //retourne rss
echo is_feed("http://willy.boerland.com/myblog/atom/feed") //retourne atom
echo is_feed("http://spip.net/") . "<br />"; //retoune 0
************************************************************/
/**
* fonction sans finesse mais efficace
* on parcourt ligne par ligne a la recherche de balise <a> ou <link>
* si dans le corps de celle-ci on trouve les mots rss, xml, atom ou rdf
* alors on recupere la valeur href='<url>', on adapte celle-ci si elle
* est relative et on verifie que c'est bien un feed si oui on l'ajoute
* au tableau des feed si on ne trouve rien ou si aucun feed est trouve on retourne
* un tableau vide
*
* @param string $url
* L'URL à analyser
* @param $buffer
* @return array $feed_list
* Le tableau des feed trouvés dans la page
*/
function get_feed_from_url($url, $buffer=false){
global $verif_complete;
//j'ai prevenu ce sera pas fin
if (!preg_match("/^http:\/\/.*/", $url)) $url = "http://www." . $url;
if (!$buffer) $buffer = @file_get_contents($url);
include_spip("inc/filtres");
$feed_list = array();
//extraction des <link>
if ($links = extraire_balises($buffer,"link")){
//y a t-y rss atom rdf ou xml dans ces balises
foreach($links as $link){
if (
(strpos($link, "rss")
|| strpos($link, "rdf")
|| strpos($link, "atom")
|| strpos($link, "xml"))
&&
(!strpos($link,'opensearch') && !strpos($link,'oembed'))
){
//voila un candidat on va extraire sa partie href et la placer dans notre tableau
if ($href = extraire_attribut($link,"href")){
//on aura pris soin de verifier si ce lien est relatif d'en faire un absolu
$href = suivre_lien($url, $href);
if(!$verif_complete OR is_feed($href)){
$feed_list[] = $href;
}
}
}
}
}
//extraction des <a>
if ($links = extraire_balises($buffer,"a")){
//y a t-y rss atom rdf ou xml dans ces balises
foreach($links as $link){
if (
(strpos($link, "rss")
|| strpos($link, "rdf")
|| strpos($link, "atom")
|| strpos($link, "xml"))
&&
(!strpos($link,'opensearch') && !strpos($link,'oembed'))
){
//voila un candidat on va extraire sa partie href et la placer dans notre tableau
if ($href = extraire_attribut($link,"href")){
//on aura pris soin de verifier si ce lien est relatif d'en faire un absolu
$href = suivre_lien($url, $href);
if(!$verif_complete OR is_feed($href)){
$feed_list[] = $href;
}
}
}
}
}
// si c'est un site SPIP, tentons l'url connue
if (!count($feed_list)
AND (
strpos($url,"spip") OR stripos($buffer,"spip")
)){
$href = suivre_lien($url,"spip.php?page=backend");
if (is_feed($href))
$feed_list[] = $href;
}
return $feed_list;
}
/************************************ getFeed ****************************
print_r (get_feed_from_url("contrib.spip.net"));
print_r (get_feed_from_url("http://liberation.fr/"));
print_r (get_feed_from_url("cnn.com"));
print_r (get_feed_from_url("http://willy.boerland.com/myblog/"));
***************************** Resultat *****************************************
Array
(
[0] => https://contrib.spip.net/backend.php
)
Array
(
[0] => http://www.liberation.fr/rss.php
)
Array
(
[0] => http://rss.cnn.com/rss/cnn_topstories.rss
[1] => http://rss.cnn.com/rss/cnn_latest.rss
[2] => http://www.cnn.com/services/rss/
[3] => http://www.cnn.com/services/rss/
[4] => http://www.cnn.com/services/rss/
)
Array
(
[0] => http://willy.boerland.com/myblog/atom/feed
[1] => http://willy.boerland.com/myblog/blogapi/rsd
[2] => http://willy.boerland.com/myblog/rss.xml
[3] => http://willy.boerland.com/myblog/node/feed
)
************************************************************************/
?>

19
inc/site.php

@ -3,7 +3,7 @@
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2011 *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
@ -13,7 +13,7 @@
if (!defined("_ECRIRE_INC_VERSION")) return;
// http://doc.spip.org/@analyser_site
// https://code.spip.net/@analyser_site
function analyser_site($url) {
include_spip('inc/filtres');
include_spip('inc/distant');
@ -43,7 +43,7 @@ function analyser_site($url) {
if ($t = extraire_balise($header, 'title')) {
cdata_echappe_retour($t, $echappe_cdata);
$result['nom_site'] = supprimer_tags($t);
$result['nom_site'] = filtrer_entites(supprimer_tags($t));
}
if ($t = extraire_balises($header, 'link')) {
cdata_echappe_retour($t, $echappe_cdata);
@ -65,7 +65,7 @@ function analyser_site($url) {
if ($a = extraire_balise($header, 'description')
OR $a = extraire_balise($header, 'tagline')) {
cdata_echappe_retour($a, $echappe_cdata);
$result['descriptif'] = supprimer_tags($a);
$result['descriptif'] = filtrer_entites(supprimer_tags($a));
}
if (preg_match(',<image.*<url.*>(.*)</url>.*</image>,Uims',
@ -88,8 +88,15 @@ function analyser_site($url) {
$head = filtrer_entites($regs[1]);
} else
$head = $texte;
if (preg_match(',<title[^>]*>(.*),i', $head, $regs))
$result['nom_site'] = filtrer_entites(supprimer_tags(preg_replace(',</title>.*,i', '', $regs[1])));
if (preg_match(',<title[^>]*>(.*),ims', $head, $regs)){
$titre = trim($regs[1]);
if (!strlen($titre)){
$titre = substr($head,strpos($head,$regs[0]));
}
$result['nom_site'] = filtrer_entites(supprimer_tags(preg_replace(',</title>.*$,ims', '', $titre)));
}
if ($a = array_merge(
extraire_balises($head, 'meta'),
extraire_balises($head, 'http-equiv')

143
inc/syndic.php

@ -3,7 +3,7 @@
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2011 *
* Copyright (c) 2001-2019 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
@ -21,7 +21,7 @@ include_spip('genie/syndic');
// prend un fichier backend et retourne un tableau des items lus,
// et une chaine en cas d'erreur
// http://doc.spip.org/@analyser_backend
// https://code.spip.net/@analyser_backend
function analyser_backend($rss, $url_syndic='') {
include_spip('inc/texte'); # pour couper()
@ -73,8 +73,13 @@ function analyser_backend($rss, $url_syndic='') {
if (!count($items)) return _T('sites:avis_echec_syndication_01');
if (!defined('_SYNDICATION_MAX_ITEMS')) define('_SYNDICATION_MAX_ITEMS',1000);
$nb_items = 0;
foreach ($items as $item) {
$data = array();
if ($nb_items++>_SYNDICATION_MAX_ITEMS){
break;
}
// URL (semi-obligatoire, sert de cle)
@ -98,7 +103,7 @@ function analyser_backend($rss, $url_syndic='') {
else if (preg_match(',<link[^>]*[[:space:]]rel=.alternate[^>]*>,Uims',
$item, $regs))
$data['url'] = extraire_attribut($regs[0], 'href');
else if (preg_match(',<link[^>]*>(.*)</link>,Uims', $item, $regs))
else if (preg_match(',<link[^>]*>\s*([^\s]+)\s*</link>,Uims', $item, $regs))
$data['url'] = $regs[1];
else if (preg_match(',<link[^>]*>,Uims', $item, $regs))
$data['url'] = extraire_attribut($regs[0], 'href');
@ -126,22 +131,22 @@ function analyser_backend($rss, $url_syndic='') {
if (preg_match(',<(published|modified|issued)>([^<]*)<,Uims',
$item,$match)) {
cdata_echappe_retour($match[2], $echappe_cdata);
$la_date = my_strtotime($match[2]);
$la_date = my_strtotime($match[2], $langue_du_site);
}
if (!$la_date AND
preg_match(',<(pubdate)>([^<]*)<,Uims',$item, $match)) {
cdata_echappe_retour($match[2], $echappe_cdata);
$la_date = my_strtotime($match[2]);
$la_date = my_strtotime($match[2], $langue_du_site);
}
if (!$la_date AND
preg_match(',<([a-z]+:date)>([^<]*)<,Uims',$item,$match)) {
cdata_echappe_retour($match[2], $echappe_cdata);
$la_date = my_strtotime($match[2], $echappe_cdata);
$la_date = my_strtotime($match[2], $langue_du_site);
}
if (!$la_date AND
preg_match(',<date>([^<]*)<,Uims',$item,$match)) {
cdata_echappe_retour($match[1], $echappe_cdata);
$la_date = my_strtotime($match[1]);
$la_date = my_strtotime($match[1], $langue_du_site);
}
// controle de validite de la date
@ -149,7 +154,8 @@ function analyser_backend($rss, $url_syndic='') {
// (note: ca pourrait etre defini site par site, mais ca risque d'etre
// plus lourd que vraiment utile)
if ($GLOBALS['controler_dates_rss']) {
if ($la_date > time() + 48 * 3600)
if (!$la_date
OR $la_date > time() + 48 * 3600)
$la_date = time();
}
@ -159,7 +165,7 @@ function analyser_backend($rss, $url_syndic='') {
// Honorer le <lastbuilddate> en forcant la date
if (preg_match(',<(lastbuilddate|updated|modified)>([^<>]+)</\1>,i',
$item, $regs)
AND $lastbuilddate = my_strtotime(trim($regs[2]))
AND $lastbuilddate = my_strtotime(trim($regs[2]), $langue_du_site)
// pas dans le futur
AND $lastbuilddate < time())
$data['lastbuilddate'] = $lastbuilddate;
@ -234,20 +240,25 @@ function analyser_backend($rss, $url_syndic='') {
// ou des microformats relEnclosure,
// ou encore les media:content
if (!afficher_enclosures(join(', ', $tags))) {
// on prend toutes les pièces jointes possibles, et on essaie de les rendre uniques.
$enclosures = array();
# rss 2
if (preg_match_all(',<enclosure[[:space:]][^<>]+>,i',
$item, $matches, PREG_PATTERN_ORDER))
$data['enclosures'] = join(', ',
array_map('enclosure2microformat', $matches[0]));
else if (
preg_match_all(',<link\b[^<>]+rel=["\']?enclosure["\']?[^<>]+>,i',
$item, $matches, PREG_PATTERN_ORDER))
$data['enclosures'] = join(', ',
array_map('enclosure2microformat', $matches[0]));
else if (
preg_match_all(',<media:content\b[^<>]+>,i',
$item, $matches, PREG_PATTERN_ORDER))
$data['enclosures'] = join(', ',
array_map('enclosure2microformat', $matches[0]));
$item, $matches, PREG_PATTERN_ORDER)) {
$enclosures += array_map('enclosure2microformat', $matches[0]);
}
# atom
if (preg_match_all(',<link\b[^<>]+rel=["\']?enclosure["\']?[^<>]+>,i',
$item, $matches, PREG_PATTERN_ORDER)) {
$enclosures += array_map('enclosure2microformat', $matches[0]);
}
# media rss
if (preg_match_all(',<media:content\b[^<>]+>,i',
$item, $matches, PREG_PATTERN_ORDER)) {
$enclosures += array_map('enclosure2microformat', $matches[0]);
}
$data['enclosures'] = join(', ', array_unique($enclosures));
unset($enclosures);
}
$data['item'] = $item;
@ -258,6 +269,21 @@ function analyser_backend($rss, $url_syndic='') {
// passer l'url en absolue
$data['url'] = url_absolue(filtrer_entites($data['url']), $url_syndic);
// si on demande un dereferencement de l'URL, il faut verifier que ce n'est pas une redirection
if (_SYNDICATION_DEREFERENCER_URL){
$target = $data['url'];
include_spip("inc/distant");
for ($i = 0; $i<10; $i++){
// on fait un GET et pas un HEAD car les vieux SPIP ne repondent pas la redirection avec un HEAD (honte) sur un article virtuel
$res = recuperer_lapage($target, false, "GET", 4096);
if (!$res) break; // c'est pas bon signe car on a pas trouve l'URL...
if (is_array($res)) break; // on a trouve la page, donc on a l'URL finale
$target = $res; // c'est une redirection, on la suit pour voir ou elle mene
}
// ici $target est l'URL finale de la page
$data['url'] = $target;
}
// Trouver les microformats (ecrase les <category> et <dc:subject>)
if (preg_match_all(
',<a[[:space:]]([^>]+[[:space:]])?rel=[^>]+>.*</a>,Uims',
@ -284,9 +310,8 @@ function analyser_backend($rss, $url_syndic='') {
// helas strtotime ne reconnait pas le format W3C
// http://www.w3.org/TR/NOTE-datetime
// http://doc.spip.org/@my_strtotime
function my_strtotime($la_date) {
// https://code.spip.net/@my_strtotime
function my_strtotime($la_date, $lang=null) {
// format complet
if (preg_match(
',^(\d+-\d+-\d+[T ]\d+:\d+(:\d+)?)(\.\d+)?'
@ -304,15 +329,46 @@ function my_strtotime($la_date) {
if (preg_match(',^\d{4}-\d{2}$,', $la_date, $match))
return strtotime($match[0]."-01");
// utiliser strtotime en dernier ressort
$s = strtotime($la_date);
if ($s > 0)
return $s;
// YYYY-MM-DD hh:mm:ss
if (preg_match(',^\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}\b,', $la_date, $match))
return strtotime($match[0]);
// utiliser strtotime en dernier ressort
// en nettoyant le jour qui prefixe parfois la date, suivi d'une virgule
// et les UT qui sont en fait des UTC
$la_date_c = preg_replace("/^\w+,\s*/ms","",$la_date);
$la_date_c = preg_replace("/UT\s*$/ms","UTC",$la_date_c);
if ($s=strtotime($la_date)
OR $s=strtotime($la_date_c))
return $s;
// essayons de voir si le nom du mois est dans la langue du flux et remplacons le
// par la version anglaise avant de faire strtotime
if ($lang){
// "fr-fr"
list($lang) = explode("-", $lang);
static $months = null;
if (!isset($months[$lang])){
$prev_lang = $GLOBALS['spip_lang'];
changer_langue($lang);
foreach(range(1,12) as $m){
$s = _T("date_mois_$m");
$months[$lang][$s] = date("M",strtotime("2013-$m-01"));
$s = _T("date_mois_".$m."_abbr");
$months[$lang][$s] = date("M",strtotime("2013-$m-01"));
$months[$lang][trim($s,".")] = date("M",strtotime("2013-$m-01"));
}
changer_langue($prev_lang);
}
spip_log($la_date_c,"dbgs");
foreach($months[$lang] as $loc=>$en){
if (stripos($la_date_c,$loc)!==false){
$s=str_ireplace($loc,$en,$la_date_c);
if ($s=strtotime($s))
return $s;
}
}
}
// erreur
spip_log("Impossible de lire le format de date '$la_date'");
@ -320,7 +376,7 @@ function my_strtotime($la_date) {
}
// A partir d'un <dc:subject> ou autre essayer de recuperer
// le mot et son url ; on cree <a href="url" rel="tag">mot</a>
// http://doc.spip.org/@creer_tag
// https://code.spip.net/@creer_tag
function creer_tag($mot,$type,$url) {
if (!strlen($mot = trim($mot))) return '';
$mot = "<a rel=\"tag\">$mot</a>";
@ -332,7 +388,7 @@ function creer_tag($mot,$type,$url) {
}
// http://doc.spip.org/@ajouter_tags
// https://code.spip.net/@ajouter_tags
function ajouter_tags($matches, $item) {
include_spip('inc/filtres');
$tags = array();
@ -394,15 +450,20 @@ function ajouter_tags($matches, $item) {
// Lit contenu des blocs [[CDATA]] dans un flux
// http://doc.spip.org/@cdata_echappe_retour
// https://code.spip.net/@cdata_echappe_retour
function cdata_echappe(&$rss, &$echappe_cdata) {
$echappe_cdata = array();
if (preg_match_all(',<!\[CDATA\[(.*)]]>,Uims', $rss,
$regs, PREG_SET_ORDER)) {
foreach ($regs as $n => $reg) {
if (preg_match(',[<>],', $reg[1])) {
$echappe_cdata[$n] = $reg[1];
$rss = str_replace($reg[0], "@@@SPIP_CDATA$n@@@", $rss);
if (strpos($reg[1],'<')!==false
or strpos($reg[1],'>')!==false) {
// verifier que la chaine est encore dans le flux, car on peut avoir X fois la meme
// inutile de (sur)peupler le tableau avec des substitutions identiques
if (strpos($rss,$reg[0])!==false){
$echappe_cdata["@@@SPIP_CDATA$n@@@"] = $reg[1];
$rss = str_replace($reg[0], "@@@SPIP_CDATA$n@@@", $rss);
}
} else
$rss = str_replace($reg[0], $reg[1], $rss);
}
@ -410,14 +471,14 @@ function cdata_echappe(&$rss, &$echappe_cdata) {
}
// Retablit le contenu des blocs [[CDATA]] dans une chaine ou un tableau
// http://doc.spip.org/@cdata_echappe_retour
// https://code.spip.net/@cdata_echappe_retour
function cdata_echappe_retour(&$x, &$echappe_cdata) {
if (is_string($x)) {
if (strpos($x, '@@@SPIP_CDATA') !== false
OR strpos($x, '&lt;') !== false) {
if (strpos($x, '&lt;') !== false){
$x = filtrer_entites($x);
foreach ($echappe_cdata as $n => $e)
$x = str_replace("@@@SPIP_CDATA$n@@@", $e, $x);
}
if (strpos($x, '@@@SPIP_CDATA') !== false){
$x = str_replace( array_keys($echappe_cdata), array_values($echappe_cdata), $x);
}
}

53
lang/paquet-sites.xml

@ -1,30 +1,43 @@
<traduction module="paquet-sites" gestionnaire="salvatore" url="http://trad.spip.org" source="svn://zone.spip.org/spip-zone/_core_/plugins/sites/lang/" reference="fr">
<langue code="ar" url="http://trad.spip.org/tradlang_module/paquet-sites?lang_cible=ar">
<traducteur nom="&lt;span lang=&#039;fr&#039;&gt;George&lt;/span&gt;" lien="http://trad.spip.org/auteur/جورج-قندلفت" />
<traduction module="paquet-sites" gestionnaire="salvatore" url="https://trad.spip.net" source="svn://zone.spip.org/spip-zone/_core_/plugins/sites/lang/" reference="fr">
<langue code="ar" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=ar" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="George" lien="https://trad.spip.net/auteur/جورج-قندلفت" />
</langue>
<langue code="de" url="http://trad.spip.org/tradlang_module/paquet-sites?lang_cible=de">
<traducteur nom="klaus++" lien="http://trad.spip.org/auteur/klaus" />
<langue code="de" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=de" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="klaus++" lien="https://trad.spip.net/auteur/klaus" />
</langue>
<langue code="en" url="http://trad.spip.org/tradlang_module/paquet-sites?lang_cible=en">
<traducteur nom="kent1" lien="http://trad.spip.org/auteur/kent1" />
<langue code="en" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=en" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="kent1" lien="https://trad.spip.net/auteur/kent1" />
</langue>
<langue code="es" url="http://trad.spip.org/tradlang_module/paquet-sites?lang_cible=es">
<traducteur nom="jotacese" lien="http://trad.spip.org/auteur/jotacese" />
<langue code="es" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=es" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="jotacese" lien="https://trad.spip.net/auteur/jotacese" />
</langue>
<langue code="fa" url="http://trad.spip.org/tradlang_module/paquet-sites?lang_cible=fa">
<traducteur nom="Davood Hossein" lien="http://trad.spip.org/auteur/davood-hossein" />
<langue code="fa" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=fa" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="Davood Hossein" lien="https://trad.spip.net/auteur/davood-hossein" />
</langue>
<langue code="fr" />
<langue code="it" url="http://trad.spip.org/tradlang_module/paquet-sites?lang_cible=it">
<traducteur nom="phante" lien="http://trad.spip.org/auteur/phante" />
<langue code="fr" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=fr" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
</langue>
<langue code="pt_br" url="http://trad.spip.org/tradlang_module/paquet-sites?lang_cible=pt_br">
<traducteur nom="Ricardo Porto" lien="http://trad.spip.org/auteur/ricardo-porto" />
<langue code="fr_fem" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=fr_fem" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="denisb" lien="https://trad.spip.net/auteur/denisb" />
</langue>
<langue code="ru" url="http://trad.spip.org/tradlang_module/paquet-sites?lang_cible=ru">
<traducteur nom="Serge Markitanenko" lien="http://trad.spip.org/auteur/serge-markitanenko" />
<langue code="it" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=it" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="phante" lien="https://trad.spip.net/auteur/phante" />
</langue>
<langue code="sk" url="http://trad.spip.org/tradlang_module/paquet-sites?lang_cible=sk">
<traducteur nom="jaro" lien="http://trad.spip.org/auteur/jaro" />
<langue code="lb" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=lb" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="jwander" lien="https://trad.spip.net/auteur/jwander" />
</langue>
<langue code="nl" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=nl" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="Suske" lien="https://trad.spip.net/auteur/suske" />
</langue>
<langue code="pt" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=pt" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="Cláudia Anjos Lopes" lien="https://trad.spip.net/auteur/claudia_a_lopes" />
</langue>
<langue code="pt_br" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=pt_br" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="Ricardo Porto" lien="https://trad.spip.net/auteur/ricardo-porto" />
</langue>
<langue code="ru" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=ru" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="Serge Markitanenko" lien="https://trad.spip.net/auteur/serge-markitanenko" />
</langue>
<langue code="sk" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=sk" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="jaro" lien="https://trad.spip.net/auteur/jaro" />
</langue>
</traduction>

2
lang/paquet-sites_ar.php

@ -1,6 +1,6 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de http://trad.spip.org/tradlang_module/paquet-sites?lang_cible=ar
// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=ar
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) return;

2
lang/paquet-sites_de.php

@ -1,6 +1,6 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de http://trad.spip.org/tradlang_module/paquet-sites?lang_cible=de
// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=de
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) return;

2
lang/paquet-sites_en.php

@ -1,6 +1,6 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de http://trad.spip.org/tradlang_module/paquet-sites?lang_cible=en
// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=en
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) return;

2
lang/paquet-sites_es.php

@ -1,6 +1,6 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de http://trad.spip.org/tradlang_module/paquet-sites?lang_cible=es
// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=es
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) return;

2
lang/paquet-sites_fa.php

@ -1,6 +1,6 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de http://trad.spip.org/tradlang_module/paquet-sites?lang_cible=fa
// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=fa
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) return;

15
lang/paquet-sites_fr_fem.php

@ -0,0 +1,15 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=fr_fem
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// S
'sites_description' => 'Sites et syndication dans SPIP (privé et public)',
'sites_slogan' => 'Gestion des sites et de la syndication dans SPIP'
);
?>

2
lang/paquet-sites_it.php

@ -1,6 +1,6 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de http://trad.spip.org/tradlang_module/paquet-sites?lang_cible=it
// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=it
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) return;

15
lang/paquet-sites_lb.php

@ -0,0 +1,15 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=lb
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// S
'sites_description' => 'Websäiten a Syndicatioun am SPIP (privat an ëffentlech)',
'sites_slogan' => 'Gestioun vun de Websäiten a Syndicatioun am SPIP'
);
?>

15
lang/paquet-sites_nl.php

@ -0,0 +1,15 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=nl
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// S
'sites_description' => 'Sites en Websyndicatie in SPIP (privé en publiek)', # Websyndicatie d'après http://nl.wikipedia.org/wiki/Websyndicatie
'sites_slogan' => 'Beheer van de sites en van de Websyndicatie in SPIP'
);
?>

15
lang/paquet-sites_pt.php

@ -0,0 +1,15 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=pt
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// S
'sites_description' => 'Sítios e vinculação em SPIP (privado e público)',
'sites_slogan' => 'Gestão dos sítios e da vinculação em SPIP'
);
?>

2
lang/paquet-sites_pt_br.php

@ -1,6 +1,6 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de http://trad.spip.org/tradlang_module/paquet-sites?lang_cible=pt_br
// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=pt_br
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) return;

2
lang/paquet-sites_ru.php

@ -1,6 +1,6 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de http://trad.spip.org/tradlang_module/paquet-sites?lang_cible=ru
// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=ru
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) return;

2
lang/paquet-sites_sk.php

@ -1,6 +1,6 @@
<?php