Browse Source

Déplacements de fichiers dans le plugin sites

spip-3.0
marcimat@rezo.net 12 years ago
parent
commit
94be781f89
  1. 5
      .gitattributes
  2. 39
      balise/formulaire_site.php
  3. 346
      exec/sites.php
  4. 85
      exec/sites_edit.php
  5. 57
      exec/sites_tous.php
  6. 247
      genie/syndic.php
  7. 6
      plugin.xml
  8. 17
      sites_pipelines.php

5
.gitattributes vendored

@ -1,5 +1,10 @@
* text=auto !eol
action/instituer_syndic_article.php -text
balise/formulaire_site.php -text
exec/sites.php -text
exec/sites_edit.php -text
exec/sites_tous.php -text
genie/syndic.php -text
images/actions-24.png -text
images/actions-filigrane-24.png -text
images/annuler-recherche.png -text

39
balise/formulaire_site.php

@ -0,0 +1,39 @@
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2010 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
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
function balise_FORMULAIRE_SITE ($p) {
return calculer_balise_dynamique($p,'FORMULAIRE_SITE', array('id_rubrique'));
}
// http://doc.spip.org/@balise_FORMULAIRE_SITE_stat
function balise_FORMULAIRE_SITE_stat($args, $context_compil) {
// Pas d'id_rubrique ? Erreur de contexte
if (!$args[0]) {
$msg = array('zbug_champ_hors_motif',
array ('champ' => 'FORMULAIRE_SITE',
'motif' => 'RUBRIQUES'));
erreur_squelette($msg, $context_compil);
return '';
}
// Verifier que les visisteurs sont autorises a proposer un site
return (($GLOBALS['meta']["proposer_sites"] != 2) ? '' : $args);
}
?>

346
exec/sites.php

