
20 changed files with 824 additions and 0 deletions
@ -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 |
||||
|
@ -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; |
||||
} |
||||
|
||||
|
||||
?> |
@ -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(); |
||||
} |
||||
|
||||
?> |
@ -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 ( |
||||
), |
||||
), |
||||
); |
||||
|
||||
?> |
@ -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> |
@ -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> |
@ -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; |
||||
|
||||
} |
||||
|
||||
?> |
@ -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; |
||||
*/ |
||||
|
||||
?> |
@ -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', |
||||
); |
||||
|
||||
?> |
@ -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' => 'هذا المقال منقول عن موقع', |
||||
'activer_recopie_intro' => 'تدفق RSS الى المقالات', |
||||
'activer_recopie' => 'نسخ المقالات الناتحة عن تدفق RSS الى مقالات SPIP', |
||||
|
||||
// C |
||||
'citer_source' => 'كر المصدر', |
||||
'citer_source_oui' => 'ذكر عنوان المقال المصدر في المقال المستورد', |
||||
'copie_logo' => 'نسخ شعار الموقع وجعله سعار المقال', |
||||
|
||||
// S |
||||
'statut_article_importe' => 'وضعية المقالات المستوردة', |
||||
'suivi_syndic' => 'متابعة الترخيص', |
||||
|
||||
// E |
||||
'email_alerte' => 'إنذار بالبريد الإلكتروني عند كل ترخيص في مقال؟', |
||||
'email_alerte_email' => 'في حال الموافقة، على أي عنوان يتم إرسال الإنذار؟', |
||||
|
||||
// I |
||||
'install_rssarticle' => 'إنشاء جدول spip_articles_syndic', |
||||
|
||||
// M |
||||
'mode' => 'وضعية التشغيل', |
||||
'mode_auto' => 'الوضعية الآلية: نسخ كل المواقع المبوبة كمقالات', |
||||
'mode_manuel' => 'الوضعية اليدوية: تحدد يدوياً المواقع المبوبة التي تريد نسخها كمقالات' |
||||
|
||||
); |
||||
|
||||
|
||||
?> |
@ -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é', |
||||
'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és', |
||||
'suivi_syndic' => 'Suivi de la syndication', |
||||
|
||||
// E |
||||
'email_alerte' => 'Prévenir par email à chaque nouvelle syndication en articles ?', |
||||
'email_alerte_email' => 'Si oui, sur quel email ? ', |
||||
|
||||
// I |
||||
'install_rssarticle' => 'Cré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éférencés sont recopiés en articles', |
||||
'mode_manuel' => 'Mode manuel: vous selectionnez manuellement les sites référencés qui doivent être recopiés en articles', |
||||
|
||||
// T |
||||
'titre_page_configurer_rssarticle' => 'Copie RSS en articles' |
||||
|
||||
); |
||||
|
||||
|
||||
?> |
@ -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> |
@ -0,0 +1 @@
|
||||
#FORMULAIRE_EDITER_RSSARTICLE{#ID_SYNDIC} |
@ -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> |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 981 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 2.8 KiB |
@ -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(); |
||||
} |
||||
?> |
@ -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…
Reference in new issue