Browse Source

spip2 -> spip3

svn/root/tags/v1.2.1
tenshi20@no-log.org 10 years ago
parent
commit
9eeb397c5b
  1. 19
      .gitattributes
  2. 57
      base/rssarticle.php
  3. 47
      exec/rss_article.php
  4. 98
      fabrique_rssarticle.php
  5. 71
      formulaires/configurer_rssarticle.html
  6. 20
      formulaires/editer_rssarticle.html
  7. 62
      formulaires/editer_rssarticle.php
  8. 204
      genie/rssarticle_copie.php
  9. 21
      lang/paquet-rssarticle_fr.php
  10. 37
      lang/rssarticle_ar.php
  11. 45
      lang/rssarticle_fr.php
  12. 21
      paquet.xml
  13. 1
      prive/contenu/rssarticle.html
  14. 7
      prive/squelettes/contenu/configurer_rssarticle.html
  15. BIN
      prive/themes/spip/images/rssarticle-128.png
  16. BIN
      prive/themes/spip/images/rssarticle-16.png
  17. BIN
      prive/themes/spip/images/rssarticle-32.png
  18. BIN
      prive/themes/spip/images/rssarticle-64.png
  19. 60
      rssarticle_administrations.php
  20. 54
      rssarticle_pipelines.php

19
.gitattributes

@ -1 +1,20 @@
* text=auto !eol
base/rssarticle.php -text
exec/rss_article.php -text
/fabrique_rssarticle.php -text
formulaires/configurer_rssarticle.html -text
formulaires/editer_rssarticle.html -text
formulaires/editer_rssarticle.php -text
genie/rssarticle_copie.php -text
lang/paquet-rssarticle_fr.php -text
lang/rssarticle_ar.php -text
lang/rssarticle_fr.php -text
/paquet.xml -text
prive/contenu/rssarticle.html -text
prive/squelettes/contenu/configurer_rssarticle.html -text
prive/themes/spip/images/rssarticle-128.png -text
prive/themes/spip/images/rssarticle-16.png -text
prive/themes/spip/images/rssarticle-32.png -text
prive/themes/spip/images/rssarticle-64.png -text
/rssarticle_administrations.php -text
/rssarticle_pipelines.php -text

57
base/rssarticle.php

@ -0,0 +1,57 @@
<?php
/**
* Ajouter la table spip_articles_syndic
* @param array $tables_auxiliaires
* @return array
*/
function rssarticle_declarer_tables_auxiliaires($tables_auxiliaires){
$spip_rssarticle = array(
"id_article" => "bigint(21) NOT NULL",
"id_syndic" => "bigint(21) NOT NULL");
$spip_rssarticle_key = array(
"INDEX" => "id_article");
$tables_auxiliaires['spip_articles_syndic'] = array(
'field' => &$spip_rssarticle,
'key' => &$spip_rssarticle_key);
return $tables_auxiliaires;
}
/**
* Declarer la table spip_articles_syndic dans les jointures
* @param array $interface
* @return array
*/
function rssarticle_declarer_tables_interfaces($interface){
$interface['table_des_tables']['articles_syndic']='articles_syndic';
// permet au compilateur de determiner explicitement les jointures possibles
// lorsqu’une boucle sur une table demande un champ inconnu
$interface['tables_jointures']['spip_articles'][] = 'articles_syndic';
return $interface;
}
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Ajouter des champs a la table syndic
* @param array $tables_principales
* @return array
*/
function rssarticle_declarer_tables_principales($tables_principales){
// Extension de la table syndic
$tables_principales['spip_syndic']['field']['rssarticle'] = "varchar(3) DEFAULT 'non' NOT NULL";
return $tables_principales;
}
?>

47
exec/rss_article.php

@ -0,0 +1,47 @@
<?php
/* plugin rss en article
*
* page cachée pour les gens préssés ne pouvant pas attendre le genie
* permet de relancer manuellement la recopie du flux en article
*/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip("inc/presentation");
function exec_rss_article_dist()
{
// si pas autorise : message d'erreur ... admin ... a affiner
if (!autoriser('editer', 'article')) {
include_spip('inc/minipres');
echo minipres();
exit;
}
include_spip("genie/rssarticle_copie");
//
// affichages
//
$commencer_page = charger_fonction('commencer_page', 'inc');
echo $commencer_page(_T('rssarticle:activer_recopie_intro'), 'editer', 'editer');
// titre
echo "<br /><br /><br />\n"; // outch ! aie aie aie ! au secours !
echo gros_titre(_T('rssarticle:activer_recopie_intro'),'', false);
// colonne gauche
echo debut_gauche('', true);
echo debut_droite('', true);
// centre de la page
genie_rssarticle_copie_dist("manuel");
echo '<div><small>'.date('Y/m/d H:i:s').'</small><br />'._T('rssarticle:maj_manuelle').'</div>';
echo '<div style="margin:2em 0;"><a href="?exec=rss_article" style="border:1px solid;padding:0.5em;background:#fff;">'._T('rssarticle:maj_recharge').'</a></div>';
// pied
echo fin_gauche() . fin_page();
}
?>

98
fabrique_rssarticle.php

