Beispiel #1
0
function action_syndiquer_site_dist($id_syndic = null)
{
    if (is_null($id_syndic)) {
        $securiser_action = charger_fonction('securiser_action', 'inc');
        $id_syndic = $securiser_action();
    }
    $id_job = job_queue_add('syndic_a_jour', 'syndic_a_jour', array($id_syndic), 'genie/syndic', true);
    // l'executer immediatement si possible
    if ($id_job) {
        include_spip('inc/queue');
        queue_schedule(array($id_job));
    } else {
        spip_log("Erreur insertion syndic_a_jour({$id_syndic}) dans la file des travaux", _LOG_ERREUR);
    }
}
Beispiel #2
0
function executer_une_syndication()
{
    // 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')) . "\n\tAND 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) {
        // inserer la tache dans la file, avec controle d'unicite
        job_queue_add('syndic_a_jour', 'syndic_a_jour', array($id_syndic), 'genie/syndic', true);
    }
    // Et un site 'oui' de plus de 2 heures, qui passe en 'sus' s'il echoue
    $where = "syndication='oui'\n\tAND 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) {
        // inserer la tache dans la file, avec controle d'unicite
        job_queue_add('syndic_a_jour', 'syndic_a_jour', array($id_syndic), 'genie/syndic', true);
    }
    return 0;
}
Beispiel #3
0
function formulaires_configurer_annonces_traiter_dist()
{
    $res = array('editable' => true);
    foreach (array("suivi_edito", "quoi_de_neuf") as $m) {
        if (!is_null($v = _request($m))) {
            ecrire_meta($m, $v == 'oui' ? 'oui' : 'non');
        }
    }
    foreach (array("adresse_suivi", "adresse_suivi_inscription", "adresse_neuf", "jours_neuf", "email_envoi") as $m) {
        if (!is_null($v = _request($m))) {
            ecrire_meta($m, $v);
        }
    }
    $res['message_ok'] = _T('config_info_enregistree');
    // provoquer l'envoi des nouveautes en supprimant le fichier lock
    if (_request('envoi_now')) {
        effacer_meta('dernier_envoi_neuf');
        $id_job = job_queue_add("mail", "Test Envoi des nouveautes", array(0), "genie/");
        include_spip('inc/queue');
        queue_schedule(array($id_job));
        $res['message_ok'] .= "<br />" . _T("info_liste_nouveautes_envoyee");
    }
    return $res;
}
function podcast_post_syndication($flux)
{
    include_spip("inc/filtres");
    $enclosures = extraire_balises($flux["data"]["enclosures"], "a");
    $date = date("Y-m-d h:i:s", $flux["data"]["date"]);
    if (!$date) {
        $date = date("Y-m-d h:i:s");
    }
    if (is_array($enclosures) and sizeof($enclosures) > 0) {
        foreach ($enclosures as $link) {
            if (extraire_attribut($link, 'type') == "audio/mpeg" or extraire_attribut($link, 'type') == "audio/mp3") {
                $liens[] = extraire_attribut($link, 'href');
            }
        }
    }
    if (is_array($liens) and sizeof($liens) > 0) {
        inserer_document_syndic_article($liens, $flux['args']['id_objet'], $date, $flux["data"]["titre"]);
    } else {
        include_spip("inc/utils");
        // lancer une tache cron de scan
        $id_job = job_queue_add('radiobot_scan', "Scan de " . $flux['args']['id_objet'] . " : " . $flux["data"]["titre"], $arguments = array($flux['args']['id_objet'], $flux["data"]["titre"], $flux['data']['url'], $date), 'podcast_pipelines', $no_duplicate = FALSE, strtotime("+10 seconds"), $priority = 0);
    }
    return $flux;
}
Beispiel #5
0
/**
 * fermer la connection depuis le site distant
 * quand on a fini
 *
 * @param array $status
 * @param array $data
 * @return bool
 */