@ -0,0 +1,346 @@
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2010 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/presentation');
include_spip('inc/date');
include_spip('inc/config');
// http://doc.spip.org/@exec_sites_dist
function exec_sites_dist()
{
exec_sites_args(intval(_request('id_syndic')));
}
// http://doc.spip.org/@exec_sites_args
function exec_sites_args($id_syndic)
{
if (!autoriser('voir','site',$id_syndic)
OR (!$row = sql_fetsel("*", "spip_syndic", "id_syndic=$id_syndic"))) {
include_spip('inc/minipres');
echo minipres(_T('public:aucun_site'));
} else {
$id_rubrique = $row["id_rubrique"];
$nom_site = $row["nom_site"];
$titre_page = "&laquo; $nom_site &raquo;";
pipeline('exec_init',array('args'=>array('exec'=>'sites','id_syndic'=>$id_syndic),'data'=>''));
$commencer_page = charger_fonction('commencer_page', 'inc');
echo $commencer_page("$titre_page","naviguer","sites", $id_rubrique);
afficher_site($id_syndic, $id_rubrique, $nom_site, $row);
echo fin_gauche();
echo fin_page();
}
}
// http://doc.spip.org/@afficher_site
function afficher_site($id_syndic, $id_rubrique, $nom_site, $row){
global $spip_lang_left, $spip_lang_right;
$cherche_mot = _request('cherche_mot');
$select_groupe = _request('select_groupe');
$id_secteur = $row["id_secteur"];
$url_site = $row["url_site"];
$url_syndic = $row["url_syndic"];
$descriptif = $row["descriptif"];
$syndication = $row["syndication"];
$statut = $row["statut"];
$date_heure = $row["date"];
$date_syndic = $row['date_syndic'];
$mod = $row['moderation'];
$extra=$row["extra"];
$flag_administrable = autoriser('modifier','site',$id_syndic);
$flag_editable = ($flag_administrable OR ($GLOBALS['meta']["proposer_sites"] > 0 AND ($statut == 'prop')));
$meme_rubrique = charger_fonction('meme_rubrique', 'inc');
$iconifier = charger_fonction('iconifier', 'inc');
if ($flag_editable AND ($statut == 'publie'))
$dater = charger_fonction('dater', 'inc');
if ($flag_administrable)
$instituer_site = charger_fonction('instituer_site','inc');
$lister_objets = charger_fonction('lister_objets','inc');
echo debut_grand_cadre(true);
echo afficher_hierarchie($id_rubrique,true,$id_syndic,'site',$row['id_secteur'],($row['statut'] == 'publie'));
echo fin_grand_cadre(true);
echo debut_gauche('', true);
echo debut_boite_info(true);
echo pipeline ('boite_infos', array('data' => '',
'args' => array(
'type'=>'site',
'id' => $id_syndic,
'row' => $row
)
));
echo fin_boite_info(true);
echo $iconifier('syndic', $id_syndic, 'sites', false, $flag_administrable);
echo pipeline('afficher_config_objet',array('args'=>array('type'=>'site','id'=>$id_syndic),'data'=>''));
echo pipeline('affiche_gauche',array('args'=>array('exec'=>'sites','id_syndic'=>$id_syndic),'data'=>''));
echo creer_colonne_droite('', true);
echo $meme_rubrique($id_rubrique, $id_syndic, 'syndic');
echo pipeline('affiche_droite',array('args'=>array('exec'=>'sites','id_syndic'=>$id_syndic),'data'=>''));
echo bloc_des_raccourcis(
icone_horizontale(_T('icone_voir_sites_references'), generer_url_ecrire("sites_tous",""), "site-24.png","", false)
);
echo debut_droite('', true);
if ($syndication == 'off' OR $syndication == 'sus')
$droit = $id_rubrique;
else $droit = 0;
$url_affichee = $url_site;
if (strlen($url_affichee) > 40) $url_affichee = substr($url_affichee, 0, 30)."...";
$actions =
($flag_editable ? icone_inline(_T('icone_modifier_site'), generer_url_ecrire('sites_edit',"id_syndic=$id_syndic"), "site-24.png", "edit",$spip_lang_right) : "");
$haut =
"<div class='bandeau_actions'>$actions</div>".
gros_titre($nom_site?$nom_site:"("._T('info_sans_titre_2').")", '' , false)
. "<a href='$url_site' class='url_site'>$url_affichee</a>";
$type = 'site';
$contexte = array('id'=>$id_syndic,'id_rubrique'=>$id_rubrique);
$fond = recuperer_fond("prive/contenu/$type",$contexte);
// permettre aux plugin de faire des modifs ou des ajouts
$fond = pipeline('afficher_contenu_objet',
array(
'args'=>array(
'type'=>$type,
'id_objet'=>$id_syndic,
'contexte'=>$contexte),
'data'=> $fond));
$fond = "<div id='wysiwyg'>$fond</div>";
$onglet_contenu =
(_INTERFACE_ONGLETS?
($statut == 'prop' ? "<p class='site_prop'>"._T('info_site_propose')." <b>".affdate($date_heure)."&nbsp;</b></p>" : "")
. $fond:"")
. (($syndication == "oui" OR $syndication == "off" OR $syndication == "sus") ?
"<p class='site_syndique'><a href='".htmlspecialchars($url_syndic)."'>"
. http_img_pack('feed.png', 'RSS'). '</a>'._T('info_site_syndique').'</p>'
. (($syndication == "off" OR $syndication=="sus") ?
"<div class='site_syndique_probleme'>" . _T('avis_site_syndique_probleme', array('url_syndic' => quote_amp($url_syndic)))
. redirige_action_auteur('editer_site', $id_syndic, 'sites', '',
"<input type='hidden' name='reload' value='oui' />
<input type='submit' value=\""
. attribut_html(_T('lien_nouvelle_recuperation'))
. "\" class='fondo spip_xx-small' />")
. "</div>"
: "")
. $lister_objets('syndic_articles',array('titre'=>_T('titre_articles_syndiques'),'id_syndic'=>$id_syndic,'par'=>'date'))
. ($date_syndic ? "<div class='date_syndic'>" . _T('info_derniere_syndication').' '.affdate_heure($date_syndic) .".</div>" : "")
. "<div class='mise_a_jour_syndic'>"
. redirige_action_post('editer_site', $id_syndic, 'sites', "id_syndic=$id_syndic",
"<input type='hidden' name='reload' value='oui' />
<input type='submit' value=\""
. attribut_html(_T('lien_mise_a_jour_syndication'))
. "\" class='fondo spip_xx-small' />")
. "</div>"
: choix_feed($id_syndic, $id_rubrique, $nom_site, $row))
. (_INTERFACE_ONGLETS?"":($flag_administrable ? options_moderation($row) : ""))
;
$onglet_proprietes =
(_INTERFACE_ONGLETS?"":
$fond
. ($statut == 'prop' ? "<p class='site_prop'>"._T('info_site_propose')." <b>".affdate($date_heure)."&nbsp;</b></p>" : "")
)
. afficher_site_rubrique($id_syndic, $id_rubrique, $id_secteur)
. ($dater ? $dater($id_syndic, $flag_editable, $statut, 'syndic', 'sites', $date_heure) : "")
. (_INTERFACE_ONGLETS?($flag_administrable ? options_moderation($row) : ""):"")
. pipeline('affiche_milieu',array('args'=>array('exec'=>'sites','id_syndic'=>$id_syndic),'data'=>''))
;
$onglet_documents = "" ;
$onglet_interactivite = "";
echo
pipeline('afficher_fiche_objet',array('args'=>array('type'=>'site','id'=>$id_syndic),'data'=>
"<div class='fiche_objet'>"
. $haut
. afficher_onglets_pages(array(
'voir' => _T('onglet_contenu'),
'props' => _T('onglet_proprietes'),
'docs' => _T('onglet_documents'),
'interactivite' => _T('onglet_interactivite'),
),
_INTERFACE_ONGLETS?
array(
'voir'=>$onglet_contenu,
'props'=>$onglet_proprietes,
'docs'=>$onglet_documents,
'interactivite'=>$onglet_interactivite,
)
:array(
'props'=>$onglet_proprietes,
'voir'=>$onglet_contenu )
)
. "</div>"));
}
// http://doc.spip.org/@options_moderation
function options_moderation($row) {
global $spip_lang_left;
if ($row['syndication'] == 'non') return '';
$id_syndic = $row['id_syndic'];
$moderation = $row['moderation'];
if ($moderation != 'oui') $moderation='non';
$res = '';
$res .= "<div style='text-align: ".$GLOBALS['spip_lang_left']."'>".
_T('syndic_choix_moderation')
. "<div style='padding-$spip_lang_left: 40px;'>"
. afficher_choix('moderation', $moderation,
array(
'non' => _T('info_publier') .' ('._T('bouton_radio_modere_posteriori').')',
'oui' => _T('info_bloquer') .' ('._T('bouton_radio_modere_priori').')' ))
. "</div></div>\n";
// Oublier les vieux liens ?
// Depublier les liens qui ne figurent plus ?
$res .= "\n<div>&nbsp;</div>"
. "\n<div style='text-align:".$GLOBALS['spip_lang_left']."'>"._T('syndic_choix_oublier'). '</div>'
. "\n<ul style='text-align:".$GLOBALS['spip_lang_left']."'>\n";
$on = array('oui' => _T('item_oui'), 'non' => _T('item_non'));
if (!$miroir = $row['miroir'])
$miroir = 'non';
$res .= "\n<li>"._T('syndic_option_miroir').' '
. afficher_choix('miroir', $miroir, $on, " &nbsp; ")
. "</li>\n";
if (!$oubli = $row['oubli'])
$oubli = 'non';
$res .= "\n<li>"
. _T('syndic_option_oubli', array('mois' => 2)).' '
. afficher_choix('oubli', $oubli, $on," &nbsp; ")
. "</li>\n"
. "</ul>\n";
// Prendre les resumes ou le texte integral ?
if (!$resume = $row['resume'])
$resume = 'oui';
$res .= "\n<div style='text-align: $spip_lang_left'>"
. _T('syndic_choix_resume')
. "\n<div style='padding-$spip_lang_left: 40px;'>"
. afficher_choix('resume', $resume,
array( 'oui' => _T('syndic_option_resume_oui'),
'non' => _T('syndic_option_resume_non') ))
. "</div></div>\n";
// Bouton "Valider"
$res .= "\n<div style='text-align:".$GLOBALS['spip_lang_right'].";'><input type='submit' value='"._T('bouton_valider')."' class='fondo' /></div>\n";
return
debut_cadre_relief('feed.png', true, "", _T('syndic_options').aide('artsyn'))
. redirige_action_post('editer_site', "options/$id_syndic", 'sites', '', $res)
. fin_cadre_relief(true);
}
// Site pour lesquels feedfinder a un ou plusieurs flux,
// et l'on propose de choisir
// http://doc.spip.org/@choix_feed
function choix_feed($id_syndic, $id_rubrique, $nom_site, $row) {
global $spip_lang_left, $spip_lang_right;
if (!preg_match(',^\s*select: (.*),', $row['url_syndic'], $regs))
return '';
$url_site = $row["url_site"];
$descriptif = $row["descriptif"];
$statut = $row["statut"];
$date_heure = $row["date"];
$date_syndic = $row['date_syndic'];
$mod = $row['moderation'];
$extra=$row["extra"];
$res = "";
foreach (array('id_rubrique', 'nom_site', 'url_site', 'descriptif', 'statut') as $var) {
$res .= "<input type='hidden' name='$var' value=\"".entites_html($$var)."\" />\n";
}
$res .= "<div style='text-align: $spip_lang_left'>\n";
$res .= "<div><input type='radio' name='syndication' value='non' id='syndication_non' checked='checked' />";
$res .= " <b><label for='syndication_non'>"._T('bouton_radio_non_syndication')."</label></b></div>\n";
$res .= "<div><input type='radio' name='syndication' value='oui' id='syndication_oui' />";
$res .= " <label for='syndication_oui'>"._T('bouton_radio_syndication')."</label></div>\n";
$res .= "<select name='url_syndic' id='url_syndic'>\n";
foreach (explode(' ',$regs[1]) as $feed) {
$res .= '<option value="'.entites_html($feed).'">'.$feed."</option>\n";
}
$res .= "</select>\n";
$res .= aide("rubsyn");
$res .= "<div style='text-align: $spip_lang_right'><input type='submit' value='"._T('bouton_valider')."' class='fondo' /></div>\n";
$res .= "</div>\n";
$res = redirige_action_post('editer_site', $id_syndic, 'sites','', $res);
return debut_cadre_relief('', true) . $res . fin_cadre_relief(true);
}
// http://doc.spip.org/@afficher_site_rubrique
function afficher_site_rubrique($id_syndic, $id_rubrique, $id_secteur)
{
global $spip_lang_right;
if (!_INTERFACE_ONGLETS) return "";
$chercher_rubrique = charger_fonction('chercher_rubrique', 'inc');
$form = $chercher_rubrique($id_rubrique, 'site', false);
if (strpos($form,'<select')!==false) {
$form .= "<div style='text-align: $spip_lang_right;'>"
. '<input class="fondo" type="submit" value="'._T('bouton_choisir').'"/>'
. "</div>";
}
$msg = _T('titre_cadre_interieur_rubrique');
$form = "<input type='hidden' name='editer_article' value='oui' />\n" . $form;
$form = redirige_action_post("editer_site", $id_syndic, 'sites', $form, " class='submit_plongeur'");
if ($id_rubrique == 0) $logo = "racine-24.png";
elseif ($id_secteur == $id_rubrique) $logo = "secteur-24.png";
else $logo = "rubrique-24.png";
return debut_cadre_couleur($logo, true, "", $msg) . $form .fin_cadre_couleur(true);
}
?>

