Exemple #1
0
/**
 * 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
}
Exemple #2
0
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
}