function migration_reception_end_dist($status, $data){


	spip_log('fin de migration. Resultat:'.var_export($data,1),'migration');
	$status['status'] = 'end';
	if ($data['status']=='abort'){
		$status = abandonner_migration_depuis($status);
	}
	else {
		// s'assurer que l'auteur qui migre est bien webmestre a l'arrivee
		$id_webmestre = $data['id_webmestre'];
		include_spip('base/abstract_sql');
		$row = sql_fetsel('*','spip_auteurs','id_auteur='.intval($id_webmestre));
		if ($row AND $row['statut']=='0minirezo'){
			// y a-t-il un champ webmestre dans la base ?
			if (!isset($row['webmestre'])){
				sql_alter("TABLE spip_auteurs ADD webmestre varchar(3) DEFAULT 'non' NOT NULL");
				$row['webmestre']='non';
			}
			if ($row['webmestre']!='oui'){
				sql_updateq("spip_auteurs",array('webmestre'=>'oui'),'id_auteur='.intval($id_webmestre));
			}
		}
	}

	if ((count($status['ignore']) OR count($data['errors']))
	  AND defined('_MIGRATION_EMAIL_NOTIFY_IGNORE')
	  AND $email = _MIGRATION_EMAIL_NOTIFY_IGNORE){
		$sujet = "[Migration-ERR] ".$GLOBALS['meta']['adresse_site'];
		$texte = "";
		if (count($status['ignore']))
			$texte .= var_export($status['ignore'],true);
		if (count($data['errors']))
			$texte .= implode("\n",$data['errors']);
		job_queue_add('envoyer_mail','Erreur migration',array($email, $sujet, $texte),'inc/');
	}

	update_migration_depuis($status);
	finir_migration_status_depuis();

	// si on a pas d'upgrade a suivre, vidons les cache
	$version_installee = sql_getfetsel('valeur','spip_meta',"nom='version_installee'");
	if ($GLOBALS['spip_version']==$version_installee) {
		// supprimer les cache pour forcer la mise a jour du site
		include_spip('inc/invalideur');
		spip_log("purger le site","migration");
		supprime_invalideurs();
		@spip_unlink(_CACHE_RUBRIQUES);
		@spip_unlink(_CACHE_PIPELINES);
		@spip_unlink(_CACHE_PLUGINS_PATH);
		@spip_unlink(_CACHE_PLUGINS_OPT);
		@spip_unlink(_CACHE_PLUGINS_FCT);
		@spip_unlink(_CACHE_PLUGINS_VERIF);
		@spip_unlink(_CACHE_CHEMIN);
		#purger_repertoire(_DIR_CACHE,array('subdir'=>true));
		#purger_repertoire(_DIR_AIDE);
		purger_repertoire(_DIR_VAR.'cache-css');
		purger_repertoire(_DIR_VAR.'cache-js');
	}
	@spip_unlink(_FILE_META);

	// on renvoit le bilan pour affichage sur le site source
	return $status;
}
Beispiel #6
0
/**
 * Envoyer un email de notification
 * Le sujet peut etre vide, dans ce cas il reprendra la premiere ligne non vide du texte
 *
 * @param array/string $emails
 * @param string $texte
 * @param string $sujet
 */
function notifications_envoyer_mails($emails,$texte,$sujet=""){
	// rien a faire si pas de texte !
	if (!strlen($texte))
		return;

	// si on ne specifie qu'un email, le mettre dans un tableau
	if (!is_array($emails))
		$emails = explode(',',$emails);

	notifications_nettoyer_emails($emails);

	// si le sujet est vide, extraire la premiere ligne du corps
	if (!strlen($sujet)){
		// nettoyer un peu les retours chariots
		$texte = str_replace("\r\n", "\r", $texte);
		$texte = str_replace("\r", "\n", $texte);
		// decouper
		$texte = explode("\n",trim($texte));
		// extraire la premiere ligne
		$sujet = array_shift($texte);
		$texte = trim(implode("\n",$texte));
	}

	$envoyer_mail = charger_fonction('envoyer_mail','inc');
	foreach($emails as $email){
		// passer dans un pipeline qui permet un ajout eventuel
		// (url de suivi des notifications par exemple)
		$envoi = pipeline('notifications_envoyer_mails',array('email'=>$email,'sujet'=>$sujet,'texte'=>$texte));
		$email = $envoi['email'];
		$sujet = $envoi['sujet'];
		$texte = $envoi['texte'];
		if (function_exists('job_queue_add'))
			job_queue_add('envoyer_mail', ">$email : $sujet", array($email, $sujet, $texte), 'inc/');
		else
			$envoyer_mail($email, $sujet, $texte);
	}

}
/**
 * Envoyer un email de notification
 *
 * Le sujet peut être vide, dans ce cas il reprendra la première ligne non vide du texte
 *
 * @param array|string $emails
 * @param string $texte
 * @param string $sujet
 * @param string $from
 * @param string $headers
 */
