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); } }
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; }
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; }
/** * 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; }
/** * 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; }