function spiplistes_insert_head ($flux) { $sig = (isset($GLOBALS['spip_header_silencieux']) && $GLOBALS['spip_header_silencieux']) ? "" : "\n\n<!-- SPIP-Listes v.: ".spiplistes_real_version_get(_SPIPLISTES_PREFIX)." -->\n" ; // pour le formulaire en général $flux .= "" . $sig // deja charge' dans le squelette //. "<link rel='stylesheet' href='".find_in_path('spiplistes_formulaire.css')."' type='text/css' media='all' />\n" ; // pour la page abonnement.html if(in_array(_request('page'), array( 'abonnement' // qui contient aussi le formulaire ) ) ) { $flux .= "" . "<link rel='stylesheet' href='".find_in_path('spiplistes_style.css')."' type='text/css' media='all' />\n" ; if( (($s = spiplistes_pref_lire('opt_plier_deplier_formabo')) && ($s == 'oui')) && ($f = find_in_path("javascript/spiplistes_abonnement.js"))) { //$flux .= "<script type='text/javascript' src='" . compacte($f) . "'></script>\n"; $flux .= "<script type='text/javascript' src='" . $f . "'></script>\n"; } } if(!empty($sig)) { $flux .= "<!-- SPIP-Listes / -->\n"; } return($flux); }
function exec_spiplistes_courrier_previsu () { global $meta; include_spip('base/abstract_sql'); include_spip('inc/presentation'); include_spip('inc/distant'); include_spip('inc/date'); include_spip('inc/urls'); include_spip('inc/meta'); include_spip('inc/filtres'); include_spip('inc/lang'); include_spip('inc/spiplistes_api'); include_spip('inc/spiplistes_api_courrier'); include_spip('inc/spiplistes_api_abstract_sql'); include_spip('public/assembler'); spiplistes_debug_log ('ACTION: exec_spiplistes_courrier_previsu()'); $eol = PHP_EOL; $int_values = array( 'id_rubrique', 'id_mot', 'id_courrier', 'id_liste' , 'annee', 'mois', 'jour', 'heure', 'minute' ); $str_values = array( 'lang' , 'avec_intro', 'message_intro' , 'avec_patron', 'patron', 'patron_pos' , 'avec_sommaire' , 'titre', 'message', 'pied_patron' , 'Confirmer', 'date' , 'lire_base', 'format', 'plein_ecran' , 'date_sommaire' , 'oeil_html', 'oeil_texte' ); foreach(array_merge($str_values, $int_values) as $key) { $$key = _request($key); // méfiance sur jQuery 1.4.4 qui semble // ne plus transmettre les vars qu'en 1.4.2 // @todo: a creuser, verifier les autres vars ajax transmises //spiplistes_debug_log('PREVISU: '.$key.': '.$$key); } foreach($int_values as $key) { $$key = intval($$key); } $date = format_mysql_date($annee,$mois,$jour,$heure,$minute); $charset = $meta['charset']; $contexte = array( 'id_courrier' => $id_courrier , 'lang' => $lang ); list($lien_html, $lien_texte) = spiplistes_courriers_assembler_patron ( _SPIPLISTES_PATRONS_TETE_DIR . spiplistes_pref_lire('lien_patron') , $contexte , !((spiplistes_pref_lire('opt_lien_en_tete_courrier') == 'oui') && $id_courrier) ); // si envoi a une liste, reprendre le patron de pied de la liste list($pied_html, $pied_texte) = spiplistes_pied_page_assembler_patron($id_liste, $lang); $texte_intro = $texte_patron = $tampon_html = $tampon_texte = $sommaire_html = ''; if(spiplistes_pref_lire('opt_ajout_tampon_editeur') == 'oui') { list($tampon_html, $tampon_texte) = spiplistes_tampon_assembler_patron(); } if($lire_base) { // prendre le courrier enregistre dans la base $sql_select = 'texte,titre' . (($format=='texte') ? ',message_texte' : ''); if( $id_courrier && ($row = sql_fetsel($sql_select, "spip_courriers", "id_courrier=".sql_quote($id_courrier), "", "", 1)) ) { foreach(explode(",", $sql_select) as $key) { $$key = propre($row[$key]); } //if($plein_ecran) { $texte_html = '' . $lien_html . $texte . $pied_html . $tampon_html ; if($format=="texte") { header("Content-Type: text/plain; charset=$charset"); // forcer IE a afficher en ligne. header("Content-Disposition: inline; filename=spiplistes-previsu.txt"); $message_texte = empty($message_texte) ? spiplistes_courrier_version_texte($texte_html) : spiplistes_courrier_version_texte($lien_texte) . spiplistes_courrier_version_texte($message_texte) . $pied_texte . spiplistes_courrier_version_texte($tampon_texte) ; echo($message_texte); exit(0); } // else $texte_html = '' . '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN">'.$eol . (($lang) ? '<html lang="'.$lang.'" dir="ltr">'.$eol : '') . '<head>'.$eol . '<meta http-equiv="Content-Type" content="text/html; charset='.$charset.'">'.$eol . '<meta http-equiv="Pragma" content="no-cache">'.$eol . '<title>'.textebrut($titre).'</title>'.$eol . '</head>'.$eol . '<body style="text-align:center">'.$eol . '<div style="margin:0 auto">'.$eol . $texte_html . '</div>'.$eol . '</body>'.$eol . '</html>'.$eol ; ajax_retour($texte_html); exit(0); //} // end if plein_ecran } else { echo(_T('spiplistes:Erreur_courrier_introuvable')); } } ////////////////////////////////////////////////// // si nouveau courrier (pas dans la base), generer un apercu else { //spiplistes_debug_log('ACTION: generate preview'); $intro_html = $intro_texte = $sommaire_html = $sommaire_texte = ''; if($avec_intro == 'oui') { $ii = propre($message_intro); $intro_html = '<div>'.$ii.'</div>'.$eol; $intro_texte = spiplistes_courrier_version_texte($ii).$eol.$eol; } if($avec_patron == 'oui') { // generer le contenu (editeur) include_spip('public/assembler'); $contexte_template = array( 'date' => trim ($date) , 'id_rubrique' => $id_rubrique , 'id_mot' => $id_mot , 'patron' => $patron , 'lang' => $lang , 'sujet' => $titre , 'message' => $message ); $titre_html = _T('spiplistes:lettre_info').' '.$nomsite; $titre_texte = spiplistes_courrier_version_texte($titre_html) . $eol; list($message_html, $message_texte) = spiplistes_courriers_assembler_patron ( _SPIPLISTES_PATRONS_DIR . $patron , $contexte_template); } // end if($avec_patron == 'oui') else { $titre_html = propre($titre); $message_html = propre($message); $titre_texte = spiplistes_courrier_version_texte($titre_html) . $eol; $message_texte = spiplistes_courrier_version_texte($message_html) . $eol; } if($avec_sommaire == 'oui') { if($id_rubrique > 0) { $sql_where = array('id_rubrique='.sql_quote($id_rubrique) , "statut=".sql_quote('publie')); if($date_sommaire == 'oui') { $sql_where[] = "date >= " . sql_quote($date); } if($sql_result = sql_select("titre,id_article" , "spip_articles" , $sql_where )) { while($row = sql_fetch($sql_result)) { $url = (spiplistes_spip_est_inferieur_193()) ? generer_url_article($row['id_article']) : generer_url_entite($row['id_article'], 'article') ; $ii = typo($row['titre']); $sommaire_html .= "<li> <a href='" . $url . "'>" . $ii . '</a></li>'.$eol; $sommaire_texte .= " - " . textebrut($ii) . "\n " . $url . $eol; } } } if($id_mot > 0) { if($sql_result = sql_select("a.titre,a.id_article" , "spip_articles AS a LEFT JOIN spip_mots_articles AS m ON a.id_article=m.id_article" , array( "a.statut=".sql_quote('publie') , "m.id_mot=".sql_quote($id_mot) , "a.date >= " . sql_quote($sql_date) ) )) { while($row = sql_fetch($sql_result)) { $ii = typo($row['titre']); $url = (spiplistes_spip_est_inferieur_193()) ? generer_url_article($row['id_article']) : generer_url_entite($row['id_article'], 'article') ; $sommaire_html .= "<li> <a href='" . $url . "'> " . $ii . "</a></li>\n"; $sommaire_texte .= " - " . textebrut($ii) . "\n " . $url . $eol; } } } if(!empty($sommaire_html)) { $sommaire_html = "<ul>" . $sommaire_html . "</ul>\n"; $message_html = ($patron_pos == "avant") ? $message_html . $sommaire_html : $sommaire_html . $message_html ; $message_texte = ($patron_pos == "avant") ? $message_texte . $eol . $sommaire_texte : $sommaire_texte . $eol . $message_texte ; } } // end if($avec_sommaire == 'oui') $form_action = ($id_courrier) ? generer_url_ecrire(_SPIPLISTES_EXEC_COURRIER_GERER, 'id_courrier='.$id_courrier) : generer_url_ecrire(_SPIPLISTES_EXEC_COURRIER_GERER) ; $message_html = spiplistes_liens_absolus ($intro_html . $message_html); $message_texte = spiplistes_liens_absolus ($intro_texte . $message_texte); spiplistes_debug_log('ACTION: generate page'); $page_result = '' // boite courrier au format html . debut_cadre_couleur('', true) . "<form id='choppe_patron-1' action='$form_action' method='post' name='choppe_patron-1'>\n" . "<div id='previsu-html' class='switch-previsu'>\n" . _T('spiplistes:version_html') . " / " . "<a href='javascript:jQuery(this).switch_previsu()'>" . _T('spiplistes:version_texte') . "</a>\n" . "<div class='previsu-content'>\n" . $message_html . $message_erreur . $pied_html . $tampon_html . "</div>\n" . "</div>\n" // fin id='previsu-html . "<div id='previsu-texte' class='switch-previsu' style='display:none;'>\n" . "<a href='javascript:jQuery(this).switch_previsu()'>" . _T('spiplistes:version_html') . "</a>\n" . " / " . _T('spiplistes:version_texte') . "<div class='previsu-content'>\n" . "<pre>" . $message_texte . $message_erreur . $pied_texte . $tampon_texte . "</pre>" . "</div>\n" . "</div>\n" // fin id='previsu-texte . "<p style='text-align:right;margin-bottom:0;'>" . "<input type='hidden' name='modifier_message' value='oui' />\n" . ( ($id_courrier) ? "<input type='hidden' name='id_courrier' value='$id_courrier' />\n" : "<input type='hidden' name='new' value='oui' />\n" ) . "<input type='hidden' name='titre' value=\"".htmlspecialchars($titre)."\">\n" . "<input type='hidden' name='message' value=\"".htmlspecialchars($message_html)."\">\n" . "<input type='hidden' name='message_texte' value=\"".htmlspecialchars($message_texte)."\">\n" . "<input type='hidden' name='date' value='$date'>\n" . "<input type='submit' name='btn_courrier_valider' value='"._T('bouton_valider')."' class='fondo' /></p>\n" . "</form>\n" . fin_cadre_couleur(true) . "<br />\n" ; echo($page_result); } exit(0); }
/** * Lire la valeur de $key dans les prefs (meta) * Si erreur (manquante) appliquer $defaut **/ function spiplistes_pref_lire_defaut ($key, $default) { $value = spiplistes_pref_lire($key); if(!$value) { $value = $default; } return($value); }
/** * CP-20110311 * Envoyer un message dans la console (debug) * Le mode debug doit etre selectionne' dans la page de configuration * @return bool */ function spiplistes_debug_log ($msg = '') { static $debug; if ($debug === null) { $debug = (spiplistes_pref_lire('opt_console_debug') == 'oui'); } $msg = trim ($msg); if ($debug && !empty($msg)) { spiplistes_log ($msg, LOG_DEBUG); } return ($debug); }
function exec_spiplistes_config () { include_spip('inc/distant'); include_spip('inc/spiplistes_api'); include_spip('inc/spiplistes_api_presentation'); include_spip('inc/meta'); include_spip('inc/config'); //spiplistes_debug_log ('Appel page de configuration'); global $connect_statut , $connect_toutes_rubriques , $connect_id_auteur , $couleur_foncee , $spip_lang_right ; $eol = PHP_EOL; $flag_editable = (($connect_statut == "0minirezo") && ($connect_toutes_rubriques)); if($flag_editable) { $adresse_defaut = (email_valide($GLOBALS['meta']['email_defaut'])) ? $GLOBALS['meta']['email_defaut'] : $GLOBALS['meta']['email_webmaster'] ; $keys_complement_courrier = array( 'opt_personnaliser_courrier' , 'opt_lien_en_tete_courrier', 'lien_patron' , 'opt_ajout_tampon_editeur', 'tampon_patron' , 'opt_completer_titre_nom_site' , 'opt_ajout_lien_desabo' ); $keys_complement_courrier = array_merge($keys_complement_courrier , $_tampon_cles = explode(",", _SPIPLISTES_TAMPON_CLES)); $tampon_labels = array_flip($_tampon_cles); foreach($tampon_labels as $key=>$value) { $tampon_labels[$key] = _T('spiplistes:'.$key); } $keys_opt_formabo = array( 'opt_plier_deplier_formabo' // effet plier/deplier dans le formulaire abonnement ); $keys_param_valider = array( 'email_defaut' , 'smtp_server' , 'smtp_login' , 'smtp_pass' , 'smtp_port' , 'mailer_smtp' , 'smtp_identification' , 'smtp_sender' , 'spiplistes_lots' , 'spiplistes_charset_envoi' ); $keys_str_param_valider = array( 'email_reply_to' // adresse mail de retour , 'email_return_path_defaut' // adresse mail de retour pour les erreurs ); $keys_opts_param_valider = array( 'opt_simuler_envoi' // demande à la méleuse de simuler l'envoi du courrier , 'opt_suspendre_trieuse' // suspendre la trieuse. Les listes restent en attente , 'opt_suspendre_meleuse' // suspendre les envois de courriers ); $keys_console_syslog = array( 'opt_console_debug' // console en mode verbose , 'opt_console_syslog' // envoyer le journal sur syslog , 'opt_log_voir_destinataire' // ecrire adresse mail des destinataires dans les journaux ); // initialise les variables postées par le formulaire foreach(array_merge( array( 'abonnement_valider', 'abonnement_config', 'param_reinitialise' , 'btn_formabo_valider' , 'btn_complement_courrier' , 'btn_param_valider' , 'btn_console_syslog' , 'voir_logs' ) , $keys_opt_formabo , $keys_complement_courrier , $keys_param_valider , $keys_str_param_valider , $keys_opts_param_valider , $keys_console_syslog ) as $key) { $$key = _request($key); } // historiquement, ajoute le nom du site en // fin de titre. Permettre de ne pas le faire. $in_post = _request('opt_completer_titre_nom_site'); $in_meta = spiplistes_pref_lire('opt_completer_titre_nom_site'); $opt_completer_titre_nom_site = // ni dans le POST, ni dans les metas ? (!$in_post && !$in_meta) // comportement par défaut ? 'oui' // un imput vide n'est jamais renvoyé // donc si manquant, c'est un 'non' : ($in_post ? $in_post : 'non'); $doit_ecrire_metas = false; $str_log = ''; if(!isset($GLOBALS['meta'][_SPIPLISTES_META_PREFERENCES])) { $GLOBALS['meta'][_SPIPLISTES_META_PREFERENCES] = array(); } if($abonnement_valider && $abonnement_config) { ecrire_meta('abonnement_config', $abonnement_config); $doit_ecrire_metas = true; $str_log .= "abonnement_config = $abonnement_config, "; } if($btn_formabo_valider) { foreach($keys_opt_formabo as $key) { //spiplistes_log("$key ".$$key); spiplistes_ecrire_key_in_serialized_meta( $key , ($$key = (!empty($$key) ? $$key : 'non')) , _SPIPLISTES_META_PREFERENCES ); $str_log .= $key.' = '.$$key.', '; } $doit_ecrire_metas = true; } if($btn_complement_courrier) { foreach($keys_complement_courrier as $key) { spiplistes_ecrire_key_in_serialized_meta( $key , ($$key = (!empty($$key) ? $$key : 'non')) , _SPIPLISTES_META_PREFERENCES ); $str_log .= $key.' = '.$$key.', '; } $doit_ecrire_metas = true; } if($btn_param_valider) { foreach($keys_param_valider as $key) { if(($key != 'email_defaut') || email_valide($email_defaut)) { $str_log .= $key.' = ' . (($key == 'smtp_pass') ? str_repeat('*', strlen($$key)) : $$key) . ', '; ecrire_meta($key, trim($$key)); } } foreach($keys_str_param_valider as $key) { if( ($key == 'email_reply_to') || ($key == 'email_return_path_defaut') ) { $$key = ($ii = email_valide($$key)) ? $ii : $adresse_defaut ; } spiplistes_ecrire_key_in_serialized_meta ($key, $$key, _SPIPLISTES_META_PREFERENCES); $str_log .= $key.' = '.$$key.', '; } foreach($keys_opts_param_valider as $key) { $$key = (!empty($$key)) ? $$key : 'non'; spiplistes_ecrire_key_in_serialized_meta ($key, $$key, _SPIPLISTES_META_PREFERENCES); $str_log .= $key.' = '.$$key.', '; } $doit_ecrire_metas = true; } if($btn_console_syslog) { if(!spiplistes_server_rezo_local()) { } foreach($keys_console_syslog as $key) { if($key == $opt_log_voir_destinataire) { $opt_log_voir_destinataire = (!empty($$key)) ? $$key : 'non'; } if( // si pas sur réseau privé et option syslog validé, // retire l'option syslog (cas de copie de base du LAN sur celle du WAN) ($key == 'opt_console_syslog') && !spiplistes_server_rezo_local() ) { $$key = 'non'; } else { $$key = (!empty($$key)) ? $$key : 'non'; } spiplistes_ecrire_key_in_serialized_meta($key, $$key, _SPIPLISTES_META_PREFERENCES); $str_log .= $key.' = '.$$key.', '; } $doit_ecrire_metas = true; } if($doit_ecrire_metas) { // recharge les metas en cache spiplistes_ecrire_metas(); } if(!empty($str_log)) { $str_log = rtrim($str_log, ', '); spiplistes_log("CONFIGURE id_auteur #$connect_id_auteur : ".$str_log); } // // Adresse mail pour les retours (Reply-to:) // @see: http://www.w3.org/Protocols/rfc822/ $email_reply_to = spiplistes_pref_lire('email_reply_to'); // Adresse mail pour les retours en erreur (Return-path:) // @see: http://www.w3.org/Protocols/rfc822/ // Plus ou moins obsolete, ou non respecte' $email_return_path_defaut = spiplistes_pref_lire('email_return_path_defaut'); $smtp_identification = (isset($GLOBALS['meta']['smtp_identification']) && ($GLOBALS['meta']['smtp_identification']=='oui')) ? "oui" : "non"; $mailer_smtp = (isset($GLOBALS['meta']['mailer_smtp']) && ($GLOBALS['meta']['mailer_smtp']=='oui')) ? "oui" : "non"; $smtp_port = (isset($GLOBALS['meta']['smtp_port']) && (!empty($GLOBALS['meta']['smtp_port']))) ? $GLOBALS['meta']['smtp_port'] : "25"; $smtp_server = (isset($GLOBALS['meta']['smtp_server']) && (!empty($GLOBALS['meta']['smtp_server']))) ? $GLOBALS['meta']['smtp_server'] : "localhost"; $smtp_sender = (email_valide($GLOBALS['meta']['smtp_sender'])) ? $GLOBALS['meta']['smtp_sender'] : $GLOBALS['meta']['email_webmaster']; } //////////////////////////////////// // PAGE CONTENU //////////////////////////////////// $titre_page = _T('icone_configuration_site'); // Permet entre autres d'ajouter les classes a' la page : <body class='$rubrique $sous_rubrique'> $rubrique = 'configuration'; $sous_rubrique = _SPIPLISTES_PREFIX; $commencer_page = charger_fonction('commencer_page', 'inc'); echo($commencer_page(_T('spiplistes:spiplistes') . " - " . $titre_page, $rubrique, $sous_rubrique)); // la configuration spiplistes est réservée aux supers-admins if(!$flag_editable) { die (spiplistes_terminer_page_non_autorisee() . fin_page()); } $page_result = '' . '<br style="line-height:3em" />' . $eol . spiplistes_gros_titre(_T('titre_page_config_contenu'), '', true) . barre_onglets($rubrique, $sous_rubrique) . debut_gauche($rubrique, true) . spiplistes_boite_meta_info(_SPIPLISTES_PREFIX) . pipeline('affiche_gauche', array('args'=>array('exec'=>'spiplistes_config'),'data'=>'')) //. creer_colonne_droite($rubrique, true) // spiplistes_boite_raccourcis() s'en occupe . spiplistes_boite_raccourcis(true) . spiplistes_boite_autocron() . spiplistes_boite_info_spiplistes(true) . pipeline('affiche_droite', array('args'=>array('exec'=>'spiplistes_config'),'data'=>'')) . debut_droite($rubrique, true) ; ////////////////////////////////////////////////////// // Boite Mode d'inscription des visiteurs $checked1 = $checked2 = ''; ($GLOBALS['meta']['abonnement_config'] == 'simple') ? $checked1 = "checked='checked'" : $checked2 = "checked='checked'" ; $page_result .= '' . debut_cadre_trait_couleur("redacteurs-24.gif", true, '', _T('spiplistes:mode_inscription')) . '<form action="' . generer_url_ecrire(_SPIPLISTES_EXEC_CONFIGURE) . '" method="post">' . $eol . "<p class='verdana2'>" . $eol . "<input type='radio' name='abonnement_config' value='simple' $checked1 id='statut_simple' />" . $eol . "<label for='statut_simple'>"._T('spiplistes:abonnement_simple').'</label>' . $eol . "</p>" . $eol . "<p class='verdana2'>" . $eol . "<input type='radio' name='abonnement_config' value='membre' $checked2 id='statut_membre' />" . $eol . "<label for='statut_membre'>"._T('spiplistes:abonnement_code_acces').'</label>' . $eol . "</p>" . $eol // bouton de validation . "<div style='text-align:right;'><input type='submit' name='abonnement_valider' class='fondo' value='"._T('bouton_valider')."' /></div>" . $eol . "</form>" . $eol . fin_cadre_trait_couleur(true) ; ////////////////////////////////////////////////////// // Formulaire abonnement $checked1 = ((spiplistes_pref_lire('opt_plier_deplier_formabo') == 'oui') ? "checked='checked'" : ''); $page_result .= '' . debut_cadre_trait_couleur("redacteurs-24.gif", true, '', _T('spiplistes:formulaire_abonnement')) . "<form action='".generer_url_ecrire(_SPIPLISTES_EXEC_CONFIGURE)."' method='post'>" . $eol . "<p class='verdana2'>" . $eol . "<input type='checkbox' name='opt_plier_deplier_formabo' value='oui' $checked1 id='plier_deplier' />" . $eol . "<label for='plier_deplier'>"._T('spiplistes:formulaire_abonnement_effet').'</label>' . $eol . "</p>" . $eol // bouton de validation . "<div style='text-align:right;'><input type='submit' name='btn_formabo_valider' class='fondo' value='"._T('bouton_valider')."' /></div>" . $eol . "</form>" . $eol . fin_cadre_trait_couleur(true) ; ////////////////////////////////////////////////////// // Boite parametrage complément du courrier $opt_personnaliser_courrier = (spiplistes_pref_lire('opt_personnaliser_courrier') == 'oui'); $opt_completer_titre_nom_site = (spiplistes_pref_lire('opt_completer_titre_nom_site') == 'oui'); $opt_lien_en_tete_courrier = (spiplistes_pref_lire('opt_lien_en_tete_courrier') == 'oui'); $lien_patron = spiplistes_pref_lire('lien_patron'); $opt_ajout_tampon_editeur = (spiplistes_pref_lire('opt_ajout_tampon_editeur') == 'oui'); $opt_ajout_lien_desabo = (spiplistes_pref_lire('opt_ajout_lien_desabo') == 'oui'); $tampon_patron = spiplistes_pref_lire('tampon_patron'); foreach($_tampon_cles as $key) { $$key = spiplistes_pref_lire($key); } $page_result .= '' . debut_cadre_trait_couleur(_DIR_PLUGIN_SPIPLISTES_IMG_PACK."courriers_complement-24.png", true, '', _T('spiplistes:Complement_des_courriers')) . spiplistes_form_debut(generer_url_ecrire(_SPIPLISTES_EXEC_CONFIGURE), true) // // personnaliser le courrier (reprend les données de *_auteur) . "<!-- personnaliser le courrier -->" . $eol . debut_cadre_relief('', true, '', _T('spiplistes:personnaliser_le_courrier')) . "<p class='verdana2'>"._T('spiplistes:personnaliser_le_courrier_desc')."</p>" . "<label class='verdana2'>" . "<input type='checkbox' name='opt_personnaliser_courrier' value='oui' " . (($opt_personnaliser_courrier == 'oui') ? "checked='checked'" : '') . ' />' . $eol . _T('spiplistes:personnaliser_le_courrier_label').'</label>' . $eol . fin_cadre_relief(true) // // ajout du renvoi de tete, lien courrier . debut_cadre_relief('', true, '', _T('spiplistes:Complement_lien_en_tete')) . "<p class='verdana2'>"._T('spiplistes:Complement_lien_en_tete_desc')."</p>" . '<input type="checkbox" name="opt_lien_en_tete_courrier" value="oui" id="opt-lien-en-tete-courrier" ' . (($opt_lien_en_tete_courrier) ? 'checked="checked"' : '') . ' />' . $eol . "<label class='verdana2' for='opt-lien-en-tete-courrier'>"._T('spiplistes:Complement_ajouter_lien_en_tete').'</label>' . $eol // // lien courrier: boite de selection . "<div id='div-lien-en-tete-courrier' style='".(!$opt_lien_en_tete_courrier ? "display:none;" : '')."margin-top:1em;'>" . '<label class="verdana2" style="padding-left:2ex;">' . _T('spiplistes:Patron_du_lien').'.' . $eol . spiplistes_boite_selection_patrons($lien_patron, true, _SPIPLISTES_PATRONS_TETE_DIR, "lien_patron", 1) . '</label>' . $eol . "</div>" . $eol // fin bloc div-lien-en-tete-courrier . fin_cadre_relief(true) // // compléter le titre des listes par le nom du serveur ? . debut_cadre_relief('', true, '', _T('spiplistes:completer_titre_courrier_nom_site')) . '<label class="verdana2" style="padding-left:2ex;">' . '<input type="checkbox" name="opt_completer_titre_nom_site" value="oui" id="opt_completer_titre_nom_site" ' . (($opt_completer_titre_nom_site) ? 'checked="checked"' : '') . ' />' . $eol . _T('spiplistes:completer_titre_courrier_nom_site_desc') . $eol . '</label>' . $eol . fin_cadre_relief(true) // // opt_ajout_lien_desabo . debut_cadre_relief('', true, '', _T('spiplistes:lien_gestion_inscription')) . '<p class="verdana2">'._T('spiplistes:lien_gestion_inscription_desc').'</p>'.$eol . '<input type="checkbox" name="opt_ajout_lien_desabo" value="oui" id="opt_ajout_lien_desabo" ' . ($opt_ajout_lien_desabo ? 'checked="checked"' : '') . ' />' . $eol . '<label class="verdana2" for="opt_ajout_lien_desabo">' . _T('spiplistes:lien_gestion_inscription_label').'</label>'.$eol . fin_cadre_relief(true) // // ajout tampon editeur . debut_cadre_relief('', true, '', _T('spiplistes:Complement_tampon_editeur')) . "<p class='verdana2'>"._T('spiplistes:Complement_tampon_editeur_desc')."</p>" . "<input type='checkbox' name='opt_ajout_tampon_editeur' value='oui' id='opt-ajout-tampon-editeur' " . ($opt_ajout_tampon_editeur ? "checked='checked'" : '') . " />" . $eol . "<label class='verdana2' for='opt-ajout-tampon-editeur'>"._T('spiplistes:Complement_tampon_editeur_label').'</label>' . $eol // // coordonnées editeur: bloc coordonnes_editeur . "<div id='div-ajout-tampon-editeur' style='".(!$opt_ajout_tampon_editeur ? "display:none;" : '')."margin-top:1em;'>" // tampon sélecteur . "<label class='verdana2' style='padding-left:2ex;'>"._T('spiplistes:patron_du_tampon_') . $eol . spiplistes_boite_selection_patrons($tampon_patron, true, _SPIPLISTES_PATRONS_TAMPON_DIR, "tampon_patron", 1) . '</label>' . "<ul class='verdana2' style='list-style:none;padding-left:2ex;'>" . $eol ; foreach($_tampon_cles as $key) { $value = ($$key == 'non') ? '' : $$key; $page_result .= '' . "<li><label for='id_$key'>".$tampon_labels[$key].":</label>" . "<input type='text' name='$key' id='id_$key' size='40' class='forml' value=\"{$value}\" /></li>" . $eol ; } $page_result .= '' . "</ul>" . $eol . "</div>" . $eol // fin bloc div-ajout-tampon-editeur . fin_cadre_relief(true) // // bouton de validation . "<div style='text-align:right;'><input type='submit' name='btn_complement_courrier' class='fondo' value='"._T('bouton_valider')."' /></div>" . $eol . spiplistes_form_fin(true) . fin_cadre_trait_couleur(true) ; function spiplistes_cadre_input_text($titre, $name, $value, $size=30, $class='forml') { static $eol = PHP_EOL; $str = debut_cadre_relief('', true, '', $titre) . '<input type="text" name="'.$name.'" value="'.$value.'" size="'.$size.'" class="'.$class.'" />' . $eol . fin_cadre_relief(true); return($str); } ////////////////////////////////////////////////////// // Boite parametrage envoi du courrier $page_result .= '' . debut_cadre_trait_couleur(_DIR_PLUGIN_SPIPLISTES_IMG_PACK.'courriers_envoyer-24.png', true, '', _T('spiplistes:Envoi_des_courriers')) . spiplistes_form_debut(generer_url_ecrire(_SPIPLISTES_EXEC_CONFIGURE), true) // // adresse email de retour (reply-to) . spiplistes_cadre_input_text(_T('spiplistes:adresse_envoi_defaut') , 'email_defaut' , $adresse_defaut ) // // adresse email du smtp sender . spiplistes_cadre_input_text(_T('spiplistes:adresse_smtp') , 'smtp_sender' , $smtp_sender ) // // adresse de retour (reply-to) . spiplistes_cadre_input_text(_T('spiplistes:adresse_email_reply_to') , 'email_reply_to' , $email_reply_to ) // // adresse return-path de retour (on-error reply-to) . spiplistes_cadre_input_text(_T('spiplistes:adresse_on_error_defaut') , 'email_return_path_defaut' , $email_return_path_defaut ) // // Méthode d'envoi . debut_cadre_relief('', true, '', _T('spiplistes:methode_envoi')) . "<div class='verdana2'>" . $eol . _T('spiplistes:pas_sur') . bouton_radio("mailer_smtp", "non", _T('spiplistes:php_mail'), $mailer_smtp == "non", "changeVisible(this.checked, 'smtp', 'none', 'block');") . "<br />" . $eol . bouton_radio("mailer_smtp", "oui", _T('spiplistes:utiliser_smtp'), $mailer_smtp == "oui" , "changeVisible(this.checked, 'smtp', 'block', 'none');") . "</div>" . $eol // // si 'smtp', affiche bloc de paramétrage . "<ul id='smtp' class='verdana2' style='list-style: none;display:".(($mailer_smtp == "oui") ? "block" : "none")."'>" . $eol . "<li>"._T('spiplistes:smtp_hote')." : <input type='text' name='smtp_server' value='$smtp_server' size='30' class='forml' /></li>" . $eol . "<li>"._T('spiplistes:smtp_port')." : <input type='text' name='smtp_port' value='$smtp_port' size='4' class='fondl' /></li>" . $eol . "<li>"._T('spiplistes:requiert_identification')." : " . bouton_radio("smtp_identification", "oui", _T('item_oui'), ($smtp_identification == "oui"), "changeVisible(this.checked, 'smtp-auth', 'block', 'none');") . " " . bouton_radio("smtp_identification", "non", _T('item_non'), ($smtp_identification == "non"), "changeVisible(this.checked, 'smtp-auth', 'none', 'block');")."</li>" . $eol . "</ul>" . $eol . "<ul id='smtp-auth' class='verdana2' style='list-style:none;display:".(($smtp_identification == "oui") ? "block" : "none" )."'>" . $eol . "<li>" . "<label for='smtp_login'>"._T('item_login')." : </label>" . $eol . "<input type='text' id='smtp_login' name='smtp_login' value='".$GLOBALS['meta']['smtp_login']."' size='30' class='fondl' />" . $eol . "</li>" . $eol . "<li>" . "<label for='smtp_pass'>"._T('entree_passe_ldap')." : </label>" . $eol . "<input type='password' id='smtp_pass' name='smtp_pass' value='".$GLOBALS['meta']['smtp_pass']."' size='30' class='fondl' />" . $eol . "</li>" . $eol . "</ul>" . $eol . fin_cadre_relief(true) // // le nombre de lots d'envois . debut_cadre_relief('', true, '', _T('spiplistes:parametrer_la_meleuse')) . spiplistes_boite_select_de_formulaire ( spiplistes_array_values_in_keys(explode(";", _SPIPLISTES_LOTS_PERMIS)), $GLOBALS['meta']['spiplistes_lots'] , 'spiplistes_lots', 'spiplistes_lots' , 1, '', 'fondo', _T('spiplistes:nombre_lot')." : ", '', 'verdana2') . '<br />' . $eol // // sélection du charset d'envoi . spiplistes_boite_select_de_formulaire ( spiplistes_array_values_in_keys(explode(";", _SPIPLISTES_CHARSETS_ALLOWED)), $GLOBALS['meta']['spiplistes_charset_envoi'] , 'spiplistes_charset_envoi', 'spiplistes_charset_envoi' , 1, '', 'fondo', _T('spiplistes:Jeu_de_caracteres')." : ", '', 'verdana2') . fin_cadre_relief(true) ; // // options simulation des envois, suspendre le tri, la meleuse $page_result .= '' . debut_cadre_relief('', true, '', _T('spiplistes:mode_suspendre_trieuse')) . spiplistes_form_input_checkbox ( 'opt_suspendre_trieuse' , 'oui', _T('spiplistes:Suspendre_le_tri_des_listes') , (spiplistes_pref_lire('opt_suspendre_trieuse') == 'oui'), true, false) . fin_cadre_relief(true) // . debut_cadre_relief('', true, '', _T('spiplistes:mode_suspendre_meleuse')) . spiplistes_form_input_checkbox ( 'opt_suspendre_meleuse' , 'oui', _T('spiplistes:suspendre_lenvoi_des_courriers') , (spiplistes_pref_lire('opt_suspendre_meleuse') == 'oui'), true, false) . fin_cadre_relief(true) // . debut_cadre_relief('', true, '', _T('spiplistes:mode_simulation')) . spiplistes_form_input_checkbox ( 'opt_simuler_envoi' , 'oui', _T('spiplistes:simuler_les_envois') , (spiplistes_pref_lire('opt_simuler_envoi') == 'oui'), true, false) . fin_cadre_relief(true) // . spiplistes_form_bouton_valider('btn_param_valider', _T('bouton_valider'), true) . spiplistes_form_fin(true) . fin_cadre_trait_couleur(true) ; ////////////////////////////////////////////////////// // La console $page_result .= '<a id="regler-console" name="regler-console"></a>' . debut_cadre_trait_couleur(_DIR_PLUGIN_SPIPLISTES_IMG_PACK.'console-24.gif', true, '', _T('spiplistes:log_console')) . spiplistes_form_debut(generer_url_ecrire(_SPIPLISTES_EXEC_CONFIGURE), true) // // la console en mode debug ? . debut_cadre_relief('', true, '', _T('spiplistes:log_console_debug')) . spiplistes_form_input_checkbox ( 'opt_console_debug' , 'oui' , _T('spiplistes:log_console_debug_activer') , (spiplistes_pref_lire('opt_console_debug') == 'oui'), true, false) . fin_cadre_relief(true) // . debut_cadre_relief('', true, '', _T('spiplistes:log_details_console')) . spiplistes_form_input_checkbox ( 'opt_log_voir_destinataire' , 'oui' , _T('spiplistes:log_voir_destinataire') , (spiplistes_pref_lire('opt_log_voir_destinataire') == 'oui'), true, false) . fin_cadre_relief(true) ; // Paramétrer la console de debug/logs si sur LAN if(spiplistes_server_rezo_local()) { $page_result .= '' . debut_cadre_relief('', true, '', _T('spiplistes:log_console_syslog')) . '<p class="verdana2">'._T('spiplistes:log_console_syslog_desc', array('IP_LAN' => $_SERVER['SERVER_ADDR'])).'</p>' . $eol . spiplistes_form_input_checkbox ( 'opt_console_syslog' , 'oui', _T('spiplistes:log_console_syslog_texte') , (spiplistes_pref_lire('opt_console_syslog') == 'oui'), true, false) . fin_cadre_relief(true) ; } $page_result .= '' . spiplistes_form_bouton_valider('btn_console_syslog') . spiplistes_form_fin(true) ; // voir les journaux SPIP if(!($ii = spiplistes_pref_lire('opt_console_syslog')) || ($ii == 'non')) { // si syslog non activé, on visualise les journaux de spip // lien sur logs ou affiche logs /* * CP-20081112: deplace' dans les raccourcis */ /* $page_result .= '' . "<a id='view-spiplistes-log' name='view-spiplistes-log' href='#view-spiplistes-log' class='verdana2'>" . _T('spiplistes:log_voir_les_journaux') . "</a>" . $eol . "<div id='view-spiplistes-log-box'></div>" . $eol ; */ } $page_result .= '' . fin_cadre_trait_couleur(true) ; // Fin de la page echo($page_result); echo pipeline('affiche_milieu',array('args'=>array('exec'=>$sous_rubrique),'data'=>'')) , spiplistes_html_signature(_SPIPLISTES_PREFIX) , fin_gauche(), fin_page(); } // exec_config()
/** * Envoie le courrier pret au depart * * Prend dans le panier des courriers a envoyer (spip_courriers) les encours * - formate le titre, texte pour l'envoi * * * les etiquettes sont dans la queue d'envois (spip_auteurs_courriers) * - id_auteur (pour reprendre l'adresse mail de id_auteur) * - id_courrier (le courrier a dupliquer/envoyer) * * la queue (spip_auteurs_courriers) a ete remplie par cron_spiplistes_cron() * se sert de la queue pour ventiler les envois par lots * le courrier (spip_courriers) doit avoir date <= time() et statut 'encour' * si email_test, la meleuse envoie le courrier a email_test, * supprime email_test du courrier * et repositionne le statut du courrier en 'redac' * si pas email_test mais id_liste, * regarde la queue d'envois (spip_auteurs_courriers) * et passe le statut du courrier (spip_courriers) a : * 'publie' si type == 'nl' (newsletter) * 'auto' si type == 'auto' (liste programmee) * et envoie les courriers precises aux abonnes de cette liste * et supprime l'identifiant du courrier dans la queue d'envois (spip_auteurs_courriers) * renvoie: * - nul, si la tache n'a pas a etre effectuee * - positif, si la tache a ete effectuee * - negatif, si la tache doit etre poursuivie ou recommencee * * @package spiplistes * @param int $last_time * @return int */ function spiplistes_meleuse ($last_time) { //spiplistes_debug_log('spiplistes_meleuse()'); include_spip('inc/meta'); include_spip('inc/texte'); include_spip('inc/filtres'); include_spip('inc/acces'); include_spip('inc/spiplistes_api'); include_spip('inc/spiplistes_api_courrier'); include_once(_DIR_PLUGIN_SPIPLISTES.'inc/spiplistes_mail.inc.php'); // initialise les options (preferences) foreach(array( 'opt_simuler_envoi' , 'opt_suspendre_meleuse' , 'opt_lien_en_tete_courrier', 'lien_patron' , 'opt_ajout_pied_courrier', 'pied_patron' , 'opt_ajout_tampon_editeur' , 'opt_personnaliser_courrier' , 'opt_log_voir_destinataire' , 'opt_ajout_lien_desabo' ) as $key) { $$key = spiplistes_pref_lire($key); } $sql_vide = sql_quote(''); $nb_etiquettes = spiplistes_courriers_en_queue_compter('etat='.$sql_vide); $prefix_log = _SPIPLISTES_PREFIX_LOG; // si meleuse suspendue, signale en log if($opt_suspendre_meleuse == 'oui') { spiplistes_log($prefix_log.'SUSPEND MODE !!!'); return(0 - $last_time); } if($nb_etiquettes) { $eol = "\n"; $eol2 =$eol.$eol; $body_html_debut = '<html>'.$eol2.'<body style="margin:0;padding:0;">'.$eol2; $body_html_fin = $eol2.'</body></html>'; $charset_spip = $GLOBALS['meta']['charset']; $charset_dest = $GLOBALS['meta']['spiplistes_charset_envoi']; spiplistes_log($prefix_log.$nb_etiquettes.' job(s), distribution...'); $log_voir_destinataire = ($opt_log_voir_destinataire == 'oui'); $simuler_envoi = ($opt_simuler_envoi == 'oui'); // signale en log si mode simulation if($simuler_envoi) { spiplistes_log($prefix_log.'SIMULATION MODE !!!'); } // prepare le tampon editeur if($opt_ajout_tampon_editeur == 'oui') { list($tampon_html, $tampon_texte) = spiplistes_tampon_assembler_patron(); } else { $tampon_html = $tampon_texte = ''; } // prendre la premiere etiquette sur le tas et traiter son courrier $sql_courrier_select = array( 'titre', 'texte', 'message_texte', 'type' , 'id_courrier', 'id_liste', 'email_test', 'total_abonnes', 'date_debut_envoi' ); if($id_courrier = intval(spiplistes_courriers_en_queue_premier('id_courrier', 'etat='.$sql_vide)) ) { $sql_courrier_a_traiter = spiplistes_courriers_casier_premier( $sql_courrier_select , 'id_courrier='.sql_quote($id_courrier) ); spiplistes_debug_log ($prefix_log.'etiquette en cours pour id_courrier #'.$id_courrier); } else { // un vieux bug dans une ancienne version, eradique depuis (j'espere ;-) //spiplistes_log($prefix_log."premiere etiquette en erreur. id_courier = 0. Supprimer cette etiquette manuellement !"); spiplistes_log(_T('spiplistes:erreur_queue_supprimer_courrier' , array('s' => $prefix_log)) ); } // boucle (sur LIMIT 1) pour pouvoir sortir par break si erreur while($row = sql_fetch($sql_courrier_a_traiter)) { foreach($sql_courrier_select as $key) { $$key = $row[$key]; } foreach(array('id_courrier','id_liste','total_abonnes') as $key) { $$key = intval($$key); } // objet (subject) ne peut pas être en html ?! // sauf pour le webmail (et encore) $objet_html = filtrer_entites(typo(spiplistes_calculer_balise_titre(extraire_multi($titre)))); $page_html = stripslashes($texte); $message_texte = stripslashes($message_texte); $nb_emails = array(); // compteur pour la session uniquement // le total de chaque sera ajoute en fin de session $nb_emails_envoyes = $nb_emails_echec = $nb_emails_non_envoyes = $nb_emails['texte'] = $nb_emails['html'] = 0 ; $str_log = 'id_courrier #'.$id_courrier; ////////////////////////// // Determiner email de l emetteur if($is_a_test = email_valide($email_test)) { // courrier a destination adresse email de test $str_log .= ' TO: '.$email_test.' (TEST)'; } else if($id_liste > 0) { // courrier a destination des abonnes d'une liste $total_abonnes = spiplistes_listes_nb_abonnes_compter($id_liste); $str_log .= ' TO id_liste #'.$id_liste.' ('.$total_abonnes.' users)'; $lang = spiplistes_listes_langue($id_liste); if($lang != '') { $GLOBALS['spip_lang'] = $lang; } $contexte = array('lang' => $lang); list($pied_html, $pied_texte) = spiplistes_pied_page_assembler_patron($id_liste, $lang); } else { // erreur dans un script d'appel ? Ou url ? Ou base erreur ? $str_log .= ' [ERROR] MISSING PARAMS (id_liste AND email_test)'; spiplistes_courrier_statut_modifier($id_courrier, _SPIPLISTES_COURRIER_STATUT_ERREUR); // quitte while() principal break; } ////////////////////////////// // email emetteur $email_envoi = spiplistes_listes_email_emetteur($id_liste); if(!$is_a_test && !($email_envoi)) { $str_log .= ' [ERROR] ID_LISTE #'.$id_liste.' or from email MISSING'; spiplistes_courrier_statut_modifier($id_courrier, _SPIPLISTES_COURRIER_STATUT_ERREUR); // quitte while() principal break; } $from = $email_envoi; if($from_valide = email_valide($from)) { if(strpos($from, '<') === false) { $fromname = spiplistes_nom_site_texte ($lang); $fromname = extraire_multi($GLOBALS['meta']['nom_site']); if ($charset_dest!=$charset_spip) { include_spip('inc/charsets'); $fromname = unicode2charset(charset2unicode($fromname),$charset_dest); } } } else { spiplistes_log('[ERROR] from address incorrect: '.$from); if($is_a_test) { spiplistes_courriers_statut_redac ($id_courrier); } // break; // garder pour incrementer les erreurs des listes } $email_reply_to = spiplistes_pref_lire_defaut('email_reply_to', $from); $return_path = spiplistes_pref_lire_defaut('email_return_path_defaut', $from); //////////////////////////////////// // Prepare la version texte $objet_texte = $titre; $page_texte = ($message_texte !='') ? $message_texte : spiplistes_courrier_version_texte($page_html) ; //////////////////////////////////// // Ajoute lien tete de courrier if( ($opt_lien_en_tete_courrier == 'oui') && !empty($lien_patron) ) { list($lien_html, $lien_texte) = spiplistes_courriers_assembler_patron ( _SPIPLISTES_PATRONS_TETE_DIR . $lien_patron , array('id_courrier' => $id_courrier , 'lang' => $lang) ); $page_html = $lien_html . $page_html; $page_texte = $lien_texte . $page_texte; } //////////////////////////////////// // La petite ligne du renvoi du cookie pour modifier son abonnement //$pied_rappel_html = _T('spiplistes:modif_abonnement_html'); //$pied_rappel_texte = _T('spiplistes:modif_abonnement_text'); // transcrire le contenu if($charset_dest != $charset_spip){ include_spip('inc/charsets'); foreach(array( 'objet_html', 'objet_texte' , 'page_html', 'page_texte' , 'pied_html', 'pied_texte' //, 'pied_rappel_html', 'pied_rappel_texte' , 'tampon_html', 'tampon_texte') as $key) { if(!empty($$key)) { $$key = spiplistes_translate_2_charset( $$key , $charset_dest , (strpos($key, 'texte') === false) ); } } } // corrige les liens relatifs (celui de texte a deja ete corrige par la trieuse (cron) foreach(array('pied_html', 'pied_texte' //, 'pied_rappel_html', 'pied_rappel_texte' , 'tampon_html', 'tampon_texte') as $key) { if(!empty($$key)) { $$key = spiplistes_liens_absolus ($$key); } } $email_a_envoyer = array(); $email_a_envoyer['texte'] = new phpMail('', $objet_texte, '' , $page_texte, $charset_dest); $email_a_envoyer['texte']->From = $from ; if($fromname) $email_a_envoyer['texte']->FromName = $fromname ; // Errors-To:, Non-standard @see: http://www.ietf.org/rfc/rfc2076.txt //$email_a_envoyer['texte']->AddCustomHeader('Errors-To: '.$return_path); $email_a_envoyer['texte']->AddCustomHeader('Reply-To: '.$email_reply_to); $email_a_envoyer['texte']->AddCustomHeader('Return-Path: '.$return_path); $email_a_envoyer['texte']->SMTPKeepAlive = true; //$email_a_envoyer['html'] = new phpMail('', $objet_html, $page_html, $page_texte, $charset_dest); $email_a_envoyer['html'] = new phpMail('' , $objet_html , $page_html , $page_texte , $charset_dest ); $email_a_envoyer['html']->From = $from ; if($fromname) { $email_a_envoyer['html']->FromName = $fromname ; } //$email_a_envoyer['html']->AddCustomHeader('Errors-To: '.$return_path); $email_a_envoyer['html']->AddCustomHeader('Reply-To: '.$email_reply_to); $email_a_envoyer['html']->AddCustomHeader('Return-Path: '.$return_path); $email_a_envoyer['html']->SMTPKeepAlive = true; $str_log .= ' REPLY-TO: '.$email_reply_to.' RETURN-PATH: '.$return_path; if($total_abonnes) { $limit = intval($GLOBALS['meta']['spiplistes_lots']); // nombre de messages envoyes par boucles. if($is_a_test) { $sql_adresses_dest = sql_select('id_auteur,nom,email', 'spip_auteurs' , 'email='.sql_quote($email_test).' LIMIT 1'); } else { // Pour memo: les etiquettes sont creees par la trieuse // ou directement en backoffice // - pour les envois de test // - pour les envoyer maintenant des courriers // Traitement d'une liasse d'etiquettes // un id pour ce processus (le tampon est unique par liasse) $id_process = intval(substr(creer_uniqid(),0,5)); $prefix_log .= '['.$id_process.'] '; // un coup de tampon sur les etiquettes // des courriers qui vont partir spiplistes_courriers_en_queue_modifier( array( 'etat' => sql_quote($id_process)) , 'etat='.$sql_vide.' AND id_courrier='.sql_quote($id_courrier).' LIMIT '.$limit ); // prendre la liasse des etiquettes tamponnees $sql_adresses_dest = sql_select( array('a.nom', 'a.id_auteur', 'a.email') , array('spip_auteurs AS a', 'spip_auteurs_courriers AS b') , array( 'etat='.sql_quote($id_process) , 'a.id_auteur=b.id_auteur' , 'b.id_courrier='.sql_quote($id_courrier) ) , 'a.email' ); } $nb_destinataires = sql_count($sql_adresses_dest); spiplistes_log($prefix_log.'nb etiquettes a traiter: '.$nb_destinataires); if($nb_destinataires > 0) { spiplistes_debug_log($prefix_log.'total_abos: '.$total_abonnes.', en cours: '.$nb_destinataires.', limit: '.$limit); /* // CP:20100215: inutile de compter AVANT // si process en //, le chiffre est faux // replacer les compteurs if($row = sql_fetch(sql_select( "nb_emails_envoyes,nb_emails_echec,nb_emails_non_envoyes,nb_emails_texte,nb_emails_html" , 'spip_courriers' , 'id_courrier='.sql_quote($id_courrier) , '', '', 1 )) ) { $nb_emails_envoyes = intval($row['nb_emails_envoyes']); $nb_emails_echec = intval($row['nb_emails_echec']); $nb_emails_non_envoyes = intval($row['nb_emails_non_envoyes']); $nb_emails['texte'] = intval($row['nb_emails_texte']); $nb_emails['html'] = intval($row['nb_emails_html']); } */ //envoyer le lot d'emails selectionne' (la liasse) while($adresse = sql_fetch($sql_adresses_dest)) { if($log_voir_destinataire) { $str_temp = ''; } $id_auteur = intval($adresse['id_auteur']); $nom_auteur = $adresse['nom']; $email = $adresse['email']; // Marquer le debut de l'envoi if(!intval($date_debut_envoi)) { spiplistes_courrier_modifier ($id_courrier, array('date_debut_envoi' => 'NOW()'), false); } $format_abo = spiplistes_format_abo_demande($id_auteur); $total++; if($log_voir_destinataire) { $str_temp .= $nom_auteur.'('.$format_abo.') - '.$email; } unset ($cookie); if(($format_abo=='html') || ($format_abo=='texte')) { $cookie = creer_uniqid(); spiplistes_auteurs_cookie_oubli_updateq($cookie, $email); if($from_valide) { //$_url = generer_url_public('abonnement','d='.$cookie); if($opt_personnaliser_courrier == 'oui') { list($ventre_html, $ventre_texte) = spiplistes_personnaliser_courrier( $page_html , $page_texte , $id_auteur , $format_abo ); } else { $ventre_html = $page_html; $ventre_texte = $page_texte; } // le & semble poser probleme sur certains MUA. A suivre... //$_url = preg_replace(',(&),','&', $_url); // Pour le moment (27/03/2011), un seul patron connu $lien_rappel = 'lien_standard'; list($pied_rappel_html, $pied_rappel_texte) = spiplistes_courriers_assembler_patron ( _SPIPLISTES_PATRONS_LIEN_DIR . $lien_rappel , array('id_courrier' => $id_courrier , 'id_liste' => $id_liste , '_url' => generer_url_public() , 'lang' => $lang , 'd' => $cookie , 'lien_desabo' => ($opt_ajout_lien_desabo == 'oui') ) ); $pied_rappel_texte = spiplistes_translate_2_charset ($pied_rappel_texte , $charset_dest , true); switch($format_abo) { case 'html': // Si on ne trouve pas les tags HTML alors on les ajoutes if (FALSE === strpos($ventre_html, '</html>')) { $email_a_envoyer[$format_abo]->Body = $body_html_debut . $eol . $ventre_html . $eol . $pied_html . $eol . $pied_rappel_html . $eol . $tampon_html . $eol . $body_html_fin ; } else { // Si on trouve les tags HTML cela veut dire que l'auteur // veut pouvoir gerer lui meme la partie <head> ainsi que le lien de desabonnement // donc on ne prend en compte que la partie ventre_html. $tags_perso = array('http://%URL_ABONNEMENT%' => generer_url_public('abonnement','d='.$cookie),); $email_a_envoyer[$format_abo]->Body = str_replace(array_keys($tags_perso), array_values($tags_perso), $ventre_html); } // la version alternative texte $email_a_envoyer[$format_abo]->AltBody = $ventre_texte .$eol2 . $pied_texte . $eol2 . $pied_rappel_texte . $eol2 . $tampon_texte ; break; case 'texte': $email_a_envoyer[$format_abo]->Body = $ventre_texte .$eol2 . $pied_texte . $eol2 . $pied_rappel_texte . $eol2 . $tampon_texte ; break; } $email_a_envoyer[$format_abo]->SetAddress($email, $nom_auteur); // envoie le mail if($simuler_envoi || $email_a_envoyer[$format_abo]->send()) { $nb_emails_envoyes++; $nb_emails[$format_abo]++; if($log_voir_destinataire) { $str_temp .= ' [OK]'; } } else { $nb_emails_echec++; if($log_voir_destinataire) { $str_temp .= _T('spiplistes:erreur_mail'); } } } else { $nb_emails_echec++; if($log_voir_destinataire) { $str_temp .= _T('spiplistes:sans_adresse'); } } } // end if(($format_abo=='html') || ($format_abo=='texte')) else { $nb_emails_non_envoyes++; if($log_voir_destinataire) { $str_temp .= ' '._T('spiplistes:msg_abonne_sans_format'); } // prevenir qu'il manque le format spiplistes_log($prefix_log.' destination format MISSING FOR ID_AUTEUR #'.$id_auteur); } /* fin abo*/ if($log_voir_destinataire) { spiplistes_log($prefix_log.$str_temp); } } // fin while // supprime la liasse de la queue d'envois spiplistes_debug_log($prefix_log."envoi OK. Supprimer queue $id_process"); spiplistes_courriers_en_queue_supprimer('etat='.sql_quote($id_process)); // si c'est un test on repasse le courrier en redac if($is_a_test) { spiplistes_courriers_statut_redac ($id_courrier); } $email_a_envoyer['texte']->SmtpClose(); $email_a_envoyer['html']->SmtpClose(); } // end if } else { //aucun destinataire connu pour ce message spiplistes_debug_log($prefix_log._T('spiplistes:erreur_sans_destinataire') . '---' . _T('spiplistes:envoi_annule') ); spiplistes_courrier_statut_modifier($id_courrier, _SPIPLISTES_COURRIER_STATUT_IGNORE); spiplistes_courrier_supprimer_queue_envois('id_courrier', $id_courrier); $str_log .= ' END #'.$id_courrier; // break; } if(!$is_a_test) { // faire le bilan apres l'envoi d'un lot $sql_set_array = array( 'nb_emails_envoyes' => sql_quote('nb_emails_envoyes').'+'.$nb_emails_envoyes , 'nb_emails_texte' => sql_quote('nb_emails_texte').'+'.$nb_emails['texte'] , 'nb_emails_html' => sql_quote('nb_emails_html').'+'.$nb_emails['html'] ); if($nb_emails_echec) { $sql_set_array['nb_emails_echec'] = sql_quote('nb_emails_echec').'+'.$nb_emails_echec; } if($nb_emails_non_envoyes) { $sql_set_array['nb_emails_non_envoyes'] = sql_quote('nb_emails_non_envoyes').'+'.$nb_emails_non_envoyes; } spiplistes_log($prefix_log.$str_log); $str_log = spiplistes_trace_compteur ($id_courrier , $nb_emails_envoyes , $nb_emails['html'] , $nb_emails['texte'] , $nb_emails_non_envoyes , $nb_emails_echec , 'SESSION'); // si courrier pas termine, redemande la main au CRON, sinon nettoyage. if($t = spiplistes_courriers_en_queue_compter('id_courrier='.sql_quote($id_courrier))) { $str_log .= ' LEFT '.$t.' jobs'; } else { $statut = ($type == _SPIPLISTES_COURRIER_TYPE_NEWSLETTER) ? _SPIPLISTES_COURRIER_STATUT_PUBLIE : _SPIPLISTES_COURRIER_STATUT_AUTO; spiplistes_debug_log($prefix_log."nouveau statut $statut"); $sql_set_array['statut'] = sql_quote($statut); $sql_set_array['date_fin_envoi'] = 'NOW()'; $str_log .= ' END #'.$id_courrier; } spiplistes_courrier_modifier($id_courrier, $sql_set_array, false); // placer en log le suivi des compteurs si mode debug if (spiplistes_debug_log()) { if ($row = sql_fetch(sql_select( 'nb_emails_envoyes,nb_emails_echec,nb_emails_non_envoyes,nb_emails_texte,nb_emails_html' , 'spip_courriers' , 'id_courrier='.sql_quote($id_courrier) , '', '', 1 )) ) { spiplistes_log($prefix_log.$str_log); $str_log = spiplistes_trace_compteur ($id_courrier , $row['nb_emails_envoyes'] , $row['nb_emails_html'] , $row['nb_emails_texte'] , $row['nb_emails_non_envoyes'] , $row['nb_emails_echec'] , 'FROM_DB') . ' END #'.$id_courrier; ; } } } } // end while() } // end if($nb_etiquettes) else { $str_log = 'no job'; } spiplistes_log($prefix_log.$str_log); if(($ii = spiplistes_courriers_total_abonnes()) > 0) { // il en reste apres la meleuse ? Signale au CRON tache non terminee $nb_etiquettes = spiplistes_courriers_en_queue_compter('etat='.$sql_vide); spiplistes_log($prefix_log.'courriers prets au depart ('.$nb_etiquettes.'/'.$ii.')'); $last_time = -$last_time; } return($last_time); } // end spiplistes_meleuse()
function spiplistes_raccourci_journal ($envelopper = true) { static $eol = PHP_EOL; $connect_id_auteur = intval($GLOBALS['connect_id_auteur']); $result = ''; if($envelopper) { $result .= '' . debut_cadre_enfonce('', true) . '<span class="verdana2" style="font-size:80%;text-transform: uppercase;font-weight:bold;">' . _T('titre_cadre_raccourcis') . '</span>'.$eol . '<ul class="verdana2" style="list-style:none;padding:1ex;margin:0;">'.$eol ; } $result .= '' . '<li id="spiplistes-log-raccourci">' . icone_horizontale( _T('spiplistes:log_voir_le_journal') , generer_url_ecrire('spiplistes_voir_journal') , _DIR_PLUGIN_SPIPLISTES_IMG_PACK.'log-24.png' , '' ,false ) . '</li>'.$eol . '<li>'.$eol ; if (spiplistes_pref_lire('opt_console_debug') == 'oui') { $ancre = '#regler-console'; if (_request('exec') != _SPIPLISTES_EXEC_CONFIGURE) { $ancre = generer_url_ecrire(_SPIPLISTES_EXEC_CONFIGURE) . $ancre; } $result .= '' . '<span class="verdana2" style="display:block;padding:0.5ex;text-align:center">'.$eol . '<a href="'.$ancre.'" title="'._T('spiplistes:log_configurer').'" class="cellule-h" style="text-align:center">'.$eol // avertir qu'on est en mode debug . '<span style="display:block;font-weight:700;color:white;background-color:red;">'.$eol . _T('spiplistes:mode_debug_actif') . '</span>' . '</a>'.$eol // l'adresse IP pour info . '<span style="display:block;">' . $_SERVER['SERVER_ADDR'] . '</span>'.$eol . '</span>'.$eol ; } $result .= '</li>'.$eol ; if($envelopper) { $result .= '' . '</ul>'.$eol ; } if($envelopper) { $result .= fin_cadre_enfonce(true); } return($result); }
function spiplistes_boite_autocron () { @define('_SPIP_LISTE_SEND_THREADS',1); $connect_id_auteur = intval($GLOBALS['connect_id_auteur']); // initialise les options foreach(array( 'opt_suspendre_trieuse' , 'opt_suspendre_meleuse' , 'opt_simuler_envoi' ) as $key) { $$key = spiplistes_pref_lire($key); } $result = ""; // Informe sur l'etat de la trieuse if($opt_suspendre_trieuse == 'oui') { if(_request('opt_suspendre_trieuse')=='non') { if(autoriser('webmestre','','',$connect_id_auteur)) { spiplistes_ecrire_key_in_serialized_meta ('opt_suspendre_trieuse', $opt_suspendre_trieuse = 'non', _SPIPLISTES_META_PREFERENCES); spiplistes_ecrire_metas(); $result .= "<p class='verdana2' style='margin-bottom:1em;'>"._T('spiplistes:Trieuse_reactivee')."</p>\n"; } } else { $result .= spiplistes_boite_autocron_info(_DIR_PLUGIN_SPIPLISTES_IMG_PACK."stock_timer.gif", true , _T('spiplistes:trieuse_suspendue'), _T('bouton_annuler') , _T('spiplistes:trieuse_suspendue_info'), 'opt_suspendre_trieuse', _DIR_IMG_PACK."warning-24.gif" ); } } // Informe sur l'etat de la meleuse if($opt_suspendre_meleuse == 'oui') { if(_request('opt_suspendre_meleuse')=='non') { if(autoriser('webmestre','','',$connect_id_auteur)) { spiplistes_ecrire_key_in_serialized_meta ('opt_suspendre_meleuse', $opt_suspendre_meleuse = 'non', _SPIPLISTES_META_PREFERENCES); spiplistes_ecrire_metas(); $result .= "<p class='verdana2' style='margin-bottom:1em;'>"._T('spiplistes:Meleuse_reactivee')."</p>\n"; } } else { $result .= spiplistes_boite_autocron_info(_DIR_PLUGIN_SPIPLISTES_IMG_PACK."courriers_envoyer-24.png", true , _T('spiplistes:meleuse_suspendue'), _T('bouton_annuler') , _T('spiplistes:meleuse_suspendue_info'), 'opt_suspendre_meleuse', _DIR_IMG_PACK."warning-24.gif" ); } } // Informe si mode simulation en cours if($opt_simuler_envoi == 'oui') { if(_request('opt_simuler_envoi')=='non') { if(autoriser('webmestre','','',$connect_id_auteur)) { spiplistes_ecrire_key_in_serialized_meta ('opt_simuler_envoi', $opt_simuler_envoi = 'non', _SPIPLISTES_META_PREFERENCES); spiplistes_ecrire_metas(); $result .= "<p class='verdana2' style='margin-bottom:1em;'>"._T('spiplistes:simulation_desactive')."</p>\n"; } } else { $result .= spiplistes_boite_autocron_info(_DIR_PLUGIN_SPIPLISTES_IMG_PACK."courriers_envoyer-24.png", true , _T('spiplistes:Mode_simulation'), _T('bouton_annuler') , _T('spiplistes:mode_simulation_info'), 'opt_simuler_envoi', _DIR_IMG_PACK."warning-24.gif" ); } } include_spip('genie/spiplistes_cron'); $time = time(); $time = cron_spiplistes_cron($time); if($time > 0) { // le CRON n'a rien a faire. Pas de boite autocron return($result); } $nb_etiquettes = spiplistes_courriers_en_queue_compter("etat=".sql_quote('')); $nb_total_abonnes = spiplistes_courriers_total_abonnes(); if(($nb_etiquettes > 0) && ($nb_total_abonnes > 0)) { $result .= "" . "<br />" . debut_boite_info(true) . "<div style='font-weight:bold;text-align:center'>"._T('spiplistes:envoi_en_cours')."</div>" . "<div style='padding : 10px;text-align:center'><img alt='' src='"._DIR_PLUGIN_SPIPLISTES_IMG_PACK."courriers_distribution-48.gif' /></div>" . "<div id='meleuse'>" . ( ($nb_total_abonnes) ? "" . "<p align='center' id='envoi_statut'>"._T('spiplistes:envoi_en_cours')." " . "<strong id='envois_restants'>$nb_etiquettes</strong>/<span id='envois_total'>$nb_total_abonnes</span> " . "(<span id='envois_restant_pourcent'>" . round($nb_etiquettes / $nb_total_abonnes * 100)."</span>%)</p>" : "" ) // message si simulation d'envoi . ( ($opt_simuler_envoi == 'oui') ? "<div style='color:white;background-color:red;text-align:center;line-height:1.4em;'>"._T('spiplistes:mode_simulation')."</div>\n" : "" ) ; $href = generer_action_auteur('spiplistes_envoi_lot','envoyer'); for ($i = 0; $i < _SPIP_LISTE_SEND_THREADS; $i++) { $result .= "<span id='proc$i' class='processus' name='$href'></span>"; } $result .= "" . "<a href='".generer_url_ecrire(_SPIPLISTES_EXEC_COURRIERS_LISTE)."' id='redirect_after'></a>" . "</div>" . "<script><!-- var target = $('#envois_restants'); var total = $('#envois_total').html(); var target_pc = $('#envois_restant_pourcent'); function redirect_fin(){ redirect = $('#redirect_after'); if (redirect.length>0){ href = redirect.attr('href'); setTimeout('document.location.href = \"'+href+'\"',0); } } jQuery.fn.runProcessus = function(url) { var proc = this; var href = url; $(target).load(url,function(data){ restant = $(target).html(); pourcent = Math.round(restant/total*100); $(target_pc).html(pourcent); if (Math.round(restant)>0) $(proc).runProcessus(href); else redirect_fin(); }); } $('span.processus').each(function(){ var href = $(this).attr('name'); $(this).html(ajax_image_searching).runProcessus(href); //run_processus($(this).attr('id')); }); //--> </script>" . "<p class='verdana2'>"._T('spiplistes:texte_boite_en_cours')."</p>" . fin_boite_info(true) ; } return($result); }
/** * cron_spiplistes_cron() renvoie: * - nul, si la tache n'a pas a etre effectuee * - positif, si la tache a ete effectuee * - negatif, si la tache doit etre poursuivie ou recommencee * @return null|int */ function cron_spiplistes_cron ($last_time) { include_spip('inc/utils'); include_spip('inc/spiplistes_api_globales'); include_spip('base/spiplistes_tables'); include_spip('inc/spiplistes_api'); include_spip('inc/spiplistes_api_courrier'); include_spip('inc/spiplistes_api_abstract_sql'); $prefix_log = 'CRON: '; // initialise les options (prefs spiplistes) foreach(array( 'opt_suspendre_trieuse' ) as $key) { $$key = spiplistes_pref_lire($key); } if($opt_suspendre_trieuse == 'oui') { spiplistes_log($prefix_log.'SUSPEND MODE !!!'); if(spiplistes_courriers_en_queue_compter('etat='.sql_quote('')) > 0) { include_spip('inc/spiplistes_meleuse'); return(spiplistes_meleuse($last_time)); } else { return($last_time); } } $current_time = time(); $sql_select = array( 'id_liste', 'titre', 'titre_message', 'date', 'maj' , 'message_auto', 'periode', 'lang', 'patron', 'statut' ); // demande les listes auto a' envoyer (date <= maintenant) $sql_where = 'message_auto='.sql_quote('oui').' AND date > 0 AND date <= NOW() AND ('.spiplistes_listes_sql_where_or(_SPIPLISTES_LISTES_STATUTS_OK).') ' ; $listes_privees_et_publiques = sql_select( $sql_select , 'spip_listes' , $sql_where ); $nb_listes_ok = sql_count($listes_privees_et_publiques); spiplistes_debug_log($prefix_log.'nb listes depart: '.$nb_listes_ok); if($nb_listes_ok > 0) { $mod_listes_ids = spiplistes_mod_listes_get_id_auteur('toutes'); while($row = sql_fetch($listes_privees_et_publiques)) { // initalise les variables foreach($sql_select as $key) { $$key = $row[$key]; } $id_liste = intval($id_liste); $periode = intval($periode); $envoyer_quand = $date; $dernier_envoi = $maj; // demande id_auteur de la liste pour signer le courrier // si plusieurs moderateurs, prend le premier $id_auteur = (isset($mod_listes_ids[$id_liste]) && ($mod_listes_ids[$id_liste][0] > 0)) ? $mod_listes_ids[$id_liste][0] : 1 // attribue a l'admin principal si manquant ; // Tampon date prochain envoi (dans 'date') et d'envoi (dans 'maj') $sql_set = $next_time = false; if(in_array($statut, explode(';', _SPIPLISTES_LISTES_STATUTS_PERIODIQUES))) { // prendre la date du jour plutot que la dernier date choisie // sinon, une lettre quotidienne du mois precedent // se verra envoyee autant de fois que de jours en attente //$job_time = strtotime($envoyer_quand); $job_time = strtotime(spiplistes_sql_now()); $job_heure = date('H', $job_time); $job_minute = date('i', $job_time); $job_mois = date('m', $job_time); $job_jour = (($statut == _SPIPLISTES_LIST_PUB_MONTHLY) ? 1 : date('j', $job_time)); $job_an = date('Y'); // la date est forcee par celle du systeme (eviter erreurs) switch($statut) { case _SPIPLISTES_LIST_PRIV_YEARLY: case _SPIPLISTES_LIST_PUB_YEARLY: $next_time = mktime($job_heure, $job_minute, 0, $job_mois, $job_jour, $job_an+1); break; case _SPIPLISTES_LIST_PRIV_MENSUEL: case _SPIPLISTES_LIST_PRIV_MONTHLY: case _SPIPLISTES_LIST_PUB_MENSUEL: case _SPIPLISTES_LIST_PUB_MONTHLY: $next_time = mktime($job_heure, $job_minute, 0, $job_mois+1, $job_jour, $job_an); break; case _SPIPLISTES_LIST_PRIV_HEBDO: case _SPIPLISTES_LIST_PRIV_WEEKLY: case _SPIPLISTES_LIST_PUB_HEBDO: case _SPIPLISTES_LIST_PUB_WEEKLY: $next_time = mktime($job_heure, $job_minute, 0, $job_mois, $job_jour+7, $job_an); break; case _SPIPLISTES_LIST_PRIV_DAILY: case _SPIPLISTES_LIST_PUB_DAILY: $next_time = mktime($job_heure, $job_minute, 0, $job_mois, $job_jour+$periode, $job_an); break; default: $sql_set = array('date' => sql_quote(''), 'message_auto' => sql_quote('non')); break; } } else if($periode) { $next_time = time() + (_SPIPLISTES_TIME_1_DAY * $periode); } else { // pas de periode ? c'est un envoyer_maintenant. // applique le tampon date d'envoi et repasse la liste en auto non $sql_set = array('date' => sql_quote(''), 'message_auto' => sql_quote('non')); } if($next_time || count($sql_set)) { if($next_time) { // prochaine date d'envoi dans 'date' $sql_set = array('date' => sql_quote(normaliser_date($next_time))); } $sql_set['maj'] = 'NOW()'; sql_update( 'spip_listes' , $sql_set , 'id_liste='.sql_quote($id_liste).' LIMIT 1' ); } ///////////////////////////// // preparation du courrier a placer dans le panier (spip_courriers) // en cas de periode, la date est dans le passe' // pour avoir les elements publies depuis cette date if ( empty($titre_message) && (spiplistes_pref_lire_defaut('opt_completer_titre_nom_site', 'oui') == 'oui') ) { $titre .= _T('spiplistes:_de_') . spiplistes_nom_site_texte($lang); } else { $titre = $titre_message; } spiplistes_debug_log ($prefix_log.'utiliser patron '._SPIPLISTES_PATRONS_DIR.$patron); list($courrier_html, $courrier_texte) = spiplistes_courriers_assembler_patron ( _SPIPLISTES_PATRONS_DIR . $patron , array('date' => $dernier_envoi, 'patron'=>$patron, 'lang'=>$lang)); //$taille_courrier_ok = (($n = spiplistes_strlen(spiplistes_courrier_version_texte($courrier_html))) > 10); $taille_courrier_ok = (($n = strlen($courrier_texte)) > 10); spiplistes_debug_log($prefix_log.'taille courrier pour la liste #'.$id_liste.' : '.$n); if($taille_courrier_ok) { include_spip('inc/filtres'); $courrier_html = spiplistes_liens_absolus ($courrier_html); $date_debut_envoi = $date_fin_envoi = "''"; $statut = _SPIPLISTES_COURRIER_STATUT_ENCOURS; } else { $date_debut_envoi = $date_fin_envoi = 'NOW()'; $statut = _SPIPLISTES_COURRIER_STATUT_VIDE; spiplistes_debug_log($prefix_log.'courrier vide'); } // Place le courrier dans le casier $id_courrier = sql_insert( 'spip_courriers' , '(' . 'titre ,date ,statut ,type ,id_auteur ,id_liste ,date_debut_envoi ,date_fin_envoi ,texte ,message_texte' . ')' , '(' . sql_quote($titre) . ',NOW()' . ','.sql_quote($statut) . ','.sql_quote(_SPIPLISTES_COURRIER_TYPE_LISTEAUTO) . ','.sql_quote($id_auteur) . ','.sql_quote($id_liste) . ','.$date_debut_envoi . ','.$date_fin_envoi . ','.sql_quote($courrier_html) . ','.sql_quote($courrier_texte) . ')' ); if($taille_courrier_ok) { // place les etiquettes // (ajout des abonnes dans la queue (spip_auteurs_courriers)) spiplistes_courrier_remplir_queue_envois($id_courrier, $id_liste); } } // end while // fin traitement des listes } ///////////////////////////// // Si panier des etiquettes plein, appel de la meleuse if( $n = spiplistes_courriers_en_queue_compter('etat='.sql_quote('')) ){ spiplistes_debug_log($prefix_log.$n.' job(s), appel meleuse'); include_spip('inc/spiplistes_meleuse'); return(spiplistes_meleuse($last_time)); } else { spiplistes_debug_log($prefix_log.'NO JOB'); } return ($last_time); } // cron_spiplistes_cron()