function notifications_envoyer_mails($emails, $texte, $sujet = "", $from = "", $headers = "")
{
    // rien a faire si pas de texte !
    if (!strlen($texte)) {
        return;
    }
    // si on ne specifie qu'un email, le mettre dans un tableau
    if (!is_array($emails)) {
        $emails = explode(',', $emails);
    }
    notifications_nettoyer_emails($emails);
    // tester si le mail est deja en html
    if (strpos($texte, "<") !== false and $ttrim = trim($texte) and substr($ttrim, 0, 1) == "<" and substr($ttrim, -1, 1) == ">" and stripos($ttrim, "</html>") !== false) {
        if (!strlen($sujet)) {
            // dans ce cas on ruse un peu : extraire le sujet du title
            if (preg_match(",<title>(.*)</title>,Uims", $texte, $m)) {
                $sujet = $m[1];
            } else {
                // fallback, on prend le body si on le trouve
                if (preg_match(",<body[^>]*>(.*)</body>,Uims", $texte, $m)) {
                    $ttrim = $m[1];
                }
                // et on extrait la premiere ligne de vrai texte...
                // nettoyer le html et les retours chariots
                $ttrim = textebrut($ttrim);
                $ttrim = str_replace("\r\n", "\r", $ttrim);
                $ttrim = str_replace("\r", "\n", $ttrim);
                // decouper
                $ttrim = explode("\n", trim($ttrim));
                // extraire la premiere ligne de texte brut
                $sujet = array_shift($ttrim);
            }
        }
        // si besoin on ajoute le content-type dans les headers
        if (stripos($headers, "Content-Type") === false) {
            $headers .= "Content-Type: text/html\n";
        }
    }
    // si le sujet est vide, extraire la premiere ligne du corps
    // du mail qui est donc du texte
    if (!strlen($sujet)) {
        // nettoyer un peu les retours chariots
        $texte = str_replace("\r\n", "\r", $texte);
        $texte = str_replace("\r", "\n", $texte);
        // decouper
        $texte = explode("\n", trim($texte));
        // extraire la premiere ligne
        $sujet = array_shift($texte);
        $texte = trim(implode("\n", $texte));
    }
    $envoyer_mail = charger_fonction('envoyer_mail', 'inc');
    foreach ($emails as $email) {
        // passer dans un pipeline qui permet un ajout eventuel
        // (url de suivi des notifications par exemple)
        $envoi = pipeline('notifications_envoyer_mails', array('email' => $email, 'sujet' => $sujet, 'texte' => $texte));
        $email = $envoi['email'];
        job_queue_add('envoyer_mail', ">{$email} : " . $envoi['sujet'], array($email, $envoi['sujet'], $envoi['texte'], $from, $headers), 'inc/');
    }
}
/**
 * Envoyer un message par mail pour les destinataires externes
 *
 * @param int $id_message
 * @param array $emails_dest
 * @return bool
 */
function messagerie_mailer_message($id_message, $emails_dest = array())
{
    if ($id_message = intval($id_message) and count($emails_dest)) {
        if ($row = sql_fetsel('titre,texte,id_auteur', 'spip_messages', 'id_message=' . intval($id_message))) {
            $from = sql_getfetsel('email', 'spip_auteurs', 'id_auteur=' . $row['id_auteur']);
            foreach ($emails_dest as $email) {
                job_queue_add('envoyer_mail', 'messagerie mail', array($email, $row['titre'], array('texte' => $row['texte'], 'from' => $from)), 'inc/');
            }
            return true;
        }
    }
    return false;
}