@ -0,0 +1,98 @@
<?php
/**
* Fichier généré par la Fabrique de plugin v5
* le 2012-06-22 09:30:14
*
* Ce fichier de sauvegarde peut servir à recréer
* votre plugin avec le plugin «Fabrique» qui a servi à le créer.
*
* Bien évidemment, les modifications apportées ultérieurement
* par vos soins dans le code de ce plugin généré
* NE SERONT PAS connues du plugin «Fabrique» et ne pourront pas
* être recréées par lui !
*
* La «Fabrique» ne pourra que régénerer le code de base du plugin
* avec les informations dont il dispose.
*
**/
if (!defined("_ECRIRE_INC_VERSION")) return;
$data = array (
'fabrique' =>
array (
'version' => 5,
),
'paquet' =>
array (
'nom' => 'Flux RSS en articles',
'slogan' => 'Recopie les flux RSS en articles',
'description' => 'Ce plugin recopie les flux RSS (articles syndiqués) en articles
-* reprise du contenu du flux;
-* créé l\'auteur s\'il est mentionné dans le flux;
-* ajoute les documents distants présents dans le flux;
-* dans le champs URL de l\'article, on indique l\'adresse de l\'article d\'origine.
Pour éviter les doublons et les imports successifs, une fois l\'article créé, l\'article syndiqué est rejeté (ce qui permet de suivre où en sont les recopiés).',
'prefixe' => 'rssarticle',
'version' => '1.0.0',
'auteur' => 'erational',
'auteur_lien' => 'http://www.erationnal.org',
'licence' => 'GNU/GPL v3',
'categorie' => 'edition',
'etat' => 'dev',
'compatibilite' => '[3.0.2;3.0.*]',
'documentation' => 'http://www.spip-contrib.net/Plugin-Flux-RSS-en-articles',
'administrations' => 'on',
'schema' => '1.0.0',
'formulaire_config' => 'on',
'formulaire_config_titre' => 'Copie RSS en articles',
'inserer' =>
array (
'paquet' => '',
'administrations' =>
array (
'maj' => '',
'desinstallation' => '',
'fin' => '',
),
'base' =>
array (
'tables' =>
array (
'fin' => '',
),
),
),
'scripts' =>
array (
'pre_copie' => '',
'post_creation' => '',
),
'exemples' => '',
),
'objets' =>
array (
),
'images' =>
array (
'paquet' =>
array (
'logo' =>
array (
0 =>
array (
'extension' => 'png',
'contenu' => 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAMAUExURbu7u4aGhqenp+RzNujo6OOme+x9LPnj083NzfmTLczMzPT09PnSteJsLfSRNvHl3cfHx+OdbN6ccvvSq/udOt1hKu7c0vKNNnR0dOOqhNR4PONrI/717/3ix+jFrvCEK9vb29lZJeF+NduJU/KNPPn5+e3t7eOAPOi1lO+BKPzMnJycnHp6eveUNvCJNfqdQuOti/qhRvuZM8jIyO+FMul1JfnOqvvCh+p+OfPt6tyTZPzbvOt+Me6NQeh8O+2CMvHx8eWANeVyLe+IO93d3fbi1vm7g+x7JttdKPmXNemFPv/69uSykurNuvu7e+d2L/CRQd2RXs5iHO+GNPeVON+FRvmYOPmaOfrXu/mWMOnJtvTw7uCec/XNuN1cH+l6Mf3p1fWNK+yCOtDQ0Obm5vrMpf3q2PeRLeFnJPLp5PKlbPmZP9+ie/KMM+e9ofr6+u3Xyfb29vKSQOGKTfWWQf7u3t+abvKIKvaiVZSUlPXDpPG7osTExP7t2+a5nL6+vu6OPeV2OPTx8M1eF/eSMv2gP//+/faVPvSRPel+NvCIM/eWOONvNvqoU+h3Lf/9/P/9++iCPvmmUv3w6PKUQu2KP/CGM+NwLut/Mv///2NjY+Pj49nZ2eDg4NTU1OTk5Pz8/OXl5eHh4f/+//77+dZ9RM/Q0PX29efBqtDQz8vLy9DPz+ZwJc5lIP///v/+/vWNLvmaOv7//vqaOv7//3FxceHg4O3Hrfzt499iJPfAld6fd/nZxfmbOfSLKt9lLvWPMeBnLGZmZurq6vCkcsDAwOm6nOa3mOymiOKmf/7+//CQPe/g1vWSN/SPM+ubcvW/mPbIqbi4uNBoJs/Pz9BqKPv7++uANvObVPqePuOgcfydPvWhWfeoX/imWPCzkfS4juqAPOmFOO6FOu6OR/X19dDP0PLXxfTdzf3YtfjXw/jdzfKVSfb29f3r3OvRwO7azemQYfCfaf7+/vmZOe6FPPKJLO/Nt/Wyffu5d+7KsvqtYdbW1dbW1uuHP/X19Q9/xCoAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAETElEQVR42mL4TyFgoIoB/JLFaCDUKooEA3zVHyUlJT12dlZR6ehob8/OztbX138UE02sAWcck5yc+uJt7O2ndeWK853V7Q77slektegkkQZYKnc6+XdeZ3NnM9ETh+sXEbntWECcASsc4/1NL05m5/nxRq/8HFz/Zs+Sk8QZEPPPP96UZyYQeKe5nU3sDgsH6Q/v5isRJNaAeBvTiJkQkOAX6QnSv7H7rHgH0QbYzGDL2sXzbjHYCOFwI4h+PRViDZg6wz5YU1NevMItDWRCmqHRZpB+E+INsDeZdrootzwxUVfLG2hCrWELUH+wvTPRBpgEywvLJKTeS+fk7C0FBcSBXD0Te5uvxBpgO01PHhyIL39HRhomABlm8ib2M+KTiDZAT7zcGhIJ5kZG+iA33GCbEe9vQbQB4uLn7ppbg7w/U4szvaJt5kx2tnh/JzviDeA725KePullP9AEtw3lqUDqyBqn6UQbEABO/56RnH5Au9ffkA+ePHPmK+npvI1EG6Cr2+3p2XvTKBJkQqqm+4WZMyc38h4k2oCikG5PQ9kJtb2e6bIzZy55YvoJ6IePGQeZiTVgimcYpzAoAXVvuDNh5swHax7KzJx5P06UeAO+fOEERaN3Sa48+8yZe9aseT1zZmycaA+RBpRN2bs30hyUfL7puZvNnLnDKSN25kxXDw9iDTBoAGZfkZ9abuJdwWxZVVX3p2ecr64+4aHYeAukwDeTkAFiSq3A8iN9X3lXsP2MvjXSGby8O+PiFD0UO/OA8ruVr+YRMOBp3enWL+D8C0z//k7TeXkP7hcVBTog1PK/pVDZkhdBUf8t8ZbKTYEN+iEg/TZQ/UDtHvsblcT+iwlJAsPme1DU2ky89UKTj7qtre3Uqf/+eXl5TQSCh3YT1QPF/vs2HwNnse3Kkgb4a6amKANWVCCZd+b/iqBf0JJyptUKMurG45efw/TPlPpAugHRQa5w/UuCmshwgQ8r3ABXKSCfpYYBFbgQMKBJyAdmwPbA/9zaszAA42z87QN+q+1QAwwk/1fOkvibshAZpDDNkjiMv4Hxfmk/xIBAufpZjAtmogMOnUq8BliuPa4RU7Z0aVCz0H/tWWozMcGlWdx4XXAmJ6cur6AAFAM6sxZgMYBj1lxi20gSWA24Mkth1ACSDHARMEYBAi4kGnBNFQ1co7cX1BbNRgGL1OhtAMVeWD9zy8yZ6zYBG4OnPm9avGXxusWkGZA/l+MKCuCYu4CDFAMKC5+igULVVaQYwL0cqu8tmATzjEkxwIFl9nwUMJvFQYAUA9QU0MNAQa2GFANYsICjpBgwf9G2uahg0ex6UgzYliyABpJdGEgxwGUOJrhEvAGMs678mYcBmGaxEGsA0yxtjuSVK69cWb1s2bIrV5KfJV9ZnVyjw0h011dNYhaTwCouZGDMsHVWPfF9Z4WtmJXrLG1SOt8sTIyHUHTraHNRpfcOEGAAOTyBYRHXS+YAAAAASUVORK5CYII=',
),
),
),
'objets' =>
array (
),
),
);
?>

