/** * 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. * => elle doit toujours etre appelee par job_queue_add * * http://doc.spip.org/@syndic_a_jour * * @param int $now_id_syndic * @return bool|string */ function syndic_a_jour($now_id_syndic) { include_spip('inc/texte'); $call = debug_backtrace(); if ($call[1]['function'] !== 'queue_start_job') { spip_log("syndic_a_jour doit etre appelee par JobQueue Cf. http://trac.rezo.net/trac/spip/changeset/10294", _LOG_ERREUR); } $row = sql_fetsel("*", "spip_syndic", "id_syndic=" . intval($now_id_syndic)); if (!$row) { return; } $url_syndic = $row['url_syndic']; $url_site = $row['url_site']; if ($row['moderation'] == 'oui') { $moderation = 'dispo'; } else { $moderation = 'publie'; } // en ligne sans validation // determiner le statut a poser en cas d'echec : sus par defaut // off si le site est deja off, ou sus depuis trop longtemps $statut = 'sus'; if ($row['statut'] == 'off' or $row['statut'] == 'sus' and time() - strtotime($row['date_syndic']) > _PERIODE_SYNDICATION_SUSPENDUE * 60) { $statut = 'off'; } sql_updateq('spip_syndic', array('syndication' => $statut, 'date_syndic' => date('Y-m-d H:i:s')), "id_syndic=" . intval($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('sites: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=" . intval($now_id_syndic)); return false; # c'est bon }
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 maj < DATE_SUB(NOW(), INTERVAL 2 MONTH) AND date < DATE_SUB(NOW(), INTERVAL 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 }