85
exec/sites_edit.php

@ -0,0 +1,85 @@
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2010 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/presentation');
// http://doc.spip.org/@exec_sites_edit_dist
function exec_sites_edit_dist()
{
global $connect_statut, $connect_id_rubrique, $spip_lang_right;
$id_syndic = intval(_request('id_syndic'));
$row = sql_fetsel("*", "spip_syndic", "id_syndic=$id_syndic");
if ($row) {
$id_syndic = $row["id_syndic"];
$id_rubrique = $row["id_rubrique"];
$nom_site = $row["nom_site"];
$new = false;
} else {
$id_rubrique = intval(_request('id_rubrique'));
$new = 'oui';
$nom_site = '';
if (!$id_rubrique) {
$in = !$connect_id_rubrique ? ''
: sql_in('id_rubrique', $connect_id_rubrique);
$id_rubrique = sql_getfetsel('id_rubrique', 'spip_rubriques', $in, '', 'id_rubrique DESC', 1);
}
if (!autoriser('creersitedans','rubrique',$id_rubrique )){
// manque de chance, la rubrique n'est pas autorisee, on cherche un des secteurs autorises
$res = sql_select("id_rubrique", "spip_rubriques", "id_parent=0");
while (!autoriser('creersitedans','rubrique',$id_rubrique ) && $t = sql_fetch($res)){
$id_rubrique = $t['id_rubrique'];
}
}
}
if ( ($new!='oui' AND (!autoriser('voir','site',$id_syndic) OR !autoriser('modifier','site',$id_syndic)))
OR ($new=='oui' AND !autoriser('creersitedans','rubrique',$id_rubrique)) ){
include_spip('inc/minipres');
echo minipres();
} else {
$commencer_page = charger_fonction('commencer_page', 'inc');
pipeline('exec_init',array('args'=>array('exec'=>'sites_edit','id_syndic'=>$id_syndic),'data'=>''));
echo $commencer_page(_T('info_site_reference_2'), "naviguer", "sites", $id_rubrique);
echo debut_grand_cadre(true);
echo afficher_hierarchie($id_rubrique,'',$id_syndic,'site',$row['id_secteur'],($row['statut'] == 'publie'));
echo fin_grand_cadre(true);
echo debut_gauche('', true);
echo pipeline('affiche_gauche',array('args'=>array('exec'=>'sites_edit','id_syndic'=>$id_syndic),'data'=>''));
echo creer_colonne_droite('', true);
echo pipeline('affiche_droite',array('args'=>array('exec'=>'sites_edit','id_syndic'=>$id_syndic),'data'=>''));
echo debut_droite('', true);
$contexte = array(
'icone_retour'=>$new=='oui'?'':icone_inline(_T('icone_retour'), generer_url_ecrire("sites","id_syndic=$id_syndic"), "site-24.png", "",$GLOBALS['spip_lang_left']),
'redirect'=>generer_url_ecrire("sites"),
'titre'=>$nom_site,
'new'=>$new == "oui"?$new:$id_syndic,
'id_rubrique'=>$id_rubrique,
'config_fonc'=>'sites_edit_config'
);
echo recuperer_fond("prive/editer/site", $contexte);
echo pipeline('affiche_milieu',array('args'=>array('exec'=>'sites_edit','id_syndic'=>$id_syndic),'data'=>''));
echo fin_gauche(), fin_page();
}
}
?>