71
formulaires/configurer_rssarticle.html

@ -0,0 +1,71 @@
<!-- descriptif=Options des copies des flux RSS en articles <p><a href="http://www.spip-contrib.net/Plugin-Flux-RSS-en-articles">Documentation</a></p> -->
<!-- titre=Copie RSS en articles -->
<div class='formulaire_spip formulaire_configurer formulaire_configurer_rssarticle' id="formulaire_configurer_rssarticle">
<form method="post" action="#SELF">
<div>
#ACTION_FORMULAIRE{#ENV{action}}
<ul>
<li class="fieldset">
<fieldset>
<h3 class="legend"><:rssarticle:statut_article_importe:></h3>
<ul>
<select name="import_statut">
<option value="prop"[(#ENV{import_statut}|=={prop}|?{' selected="selected"'})]><:sites:info_statut_site_3:></option>
<option value="publie"[(#ENV{import_statut}|=={publie}|?{' selected="selected"'})]><:sites:info_statut_site_2:></option>
</select>
</ul>
</fieldset>
</li>
<li class="fieldset">
<fieldset>
<h3 class="legend"><:rssarticle:mode:></h3>
<ul>
<div class="choix">
<input class="radio" type="radio" name="mode" value="auto" [(#ENV{mode}|=={auto}?{checked='checked',''})] id="mode_auto"/>
<label for="mode_auto"><:rssarticle:mode_auto:></label>
</div>
<div class="choix">
<input type="radio" name="mode" value="manuel" [(#ENV{mode}|=={manuel}?{checked='checked',''})] id="mode_manuel"/>
<label for="mode_manuel"><:rssarticle:mode_manuel:></label>
</div>
</ul>
</fieldset>
</li>
<li class="fieldset">
<fieldset>
<h3 class="legend"><:rssarticle:cron_interval:></h3>
<input type="text" name="cron_interval_value" value="[(#ENV{cron_interval_value}|!={''}|?{#ENV{cron_interval_value},600})]" size="6" class="fondl" id="cron_interval_value"/>
<label for="cron_interval_value"><:rssarticle:cron_interval_timer:></label>
</fieldset>
</li>
<li class=fieldset>
<fieldset>
<h3 class="legend"><:rssarticle:suivi_syndic:></h3>
<ul>
<li class="editer_email_alerte">
<input type="checkbox" name="email_alerte"[ checked="(#ENV{email_alerte}|!={''}|?{'checked'})"] class="fondl" id="email_alerte"/>
<label for="email_alerte"><:rssarticle:email_alerte:></label>
</li>
<li class="editer_email_suivi">
<input type="text" name="email_suivi" value="[(#ENV{email_suivi})]" size="20" class="fondl" id="email_suivi"/>
<label for="email_suivi"><:rssarticle:email_alerte_email:></label>
</li>
</ul>
</fieldset>
</li>
<li class="fieldset">
<fieldset>
<h3 class="legend"><:rssarticle:copie_logo:></h3>
<input type="checkbox" name="copie_logo"[ checked="(#ENV{copie_logo}|!={''}|?{'checked'})"] class="fondl" id="copie_logo" />
<labelfor="copie_logo"><:rssarticle:copie_logo:></label>
</fieldset>
</li>
<input type="submit" name="_cfg_ok" value="<:OK:>" class="fondo"/>
<input type="submit" name="_cfg_delete" value="<:Supprimer:>" class="fondo" />
</ul>
</div>
</form>
</div>

20
formulaires/editer_rssarticle.html

@ -0,0 +1,20 @@
<div class="formulaire_spip formulaire_editer formulaire_#FORM formulaire_#FORM-#ENV{id_syndic,nouveau}">
<!-- <br class='bugajaxie' /> -->
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
<form method='post' action='#ENV{action}' enctype='multipart/form-data'><div>
#ACTION_FORMULAIRE{#ENV{action}}
<ul>
#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}#SET{obli,'obligatoire'}
<li class="editer_rssarticle[ (#ENV**{erreurs}|table_valeur{rssarticle}|oui)erreur]">
<div class="choix" style="margin-left:-130px">
<input type='checkbox' class="checkbox" name='rssarticle' value='oui' id='rssarticle'[ (#ENV{rssarticle}|=={oui}|?{'checked="checked"'})] />
<label for="rssarticle"><:rssarticle:activer_recopie:></label>
</div>
[<span class='rssarticle'>(#ENV*{erreurs}|table_valeur{rssarticle})</span>]
</li>
</ul>
[(#ENV{editable}|oui) <p class='boutons'><input type='submit' name="save" class='submit' value='<:bouton_enregistrer:>' /></p>]
</div></form>
</div>

62
formulaires/editer_rssarticle.php

@ -0,0 +1,62 @@
<?php
include_spip('inc/autoriser');
/**
* CVT: charger
*
*/
function formulaires_editer_rssarticle_charger_dist($id_syndic='new', $retour=''){
$rssarticle = sql_getfetsel('rssarticle','spip_syndic','id_syndic='.intval($id_syndic));
$valeurs['rssarticle'] = $rssarticle;
$valeurs['id_syndic'] = $id_syndic;
$valeurs['editable'] = true;
if (!autoriser('modifier', 'syndic', $id_syndic))
$valeurs['editable'] = false;
return $valeurs;
}
/**
* CVT: verifer
*
*/
function formulaires_editer_rssarticle_verifier_dist($id_syndic='new', $retour=''){
$erreurs = array();
return $erreurs;
}
/**
* CVT: traiter
*
*/
function formulaires_editer_rssarticle_traiter_dist($id_syndic='new', $retour=''){
$message = array('editable'=>true, 'message_ok'=>'');
if (_request('rssarticle')=='oui') {
sql_updateq('spip_syndic',array(
'rssarticle'=> 'oui',
'resume'=>'non',
'oubli'=>'oui'
),'id_syndic='.intval($id_syndic));
// on force le site en mode oubli et pas resume
// on rensynchronise la syndic pour passer les anciens articles (qui etaient ss doute en mode resume) en mode complet HTML
//sql_delete("spip_syndic_articles", "id_syndic=".sql_quote($id_syndic)); // alternative ;)
include_spip('genie/syndic');
$t = syndic_a_jour($id_syndic);
} else {
sql_updateq('spip_syndic',array('rssarticle'=> 'non'),'id_syndic='.intval($id_syndic));
}
include_spip('inc/headers');
$message .= redirige_par_entete("./?exec=sites&id_syndic=$id_syndic");
return $message;
}
?>

204
genie/rssarticle_copie.php

@ -0,0 +1,204 @@
<?php
/**
* Plugin RSS article pour Spip 2.0
* Licence GPL
*
*
*/
// TODO
// - gerer les mots-clés hors enclosure ?
include_spip("inc/mail");
include_spip('inc/filtres');
include_spip('inc/distant');
include_spip('inc/chercher_logo');
include_spip('inc/rubriques');
function genie_rssarticle_copie_dist($t){
// si cfg dispo, on charge les valeurs
if (function_exists(lire_config)) {
if (lire_config('rssarticle/import_statut')=="publie") $import_statut="publie"; else $import_statut="prop";
if (lire_config('rssarticle/mode')=="auto") $mode_auto=true; else $mode_auto=false;
if (lire_config('rssarticle/email_alerte')=="on") $email_alerte=true; else $email_alerte=false;
if (lire_config('rssarticle/copie_logo')=="on") $copie_logo=true; else $copie_logo=false;
$email_suivi = lire_config('rssarticle/email_suivi');
} else { // sinon valeur par defaut
$import_statut = "prop"; // statut des articles importés: prop(proposé),publie(publié)
$mode_auto=false; // mode: manuel
$email_alerte = false; // envoi email ?
$email_suivi = $GLOBALS['meta']['adresse_suivi']; // adresse de suivi editorial
$copie_logo = false; // reprendre le logo du site
}
// autres valeurs
$accepter_forum = substr($GLOBALS['meta']['forums_publics'],0,3);
// principe de pile:
// on boucle sur les derniers articles syndiques pour les retirer ensuite
// bourrin voir les requetes avec jointure du Miroir ou du site Rezo
$log = "";
$log_c = 0;
// boucle sur les sites publies
if ($mode_auto) $u = sql_select("id_syndic,id_rubrique,id_secteur","spip_syndic","statut='publie'"); // tous
else $u = sql_select("id_syndic,id_rubrique,id_secteur","spip_syndic","statut='publie' AND rssarticle='oui'");
while ($b = sql_fetch($u)) {
$id_syndic = (int) $b['id_syndic'];
$id_rubrique = (int) $b['id_rubrique'];
$id_secteur = (int) $b['id_secteur'];
// sur chaque site copie les derniers syndication
$s = sql_select("*", "spip_syndic_articles", "statut='publie' AND id_syndic='$id_syndic'","","maj DESC","10"); // par flot de 10 articles / site pour limiter la charge
while ($a = sql_fetch($s)) {
$titre = $a['titre'];
$id_syndic_article = $a['id_syndic_article'];
// article avec mm titre existe ? (test doublons)
if (!$row = sql_fetsel("id_article","spip_articles","titre=".sql_quote($titre))) {
$texte = $a['descriptif'];
$lang = $a['lang'];
$url = $a['url'];
$tags = $a['tags'];
$lsDate = $a['date'];
if ($lang=="")
$lang = $GLOBALS['spip_lang'];
// cas particulier:
// site multilingue avec la configuration: 1 lang par rubrique
// on force l'article a avoir la langue de la rubrique ds lequel il est importee(pour omaidi)
if ($GLOBALS['meta']['multi_rubriques']=='oui') {
$s_lang = sql_select("lang", "spip_rubriques", "id_rubrique=$id_rubrique");
while ($a_lang = sql_fetch($s_lang))
$lang = $a_lang['lang'];
}
//$lsDate = date('Y-m-d H:i:s');
// creation de l'article
$id_article = sql_insertq( 'spip_articles', array(
'titre'=>$titre, 'id_rubrique'=>$id_rubrique,
'texte'=>$texte, 'statut'=>$import_statut, 'id_secteur'=>$id_secteur,
'date'=> $lsDate, 'accepter_forum'=>$accepter_forum, 'lang'=>$lang, 'url_site'=>$url));
// lier article et site
sql_insertq( 'spip_articles_syndic', array('id_article'=>$id_article, 'id_syndic'=>$id_syndic));
// gestion auteur
$auteurs= explode(", ",$a['lesauteurs']);
foreach ($auteurs as $k => $auteur) {
if ($current_id_auteur = rssarticle_get_id_auteur($auteur))
sql_insertq( 'spip_auteurs_articles', array('id_auteur'=>$current_id_auteur, 'id_article'=>$id_article));
}
// tags a convertir en documents distants
$doc_distants = extraire_enclosures($tags);
foreach ($doc_distants as $k=>$doc_distant) {
$infos = recuperer_infos_distantes($doc_distant);
if ($infos['extension']) {
$ext = $infos['extension'];
$taille = $infos['tailles'];
$row = sql_fetsel("inclus", "spip_types_documents", "extension=" . sql_quote($ext) . " AND upload='oui'"); // extension autorisee ?
if ($row) {
$id_document = sql_insertq( 'spip_documents', array(
'extension'=>$ext,
'date'=> $lsDate,
'fichier'=> $doc_distant,
'taille'=> $taille,
'mode' => 'document',
'distant' => 'oui'));
sql_insertq( 'spip_documents_liens', array(
'id_document' =>$id_document,
'id_objet'=> $id_article,
'objet'=> 'article',
'vu'=> 'non'));
}
}
}
// logo
if ($copie_logo) {
if ($logo_site = inc_chercher_logo_dist($id_syndic,"id_syndic")) {
$logo_article = "arton$id_article.".$logo_site[3];
@copy($logo_site[0],_DIR_LOGOS."$logo_article");
}
}
$log_c++;
$log .= "\n - $titre";
// on "depublie" l'article syndique qui vient d'etre copie
sql_update("spip_syndic_articles", array('statut' => '"refuse"'), "id_syndic_article=$id_syndic_article");
// Mise à jour des dates de rubriques après création d'un article dedans
if ($id_article) {
if (function_exists('calculer_rubriques'))
calculer_rubriques();
if (function_exists('calculer_langues_rubriques'))
calculer_langues_rubriques();
if (function_exists('propager_les_secteurs'))
propager_les_secteurs();
}
} // test doublons
}
} // FIN PILE
// log et alerte email
$log .= "\n\n---------\nPlugin Copie RSS en Articles: $log_c articles copies\n";
spip_log($log);
$log .= $GLOBALS['meta']['adresse_site']."/ecrire/?exec=accueil";
if ($email_alerte && $email_suivi !="" && $log_c > 0)
envoyer_mail($email_suivi,"Copie RSS en Articles", $log);
// maintenance generale
// mode auto: on efface les syndic_articles de plus de 2 mois pour soulager le systeme (cf genie/syndic)
// attention: on efface sur l'ensemble des sites syndiques ss tenir compte de l'option
if ($mode_auto) sql_delete('spip_syndic_articles', "maj < DATE_SUB(NOW(), INTERVAL 2 MONTH) AND date < DATE_SUB(NOW(), INTERVAL 2 MONTH)");
return 1;
}
//
// recupere id d'un auteur selon son nom sinon le creer
function rssarticle_get_id_auteur($nom) {
if (trim($nom)=="")
return false;
if ($row = sql_fetsel(array("id_auteur"),"spip_auteurs","nom=".sql_quote($nom)))
return $row['id_auteur'];
// auteur inconnu, on le cree ...
return sql_insertq('spip_auteurs',array('nom'=>$nom,'statut'=>'1comite'));
}
//
// extraire les documents taggues enclosure
// voir http://doc.spip.org/@afficher_enclosures
function extraire_enclosures($tags) {
$s = array();
foreach (extraire_balises($tags, 'a') as $tag) {
if (extraire_attribut($tag, 'rel') == 'enclosure'
AND $t = extraire_attribut($tag, 'href')) {
$s[] = $t;
}
}
return $s;
}
/*
UPDATE `spip_syndic_articles` SET statut="publie";
TRUNCATE TABLE `spip_articles`;
TRUNCATE TABLE `spip_auteurs_articles`;
DELETE FROM `spip_auteurs` WHERE id_auteur > 1;
*/
?>

21
lang/paquet-rssarticle_fr.php

@ -0,0 +1,21 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// R
'rssarticle_description' => 'Ce plugin recopie les flux RSS (articles syndiqués) en articles
-* reprise du contenu du flux;
-* créé l\'auteur s\'il est mentionné dans le flux;
-* ajoute les documents distants présents dans le flux;
-* dans le champs URL de l\'article, on indique l\'adresse de l\'article d\'origine.
Pour éviter les doublons et les imports successifs, une fois l\'article créé, l\'article syndiqué est rejeté (ce qui permet de suivre où en sont les recopiés).',
'rssarticle_nom' => 'Flux RSS en articles',
'rssarticle_slogan' => 'Recopie les flux RSS en articles',
);
?>

37
lang/rssarticle_ar.php

@ -0,0 +1,37 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined("_ECRIRE_INC_VERSION")) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// A
'article_origine' => '&#1607;&#1584;&#1575; &#1575;&#1604;&#1605;&#1602;&#1575;&#1604; &#1605;&#1606;&#1602;&#1608;&#1604; &#1593;&#1606; &#1605;&#1608;&#1602;&#1593;',
'activer_recopie_intro' => '&#1578;&#1583;&#1601;&#1602; RSS &#1575;&#1604;&#1609; &#1575;&#1604;&#1605;&#1602;&#1575;&#1604;&#1575;&#1578;',
'activer_recopie' => '&#1606;&#1587;&#1582; &#1575;&#1604;&#1605;&#1602;&#1575;&#1604;&#1575;&#1578; &#1575;&#1604;&#1606;&#1575;&#1578;&#1581;&#1577; &#1593;&#1606; &#1578;&#1583;&#1601;&#1602; RSS &#1575;&#1604;&#1609; &#1605;&#1602;&#1575;&#1604;&#1575;&#1578; SPIP',
// C
'citer_source' => '&#1603;&#1585; &#1575;&#1604;&#1605;&#1589;&#1583;&#1585;',
'citer_source_oui' => '&#1584;&#1603;&#1585; &#1593;&#1606;&#1608;&#1575;&#1606; &#1575;&#1604;&#1605;&#1602;&#1575;&#1604; &#1575;&#1604;&#1605;&#1589;&#1583;&#1585; &#1601;&#1610; &#1575;&#1604;&#1605;&#1602;&#1575;&#1604; &#1575;&#1604;&#1605;&#1587;&#1578;&#1608;&#1585;&#1583;',
'copie_logo' => '&#1606;&#1587;&#1582; &#1588;&#1593;&#1575;&#1585; &#1575;&#1604;&#1605;&#1608;&#1602;&#1593; &#1608;&#1580;&#1593;&#1604;&#1607; &#1587;&#1593;&#1575;&#1585; &#1575;&#1604;&#1605;&#1602;&#1575;&#1604;',
// S
'statut_article_importe' => '&#1608;&#1590;&#1593;&#1610;&#1577; &#1575;&#1604;&#1605;&#1602;&#1575;&#1604;&#1575;&#1578; &#1575;&#1604;&#1605;&#1587;&#1578;&#1608;&#1585;&#1583;&#1577;',
'suivi_syndic' => '&#1605;&#1578;&#1575;&#1576;&#1593;&#1577; &#1575;&#1604;&#1578;&#1585;&#1582;&#1610;&#1589;',
// E
'email_alerte' => '&#1573;&#1606;&#1584;&#1575;&#1585; &#1576;&#1575;&#1604;&#1576;&#1585;&#1610;&#1583; &#1575;&#1604;&#1573;&#1604;&#1603;&#1578;&#1585;&#1608;&#1606;&#1610; &#1593;&#1606;&#1583; &#1603;&#1604; &#1578;&#1585;&#1582;&#1610;&#1589; &#1601;&#1610; &#1605;&#1602;&#1575;&#1604;&#1567;',
'email_alerte_email' => '&#1601;&#1610; &#1581;&#1575;&#1604; &#1575;&#1604;&#1605;&#1608;&#1575;&#1601;&#1602;&#1577;&#1548; &#1593;&#1604;&#1609; &#1571;&#1610; &#1593;&#1606;&#1608;&#1575;&#1606; &#1610;&#1578;&#1605; &#1573;&#1585;&#1587;&#1575;&#1604; &#1575;&#1604;&#1573;&#1606;&#1584;&#1575;&#1585;&#1567;',
// I
'install_rssarticle' => '&#1573;&#1606;&#1588;&#1575;&#1569; &#1580;&#1583;&#1608;&#1604; spip_articles_syndic',
// M
'mode' => '&#1608;&#1590;&#1593;&#1610;&#1577; &#1575;&#1604;&#1578;&#1588;&#1594;&#1610;&#1604;',
'mode_auto' => '&#1575;&#1604;&#1608;&#1590;&#1593;&#1610;&#1577; &#1575;&#1604;&#1570;&#1604;&#1610;&#1577;: &#1606;&#1587;&#1582; &#1603;&#1604; &#1575;&#1604;&#1605;&#1608;&#1575;&#1602;&#1593; &#1575;&#1604;&#1605;&#1576;&#1608;&#1576;&#1577; &#1603;&#1605;&#1602;&#1575;&#1604;&#1575;&#1578;',
'mode_manuel' => '&#1575;&#1604;&#1608;&#1590;&#1593;&#1610;&#1577; &#1575;&#1604;&#1610;&#1583;&#1608;&#1610;&#1577;: &#1578;&#1581;&#1583;&#1583; &#1610;&#1583;&#1608;&#1610;&#1575;&#1611; &#1575;&#1604;&#1605;&#1608;&#1575;&#1602;&#1593; &#1575;&#1604;&#1605;&#1576;&#1608;&#1576;&#1577; &#1575;&#1604;&#1578;&#1610; &#1578;&#1585;&#1610;&#1583; &#1606;&#1587;&#1582;&#1607;&#1575; &#1603;&#1605;&#1602;&#1575;&#1604;&#1575;&#1578;'
);
?>

45
lang/rssarticle_fr.php

@ -0,0 +1,45 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
if (!defined("_ECRIRE_INC_VERSION")) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// A
'article_origine' => 'Cet article est repris du site',
'activer_recopie_intro' => 'Flux RSS en Articles',
'activer_recopie' => 'Copier les articles issus de ce flux RSS en articles SPIP',
// C
'citer_source' => 'Citer la source',
'citer_source_oui' => 'Citer l\'URL de l\'article d\'origine dans l\'article import&eacute;',
'configuration_rssarticle' => 'Flux RSS en articles',
'copie_logo' => 'Recopier le logo du site comme logo d\'article',
'cron_interval' => 'Fréquence de la copie des flux RSS en articles',
'cron_interval_timer' => 'Intervalle en seconde ',
// S
'statut_article_importe' => 'Statut des articles import&eacute;s',
'suivi_syndic' => 'Suivi de la syndication',
// E
'email_alerte' => 'Pr&eacute;venir par email &agrave; chaque nouvelle syndication en articles ?',
'email_alerte_email' => 'Si oui, sur quel email ? ',
// I
'install_rssarticle' => 'Cr&eacute;ation de la table spip_articles_syndic',
// M
'maj_manuelle' => 'La copie manuelle des derniers flux RSS en articles a été effectuée',
'maj_recharge' => 'Relancer la copie manuelle',
'mode' => 'Mode de fonctionnement',
'mode_auto' => 'Mode automatique: tous les sites r&eacute;f&eacute;renc&eacute;s sont recopi&eacute;s en articles',
'mode_manuel' => 'Mode manuel: vous selectionnez manuellement les sites r&eacute;f&eacute;renc&eacute;s qui doivent être recopi&eacute;s en articles',
// T
'titre_page_configurer_rssarticle' => 'Copie RSS en articles'
);
?>

21
paquet.xml

@ -0,0 +1,21 @@
<paquet
prefix="rssarticle"
categorie="edition"
version="1.0.0"
etat="dev"
compatibilite="[3.0.2;3.0.*]"
logo="prive/themes/spip/images/rssarticle-64.png"
documentation="http://www.spip-contrib.net/Plugin-Flux-RSS-en-articles"
schema="1.0.0"
>
<nom>Flux RSS en articles</nom>
<auteur lien='http://www.erationnal.org'>erational</auteur>
<licence>GNU/GPL v3</licence>
<pipeline nom="declarer_tables_principales" inclure="base/rssarticle.php"/>
<pipeline nom="declarer_tables_interfaces" inclure="base/rssarticle.php"/>
<pipeline nom="declarer_tables_auxiliaires" inclure="base/rssarticle.php"/>
<pipeline nom="taches_generales_cron" inclure="rssarticle_pipelines.php"/>
<pipeline nom="affiche_milieu" inclure="rssarticle_pipelines.php"/>
<menu nom="configurer_rssarticle" titre="rssarticle:configuration_rssarticle" parent="menu_configuration" icone="prive/themes/spip/images/rssarticle-16.png" />
</paquet>

1
prive/contenu/rssarticle.html

@ -0,0 +1 @@
#FORMULAIRE_EDITER_RSSARTICLE{#ID_SYNDIC}

7
prive/squelettes/contenu/configurer_rssarticle.html

@ -0,0 +1,7 @@
[(#AUTORISER{configurer,_rssarticle}|sinon_interdire_acces)]
<h1 class="grostitre"><:rssarticle:titre_page_configurer_rssarticle:></h1>
<div class="ajax">
#FORMULAIRE_CONFIGURER_RSSARTICLE
</div>

BIN
prive/themes/spip/images/rssarticle-128.png

After

Width: 64  |  Height: 64  |  Size: 2.8 KiB

BIN
prive/themes/spip/images/rssarticle-16.png

After

Width: 16  |  Height: 16  |  Size: 981 B

BIN
prive/themes/spip/images/rssarticle-32.png

After

Width: 32  |  Height: 32  |  Size: 1.2 KiB

BIN
prive/themes/spip/images/rssarticle-64.png

After

Width: 64  |  Height: 64  |  Size: 2.8 KiB

60
rssarticle_administrations.php

@ -0,0 +1,60 @@
<?php
$GLOBALS['rssarticle_base_version'] = 0.3;
function rssarticle_upgrade(){
$version_base = $GLOBALS['rssarticle_base_version'];
$current_version = 0.0;
if ((!isset($GLOBALS['meta']['rssarticle_base_version']) )
|| (($current_version = $GLOBALS['meta']['rssarticle_base_version'])!=$version_base)){
include_spip('base/rssarticle');
if ($current_version==0.0){
include_spip('base/create');
include_spip('base/abstract_sql');
creer_base();
maj_tables('spip_syndic');
echo "<p>"._T('rssarticle:install_rssarticle')."</p>";
ecrire_meta('rssarticle_base_version',$current_version=$version_base,'non');
}
if (version_compare($current_version,"0.3","<")){
include_spip('base/create');
maj_tables('spip_syndic');
echo "<p>"._T('rssarticle:mise_a_jour_v03')."</p>";
ecrire_meta('rssarticle_base_version',$current_version="0.3",'non');
}
ecrire_metas();
}
}
function rssarticle_install($action){
$version_base = $GLOBALS['rssarticle_base_version'];
switch ($action){
case 'test':
return (isset($GLOBALS['meta']['rssarticle_base_version']) AND ($GLOBALS['meta']['rssarticle_base_version']>=$version_base));
break;
case 'install':
rssarticle_upgrade();
break;
case 'uninstall':
rssarticle_vider_tables();
break;
}
}
/**
* Desinstallation du plugin
*
* @param string $nom_meta_base_version
*/
function rssarticle_vider_tables() {
sql_alter("TABLE spip_syndic DROP rssarticle");
spip_query("DROP TABLE spip_articles_syndic");
effacer_meta('rssarticle_base_version');
ecrire_metas();
}
?>

54
rssarticle_pipelines.php

@ -0,0 +1,54 @@
<?php
/**
* genie / cron
*
*/
function rssarticle_taches_generales_cron($taches_generales){
$delai = 60*10; // valeur defaut: ts les 10 min
// si cfg dispo, on charge les valeurs
if (function_exists(lire_config)) {
if (lire_config('rssarticle/cron_interval_value')!="") { // verifier si champs CFG a ete renseigne sur ce plugin (retro-compat)
$delai = intval(lire_config('rssarticle/cron_interval_value'));
if ($delai<10)
$delai=10; // securite pour les valeurs absurdes
}
}
$taches_generales['rssarticle_copie'] = $delai;
return $taches_generales;
}
/**
* Insertion au centre des pages d'articles dans le privé
* Affiche un formulaire d'édition de la licence de l'article
*
* @param array $flux Le contexte du pipeline
*/
function rssarticle_affiche_milieu($flux) {
if ($flux['args']['exec'] == 'site'){
// si cfg dispo, on charge les valeurs
if (function_exists(lire_config)) {
if (lire_config('rssarticle/mode')=="auto")
$mode_auto=true; else $mode_auto=false;
}else{ // sinon valeur par defaut
$mode_auto=false; // mode: manuel
}
if (!$mode_auto) {
$contexte['id_syndic'] = $flux["args"]["id_syndic"];
$out = debut_cadre_relief(_DIR_PLUGIN_RSSARTICLE."prive/themes/spip/images/rssarticle-32.png", true, '',_T("rssarticle:activer_recopie_intro"));
$out .= "\n<div id='bloc_rssarticle'>";
$out .= "\n". recuperer_fond('prive/contenu/rssarticle',$contexte,array('ajax'=>false));
$out .= "\n</div>";
$out .= "\n". fin_cadre_relief(true);
if ($p=strpos($flux['data'],'<!--affiche_milieu-->'))
$flux['data'] = substr_replace($flux['data'],$out,$p,0);
}
}
return $flux;
}
?>
Loading…
Cancel
Save