57
exec/sites_tous.php

@ -0,0 +1,57 @@
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2010 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/presentation');
// http://doc.spip.org/@exec_sites_tous_dist
function exec_sites_tous_dist() {
global $spip_lang_right;
pipeline('exec_init',array('args'=>array('exec'=>'sites_tous'),'data'=>''));
$commencer_page = charger_fonction('commencer_page', 'inc');
echo $commencer_page(_T('titre_page_sites_tous'),"naviguer","sites");
echo debut_gauche('', true);
echo pipeline('affiche_gauche',array('args'=>array('exec'=>'sites_tous'),'data'=>''));
echo creer_colonne_droite('', true);
echo pipeline('affiche_droite',array('args'=>array('exec'=>'sites_tous'),'data'=>''));
echo debut_droite('', true);
$lister_objets = charger_fonction('lister_objets','inc');
echo $lister_objets('sites',array('titre'=>_T('titre_sites_tous'),'syndication'=>'non','statut'=>'publie','par'=>"nom_site"));
echo $lister_objets('sites',array('titre'=>_T('titre_sites_syndiques'),'syndication'=>array('oui','sus'),'statut'=>'publie','par'=>"nom_site"));
echo $lister_objets('sites',array('titre'=>_T('titre_sites_proposes'),'statut'=>'prop','par'=>"nom_site"));
if (autoriser('bouton','site_creer')) {
echo
icone_inline(_T('icone_referencer_nouveau_site'), generer_url_ecrire('sites_edit'), "site-24.png", "new", $spip_lang_right),
"<br class='nettoyeur' />";
}
echo pipeline('affiche_milieu',array('args'=>array('exec'=>'sites_tous'),'data'=>''));
echo $lister_objets('sites',array('titre'=>_T('avis_sites_probleme_syndication'),'syndication'=>'off','statut'=>'publie','par'=>"nom_site"));
if ($GLOBALS['visiteur_session']['statut'] == '0minirezo') {
echo $lister_objets('sites',array('titre'=>_T('info_sites_refuses'),'statut'=>'refuse','par'=>"nom_site"));
}
echo $lister_objets('syndic_articles',array('titre'=>_T('titre_dernier_article_syndique'),'par'=>'date'));
echo fin_gauche(), fin_page();
}
?>

247
genie/syndic.php

@ -0,0 +1,247 @@
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2010 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/syndic');
// http://doc.spip.org/@genie_syndic_dist
function genie_syndic_dist($t) {
define('_GENIE_SYNDIC', 1); // pour message de compatibilite ci-dessous
return executer_une_syndication();
}
//
// Effectuer la syndication d'un unique site,
// retourne 0 si aucun a faire ou echec lors de la tentative
//
// http://doc.spip.org/@executer_une_syndication
function executer_une_syndication() {
## valeurs modifiables dans mes_options
## attention il est tres mal vu de prendre une periode < 20 minutes
define('_PERIODE_SYNDICATION', 2*60);
define('_PERIODE_SYNDICATION_SUSPENDUE', 24*60);
// 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 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) {
$res1 = syndic_a_jour($id_syndic, 'off');
} else $res1 = true;
// Et un site 'oui' de plus de 2 heures, qui passe en 'sus' s'il echoue
$where = "syndication='oui'
AND NOT(" . sql_date_proche('date_syndic', (0 - _PERIODE_SYNDICATION) , "MINUTE") . ')';
$id_syndic = sql_getfetsel("id_syndic", "spip_syndic", $where, '', "date_syndic", "1");
if ($id_syndic) {
$res2 = syndic_a_jour($id_syndic, 'sus');
} else $res2 = true;
return ($res1 OR $res2) ? 0 : $id_syndic;
}
//
// Mettre a jour le site
//
// Attention, cette fonction ne doit pas etre appellee simultanement
// sur un meme site: un verrouillage a du etre pose en amont.
//
// http://doc.spip.org/@syndic_a_jour
function syndic_a_jour($now_id_syndic, $statut = 'off') {
include_spip('inc/texte');
if (!defined('_GENIE_SYNDIC'))
spip_log("syndic_a_jour doit etre appelee par Cron. Cf. " .
"http://trac.rezo.net/trac/spip/changeset/10294",
'vieilles_defs');
$row = sql_fetsel("*", "spip_syndic", "id_syndic=$now_id_syndic");
if (!$row) return;
$url_syndic = $row['url_syndic'];
$url_site = $row['url_site'];
if ($row['moderation'] == 'oui')
$moderation = 'dispo'; // a valider
else
$moderation = 'publie'; // en ligne sans validation
sql_updateq('spip_syndic', array('syndication'=>$statut, 'date_syndic'=>date('Y-m-d H:i:s')), "id_syndic=$now_id_syndic");
// Aller chercher les donnees du RSS et les analyser
include_spip('inc/distant');
$rss = recuperer_page($url_syndic, true);
if (!$rss)
$articles = _T('avis_echec_syndication_02');
else
$articles = analyser_backend($rss, $url_syndic);
// Renvoyer l'erreur le cas echeant
if (!is_array($articles)) return $articles;
// Les enregistrer dans la base
$faits = array();
foreach ($articles as $data) {
inserer_article_syndique ($data, $now_id_syndic, $moderation, $url_site, $url_syndic, $row['resume'], $row['documents'], $faits);
}
// moderation automatique des liens qui sont sortis du feed
if (count($faits) > 0) {
$faits = sql_in("id_syndic_article", $faits, 'NOT');
if ($row['miroir'] == 'oui') {
sql_update('spip_syndic_articles', array('statut'=>"'off'", 'maj'=>'maj'), "id_syndic=$now_id_syndic AND $faits");
}
// suppression apres 2 mois des liens qui sont sortis du feed
if ($row['oubli'] == 'oui') {
sql_delete('spip_syndic_articles', "id_syndic=$now_id_syndic AND NOT(" . sqL_date_proche('maj', -2, 'MONTH') . ') AND NOT(' . sql_date_proche('date', -2, 'MONTH') . ") AND $faits");
}
}
// Noter que la syndication est OK
sql_updateq("spip_syndic", array("syndication" => 'oui'), "id_syndic=$now_id_syndic");
return false; # c'est bon
}
//
// Insere un article syndique (renvoie true si l'article est nouveau)
// 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
function inserer_article_syndique ($data, $now_id_syndic, $statut, $url_site, $url_syndic, $resume, $documents, &$faits) {
// Creer le lien s'il est nouveau - cle=(id_syndic,url)
// On coupe a 255 caracteres pour eviter tout doublon
// sur une URL de plus de 255 qui exloserait la base de donnees
$le_lien = substr($data['url'], 0,255);
// si true, un lien deja syndique arrivant par une autre source est ignore
// par defaut [false], chaque source a sa liste de liens, eventuellement
// les memes
define('_SYNDICATION_URL_UNIQUE', false);
// Si false, on ne met pas a jour un lien deja syndique avec ses nouvelles
// donnees ; par defaut [true] : on met a jour si le contenu a change
// Attention si on modifie a la main un article syndique, les modifs sont
// ecrasees lors de la syndication suivante
define('_SYNDICATION_CORRECTION', true);
// Chercher les liens de meme cle
// S'il y a plusieurs liens qui repondent, il faut choisir le plus proche
// (ie meme titre et pas deja fait), le mettre a jour et ignorer les autres
$n = 0;
$s = sql_select("id_syndic_article,titre,id_syndic,statut", "spip_syndic_articles",
"url=" . sql_quote($le_lien)
. (_SYNDICATION_URL_UNIQUE
? ''
: " AND id_syndic=$now_id_syndic")
." AND " . sql_in('id_syndic_article', $faits, 'NOT'), "", "maj DESC");
while ($a = sql_fetch($s)) {
$id = $a['id_syndic_article'];
$id_syndic = $a['id_syndic'];
if ($a['titre'] == $data['titre']) {
$id_syndic_article = $id;
break;
}
$n++;
}
// S'il y en avait qu'un, le prendre quel que soit le titre
if ($n == 1)
$id_syndic_article = $id;
// Si l'article n'existe pas, on le cree
elseif (!isset($id_syndic_article)) {
$ajout = $id_syndic_article = sql_insertq('spip_syndic_articles',
array('id_syndic' => $now_id_syndic,
'url' => $le_lien,
'date' => date("Y-m-d H:i:s", $data['date']),
'statut' => $statut));
if (!$ajout) return;
}
$faits[] = $id_syndic_article;
// Si le lien n'est pas nouveau, plusieurs options :
if (!$ajout) {
// 1. Lien existant : on corrige ou pas ?
if (!_SYNDICATION_CORRECTION) {
return;
}
// 2. Le lien existait deja, lie a un autre spip_syndic
if (_SYNDICATION_URL_UNIQUE AND $id_syndic != $now_id_syndic)
return;
}
// Descriptif, en mode resume ou mode 'full text'
// on prend en priorite data['descriptif'] si on est en mode resume,
// et data['content'] si on est en mode "full syndication"
if ($resume != 'non') {
// mode "resume"
$desc = strlen($data['descriptif']) ?
$data['descriptif'] : $data['content'];
$desc = couper(trim(textebrut($desc)), 300);
} else {
// mode "full syndication"
// choisir le contenu pertinent
// & refaire les liens relatifs
$desc = strlen($data['content']) ?
$data['content'] : $data['descriptif'];
$desc = liens_absolus($desc, $url_syndic);
}
// tags & enclosures (preparer spip_syndic_articles.tags)
$tags = $data['enclosures'];
# eviter les doublons (cle = url+titre) et passer d'un tableau a une chaine
if ($data['tags']) {
$vus = array();
foreach ($data['tags'] as $tag) {
$cle = supprimer_tags($tag).extraire_attribut($tag,'href');
$vus[$cle] = $tag;
}
$tags .= ($tags ? ', ' : '') . join(', ', $vus);
}
// Mise a jour du contenu (titre,auteurs,description,date?,source...)
$vals = array(
'titre' => $data['titre'],
'lesauteurs' => $data['lesauteurs'],
'descriptif' => $desc,
'lang'=> substr($data['lang'],0,10),
'source' => substr($data['source'],0,255),
'url_source' => substr($data['url_source'],0,255),
'tags' => $tags);
// 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");
// Point d'entree post_syndication
pipeline('post_syndication',
array(
$le_lien,
$now_id_syndic,
$data
)
);
return $ajout;
}
?>

6
plugin.xml

@ -16,7 +16,11 @@
<nom>declarer_url_objets</nom>
<inclure>sites_pipelines.php</inclure>
</pipeline>
<pipeline>
<nom>taches_generales_cron</nom>
<inclure>sites_pipelines.php</inclure>
</pipeline>
<bouton id='controler_syndication' parent='bando_publication' position="-1">
<icone>images/v1/site-16.png</icone>
<titre>sites:icone_controler_syndication</titre>

17
sites_pipelines.php

@ -23,4 +23,21 @@ function sites_declarer_url_objets($array){
return $array;
}
/**
* Taches periodiques de syndication
*
* @param
* @return
**/
function sites_taches_generales_cron($taches_generales){
if ($GLOBALS['meta']["activer_syndic"] == "oui") {
$taches_generales['syndic'] = 90;
}
return $taches_generales;
}
?>

Loading…
Cancel
Save