function action_spiplistes_liste_des_abonnes_dist () { include_spip('inc/autoriser'); include_spip('inc/spiplistes_api'); $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); if(!preg_match(",^(\d+) (\d+) (\S+)$,", $arg, $r)) { spiplistes_log("action_spiplistes_liste_des_abonnes_dist $arg pas compris"); return; } $id_liste = intval($r[1]); $debut = intval($r[2]); $tri = $r[3]; $redirect = rawurldecode(_request('redirect')); $statut_liste = ($id_liste > 0) ? sql_getfetsel('statut', 'spip_listes', "id_liste=".sql_quote($id_liste), '', '', 1) : false ; echo(spiplistes_listes_boite_abonnes ($id_liste, $statut_liste, $tri, $debut, $redirect)); exit(0); } //
function formulaires_gestion_abonnement_charger_dist($id_liste=''){ //spiplistes_debug_log ('formulaires_gestion_abonnement_charger_dist()'); $d = _request('d'); $stop = intval(_request('stop')); $valeurs = array(); $valeurs['id_liste'] = $id_liste; $valeurs['d'] = $d; $valeurs['editable'] = false; if($auteur = auteur_cookie_ou_session($d)) { $id_auteur = $auteur['id_auteur']; $valeurs['id_auteur'] = intval($id_auteur); $valeurs['format'] = spiplistes_format_abo_demande($id_auteur); $valeurs['editable'] = true; // la liste des abonnements en cours // pour cet auteur (avec titre des listes) $mes_abos = spiplistes_abonnements_listes_auteur ($id_auteur, true); // si c'est un desabonnement a une liste // affiche juste la demande de confirmation if ($stop > 0) { if ($id_auteur > 0) { $id_liste = $stop; // verifier qu'il est encore abonne' a cette liste if ( $mes_abos && isset($mes_abos[$id_liste]) ) { $row = spiplistes_listes_liste_fetsel ($id_liste, 'titre,descriptif'); $valeurs['titre_liste'] = $row['titre']; $valeurs['descriptif'] = $row['descriptif']; $valeurs['stop'] = $stop; } else { $valeurs['errormsg'] = _T('spiplistes:pas_abonne_liste'); } } else { unset ($valeurs['d']); unset ($valeurs['editable']); } } } else { spiplistes_log ('ERR: UNSUBSCRIBE id_auteur #'.$id_auteur.' id_liste #'.$id_liste); $valeurs['errormsg'] = _T('spiplistes:action_interdite'); } return $valeurs; }
/** * Pour mise à jour de PSIP-Listes * * @return string */ function spiplistes_upgrade () { $spiplistes_name = _SPIPLISTES_PREFIX; $spiplistes_current_version = spiplistes_current_version_get(_SPIPLISTES_PREFIX); $spiplistes_real_version = spiplistes_real_version_get(_SPIPLISTES_PREFIX); $spiplistes_current_version_base = spiplistes_current_version_base_get(_SPIPLISTES_PREFIX); $spiplistes_real_version_base = spiplistes_real_version_base_get(_SPIPLISTES_PREFIX); spiplistes_log("VERSIONS MOD DETECTED [$spiplistes_current_version::$spiplistes_real_version][$spiplistes_current_version_base::$spiplistes_real_version_base]"); if(!$spiplistes_current_version) { // SPIP-Listes n'a jamais ete installe ? include_spip('base/spiplistes_init'); $spiplistes_current_version_base = spiplistes_base_creer(); } if($spiplistes_current_version_base < $spiplistes_real_version_base) { // upgrade de la base ? $spiplistes_current_version_base = spiplistes_upgrade_base( $spiplistes_name , $spiplistes_current_version , $spiplistes_current_version_base , $spiplistes_real_version_base ); } if($spiplistes_current_version < $spiplistes_real_version) { spiplistes_log("UPGRADING $spiplistes_name $spiplistes_current_version TO $spiplistes_real_version"); if($spiplistes_current_version < 1.9982) { // Ne modifie pas le schema. Ajoute juste une legende sur les tables sql_alter("TABLE spip_listes COMMENT ".sql_quote("Listes de diffusion")); sql_alter("TABLE spip_courriers COMMENT ".sql_quote("Panier des courriers (casiers)")); sql_alter("TABLE spip_auteurs_courriers COMMENT ".sql_quote("Queue des envois de courriers")); sql_alter("TABLE spip_auteurs_listes COMMENT ".sql_quote("Listes de abonnements aux listes")); sql_alter("TABLE spip_auteurs_mod_listes COMMENT ".sql_quote("Moderateurs des listes de diffusion")); sql_alter("TABLE spip_auteurs_elargis COMMENT ".sql_quote("Preferences des auteurs/abonnes (formats recept.)")); $spiplistes_current_version = 1.9923; } /* ... */ // Ajouter au dessus de cette ligne les patches si besoin pour nouvelle version de SPIP-Listes // qui ne concerne pas la base (changement de nom de script, de patron, etc.) // fin des ajouts de patches ecrire_meta('spiplistes_version', $spiplistes_real_version); spiplistes_ecrire_metas(); } return($spiplistes_current_version); }
function action_spiplistes_supprimer_abonne_dist () { include_spip('inc/autoriser'); include_spip('inc/spiplistes_api'); // les globales ne passent pas en action //global $connect_id_auteur; $connect_id_auteur = $GLOBALS['auteur_session']['id_auteur']; $securiser_action = charger_fonction('securiser_action', 'inc'); $id_auteur = intval($securiser_action()); $redirect = urldecode(_request('redirect')); if (autoriser('supprimer', 'auteur', $id_auteur)) { $result = sql_select("id_auteur,statut", "spip_auteurs", "id_auteur=".sql_quote($id_auteur), '','', 1); if ($row = sql_fetch($result)) { $id_auteur = intval($row['id_auteur']); $statut = $row['statut']; if( ($id_auteur > 0) && ($statut=='6forum') ) { $sql_whereq = "id_auteur=".sql_quote($id_auteur); if( // vide la queue du courrier en attente pour cet abonne' spiplistes_courriers_en_queue_supprimer($sql_whereq) // supprime l'abonne' des abonnements && spiplistes_abonnements_auteur_desabonner($id_auteur, 'toutes') // supprime l'abonne' des formats elargis && spiplistes_format_abo_supprimer($id_auteur) ) { spiplistes_log("ID_AUTEUR #$id_auteur UNSUBSCRIBE BY ID_AUTEUR #$connect_id_auteur"); // ne peut supprimer que les invites if($statut=='6forum') { if(spiplistes_auteurs_auteur_delete($sql_whereq)) { // garde une petite trace... spiplistes_log("ID_AUTEUR #$id_auteur DELETED BY ID_AUTEUR #$connect_id_auteur"); } } } } } } if($redirect) { redirige_par_entete(str_replace("&", "&", $redirect)); } }
function action_spiplistes_moderateurs_gerer_dist () { global $auteur_session; $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); // arg#1: id_liste // arg#2: si faire == 'supprimer', id_auteur, sinon 0 // arg#3: faire if(!preg_match(",^(\d+) (\d+) (\S+)$,", $arg, $r)) { spiplistes_log("action_spiplistes_moderateurs_gerer_dist $arg pas compris"); return; } $id_liste = intval($r[1]); $id_auteur = intval($r[2]); $faire = $r[3]; //spiplistes_log("action_spiplistes_moderateurs_gerer_dist id_liste: $id_liste, id_auteur: $id_auteur, faire: $faire"); if($id_liste > 0) { include_spip('inc/spiplistes_api'); switch($faire) { case 'ajouter': $id_auteur = intval(_request('ajouter_id_mod')); if($id_auteur > 0) { spiplistes_mod_listes_ajouter($id_auteur, $id_liste); } break; case 'supprimer': if($id_auteur > 0) { spiplistes_mod_listes_supprimer($id_auteur, $id_liste); } break; } } else { spiplistes_log("action_spiplistes_moderateurs_gerer_dist $id_liste $id_auteur erreur"); return; } include_spip('inc/spiplistes_listes_selectionner_auteur'); echo(spiplistes_listes_boite_moderateurs($id_liste, _SPIPLISTES_EXEC_LISTE_GERER, 'mods-conteneur')); exit(0); } //
/** * @return boolean */ function spiplistes_utiliser_facteur() { static $utiliser; if($utiliser === null) { $utiliser = (_SPIPLISTES_UTILISER_FACTEUR == 'oui') && function_exists('liste_plugin_actifs') && ($p = liste_plugin_actifs()) && isset($p['FACTEUR']) && spiplistes_log('plugin facteur'); } return($utiliser); }
/** * @return boolean */ function spiplistes_vider_tables () { include_spip('base/abstract_sql'); // ne supprime pas la table spip_auteurs_elargis (utilisee par inscription2, echoppe, ... ? ) $sql_tables = "spip_listes, spip_courriers, spip_auteurs_courriers, spip_auteurs_listes, spip_auteurs_mod_listes"; spiplistes_log("DROPT TABLES ".$sql_tables); sql_drop_table($sql_tables, true); // effacer les metas (prefs, etc.) $sql_spiplistes_metas = array( 'spiplistes_version' , 'spiplistes_base_version' , 'spiplistes_charset_envoi' , 'spiplistes_lots' , 'abonnement_config' , _SPIPLISTES_META_PREFERENCES ); spiplistes_log("DELETE meta: " . implode(", ", $sql_spiplistes_metas)); sql_delete('spip_meta', "nom=".implode(" OR nom=", array_map("sql_quote", $sql_spiplistes_metas))); // recharge les metas en cache spiplistes_ecrire_metas(); return(true); } // spiplistes_vider_tables ()
/** * Permet de forcer l'abonnement a une liste * $statut = "tous" => '6forum' + '1comite' + '0minirezo' * si statut == 'aucun', desabonne tous * @global string $connect_id_auteur * @global boolean $connect_toutes_rubriques * @global int $connect_id_auteur * @param int $id_liste * @param string $statut * @param boolean $forcer_format_reception * @return boolean */ function spiplistes_listes_forcer_abonnement ($id_liste, $statut, $forcer_format_reception) { global $connect_statut , $connect_toutes_rubriques , $connect_id_auteur ; $id_liste = intval($id_liste); if ($id_liste <= 0) { return(false); } $sql_where = ''; if($statut=="tous") { $sql_where = " (statut=".sql_quote('6forum')." OR statut=".sql_quote('1comite')." OR statut=".sql_quote('0minirezo').")"; } if($statut=="auteurs") { $sql_where = " (statut=".sql_quote('1comite')." OR statut=".sql_quote('0minirezo').")"; } else if(in_array($statut, array('6forum', '1comite', '0minirezo'))) { $sql_where = " statut=".sql_quote($statut).""; } if(!empty($sql_where)) { // cherche les non-abonnes /* * "SELECT id_auteur FROM spip_auteurs WHERE $sql_where AND LENGTH(email) AND id_auteur NOT IN ($selection)" */ $selection = (spiplistes_spip_est_inferieur_193()) ? "SELECT id_auteur FROM spip_auteurs_listes WHERE id_liste=".sql_quote($id_liste) : sql_select("id_auteur", "spip_auteurs_listes", "id_liste=".sql_quote($id_liste),'','','','','',false) ; $sql_result = sql_select( 'id_auteur' , 'spip_auteurs' , array( $sql_where , "LENGTH(email)" , "id_auteur NOT IN ($selection)" ) ); if($sql_result) { $sql_values = $elargis = ""; $nb = sql_count($sql_result); if($nb > 0) { while($row = sql_fetch($sql_result)) { $sql_values .= " (".sql_quote(intval($row['id_auteur'])) . ", $id_liste, NOW()" // rajoute le format si force' . (($forcer_format_reception) ? "," . sql_quote($forcer_format_reception) : "") . "),"; $elargis .= sql_quote(intval($row['id_auteur'])); } if(!empty($sql_values)) { $sql_values = rtrim($sql_values, ","); $sql_result = sql_insert('spip_auteurs_listes' , "(id_auteur, id_liste, date_inscription" . ($forcer_format_reception ? ",format" : "") . ")" , $sql_values ); if($sql_result === false) { spiplistes_sqlerror_log("listes_forcer_abonnement"); return(false); } else { spiplistes_log($nb . " AUTEURS ($statut) ADDED TO LISTE #$id_liste BY ID_AUTEUR #$connect_id_auteur"); if($forcer_format_reception) { // le format est demande' force'. // rajouter les abonnes manquants a spip_auteurs_elargis $sql_insert = " INSERT INTO spip_auteurs_elargis (id_auteur,`spip_listes_format`) SELECT l.id_auteur,l.format FROM spip_auteurs_listes AS l WHERE l.id_liste=" . sql_quote($id_liste) . " AND NOT EXISTS (SELECT NULL FROM spip_auteurs_elargis AS e WHERE l.id_auteur = e.id_auteur) "; if(sql_query($sql_insert) === false) { spiplistes_sqlerror_log("listes_forcer_abonnement"); } else { spiplistes_log("RECEPT. FORMAT MODIFIED FOR ID_LISTE #$id_liste BY ID_AUTEUR #$connect_id_auteur"); } } return($nb); } } } return(0); // pas d'abo a rajouter. Pas une erreur. } return(false); } else if($statut == "aucun") { // desabonner tous $result = 0; $sql_result = sql_delete('spip_auteurs_listes', "id_liste=".sql_quote($id_liste)); if($sql_result) { spiplistes_log("auteurs (tous) removed from id_liste #$id_liste by id_auteur #$connect_id_auteur"); $result++; return($result); } } return(false); } // end spiplistes_listes_forcer_abonnement()
function spiplistes_envoyer_mail ($to, $subject, $message, $from = false, $headers = '', $format = 'texte') { static $opt_simuler_envoi; // si desabo, plus de format ! donc forcer a texte $format = ($format == 'html') ? $format : 'texte'; $charset = $GLOBALS['meta']['spiplistes_charset_envoi']; if(!$opt_simuler_envoi) { $opt_simuler_envoi = spiplistes_pref_lire('opt_simuler_envoi'); } if (!$from) { $from = spiplistes_email_from_default(); } if(strpos($from, '<') === false) { $fromname = spiplistes_nom_site_texte(); if ($charset != $GLOBALS['meta']['charset']){ include_spip('inc/charsets'); $fromname = unicode2charset(charset2unicode($fromname),$charset); } } // @TODO: voir email_reply_to ? $reply_to = 'no-reply'.preg_replace("|.*(@[a-z.]+)|i", "$1", email_valide($from)); if($opt_simuler_envoi == 'oui') { spiplistes_log("!!! MAIL SIMULATION MODE !!!"); $result = true; } else { include_once(_DIR_PLUGIN_SPIPLISTES.'inc/spiplistes_mail.inc.php'); $email_a_envoyer = array(); $return_path = spiplistes_return_path($from); if(is_array($message)) { if($format=='html' && isset($message[$format])) { $email_a_envoyer['html'] = new phpMail($to, $subject, $message['html'], $message['texte'], $charset); $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: ".$from); $email_a_envoyer['html']->AddCustomHeader("Return-Path: ".$return_path); $email_a_envoyer['html']->SMTPKeepAlive = true; $email_a_envoyer['html']->Body = $message['html']->Body; $email_a_envoyer['html']->AltBody = $message['html']->AltBody; } $message = $message['texte']->Body; } //$message = spiplistes_html_entity_decode ($message, $charset); $message = spiplistes_translate_2_charset ($message, $charset, true); //$email_a_envoyer['texte'] = new phpMail($to, $subject, '', html_entity_decode($message), $charset); $email_a_envoyer['texte'] = new phpMail($to, $subject, '', $message, $charset); $email_a_envoyer['texte']->From = $from ; if($fromname) $email_a_envoyer['html']->FromName = $fromname ; $email_a_envoyer['texte']->AddCustomHeader('Errors-To: '.$return_path); $email_a_envoyer['texte']->AddCustomHeader('Reply-To: '.$reply_to); $email_a_envoyer['texte']->AddCustomHeader('Return-Path: '.$return_path); $email_a_envoyer['texte']->SMTPKeepAlive = true; $result = $email_a_envoyer[$format]->send(); $msg = "email from $from to $to"; spiplistes_log(!$result ? "error: $msg not sent" : "$msg sent"); } return($result); }
function exec_spiplistes_listes_toutes(){ include_spip('inc/presentation'); include_spip('inc/spiplistes_api'); include_spip('inc/spiplistes_api_presentation'); include_spip('inc/spiplistes_lister_courriers_listes'); include_spip('inc/spiplistes_naviguer_paniers'); include_spip('inc/spiplistes_agenda'); global $connect_statut , $connect_id_auteur ; $flag_editable = ($connect_statut == "0minirezo"); if($flag_editable) { // initialise les variables postees par le formulaire foreach(array( 'btn_supprimer_liste_confirme', 'id_liste' // _SPIPLISTES_EXEC_LISTE_GERER , 'btn_confirmer_envoi_maintenant', 'titre_message' , 'periode_agenda' // local: pour afficher l'agenda ) as $key) { $$key = _request($key); } foreach(array('id_liste', 'periode_agenda') as $key) { $$key = intval($$key); } // envoyer maintenant demande' par _SPIPLISTES_EXEC_LISTE_GERER if($btn_confirmer_envoi_maintenant && ($id_liste > 0)) { $array_set = array( 'date' => 'NOW()' ); if(!spiplistes_listes_liste_modifier($id_liste, $array_set)) { spiplistes_log("ERR: listes_modifier_liste #$id_liste"); } } // suppression demandee par _SPIPLISTES_EXEC_LISTE_GERER if($btn_supprimer_liste_confirme && $id_liste && spiplistes_listes_liste_supprimer($id_liste) ) { spiplistes_log("ID_LISTE #$id_liste DELETED BY ID_AUTEUR #$connect_id_auteur"); } } //////////////////////////////////// // PAGE CONTENU //////////////////////////////////// $titre_page = _T('spiplistes:listes_de_diffusion_'); // Permet entre autres d'ajouter les classes a la page : <body class='$rubrique $sous_rubrique'> $rubrique = _SPIPLISTES_PREFIX; $sous_rubrique = "listes_toutes"; $commencer_page = charger_fonction('commencer_page', 'inc'); echo($commencer_page(_T('spiplistes:spiplistes') . " - " . $titre_page, $rubrique, $sous_rubrique)); // la gestion des abonnes est reservee aux admins if(!$flag_editable) { die (spiplistes_terminer_page_non_autorisee() . fin_page()); } $page_result = "" . "<br /><br /><br />\n" . spiplistes_gros_titre($titre_page, '', true) . barre_onglets($rubrique, $sous_rubrique) . debut_gauche($rubrique, true) . spiplistes_naviguer_paniers_listes(_T('spiplistes:aller_aux_listes_'), true) . spiplistes_boite_agenda($periode_agenda) . pipeline('affiche_gauche', array('args'=>array('exec'=>$sous_rubrique),'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'=>$sous_rubrique),'data'=>'')) . debut_droite($rubrique, true) ; // MODE LISTES: afficher les listes -------------------------------------------- $page_result .= ""; foreach(explode(";", _SPIPLISTES_LISTES_STATUTS_TOUS) as $statut) { $page_result .= "" . spiplistes_lister_courriers_listes( spiplistes_items_get_item("tab_t", $statut) . ( ($desc = spiplistes_items_get_item("desc", $statut)) ? "<br /><span style='font-weight:normal;'>$desc</span>" : "" ) , spiplistes_items_get_item("icon", $statut) , 'listes' , $statut , false , 'position' , _SPIPLISTES_EXEC_LISTE_GERER ) ; } echo($page_result); echo pipeline('affiche_milieu',array('args'=>array('exec'=>$sous_rubrique),'data'=>'')) , spiplistes_html_signature(_SPIPLISTES_PREFIX) , fin_gauche(), fin_page(); }
function action_spiplistes_changer_statut_abonne_dist () { // les globales ne passent pas en action //global $connect_id_auteur; $connect_id_auteur = $GLOBALS['auteur_session']['id_auteur']; include_spip('inc/autoriser'); include_spip(_DIR_PLUGIN_SPIPLISTES.'inc/spiplistes_api'); $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); $redirect = urldecode(_request('redirect')); $id_liste = urldecode(_request('id_liste')); $tri = urldecode(_request('tri')); $debut = urldecode(_request('debut')); $arg = explode('-',$arg); $id_auteur = intval($arg[0]); $action = $arg[1]; if(($id_auteur > 0) && ($connect_id_auteur > 0)) { if ($action == 'format') { //modification du format abonne ('html', 'texte' ou 'non') $statut = _request('statut'); if(autoriser('modifierformat', 'abonne', $id_auteur)) { if(spiplistes_format_abo_modifier($id_auteur, $statut)) { if(!$redirect) { include_spip('inc/spiplistes_api_presentation'); include_spip('inc/spiplistes_listes_selectionner_auteur'); //echo(spiplistes_listes_boite_abonnes($id_liste, $tri, $debut, $script_retour)); echo(spiplistes_listes_boite_abonnements($id_liste, $statut_liste, $tri, $debut, $redirect, $elligibles, $nb_elligibles)); exit(0); } } } } if ($action == 'supprimer') { // supprimer un abonne'. Ne supprime pas le compte, juste l'abo dans la liste indiquee. include_spip('inc/spiplistes_api_presentation'); include_spip('inc/spiplistes_listes_selectionner_auteur'); spiplistes_abonnements_auteur_desabonner ($id_auteur, (($id_liste > 0) ? $id_liste : 'toutes')); $statut_liste = sql_getfetsel('statut', 'spip_listes', "id_liste=".sql_quote($id_liste), '', '', 1); $scrip_retour = urldecode(_request('scrip_retour')); echo( spiplistes_listes_boite_abonnes ($id_liste, $statut_liste, $tri, $debut, $scrip_retour) . spiplistes_listes_boite_elligibles ($id_liste, $statut_liste, $tri, $debut) ); } // CP-20080324: l'abonnement par action/ actuellement pas utilise par le formulaire abonnes_tous. // A voir si on conserve // CP-20081111: code probablement inutile. Un autre script action fait le meme boulot. A supprimer apres verif /* */ if ($action=='listeabo') { //abonne un auteur, force en _SPIPLISTES_FORMAT_DEFAULT si pas de format if ($id_auteur && (($id_liste = intval($arg[2])) > 0) && autoriser('abonnerauteur', 'liste', $id_liste, NULL, array('id_auteur'=>$id_auteur)) ) { spiplistes_abonnements_ajouter($id_auteur, $id_liste); //attribuer un format de reception si besoin (ancien auteur) if( (!$abo = spiplistes_format_abo_demande($id_auteur)) || ($abo == 'non') ) { spiplistes_format_abo_modifier($id_auteur, _SPIPLISTES_FORMAT_DEFAULT); } } spiplistes_log("SUBSCRIBE ID_AUTEUR #$id_auteur to ID_LISTE #$id_liste by ID_AUTEUR #$connect_id_auteur"); } if ($action=='listedesabo') { // desabonne un auteur if ($id_liste = intval($arg[2])) { if (autoriser('desabonnerauteur', 'liste', $id_liste, NULL, array('id_auteur'=>$id_auteur))) { if(spiplistes_abonnements_auteur_desabonner ($id_auteur, $id_liste)) { spiplistes_log("UNSUBSCRIBE ID_AUTEUR #$id_auteur from ID_LISTE #$id_liste by ID_AUTEUR #$connect_id_auteur"); } } } } // CP-20081111: fin de code inutile. } if ($redirect){ redirige_par_entete(str_replace("&","&",$redirect)."#abo$id_auteur"); } } // action_spiplistes_changer_statut_abonne_dist()
/** * 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 exec_spiplistes_courrier_gerer () { include_spip('inc/barre'); include_spip('inc/documents'); include_spip('base/spiplistes_tables'); include_spip('inc/spiplistes_api'); include_spip('inc/spiplistes_api_courrier'); include_spip('inc/spiplistes_api_presentation'); include_spip('inc/spiplistes_destiner_envoi'); include_spip('inc/spiplistes_naviguer_paniers'); global $connect_statut , $connect_toutes_rubriques , $connect_id_auteur , $spip_ecran ; $eol = "\n"; // initialise les variables postees par le formulaire foreach(array( 'type' , 'id_courrier' , 'btn_courrier_valider', 'titre', 'message', 'message_texte' // (formulaire edition) _SPIPLISTES_EXEC_COURRIER_EDIT , 'new' // idem , 'btn_changer_destination', 'radio_destination', 'email_test', 'id_liste' // (formulaire local) destinataire , 'change_statut' // (formulaire spiplistes_boite_autocron) 'publie' pour annuler envoi par boite autocron , 'btn_dupliquer_courrier' // (formulaire local) dupliquer le courrier , 'supp_dest' , 'id_temp' // pour recuperer les documents joints ) as $key) { $$key = _request($key); } foreach(array('id_courrier', 'id_liste', 'btn_dupliquer_courrier') as $key) { $$key = intval($$key); } foreach(array('email_test','titre','message','message_texte') as $key) { $$key = trim($$key); } $texte = $message; $page_result = $message_erreur = $str_destinataire = $boite_confirme_envoi = ''; $flag_admin = ($connect_statut == "0minirezo") && $connect_toutes_rubriques; $flag_moderateur = count($listes_moderees = spiplistes_mod_listes_id_auteur($connect_id_auteur)); $flag_createur = ($id_courrier && ($connect_id_auteur == spiplistes_courrier_id_auteur_get($id_courrier))); // l'edition du courrier est reservee... $flag_autorise = ( // aux super-admins $flag_admin // ou a un moderateur || $flag_moderateur // ou au createur du courrier || $flag_createur ); if($flag_autorise) { // Modification de courrier if($btn_dupliquer_courrier > 0) { $id_courrier = $btn_dupliquer_courrier; } // effectue les modifications demandees si retour local ou retour editeur if($id_courrier > 0) { if($btn_dupliquer_courrier > 0) { if($row = sql_fetsel('titre,texte', 'spip_courriers', 'id_courrier='.sql_quote($id_courrier),'','',1)) { $titre = typo($row['titre']); $texte = typo($row['texte']); // // @see: http://www.spip-contrib.net/SPIP-Listes#comment441566 //$texte = typo($row['message_texte']); $str_log = "id_courrier #$id_courrier"; $statut = _SPIPLISTES_COURRIER_STATUT_REDAC; $type = _SPIPLISTES_COURRIER_TYPE_NEWSLETTER; $id_courrier = sql_insert( 'spip_courriers' , "(titre,texte,message_texte,date,statut,type,id_auteur)" , "(".sql_quote($titre).",".sql_quote($texte).",".sql_quote($message_texte) .",NOW(),".sql_quote($statut).",".sql_quote($type).",".sql_quote($connect_id_auteur).")" ); spiplistes_log("$str_log DUPLICATED TO #$id_courrier BY ID_AUTEUR #$connect_id_auteur"); } else { spiplistes_log("ERR: DUPLICATION FROM id_courrier #$id_courrier (missing ?)"); } } if($btn_changer_destination) { if($radio_destination == 'email_test') { // demande d'envoi au mail de test (retour formulaire local) if(email_valide($email_test)) { if(!($id_auteur_test = spiplistes_idauteur_depuis_email($email_test))) { // verifie si l'adresse est dans la table des auteurs // si inconnue, refuse d'envoyer $message_erreur .= spiplistes_boite_alerte (_T('spiplistes:Erreur_Adresse_email_inconnue'), true); } else { $format_abo = spiplistes_format_abo_demande($id_auteur_test); /* * meme le compte qui veut recevoir un test doit avoir * un format de reception */ if( in_array($format_abo, spiplistes_formats_autorises()) && ($format_abo != 'non') ) { // Ok. Enregistre l'adresse test spiplistes_courrier_modifier( $id_courrier , array( 'email_test' => $email_test , 'total_abonnes' => 1 , 'id_liste' => ($id_liste = 0) , 'statut' => ($change_statut = _SPIPLISTES_COURRIER_STATUT_READY) ) ); } else { $message_erreur .= spiplistes_boite_alerte (_T('spiplistes:destinataire_sans_format_alert'), true); } $str_destinataire = _T('spiplistes:email_adresse') . " : $email_test"; } } else { $message_erreur .= spiplistes_boite_alerte (_T('spiplistes:Erreur_Adresse_email_invalide'), true); } } // end if($radio_destination == 'email_test') else if($radio_destination == 'id_liste') { // demande d'envoi a une liste (retour formulaire local) if($id_liste > 0) { if( ($nb_abos = spiplistes_listes_nb_abonnes_compter($id_liste)) > 0 ) { $str_destinataire = "" . _T('spiplistes:sur_liste') . " : <a href='".generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER, "id_liste=$id_liste")."'>" . spiplistes_listes_liste_fetsel($id_liste, 'titre') . "</a>" . " " . spiplistes_nb_abonnes_liste_str_get($id_liste, $nb_abos) ; spiplistes_courrier_modifier( $id_courrier , array( 'email_test' => "" , 'total_abonnes' => $nb_abos , 'id_liste' => $id_liste , 'statut' => ($change_statut = _SPIPLISTES_COURRIER_STATUT_READY) ) ); } else { $message_erreur .= spiplistes_boite_alerte (_T('spiplistes:Erreur_liste_vide'), true); } } } // end if($radio_destination } // if($btn_changer_destination else if($btn_courrier_valider) { // retour editeur local if(!empty($titre)) { $sql_set = array( 'titre' => $titre , 'texte' => $texte , 'message_texte' => $message_texte ); spiplistes_courrier_modifier($id_courrier, $sql_set); spiplistes_courrier_attacher_documents($id_courrier, $id_temp); } else { $message_erreur .= spiplistes_boite_alerte (_T('spiplistes:Erreur_courrier_titre_vide'), true); } } // FIN DES MODIFICATIONS } // Ok. recharge les donnees pour completer le formulaire $sql_select_array = array('titre', 'texte', 'email_test', 'statut'); if($row = spiplistes_courriers_premier($id_courrier, $sql_select_array)) { foreach($sql_select_array as $key) { $$key = $row[$key]; } } // end if($id_courrier > 0) } // end if($flag_autorise) ////////////////////////////////////////////////////// // Nouveau courrier //// if(($connect_statut == "0minirezo") && ($new == 'oui')) { // retour editeur. Creation du courrier if(!empty($titre)) { $statut = _SPIPLISTES_COURRIER_STATUT_REDAC; $type = _SPIPLISTES_COURRIER_TYPE_NEWSLETTER; $id_courrier = sql_insert( 'spip_courriers' , "(titre,texte,message_texte,date,statut,type,id_auteur)" , "(".sql_quote($titre).",".sql_quote($texte).",".sql_quote($message_texte) .",NOW(),".sql_quote($statut).",".sql_quote($type).",".sql_quote($connect_id_auteur).")" ); spiplistes_courrier_attacher_documents($id_courrier, $id_temp); } else { $message_erreur .= spiplistes_boite_alerte (_T('spiplistes:Erreur_courrier_titre_vide'), true); } } ////////////////////////////////////////////////////// // recharge le courrier pour edition if($id_courrier > 0) { $sql_select_tmp = "email_test,date,titre,texte,message_texte,type,statut,date_debut_envoi,date_fin_envoi"; $sql_select_int = "id_liste,id_auteur,total_abonnes,nb_emails_envoyes,nb_emails_echec,nb_emails_non_envoyes,nb_emails_texte,nb_emails_html"; $sql_select_str = "titre"; $sql_select = $sql_select_int.",".$sql_select_str.",".$sql_select_tmp; if($row = sql_fetsel($sql_select, "spip_courriers", "id_courrier=".sql_quote($id_courrier), '', '', 1)) { foreach(explode(",", $sql_select) as $key) { $$key = $row[$key]; } foreach(explode(",",$sql_select_int) as $key) { $$key = intval($$key); } foreach(explode(",",$sql_select_str) as $key) { $$key = typo($$key); } if($change_statut == _SPIPLISTES_COURRIER_STATUT_READY) { //$titre = propre($titre); // pas de propre ici, ca fait un <p> </p> // Le statut n'est modifie ici, mais // par courrier_casier en retour de ce formulaire // $texte = spiplistes_courrier_propre($texte); $texte = spiplistes_texte_propre ($texte); spiplistes_courrier_modifier( $id_courrier , array( 'titre' => $titre , 'texte' => $texte ) ); spiplistes_log("ID_COURRIER #$id_courrier titre,texte MODIFIED BY ID_AUTEUR #$connect_id_auteur"); $statut = $change_statut; } else if($change_statut == _SPIPLISTES_COURRIER_STATUT_STOPE){ spiplistes_courrier_supprimer_queue_envois('id_courrier', $id_courrier); spiplistes_log("ID_COURRIER #$id_courrier CANCELLED BY ID_AUTEUR #$connect_id_auteur"); } // prepare le texte texte seul if(!in_array($statut, array( _SPIPLISTES_COURRIER_STATUT_REDAC , _SPIPLISTES_COURRIER_STATUT_READY , _SPIPLISTES_COURRIER_STATUT_PUBLIE , _SPIPLISTES_COURRIER_STATUT_STOPE )) ) { //$texte = spiplistes_courrier_propre($texte); $texte = spiplistes_texte_propre ($texte); } if(!empty($message_texte)){ $alt_message_texte = _T('spiplistes:calcul_patron'); } else{ $alt_message_texte = _T('spiplistes:calcul_html'); $message_texte = spiplistes_courrier_version_texte($texte); } // construit la boite de selection destinataire $boite_selection_destinataire = (($statut==_SPIPLISTES_COURRIER_STATUT_REDAC) || ($statut==_SPIPLISTES_COURRIER_STATUT_READY)) ? spiplistes_destiner_envoi($id_courrier, $id_liste , $flag_admin , $flag_moderateur , $listes_moderees , $statut, $type, 'btn_changer_destination', $email_test) : "" ; } } // end if() ////////////////////////////////////////////////////// // preparation des boutons si droits $gros_bouton_modifier = $gros_bouton_dupliquer = $gros_bouton_supprimer = $gros_bouton_arreter_envoi = ''; if($flag_autorise) { if(($statut == _SPIPLISTES_COURRIER_STATUT_REDAC) || ($statut == _SPIPLISTES_COURRIER_STATUT_READY)) { // Le courrier peut-etre modifie si en preparation $gros_bouton_modifier = "<!-- bouton modifier -->\n" . icone ( _T('spiplistes:Modifier_ce_courrier') // legende bouton , generer_url_ecrire(_SPIPLISTES_EXEC_COURRIER_EDIT,'id_courrier='.$id_courrier) // lien , spiplistes_items_get_item('icon', $statut) // image du fond , "edit.gif" // image de la fonction. Ici, le crayon , '' // alignement , false // pas echo, demande retour ) . $eol ; } // Le courrier peut-etre supprime si obsolete if(in_array($statut, array(_SPIPLISTES_COURRIER_STATUT_REDAC , _SPIPLISTES_COURRIER_STATUT_PUBLIE , _SPIPLISTES_COURRIER_STATUT_AUTO , _SPIPLISTES_COURRIER_STATUT_VIDE , _SPIPLISTES_COURRIER_STATUT_IGNORE , _SPIPLISTES_COURRIER_STATUT_STOPE , _SPIPLISTES_COURRIER_STATUT_ERREUR)) ) { $gros_bouton_supprimer = '<div style="margin-top:1ex">' . icone ( _T('spiplistes:Supprimer_ce_courrier') , generer_url_ecrire(_SPIPLISTES_EXEC_COURRIERS_LISTE, 'btn_supprimer_courrier='.$id_courrier) , _DIR_PLUGIN_SPIPLISTES_IMG_PACK.'poubelle_msg.gif' , '' , 'right' , false ) . '</div>'.$eol ; } // Un courrier publie ou stoppe peut-etre duplique pour edition // on revient sur cette page avec le contenu recupere if(in_array($statut, array(_SPIPLISTES_COURRIER_STATUT_PUBLIE , _SPIPLISTES_COURRIER_STATUT_AUTO , _SPIPLISTES_COURRIER_STATUT_STOPE)) ) { $gros_bouton_dupliquer = "<div style='margin-top:1ex;'>" . icone ( _T('spiplistes:dupliquer_ce_courrier') , generer_url_ecrire(_SPIPLISTES_EXEC_COURRIER_GERER, "btn_dupliquer_courrier=$id_courrier") , _DIR_PLUGIN_SPIPLISTES_IMG_PACK.'stock_mail.gif' , _DIR_IMG_PACK."creer.gif" , "right" , false ) . "</div>\n" ; } if($statut == _SPIPLISTES_COURRIER_STATUT_ENCOURS) { // L'envoi d'un courrier en cours peut etre stoppe $gros_bouton_arreter_envoi = icone ( _T('spiplistes:Arreter_envoi') // si arreter envoi, passe la main a exec/spiplistes_courriers_casier , generer_url_ecrire(_SPIPLISTES_EXEC_COURRIERS_LISTE, "btn_arreter_envoi=$id_courrier") , _DIR_PLUGIN_SPIPLISTES_IMG_PACK."courriers_redac-24.png" , _DIR_PLUGIN_SPIPLISTES_IMG_PACK."stop-top-right-24.png" , "right" , false ) . fin_cadre_relief(true) ; } if($statut == _SPIPLISTES_COURRIER_STATUT_READY) { if(!$id_liste && !$id_auteur_test) { // normalement, la validation est locale, mais si l'utilisateur // part sur un casier, le retour ici est incomplet... // cas particulier d'un appel d'un courrier ready a partir des casiers // il faut recreer $id_auteur_test si id_liste == 0 if(!($id_auteur_test = spiplistes_idauteur_depuis_email($email_test))) { spiplistes_log("ERR: id_auteur_test #$id_auteur_test (id_auteur missing ?)"); } } if(($id_liste > 0) || ($id_auteur_test > 0)) { $boite_confirme_envoi = debut_cadre_couleur('', true) // formulaire de confirmation envoi // renvoie sur la page des casiers . '<form action="' . generer_url_ecrire(_SPIPLISTES_EXEC_COURRIERS_LISTE,'id_courrier='.$id_courrier) . '" method="post">'.$eol . '<p style="text-align:center;font-weight:bold;" class="verdana2">' . _T('spiplistes:confirme_envoi') . '</p>'.$eol . '<input type="hidden" name="id_liste" value="'.$id_liste.'" />'.$eol . '<input type="hidden" name="id_courrier" value="'.$id_courrier.'" />'.$eol . '<input type="hidden" name="id_auteur_test" value="'.$id_auteur_test.'" />'.$eol . '<div style="text-align:left;">'.$eol . '<input type="submit" name="btn_annuler_envoi" value="' . _T('spiplistes:annuler_envoi').'" class="fondo" style="float:left" />'.$eol . '<div style="text-align:right;width:100%">'.$eol . '<input type="submit" name="btn_confirmer_envoi" value="' . _T('spiplistes:Envoyer_ce_courrier').'" class="fondo" />'.$eol . '</div>'.$eol . '</div>'.$eol . '</form>' . fin_cadre_couleur(true) ; } } } ///////////////////// // prepare le message statut du courrier if($id_courrier > 0) { $le_type = _T('spiplistes:message_type'); if($statut != _SPIPLISTES_COURRIER_STATUT_REDAC) { if(!empty($email_test)) { $str_destinataire = _T('spiplistes:email_adresse') . " : <span style='font-weight:bold;color:gray;'>$email_test</span>"; } else { if($row = sql_fetsel('titre', 'spip_listes', "id_liste=".sql_quote($id_liste), '', '', 1)) { $str_destinataire = "" . _T('spiplistes:Liste_de_destination') . " : <a href='".generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER, "id_liste=$id_liste")."'>" . typo($row['titre']) . "</a>" . " " . spiplistes_nb_abonnes_liste_str_get($id_liste) ; } else { $str_destinataire = _T('spiplistes:Courriers_sans_liste'); } } } // $str_statut_courrier = ""; switch($statut) { case _SPIPLISTES_COURRIER_STATUT_REDAC: $str_statut_courrier = _T('spiplistes:message_en_cours')."<br />" . ( ($flag_autorise) ? _T('spiplistes:modif_envoi') : "" ) ; break; case _SPIPLISTES_COURRIER_STATUT_READY: $str_statut_courrier = "" . _T('spiplistes:message_presque_envoye') . "<br />" . $str_destinataire . "<br />\n" ; break; case _SPIPLISTES_COURRIER_STATUT_ENCOURS: $str_statut_courrier = "" . _T('spiplistes:message_en_cours')."<br />$str_destinataire<br /><br />" //. "<a href='?exec=spip_listes'>["._T('spiplistes:voir_historique')."]</a>" ; break; case _SPIPLISTES_COURRIER_STATUT_PUBLIE: case _SPIPLISTES_COURRIER_STATUT_AUTO: $str_statut_courrier = "" . "<span>" . "<strong>"._T('spiplistes:message_arch')."</strong></span>" . "<ul>" . " <li>$str_destinataire</li>" . " <li>"._T('spiplistes:envoi_date').affdate_heure($date)."</li>" . " <ul>" . " <li>"._T('spiplistes:envoi_debut').affdate_heure($date_debut_envoi)."</li>" . " <li>"._T('spiplistes:envoi_fin').affdate_heure($date_fin_envoi)."</li>" . " </ul>" . " <li>"._T('spiplistes:nbre_abonnes').$total_abonnes."</li>" . " <ul>" . " <li>"._T('spiplistes:format_html__n', array('n' => $nb_emails_html))."</li>" . " <li>"._T('spiplistes:format_texte__n', array('n' => $nb_emails_texte))."</li>" . " <li>"._T('spiplistes:desabonnes')." : ".$nb_emails_non_envoyes."</li>" . " </ul>" . " <li>"._T('spiplistes:erreur_envoi').$nb_emails_echec."</li>" . "</ul>" ; } // end switch() if(!empty($str_statut_courrier)) { $str_statut_courrier = "<span class='verdana2'>".$str_statut_courrier."</span>"; } } // end if() //////////////////////////////////// // PAGE CONTENU //////////////////////////////////// $titre_page = _T('spiplistes:edition_du_courrier'); // Permet entre autres d'ajouter les classes a la page : <body class='$rubrique $sous_rubrique'> $rubrique = _SPIPLISTES_PREFIX; $sous_rubrique = "courrier_gerer"; $commencer_page = charger_fonction('commencer_page', 'inc'); echo($commencer_page(_T('spiplistes:spiplistes') . " - " . trim($titre_page), $rubrique, $sous_rubrique)); // la gestion des listes de courriers est reservee aux admins if($connect_statut != "0minirezo") { die (spiplistes_terminer_page_non_autorisee() . fin_page()); } $page_result = "" . "<br /><br /><br />\n" . spiplistes_gros_titre($titre_page, '', true) . barre_onglets($rubrique, $sous_rubrique) . debut_gauche($rubrique, true) . spiplistes_boite_info_id(_T('spiplistes:Courrier_numero_'), $id_courrier, true) . spiplistes_naviguer_paniers_courriers(_T('spiplistes:aller_au_panier_'), true) //. $boite_documents . pipeline('affiche_gauche', array('args'=>array('exec'=>$sous_rubrique),'data'=>'')) //. creer_colonne_droite($rubrique, true) // spiplistes_boite_raccourcis() s'en occupe . spiplistes_boite_raccourcis(true) . spiplistes_boite_autocron() . pipeline('affiche_droite', array('args'=>array('exec'=>$sous_rubrique),'data'=>'')) . debut_droite($rubrique, true) ; if($id_courrier > 0) { ///////////////////// // construction du ventre $page_result .= "\n<!-- construction du ventre -->\n" . $message_erreur . debut_cadre_relief(spiplistes_items_get_item('icon', $statut), true) . "<table width='100%' border='0' cellspacing='0' cellpadding='0'>" . "<tr>" . "<td>".spiplistes_gros_titre($titre, spiplistes_items_get_item('puce', $statut), true)."</td>" . "<td rowspan='2' style='vertical-align:top;width:90px;'>" // si besoin, l'un de ces trois boutons apparait . $gros_bouton_modifier . $gros_bouton_arreter_envoi . $gros_bouton_dupliquer ."</td>" . "</tr>\n" . "<tr> " . "<td>" . "<p class='verdana2' style='font-size:120%;color:red;font-weight:bold;'>$le_type</p>\n" . "<p class='verdana2'>$str_statut_courrier</p>\n" . "</td>" . "</tr>\n" . "</table>" . $boite_confirme_envoi . $boite_selection_destinataire . "<br />\n" ; function spiplistes_generer_oeil ($params) { return( " <a href='" . generer_url_ecrire(_SPIPLISTES_EXEC_COURRIER_PREVUE, $params) . "' title='"._T('spiplistes:Apercu_plein_ecran')."' target='_blank'>\n" . spiplistes_icone_oeil() . "</a>" ); } // previsu $params = "id_courrier=$id_courrier&id_liste=$id_liste"; $oeil_html = spiplistes_generer_oeil($params. "&lire_base=oui&plein_ecran=oui"); $oeil_texte = spiplistes_generer_oeil($params . "&lire_base=oui&plein_ecran=oui&format=texte"); $page_result .= "" . 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') . $oeil_html . " / " . "<a href='javascript:jQuery(this).switch_previsu()'>" . _T('spiplistes:version_texte') . $oeil_texte . "<div>\n" . "<iframe class='previsu-edit'" . " src='".generer_url_ecrire(_SPIPLISTES_EXEC_COURRIER_PREVUE, $params . "&lire_base=oui") . "' width='100%' height='500'></iframe>\n" . "</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" . $oeil_html . " / " . _T('spiplistes:version_texte') . "</a> $oeil_texte\n" . "<div>\n" //. "<pre>" . "<iframe class='previsu-edit'" . " src='".generer_url_ecrire(_SPIPLISTES_EXEC_COURRIER_PREVUE, $params . "&format=texte&lire_base=oui") ."' width='100%' height='500'></iframe>\n" //. "</pre>" . "</div>\n" . "</div>\n" // fin id='previsu-texte . "</form>\n" . fin_cadre_couleur(true) // // fin de la boite . fin_cadre_relief(true) // . $gros_bouton_supprimer ; } // end if else { $page_result .= (empty($message_erreur)) ? spiplistes_boite_alerte (_T('spiplistes:Erreur_courrier_introuvable'), true) : $message_erreur ; } echo($page_result); // GERER COURRIER: FIN DE PAGE echo pipeline('affiche_milieu',array('args'=>array('exec'=>$sous_rubrique),'data'=>'')) , spiplistes_html_signature(_SPIPLISTES_PREFIX) , fin_gauche(), fin_page(); } // end function exec_spiplistes_courrier_gerer ()
function spiplistes_import( $filename , $realname , $abos_liste , $format_abo = 'non' , $separateur = "\t" , $flag_admin , $listes_autorisees , $forcer_abo = false ) { $result_affiche = ''; if(is_readable($filename)) { // abonner les adresses importees // aux listes... if(!is_array($abos_liste)) { if(($ii = intval($abos_liste)) <= 0) { return(false); } $abos_liste = array($ii); } else { $abos_liste = array_map('intval', $abos_liste); } // recupere les logins et mails existants dans la base // pour eviter les doublons $current_entries = array(); $sql_result = sql_select(array('id_auteur', 'login', 'email', 'nom'), 'spip_auteurs'); while($row = spip_fetch_array($sql_result)) { // ne prendre que les comptes qui ont un email if($m = $row['email']) { $m = strtolower($m); $current_entries[$m] = array('login' => strtolower($row['login']) , 'id_auteur' => $row['id_auteur'] , 'nom' => $row['nom'] ); } } //syslog(LOG_NOTICE, 'memory_get_usage[2]: ' . memory_get_usage()); // spiplistes_log('import fichier '.$filename); $new_entries = file($filename); //syslog(LOG_NOTICE, 'memory_get_usage[3]: ' . memory_get_usage()); $nb_new_entries = count($new_entries); $bad_dupli = $bad_email = 0; $statuts_auteurs = array('6forum', '1comite', '0minirezo'); // charger la table des abonnements en ram afin d'eviter les petites requettes $abonnements = array(); if(($sql_result = sql_select('id_auteur,id_liste' , 'spip_auteurs_listes') ) !== false) { while($row = sql_fetch($sql_result)) { if(!isset($abonnements[$row['id_liste']])) { $abonnements[$row['id_liste']] = array(); } $abonnements[$row['id_liste']][] = $row['id_auteur']; } } else { spiplistes_sqlerror_log('module import (abonnements)'); } if($forcer_abo) { $auteurs_format = array(); // charger la table des formats afin d'eviter les petites requettes if(($sql_result = sql_select("id_auteur,`spip_listes_format` AS format" , 'spip_auteurs_elargis')) !== false) { while($row = sql_fetch($sql_result)) { $auteurs_format[$row['id_auteur']] = $row['format']; } } else { spiplistes_sqlerror_log("module import (format)"); } } // les formats $modifier_format = array(); $err_import = _T('spiplistes:erreur_import_base'); //syslog(LOG_NOTICE, 'memory_get_usage[2]: ' . memory_get_usage()); //syslog(LOG_NOTICE, 'memory_get_peak_usage[2]: ' . memory_get_peak_usage()); $start_time = microtime(1); $stack_new_auteurs = array(); // statut temporaire $tmp_statut = '6abo'.date('YmdGis'); for($jj = 0; $jj < $nb_new_entries; $jj++) { $nouvelle_entree = trim($new_entries[$jj]); if(!empty($nouvelle_entree) // ni une ligne de commentaire && !ereg("^[/#]", $nouvelle_entree)) { list($email, $login, $nom) = explode($separateur, $nouvelle_entree); $email = strtolower(trim($email)); $mail_exist = false; if(($email = email_valide($email)) && ( !($mail_exist = array_key_exists($email, $current_entries)) || $forcer_abo ) ) { if(!$mail_exist) { // si le compte n'existe pas, le creer // commencer par calculer le login $login = trim($login); if(empty($login)) { $login = spiplistes_login_from_email($email); } else { $login = strtolower($login); } // puis le nom $nom = trim($nom); if(empty($nom)) { $nom = ucfirst($login); } // ajoute l'invite' dans la table des auteurs $pass = creer_pass_aleatoire(8, $email); // nouvel abo dans la pile des "a creer" $stack_new_auteurs[] = array( 'nom' => $nom , 'email' => $email , 'login' => $login , 'pass' => md5($pass) , 'statut' => $tmp_statut , 'htpass' => generer_htpass($pass) ); } // end if(!$mail_exist) // adresse mail existe dans la base // si on passe par ici, c'est sous-entendu $forcer_abo (abonne' un compte existant) else { $id_auteur = intval($current_entries[$email]['id_auteur']); // forcer le format dans la foulee if(!isset($auteurs_format[$id_auteur])) { $modifier_format[] = '(' . sql_quote($id_auteur) . ',' . sql_quote($format_abo) . ')'; } } // est-ce vraiment utile (voir plus bas) } else { if($mail_exist) { $bad_dupli++; spiplistes_log('import dupli: '.$mail); } else { $bad_email++; spiplistes_log('import bad: '.$mail); } } } } // end for($jj = 0; $jj < $nb_new_entries; $jj++) // importer les nouveaux abonnés if(count($stack_new_auteurs)) { $sql_col_names = '('.implode(',', array_keys($stack_new_auteurs[0])).')'; $sql_col_values = ''; //syslog(LOG_NOTICE, 'memory_get_usage[5]: ' . memory_get_usage()); foreach($stack_new_auteurs as $auteur) { $values = array_map('sql_quote', $auteur); $sql_col_values .= '('.implode(',', $values).'),'; } $sql_col_values = rtrim($sql_col_values,','); $r = sql_insert('spip_auteurs', $sql_col_names, $sql_col_values); spiplistes_debug_log ('size of imported values: ' . strlen($sql_col_values)); //syslog(LOG_NOTICE, 'memory_get_usage[6]: ' . memory_get_usage()); // nouveaux abonnements foreach($abos_liste as $id_liste) { // un INSERT sans VALUES // @todo: vérifier compatibilite sqlite et pg if(sql_query( 'INSERT INTO spip_auteurs_listes (id_auteur,id_liste) SELECT a.id_auteur,'.$id_liste .' FROM spip_auteurs AS a WHERE a.statut='.sql_quote($tmp_statut)) === false ) { spiplistes_sqlerror_log('import nouveaux abos dans spip_auteurs_listes'); } } // format pour les nouveaux auteurs // un INSERT sans VALUES // @todo: vérifier compatibilite sqlite et pg if(sql_query( 'INSERT INTO spip_auteurs_elargis (id_auteur,`spip_listes_format`) SELECT a.id_auteur,'.sql_quote($format_abo) .' FROM spip_auteurs AS a WHERE a.statut='.sql_quote($tmp_statut)) === false ) { spiplistes_sqlerror_log('import nouveauxformats dans spip_auteurs_elargis'); } } // Comptes deja existants, inclus dans le fichier import // - changer son format de réception ? // - l'ajouter aux listes sélectionnées ? // - ou ignorer ? if(count($modifier_format)) { // pour l'instant: ignorer ! // } // redonner le bon statut visiteur aux nouveaux sql_update(array('spip_auteurs'), array('statut' => sql_quote('6forum')), array('statut='.sql_quote($tmp_statut))); // fin des req $result_affiche .= ($tt = ($ii = count($stack_new_auteurs)) + ($jj = count($modifier_format))) ? '<ul>'.PHP_EOL . '<li class="verdana2">'._T('spiplistes:nb_comptes_importees_en_ms_dont_' , array('nb' => $tt, 'ms' => (microtime(1) - $start_time))) . '<ul>'.PHP_EOL . '<li>'._T('spiplistes:nb_fiches_crees', array('nb' => $ii)).'</li>'.PHP_EOL //. '<li>'._T('spiplistes:nb_comptes_modifies', array('nb' => $jj)).'</li>'.PHP_EOL . '<li>'._T('spiplistes:nb_comptes_ignores', array('nb' => $jj)).'</li>'.PHP_EOL . '</ul>'.PHP_EOL . '</li>'.PHP_EOL . '</ul>'.PHP_EOL : '<br />'._T('spiplistes:pas_dimport').PHP_EOL ; if($bad_dupli) { $result_affiche .= '<br />'._T('pass_erreur').' email: '._T('spiplistes:n_duplicata_mail', array('n' => $bad_dupli)).PHP_EOL; } if($bad_email) { $result_affiche .= '<br />'._T('pass_erreur').' email: '._T('spiplistes:n_incorrect_mail', array('n' => $bad_email)).PHP_EOL; } $result_affiche = _T('spiplistes:fichier_') . ' : <strong>'.$realname.'</strong><br />'.PHP_EOL . _T('spiplistes:' . ((count($abos_liste) > 1) ? 'Listes_de_destination_s' : 'Liste_de_destination_s') , array('s' => '#' . implode(',#', $abos_liste))) .'<br />'.PHP_EOL . $result_affiche ; } return($result_affiche); }
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()
function exec_spiplistes_maintenance () { include_spip('inc/distant'); include_spip('inc/meta'); include_spip('inc/config'); include_spip('inc/spiplistes_api'); include_spip('inc/spiplistes_api_presentation'); global $connect_statut , $connect_toutes_rubriques , $connect_id_auteur , $couleur_foncee , $spip_lang_right ; // la globale de connect_id_auteur est string // c'est un entier qu'il faut envoyer a autoriser() $connect_id_auteur = intval($GLOBALS['connect_id_auteur']); // initialise les variables postees par le formulaire foreach(array_merge( array( 'btn_supprimer_courriers', 'btn_reset_listes', 'btn_supprimer_listes' , 'btn_modifier_formats', 'confirmer_modifier_formats' , 'btn_supprimer_formats', 'confirmer_supprimer_formats' , 'btn_nettoyer_abos', 'confirmer_nettoyer_abos' )) as $key) { $$key = _request($key); } // la maintenance spiplistes est reservee a l'admin principal $flag_autorise = autoriser('webmestre','','',$connect_id_auteur); $tous_les_statuts_courriers = array(_SPIPLISTES_COURRIER_STATUT_REDAC, _SPIPLISTES_COURRIER_STATUT_READY , _SPIPLISTES_COURRIER_STATUT_ENCOURS , _SPIPLISTES_COURRIER_STATUT_AUTO, _SPIPLISTES_COURRIER_STATUT_PUBLIE , _SPIPLISTES_COURRIER_STATUT_VIDE, _SPIPLISTES_COURRIER_STATUT_IGNORE , _SPIPLISTES_COURRIER_STATUT_STOPE, _SPIPLISTES_COURRIER_STATUT_ERREUR ); $msg_maintenance = array(); $sql_formats_where = spiplistes_formats_autorises('sql_where'); ///////////////// // Faire ce qui est demande par le formulaire if($flag_autorise) { $msg_ok = "<span style='color:green;'>"._T('pass_ok'); $msg_bad = "<span style='font-weight:bold;color:red;'>"._T('pass_erreur'); $msg_end = "</span>\n"; // les courriers if($btn_supprimer_courriers) { foreach($tous_les_statuts_courriers as $statut) { if(_request("supprimer_courriers_$statut")) { if($statut == _SPIPLISTES_COURRIER_STATUT_ENCOURS) { // supprime d'abord de la queue d'envoi spiplistes_courrier_supprimer_queue_envois('statut', $statut); spiplistes_log("RESET spool ID_COURRIER #$id_courrier by ID_AUTEUR #$connect_id_auteur"); } // supprime le courrier $msg = ( spiplistes_courrier_supprimer('statut', $statut) ) ? $msg_ok : $msg_bad ; $msg_maintenance[] = _T('spiplistes:Suppression_de__s', array('s' => spiplistes_items_get_item('tab_t', $statut)."... : ".$msg.$msg_end) ); spiplistes_log("DELETE courrier ID_COURRIER #$id_courrier by ID_AUTEUR #$connect_id_auteur"); } } } // les listes en chronos a repasser en non-chrono // en realite', conserve le statut mais supprime la date d'envoi // ainsi, la trieuse ne preparera pas le courrier if($btn_reset_listes) { foreach(spiplistes_listes_select("id_liste", "message_auto='oui'") as $row) { $id_liste = intval($row['id_liste']); $sql_table = "spip_listes"; $sql_champs = array('message_auto' => 'non', 'date' => ''); $sql_where = "id_liste=$id_liste"; if(_request("reset_liste_$id_liste")) { $msg = ( // reset liste sql_updateq($sql_table, $sql_champs, $sql_where) ) ? $msg_ok : $msg_bad ; $msg_maintenance[] = _T('spiplistes:annulation_chrono_')." : ID_LISTE #$id_liste : ".$msg.$msg_end; spiplistes_log("RESET liste ID_LISTE #$id_liste by ID_AUTEUR #$connect_id_auteur"); } } } // les listes (global) if($btn_supprimer_listes) { foreach(spiplistes_listes_select("id_liste,titre") as $row) { $titre = $row['titre']; $id_liste = intval($row['id_liste']); if(_request("supprimer_liste_$id_liste")) { $sql_where = "id_liste=".sql_quote($id_liste); $msg = spiplistes_listes_liste_supprimer($id_liste) ? $msg_ok : $msg_bad ; $msg_maintenance[] = _T('spiplistes:Suppression_de')." : ".$titre."... : ".$msg.$msg_end; spiplistes_log("DELETE liste ID_LISTE #$id_liste by ID_AUTEUR #$connect_id_auteur"); } } } // les formats if($btn_modifier_formats || $btn_supprimer_formats) { $objet = array('objet' => _T('spiplistes:des_formats')); if($confirmer_modifier_formats && ($format = spiplistes_format_valide(_request('sl-le-format')))) { $msg = ( spiplistes_format_abo_modifier('tous', $format) ) ? $msg_ok : $msg_bad ; $msg_maintenance[] = _T('spiplistes:modification_objet', $objet)." : ".$msg.$msg_end; spiplistes_log("UPDATE ALL format $format by ID_AUTEUR #$connect_id_auteur"); } if($confirmer_supprimer_formats) { $msg = ( // vider la table des formats connus de spiplistes sql_delete("spip_auteurs_elargis", $sql_formats_where) ) ? $msg_ok : $msg_bad ; $msg_maintenance[] = _T('spiplistes:suppression_', $objet)." : ".$msg.$msg_end; spiplistes_log("DELETE formats "._SPIPLISTES_FORMATS_ALLOWED." by ID_AUTEUR #$connect_id_auteur"); } } // les abonnements if($btn_nettoyer_abos && $confirmer_nettoyer_abos) { if($ii = spiplistes_abonnements_zombies()) { sort($ii); $ii = array_unique($ii); $msg = (spiplistes_abonnements_auteur_desabonner($ii)) ? $msg_ok : $msg_bad ; $objet = array('objet' => _T('spiplistes:des_abonnements')); $msg_maintenance[] = _T('spiplistes:nettoyage_', $objet)." : ".$msg.$msg_end; } } // compter les listes $nb_listes = spiplistes_listes_compter(); $nb_listes_desc = spiplistes_nb_listes_str_get ($nb_listes); $listes_array = spiplistes_listes_select("id_liste,statut,titre,message_auto"); // listes auto (crhono) compte'es a part $nb_listes_auto = 0; foreach($listes_array as $row) { if($row['message_auto']=='oui') { $nb_listes_auto++; } } // compter les formats (les abonnes ayant de'fini un format) $nb_abonnes_formats = sql_fetsel("COUNT(id_auteur) as n", "spip_auteurs_elargis", $sql_formats_where); $nb_abonnes_formats = $nb_abonnes_formats['n']; $nb_abonnes_formats_desc = ($nb_abonnes_formats==1) ? _T('spiplistes:1_abonne') : "$nb_abonnes_formats "._T('spiplistes:abonnes') ; $maintenance_url_action = generer_url_ecrire(_SPIPLISTES_EXEC_MAINTENANCE); } //////////////////////////////////// // PAGE CONTENU //////////////////////////////////// $titre_page = _T('titre_admin_tech'); // Permet entre autres d'ajouter les classes a' la page : <body class='$rubrique $sous_rubrique'> $rubrique = _SPIPLISTES_PREFIX; $sous_rubrique = "maintenance"; $commencer_page = charger_fonction('commencer_page', 'inc'); echo($commencer_page(_T('spiplistes:spiplistes') . " - " . trim($titre_page), $rubrique, $sous_rubrique)); if(!$flag_autorise) { die (spiplistes_terminer_page_non_autorisee() . fin_page()); } $page_result = "" . "<br /><br /><br />\n" . spiplistes_gros_titre($titre_page, '', true) . barre_onglets($rubrique, $sous_rubrique) . debut_gauche($rubrique, true) . spiplistes_boite_meta_info(_SPIPLISTES_PREFIX) . pipeline('affiche_gauche', array('args'=>array('exec'=>$sous_rubrique),'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'=>$sous_rubrique),'data'=>'')) . debut_droite($rubrique, true) ; if(count($msg_maintenance)) { $page_result .= "<ul style='padding-left:2ex;margin-bottom:2em;'>"; foreach($msg_maintenance as $texte) { $page_result .= "<li>$texte</li>\n"; } $page_result .= "</ul>\n"; } ////////////////////////////////////////////////////// // Boite de maintenance du casier a courriers $objet = array('objet' => _T('spiplistes:des_courriers')); $page_result .= "" . debut_cadre_trait_couleur("administration-24.gif", true, "", _T('spiplistes:maintenance_objet', $objet)) . spiplistes_form_debut ($maintenance_url_action, true) . spiplistes_form_description(_T('spiplistes:conseil_sauvegarder_avant', $objet), true) ; if(spiplistes_courriers_statut_compter()) { $page_result .= spiplistes_form_fieldset_debut(_T('spiplistes:suppression_', $objet), true); foreach($tous_les_statuts_courriers as $statut) { if(spiplistes_courriers_statut_compter($statut)) { $titre = spiplistes_items_get_item('tab_t', $statut); $page_result .= spiplistes_form_input_checkbox ('supprimer_courriers_'.$statut, $statut, $titre, false, true); } } $page_result .= spiplistes_form_fieldset_fin(true); } else { $page_result .= spiplistes_form_message(_T('spiplistes:Casier_vide'), true); } $page_result .= "" . spiplistes_form_bouton_valider ('btn_supprimer_courriers') . spiplistes_form_fin(true) . fin_cadre_trait_couleur(true) ; ///////////////////////////////////////// // boite de maintenance des listes : la date des listes sont remises a zero (supprimer les chronos) $objet = array('objet' => _T('spiplistes:des_listes')); $page_result .= "" . debut_cadre_trait_couleur("administration-24.gif", true, "", _T('spiplistes:maintenance_objet', $objet)) . debut_cadre_relief("", true, "", _T('spiplistes:Supprimer_les_chronos')) ; if($nb_listes_auto) { $page_result .= "" . spiplistes_form_debut ($maintenance_url_action, true) . "<p class='verdana2'>"._T('spiplistes:suppression_chronos_desc')."</p>\n" . spiplistes_form_description(_T('spiplistes:conseil_sauvegarder_avant', $objet), true) . spiplistes_form_fieldset_debut ( _T('spiplistes:suppression_chronos_', $objet).spiplistes_fieldset_legend_detail(_T('spiplistes:total').": $nb_listes_auto / $nb_listes_desc", true) , true) ; foreach($listes_array as $row) { if($row['message_auto']=='oui') { $titre = $row['titre']; $statut = ""; $id_liste = intval($row['id_liste']); $page_result .= spiplistes_form_input_checkbox ('reset_liste_'.$id_liste, $id_liste, $statut.$titre, false, true); } } $page_result .= "" . spiplistes_form_fieldset_fin(true) . spiplistes_form_bouton_valider('btn_reset_listes') . spiplistes_form_fin(true) ; } else { $page_result .= spiplistes_form_message(_T('spiplistes:pas_de_liste_en_auto'), true); } $page_result .= "" . fin_cadre_relief(true) ; ///////////////////////////////////////// // supprimer les listes $page_result .= "" . debut_cadre_relief("", true, "", _T('spiplistes:Supprimer_les_listes')) ; if($nb_listes) { $page_result .= "" . spiplistes_form_debut ($maintenance_url_action, true) . spiplistes_form_description(_T('spiplistes:conseil_sauvegarder_avant', $objet), true) . spiplistes_form_fieldset_debut ( _T('spiplistes:suppression_', $objet).spiplistes_fieldset_legend_detail(_T('spiplistes:total').": $nb_listes_desc", true) , true) ; foreach($listes_array as $row) { $id_liste = intval($row['id_liste']); $titre = $row['titre']; $statut = "<img src='".spiplistes_items_get_item("puce", $row['statut'])."' alt='".spiplistes_items_get_item("alt", $row['statut'])."' width='9' height='9' style='margin: 0 0.25ex' />"; $page_result .= spiplistes_form_input_checkbox ('supprimer_liste_'.$id_liste, $id_liste, $statut.$titre, false, true); } $page_result .= "" . spiplistes_form_fieldset_fin(true) . spiplistes_form_bouton_valider ('btn_supprimer_listes') . spiplistes_form_fin(true) ; } else { $page_result .= spiplistes_form_message(_T('spiplistes:pas_de_liste'), true); } $page_result .= "" . fin_cadre_relief(true) . fin_cadre_trait_couleur(true) ; ////////////////////////////////////////////////////// // Boite maintenance des formats $objet = array('objet' => _T('spiplistes:des_formats')); $page_result .= "" . debut_cadre_trait_couleur("administration-24.gif", true, "", _T('spiplistes:maintenance_objet', $objet)) ; if($nb_abonnes_formats > 0) { $page_result .= "" // forcer les formats de reception . spiplistes_form_debut ($maintenance_url_action, true) . spiplistes_form_description(_T('spiplistes:conseil_sauvegarder_avant', $objet), true) . spiplistes_form_fieldset_debut ( _T('spiplistes:forcer_formats_', $objet) . spiplistes_fieldset_legend_detail(_T('spiplistes:total').": $nb_abonnes_formats_desc", true) , true) . spiplistes_form_input_checkbox ('confirmer_modifier_formats', 'oui' , _T('spiplistes:forcer_formats_desc'), false, true) . "<div id='sl-modif-fmt'>\n" . spiplistes_form_input_radio ($name = "sl-le-format", "html", _T('spiplistes:html'), true, true) . spiplistes_form_input_radio ($name, "texte", _T('spiplistes:texte'), false, true) . spiplistes_form_input_radio ($name, "non", _T('spiplistes:aucun'), false, true) . "</div>\n" . spiplistes_form_fieldset_fin(true) . spiplistes_form_bouton_valider('btn_modifier_formats') . spiplistes_form_fin(true) . "<hr />\n" // supprimer les formats . spiplistes_form_debut ($maintenance_url_action, true) . spiplistes_form_description(_T('spiplistes:conseil_sauvegarder_avant', $objet), true) . spiplistes_form_fieldset_debut ( _T('spiplistes:suppression_', $objet) . spiplistes_fieldset_legend_detail(_T('spiplistes:total').": $nb_abonnes_formats_desc", true) , true) . spiplistes_form_input_checkbox ('confirmer_supprimer_formats', 'oui', _T('spiplistes:confirmer_supprimer_formats'), false, true) . spiplistes_form_fieldset_fin(true) . spiplistes_form_bouton_valider('btn_supprimer_formats') . spiplistes_form_fin(true) ; } else { $page_result .= spiplistes_form_message(_T('spiplistes:pas_de_format'), true); } $page_result .= "" . fin_cadre_trait_couleur(true) ; ////////////////////////////////////////////////////// // Boite maintenance des abonnements $objet = array('objet' => _T('spiplistes:des_abonnements')); $page_result .= "" . debut_cadre_trait_couleur('administration-24.gif', true, '', _T('spiplistes:maintenance_objet', $objet)) ; $ii = spiplistes_abonnements_zombies(); if(($nb_abos = count($ii)) > 0) { $nb_auteurs = $ii; sort($nb_auteurs); $nb_auteurs = count(array_unique($nb_auteurs)); $nb_abos = spiplistes_str_abonnes($nb_abos); $nb_auteurs = spiplistes_str_auteurs($nb_auteurs); $page_result .= "" . spiplistes_form_debut ($maintenance_url_action, true) . spiplistes_form_description(_T('spiplistes:conseil_sauvegarder_avant', $objet), true) . spiplistes_form_fieldset_debut( _T('spiplistes:nettoyage_', $objet) . spiplistes_fieldset_legend_detail(_T('spiplistes:total').": $nb_abos, $nb_auteurs", true) , true) . spiplistes_form_input_checkbox ('confirmer_nettoyer_abos', 'oui' , _T('spiplistes:confirmer_nettoyer_abos'), false, true) . spiplistes_form_fieldset_fin(true) . spiplistes_form_bouton_valider('btn_nettoyer_abos') . spiplistes_form_fin(true) ; } else { $page_result .= spiplistes_form_message(_T('spiplistes:pas_de_pb_abonnements'), true); } $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_spiplistes_maintenance()
function spiplistes_email_from_default () { static $default; if(!$default) { if( // prendre d'abord celui par defaut de SPIP-Listes ($result = email_valide($ii = trim($GLOBALS['meta']['email_defaut']))) // sinon celui du webmaster || ($result = email_valide($ii = trim($GLOBALS['meta']['email_webmaster']))) ) { if($result == $ii) { //$nom = extraire_multi($GLOBALS['meta']['nom_site']); //$nom = unicode2charset(charset2unicode($nom),$GLOBALS['meta']['spiplistes_charset_envoi']); //$result = "\"$nom\" <$ii>"; } } else { spiplistes_log('ERROR: sender email address missing'); } } return($result); }
function exec_spiplistes_liste_gerer () { include_spip('inc/autoriser'); include_spip('inc/mots'); include_spip('inc/lang'); include_spip('inc/editer_auteurs'); include_spip('base/spiplistes_tables'); include_spip('inc/spiplistes_api'); include_spip('inc/spiplistes_api_presentation'); include_spip('inc/spiplistes_dater_envoi'); include_spip('inc/spiplistes_naviguer_paniers'); include_spip('inc/spiplistes_listes_selectionner_auteur'); global $meta , $connect_statut , $connect_toutes_rubriques , $connect_id_auteur , $spip_lang_left , $spip_lang_right , $couleur_claire ; // initialise les variables postees par le formulaire foreach(array( 'new' // nouvelle liste si 'oui' , 'id_liste'// si modif dans l'editeur , 'btn_liste_edit', 'titre', 'texte', 'pied_page' // renvoyes par l'editeur , 'btn_modifier_diffusion', 'changer_lang', 'statut' // local , 'btn_modifier_replyto', 'email_envoi' // local , 'btn_modifier_courrier_auto', 'message_auto' // local , 'auto_chrono', 'auto_weekly', 'auto_mois' , 'titre_message', 'patron', 'periode', 'envoyer_maintenant' , 'jour', 'mois', 'annee', 'heure', 'minute' , 'btn_patron_pied', 'btn_grand_patron' // boites gauches , 'btn_valider_forcer_abos', 'forcer_abo', 'forcer_format_abo', 'forcer_format_reception' , 'btn_supprimer_liste' //local ) as $key) { $$key = _request($key); } foreach(array('id_liste', 'periode') as $key) { $$key = intval($$key); } foreach(array('titre', 'texte', 'pied_page') as $key) { $$key = trim(corriger_caracteres($$key)); } $lang = $changer_lang; $cherche_auteur = _request('cherche_auteur'); $debut = _request('debut'); $envoyer_maintenant = ($envoyer_maintenant == 'oui'); $boite_pour_confirmer_envoi_maintenant = $grosse_boite_moderateurs = $message_erreur = $page_result = ""; if(!$id_liste) { ////////////////////////////////////////////////////// // Creer une liste //// // admin lambda peut creer une liste $flag_editable = ($connect_statut == "0minirezo"); if ($btn_liste_edit && ($new=='oui')) { if ($titre == '') { $titre = _T('spiplistes:liste_sans_titre'); } $pied_page = _SPIPLISTES_PATRON_PIED_DEFAUT; if($id_liste = spiplistes_listes_liste_creer(_SPIPLISTES_LIST_PRIVATE, $GLOBALS['spip_lang'] , $titre, $texte, $pied_page)) { spiplistes_log("id_liste #$id_liste added by id_auteur #$connect_id_auteur"); } } } else if($id_liste > 0) { ////////////////////////////////////////////////////// // Modifier une liste //// // les admins toutes rubriques et le moderateur seuls peuvent modifier la liste $flag_editable = autoriser('moderer', 'liste', $id_liste); if($flag_editable) { // Recupere les donnees de la liste courante pour optimiser l'update $sql_select = "statut,titre,date,lang"; $sql_result = sql_select($sql_select, "spip_listes", "id_liste=".sql_quote($id_liste), "", "", "1"); if($row = sql_fetch($sql_result)) { foreach(explode(",", $sql_select) as $key) { $current_liste[$key] = $row[$key]; } } /////////////////////////////////// // Les modifications (sql_upadteq) // A noter, ne pas preparer les valeurs par sql_quote() // sql_upadteq() s'en occupe $sql_champs = array(); // Retour de l'editeur ? if($btn_liste_edit) { $titre = corriger_caracteres($titre); $texte = corriger_caracteres($texte); if(empty($titre)) { $titre = filtrer_entites(_T('spiplistes:Nouvelle_liste_de_diffusion')); } $sql_champs['titre'] = $titre; $sql_champs['texte'] = $texte; } // Modifier le grand patron ? // a partir de 2.0049, le patron de pied est construit par la meleuse // afin de permettre _texte et multilingue if($btn_grand_patron && $patron) { $sql_champs['patron'] = $patron; } // Modifier patron de pied ? if($btn_patron_pied && $patron) { $sql_champs['pied_page'] = $patron; } // Modifier diffusion ? if($btn_modifier_diffusion) { $current_statut = ($statut) ? $statut : $current_liste['statut'] ; spiplistes_debug_log ('Modification diffusion statut: '.$current_statut); // Modifier le statut ? if(in_array($statut, explode(";", _SPIPLISTES_LISTES_STATUTS_TOUS)) && ($statut != $current_liste['statut']) ) { spiplistes_debug_log ('Modification statut: '.$statut); $sql_champs['statut'] = $statut; // si la liste passe en privee, retire les invites if($statut == _SPIPLISTES_LIST_PRIVATE) { $auteur_statut = '6forum'; spiplistes_abonnements_auteurs_supprimer($auteur_statut); spiplistes_log("AUTEURS ($auteur_statut) REMOVED FROM LISTE #$id_liste ($statut) BY ID_AUTEUR #$connect_id_auteur"); } } // Modifier la langue ? if(!empty($lang) && ($lang!=$current_liste['lang'])) { $sql_champs['lang'] = $lang; } } // Modifier l'adresse email de reponse ? if($btn_modifier_replyto && email_valide($email_envoi) && ($email_envoi!=$current_liste['email_envoi'])) { $sql_champs['email_envoi'] = $email_envoi; } //////////////////////////////////// // Modifier message_auto ? // bloc "courriers automatiques" if($btn_modifier_courrier_auto) { $current_statut = ($statut) ? $statut : $current_liste['statut'] ; spiplistes_debug_log ('Modification periodicite statut: '.$current_statut); $envoyer_quand = spiplistes_formate_date_form($annee, $mois, $jour, $heure, $minute); if(time() > strtotime($envoyer_quand)) { // envoi dans le passe est considere comme envoyer maintenant $envoyer_maintenant = true; $date_depuis = $envoyer_quand; $envoyer_quand = false; } // spiplistes_debug_log("nb vrais abos : ".spiplistes_listes_vrais_abos_compter($id_liste)); if($envoyer_maintenant && ($message_auto != 'non')) { if(!spiplistes_listes_vrais_abos_compter($id_liste)) { $boite_pour_confirmer_envoi_maintenant .= spiplistes_boite_alerte(_T('spiplistes:boite_alerte_manque_vrais_abos'), true); } else { $boite_pour_confirmer_envoi_maintenant = "" . debut_cadre_couleur('', true) // formulaire de confirmation envoi . spiplistes_form_debut(generer_url_ecrire(_SPIPLISTES_EXEC_LISTES_LISTE), true) . "<p style='text-align:center;font-weight:bold;' class='verdana2'>" . _T('spiplistes:boite_confirmez_envoi_liste') . "</p>" . "<input type='hidden' name='id_liste' value='$id_liste' />\n" . spiplistes_form_bouton_valider('btn_confirmer_envoi_maintenant') . spiplistes_form_fin(true) . fin_cadre_couleur(true) ; } $date_prevue = normaliser_date(time()); } if($message_auto == 'oui') { $sql_champs['message_auto'] = 'oui'; $sql_champs['titre_message'] = $titre_message; $sql_champs['date'] = (!$envoyer_maintenant) ? $envoyer_quand : ''; switch($auto_chrono) { case 'auto_jour': $sql_champs['statut'] = ($current_statut == _SPIPLISTES_LIST_PRIVATE) ? _SPIPLISTES_LIST_PRIV_DAILY : _SPIPLISTES_LIST_PUB_DAILY ; // force au minimum 1 jour $sql_champs['periode'] = (($periode > 0) ? $periode : 1); break; case 'auto_hebdo': if($auto_weekly == 'oui') { // debut de semaine ? $sql_champs['statut'] = ($current_statut == _SPIPLISTES_LIST_PRIVATE) ? _SPIPLISTES_LIST_PRIV_WEEKLY : _SPIPLISTES_LIST_PUB_WEEKLY ; // corrige la date pour le lundi de la semaine $time = strtotime($envoyer_quand); $time = mktime(0,0,0,date("m", $time),date("d", $time)-date("w", $time)+1,date("Y", $time)); $envoyer_quand = date("Y-m-d H:i:s", $time); $sql_champs['date'] = $envoyer_quand; } else { $sql_champs['statut'] = ($current_statut == _SPIPLISTES_LIST_PRIVATE) ? _SPIPLISTES_LIST_PRIV_HEBDO : _SPIPLISTES_LIST_PUB_HEBDO ; } $sql_champs['periode'] = 0; break; case 'auto_mensuel': if($auto_mois == 'oui') { // debut du mois ? $sql_champs['statut'] = ($current_statut == _SPIPLISTES_LIST_PRIVATE) ? _SPIPLISTES_LIST_PRIV_MONTHLY : _SPIPLISTES_LIST_PUB_MONTHLY ; // corrige la date, 1' du mois $envoyer_quand = substr($envoyer_quand, 0, 8)."01 00:00:00"; $sql_champs['date'] = $envoyer_quand; } else { $sql_champs['statut'] = ($current_statut == _SPIPLISTES_LIST_PRIVATE) ? _SPIPLISTES_LIST_PRIV_MENSUEL : _SPIPLISTES_LIST_PUB_MENSUEL ; } $sql_champs['periode'] = 0; break; case 'auto_an': $sql_champs['statut'] = ($current_statut == _SPIPLISTES_LIST_PRIVATE) ? _SPIPLISTES_LIST_PRIV_YEARLY : _SPIPLISTES_LIST_PUB_YEARLY ; $sql_champs['periode'] = 0; break; } } else if($message_auto == 'non') { $sql_champs['message_auto'] = 'non'; $sql_champs['date'] = ''; $sql_champs['periode'] = 0; } } // end if($btn_modifier_courrier_auto) // Enregistre les modifs pour cette liste if(count($sql_champs)) { sql_updateq('spip_listes', $sql_champs, 'id_liste='.sql_quote($id_liste).' LIMIT 1'); } // Forcer les abonnements if($btn_valider_forcer_abos && $forcer_abo && in_array($forcer_abo, array('tous', 'auteurs', '6forum', 'aucun'))) { $forcer_format_reception = (($forcer_format_abo == 'oui') && in_array($forcer_format_reception, spiplistes_formats_autorises())) ? $forcer_format_reception : false ; include_spip('inc/spiplistes_listes_forcer_abonnement'); if(spiplistes_listes_forcer_abonnement ($id_liste, $forcer_abo, $forcer_format_reception) === false) { $message_erreur .= spiplistes_boite_alerte(_T('spiplistes:Forcer_abonnement_erreur'), true); } } } // end if($flag_editable) } ////////////////////////////////////////////////////// // Recharge les donnees la liste $sql_select_array = array('id_liste', 'titre', 'texte' , 'titre_message', 'pied_page', 'date', 'statut', 'maj' , 'email_envoi', 'message_auto', 'periode', 'patron', 'lang'); if($row = spiplistes_listes_liste_fetsel($id_liste, $sql_select_array)) { foreach($sql_select_array as $key) { // initialise les variables du resultat SQL $$key = $row[$key]; } } // les supers-admins et le moderateur seuls peuvent modifier la liste $flag_editable = autoriser('moderer', 'liste', $id_liste); if (empty($titre_message)) { $titre_message = $titre; if (spiplistes_pref_lire_defaut('opt_completer_titre_nom_site', 'oui') == 'oui') { $titre_message .= _T('spiplistes:_de_') . spiplistes_nom_site_texte($lang); } } $nb_abonnes = spiplistes_listes_nb_abonnes_compter($id_liste); // preparation des boutons if($flag_editable) { // Propose de modifier la liste $gros_bouton_modifier = icone ( _T('spiplistes:Modifier_cette_liste') // legende bouton , generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_EDIT,'id_liste='.$id_liste) // lien , _DIR_PLUGIN_SPIPLISTES_IMG_PACK."reply-to-all-24.gif" // image du fond , "edit.gif" // image de la fonction. Ici, le crayon , '' // alignement , false // pas echo, demande retour ) ; // Propose de supprimer la liste $gros_bouton_supprimer = icone ( _T('spiplistes:Supprimer_cette_liste') , generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER, "btn_supprimer_liste=$id_liste&id_liste=$id_liste") , _DIR_PLUGIN_SPIPLISTES_IMG_PACK.'poubelle_msg.gif' , "" , "right" , false ) ; // la grosse boite des abonnes $tri = _request('tri') ? _request('tri') : 'nom'; // // CP-20101017: Si trop d'elligibles, ca gele. // @todo: revoir la boite/liste des abonnes/elligibles // En attendant ... //if(spiplistes_auteurs_elligibles_compter() < 1000) //{ $boite_liste_abonnes = spiplistes_listes_boite_abonnements( $id_liste, $statut, $tri, $debut, _SPIPLISTES_EXEC_LISTE_GERER ); //} //else //{ // $boite_liste_abonnes = _T('spiplistes:code_en_travaux'); //} // @see http://www.spip-contrib.net/SPIP-Listes#comment444314 $titre_boite = _T('spiplistes:abos_cette_liste'); $legend = '<small id="legend-abos1">' . spiplistes_nb_abonnes_liste_str_get($id_liste) . '</small>'.PHP_EOL ; $grosse_boite_abonnements = '' . '<!-- boite abonnes/elligibles -->'.PHP_EOL . debut_cadre_enfonce('auteur-24.gif', true, '', $titre_boite) . spiplistes_bouton_block_depliable($legend , false, md5('abonnes_liste')) . (spiplistes_spip_est_inferieur_193() ? $legend : '') . spiplistes_debut_block_invisible(md5('abonnes_liste')) . debut_cadre_relief('', true) . $boite_liste_abonnes . fin_cadre_relief(true) . fin_block() . fin_cadre_enfonce(true) . '<!-- fin boite abonnes/elligibles -->'.PHP_EOL ; // la grosse boite des moderateurs $boite_liste_moderateurs = spiplistes_listes_boite_moderateurs( $id_liste, _SPIPLISTES_EXEC_LISTE_GERER, 'mods-conteneur' ); $titre_boite = _T('spiplistes:mods_cette_liste'); $nb = spiplistes_mod_listes_compter($id_liste); $legend = '<small>' . spiplistes_nb_moderateurs_liste_str_get($nb) . '</small>'.PHP_EOL ; $grosse_boite_moderateurs = '' . '<!-- boite moderateurs -->'.PHP_EOL . debut_cadre_enfonce('redacteurs-24.gif', true, '', $titre_boite) . spiplistes_bouton_block_depliable($legend , false, md5('mods_liste')) . (spiplistes_spip_est_inferieur_193() ? $legend : '') . spiplistes_debut_block_invisible(md5('mods_liste')) . debut_cadre_relief('', true) . '<div id="mods-conteneur">'.PHP_EOL . $boite_liste_moderateurs . '</div>'.PHP_EOL . fin_cadre_relief(true) . fin_block() . fin_cadre_enfonce(true) . '<!-- fin boite moderateurs -->'.PHP_EOL ; } else { $gros_bouton_modifier = $gros_bouton_supprimer = $grosse_boite_abonnements = ''; } //////////////////////////////////// // PAGE CONTENU //////////////////////////////////// $titre_page = _T('spiplistes:gestion_dune_liste'); // Permet entre autres d'ajouter les classes a la page : <body class='$rubrique $sous_rubrique'> $rubrique = _SPIPLISTES_PREFIX; $sous_rubrique = 'liste_gerer'; $commencer_page = charger_fonction('commencer_page', 'inc'); echo($commencer_page(_T('spiplistes:spiplistes') . ' - ' . $titre_page, $rubrique, $sous_rubrique)); // la gestion des listes de courriers est reservee aux admins if($connect_statut != '0minirezo') { die (spiplistes_terminer_page_non_autorisee() . fin_page()); } $page_result .= '' . '<br /><br /><br />' . PHP_EOL . spiplistes_gros_titre($titre_page, '', true) . barre_onglets($rubrique, $sous_rubrique) . debut_gauche($rubrique, true) . spiplistes_boite_info_id(_T('spiplistes:liste_numero'), $id_liste, true) . spiplistes_naviguer_paniers_listes(_T('spiplistes:aller_aux_listes_'), true) . spiplistes_boite_patron($flag_editable, $id_liste, _SPIPLISTES_EXEC_LISTE_GERER, 'btn_grand_patron' , _SPIPLISTES_PATRONS_DIR, _T('spiplistes:Patron_grand_') , ($patron ? $patron : '') , $patron) . spiplistes_boite_patron($flag_editable, $id_liste, _SPIPLISTES_EXEC_LISTE_GERER, 'btn_patron_pied' , _SPIPLISTES_PATRONS_PIED_DIR, _T('spiplistes:Patron_de_pied_') , ((($ii = strlen($pied_page)) > _SPIPLISTES_PATRON_FILENAMEMAX) ? _T('taille_octets',array('taille'=>$ii)) . _T('spiplistes:conseil_regenerer_pied') : $pied_page) , $pied_page) . pipeline('affiche_gauche', array('args'=>array('exec'=>$sous_rubrique),'data'=>'')) //. creer_colonne_droite($rubrique, true) // spiplistes_boite_raccourcis() s'en occupe . spiplistes_boite_raccourcis(true) . spiplistes_boite_autocron() . pipeline('affiche_droite', array('args'=>array('exec'=>$sous_rubrique),'data'=>'')) . debut_droite($rubrique, true) . $message_erreur ; changer_typo('','liste'.$id_liste); // message alerte et demande de confirmation si supprimer liste if(($btn_supprimer_liste > 0) && ($btn_supprimer_liste == $id_liste)) { $page_result .= '' . spiplistes_boite_alerte (_T('spiplistes:Attention_suppression_liste').'<br />'._T('spiplistes:Confirmez_requete'), true) . '<form name="form_suppr_liste" id="form_suppr_liste" method="post" action="'.generer_url_ecrire(_SPIPLISTES_EXEC_LISTES_LISTE, '').'">' . PHP_EOL . "<div class='verdana2' style='text-align:right;'>\n" . "<input type='hidden' name='id_liste' value='$id_liste' />\n" . "<label>"._T('spiplistes:Confirmer_la_suppression_de_la_liste')."# $id_liste : \n" . "<input class='fondo' type='submit' name='btn_supprimer_liste_confirme' value='"._T('bouton_valider')."' /></label>\n" . "</div>\n" . "</form>\n" . "<br />\n" ; } $page_result .= "" . debut_cadre_relief("", true) . "\n<table cellpadding='0' cellspacing='0' border='0' width='100%'>\n" . "<tr><td valign='top'>\n" . spiplistes_gros_titre(spiplistes_bullet_titre_liste('puce', $statut, '', true)." " . spiplistes_calculer_balise_titre(extraire_multi($titre)) , '', true) . "</td>" . "<td rowspan='2'>" // le gros bouton modifier si besoin . $gros_bouton_modifier . "</td></tr>\n" . "<tr><td width='100%'>\n" . "<div align='$spip_lang_left' style='padding: 5px; border: 1px dashed #aaa; ' class='verdana1 spip_small'>\n" . propre($texte."~") . "</div>\n" . "</td>\n" . "</tr></table>\n" ; ////////////////////////////////////////////////////// // Modifier le statut de la liste //$email_defaut = entites_html($meta['email_webmaster']); $email_defaut = ($m = email_valide($GLOBALS['meta']['email_defaut'])) ? $m : $GLOBALS['meta']['email_webmaster'] ; $email_envoi = ($m = email_valide($email_envoi)) ? $email_envoi : $email_defaut ; $page_result .= "" //. debut_cadre_relief("racine-site-24.gif", true) . debut_cadre_relief("racine-site-24.gif", true, '', _T('spiplistes:Diffusion').spiplistes_plugin_aide(_SPIPLISTES_EXEC_AIDE, "diffusion")) // //////////////////////////// // Formulaire diffusion . ( ($flag_editable) ? '' . spiplistes_form_debut(generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER,'id_liste='.$id_liste), true) . '<input type="hidden" name="exec" value="listes" />' . PHP_EOL . '<input type="hidden" name="id_liste" value="'.$id_liste.'" />' . PHP_EOL : '' ) . '<span class="verdana2">' . _T('spiplistes:cette_liste_est_' , array('s' => spiplistes_bullet_titre_liste ('puce', $statut, 'img_statut', true))) . '</span>' . PHP_EOL ; $sel_private = ' value="' . _SPIPLISTES_LIST_PRIVATE . '" ' . ( in_array ($statut, array( _SPIPLISTES_LIST_PRIVATE , _SPIPLISTES_LIST_PRIV_DAILY , _SPIPLISTES_LIST_PRIV_HEBDO , _SPIPLISTES_LIST_PRIV_WEEKLY , _SPIPLISTES_LIST_PRIV_MENSUEL , _SPIPLISTES_LIST_PRIV_MONTHLY , _SPIPLISTES_LIST_PRIV_YEARLY ) ) ? ' selected="selected"' : '' ) ; $sel_publique = ' value="' . _SPIPLISTES_LIST_PUBLIC . '" ' . ( in_array ($statut, array( _SPIPLISTES_LIST_PUBLIC , _SPIPLISTES_LIST_PUB_DAILY , _SPIPLISTES_LIST_PUB_HEBDO , _SPIPLISTES_LIST_PUB_WEEKLY , _SPIPLISTES_LIST_PUB_MENSUEL , _SPIPLISTES_LIST_PUB_MONTHLY , _SPIPLISTES_LIST_PUB_YEARLY ) ) ? ' selected="selected"' : '' ) ; $page_result .= PHP_EOL . ( ($flag_editable) ? '' . '<select class="verdana2 fondl" name="statut" size="1" id="change_statut">' . PHP_EOL . '<option' . $sel_private . ' style="background-color:#fff">' . _T('spiplistes:statut_interne') . '</option>' . PHP_EOL . '<option' . $sel_publique . ' style="background-color:#B4E8C5">' . _T('spiplistes:statut_publique') . '</option>' . PHP_EOL . '<option' . mySel(_SPIPLISTES_TRASH_LIST, $statut) . ' style="background:url(' . _DIR_IMG_PACK.'rayures-sup.gif)">' . _T('texte_statut_poubelle').'</option>' . PHP_EOL . '</select>' . PHP_EOL : '<span class="verdana2" style="font-weight:bold;">' . spiplistes_items_get_item('alt', $statut) . '</span>'. PHP_EOL ) . '<div style="margin:10px 0px;">' . PHP_EOL . ( ($flag_editable && strpos($GLOBALS['meta']['langues_multilingue'], ',')) ? '' . '<label class="verdana2" for="changer_lang">' . _T('info_multi_herit').' : </label>' . PHP_EOL . '<select name="changer_lang" class="fondl" id="changer_lang">' . PHP_EOL . liste_options_langues('changer_lang', $lang , _T('spiplistes:langue_'), '', '') . '</select>' . PHP_EOL : '' //. "<span class='verdana2'>". _T('info_multi_herit')." : " //. "<span class='verdana2' style='font-weight:bold;'>".traduire_nom_langue($lang)."</span>\n" ) . '</div>' . PHP_EOL . ( ($flag_editable) ? spiplistes_form_bouton_valider('btn_modifier_diffusion') . spiplistes_form_fin(true) : '' ) . fin_cadre_relief(true) ; //////////////////////////// // Formulaire adresse email pour le reply-to $page_result .= '' . debut_cadre_relief(_DIR_PLUGIN_SPIPLISTES_IMG_PACK."reply_to-24.png" , true , '' , _T('spiplistes:adresse_de_reponse').spiplistes_plugin_aide(_SPIPLISTES_EXEC_AIDE , "replyto") ) . spiplistes_form_debut(generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER,"id_liste=$id_liste"), true) . "<p class='verdana2'>\n" . _T('spiplistes:adresse_mail_retour').":<br />\n" . ( ($flag_editable) ? _T('spiplistes:adresse')."</p>\n" . "<div style='text-align:center'>\n" . "<input type='text' name='email_envoi' value=\"".$email_envoi."\" size='40' class='fondl' /></div>\n" . spiplistes_form_bouton_valider('btn_modifier_replyto') : "</p><p style='font-weight:bold;text-align:center;'>$email_envoi</p>\n" ) . spiplistes_form_fin(true) . fin_cadre_relief(true) ; //////////////////////////// // Formulaire planifier un courrier automatique $page_result .= "" . "<a name='form-programmer' id='form-programmer'></a>\n" . debut_cadre_relief(_DIR_PLUGIN_SPIPLISTES_IMG_PACK."stock_timer.png", true, '', _T('spiplistes:messages_auto') . spiplistes_plugin_aide(_SPIPLISTES_EXEC_AIDE, "temporiser")) ; $page_result .= "" . $boite_pour_confirmer_envoi_maintenant . spiplistes_form_debut(generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER,"id_liste=$id_liste")."#form-programmer", true) . "<table border='0' cellspacing='1' cellpadding='3' width='100%'>\n" . "<tr><td align='$spip_lang_left' class='verdana2'>\n" ; if(empty($patron)) { $page_result .= "" . ( $flag_editable ? spiplistes_boite_alerte(_T('spiplistes:patron_manquant_message'), true) : "<p class='verdana2'>" . _T('spiplistes:liste_sans_patron') . "</p>\n" ) . "</td>\n" . "</tr>\n" . "<tr><td align='$spip_lang_left' class='verdana2'>\n" ; } if ($message_auto != "oui") { $page_result .= "<div class='verdana2'>"._T('spiplistes:pas_denvoi_auto_programme')."</div>\n"; } else { $page_result .= "" // petite ligne d'info si envoi programme . "<p class='verdana2'>"._T('spiplistes:sujet_courrier_auto')."<br />\n" . "<span class='spip_large'> " . spiplistes_calculer_balise_titre(extraire_multi($titre_message)) . "</span></p>\n" . "<p class='verdana2'>" . spiplistes_items_get_item('alt', $statut)."<br />\n" . ( ($statut == _SPIPLISTES_LIST_PUB_MONTHLY) ? "<strong>" . spiplistes_items_get_item("tab_t", $statut) . "</strong><br />" : "" ) . ( ($periode > 0) ? _T('spiplistes:periodicite_tous_les_n_s' , array('n' => " <strong>".$periode."</strong> " , 's' => spiplistes_singulier_pluriel_str_get($periode, _T('spiplistes:jour'), _T('spiplistes:jours'), false) ) ) : "" ) . ( (!in_array($statut, explode(";", _SPIPLISTES_LISTES_STATUTS_PERIODIQUES))) ? " <strong>"._T('spiplistes:Pas_de_periodicite')."</strong><br />" ._T('spiplistes:Ce_courrier_ne_sera_envoye_qu_une_fois') : "" ) . "<br />" . ( (intval($maj)) ? _T('spiplistes:Dernier_envoi_le_') . " <strong>" . affdate_heure($maj) . "</strong>" . ( ($last = round((time() - strtotime($maj)) / _SPIPLISTES_TIME_1_DAY)) ? " (".spiplistes_singulier_pluriel_str_get($last, _T('spiplistes:jour'), _T('spiplistes:jours')).")" : "" ). "<br />" : "" ) . ( ($date_prevue || (intval($date) && (time() < strtotime($date)))) ? _T('spiplistes:prochain_envoi_prevu')." : <strong>" . affdate_heure($date_prevue ? $date_prevue : $date) . "</strong>" . ( (!$date_prevue && ($next = round((strtotime($date) - time()) / _SPIPLISTES_TIME_1_DAY))) ? " (".spiplistes_singulier_pluriel_str_get($next, _T('spiplistes:jour'), _T('spiplistes:jours')).")" : "" ) : "" ) . "</p>\n" ; if($btn_modifier_courrier_auto) { $page_result .= "" . "<p class='verdana2'>"._T('spiplistes:date_act')."<br />" . _T('spiplistes:env_esquel')." <em>".$patron."</em>" . "</p>\n" ; } } $date_debut_envoi = (!empty($date_prevue) ? $date_prevue : (($date && intval($date)) ? $date : normaliser_date(time()))); $page_result .= "" . "</td>\n" . "</tr>\n" ; if($flag_editable) { $page_result .= "" . "<tr><td align='$spip_lang_left' class='verdana2'>" . "<input type='radio' name='message_auto' value='oui' id='auto_oui' " . (empty($patron) ? " disabled='disabled' " : "") . ($auto_checked = ($message_auto=='oui' ? "checked='checked'" : "")) . " />" . "<label for='auto_oui' ".($auto_checked ? "style='font-weight:bold;'" : "").">" . _T('spiplistes:prog_env')."</label>\n" . "<div id='auto_oui_detail' " .((empty($patron) || !$auto_checked) ? "style='display:none;'" : "") .">" . "<ul style='list-style-type:none;'>\n" . "<li>"._T('spiplistes:message_sujet') . ': <input type="text" name="titre_message" value="'.$titre_message.'" size="50" class="fondl" /> </li>'."\n" ; // // chrono jour $ii = ($periode > 0) ? $periode : 1; $page_result .= "" . "<li style='margin-top:0.5em'>" . spiplistes_form_input_radio ('auto_chrono', 'auto_jour' , '' , ($statut == _SPIPLISTES_LIST_PUB_DAILY) , true, false ) . _T('spiplistes:Tous_les') . " <input type='text' name='periode' value='".$ii."' size='4' maxlength='4' class='fondl' /> " . _T('info_jours') . "</li>\n" // chrono hebdo . "<li>" . spiplistes_form_input_radio ('auto_chrono', 'auto_hebdo' , _T('spiplistes:Toutes_les_semaines') , (($statut == _SPIPLISTES_LIST_PUB_HEBDO) || ($statut == _SPIPLISTES_LIST_PUB_WEEKLY)) , true, false) . spiplistes_form_input_checkbox('auto_weekly', 'oui' , _T('spiplistes:en_debut_de_semaine'), ($statut == _SPIPLISTES_LIST_PUB_WEEKLY), true, false) . "</li>\n" // chrono mois . "<li>" . spiplistes_form_input_radio ('auto_chrono', 'auto_mensuel' , _T('spiplistes:Tous_les_mois') , (($statut == _SPIPLISTES_LIST_PUB_MENSUEL) || ($statut == _SPIPLISTES_LIST_PUB_MONTHLY)) , true, false) . spiplistes_form_input_checkbox('auto_mois', 'oui' , _T('spiplistes:en_debut_de_mois'), ($statut == _SPIPLISTES_LIST_PUB_MONTHLY), true, false) . "</li>\n" // chrono annee . "<li>" . spiplistes_form_input_radio ('auto_chrono', 'auto_an' , _T('spiplistes:Tous_les_ans') , ($statut == _SPIPLISTES_LIST_PUB_YEARLY) , true, false) . "</li>\n" . "<li style='margin-top:0.5em'>"._T('spiplistes:A_partir_de')." : <br />\n" // . spiplistes_dater_envoi( 'liste', $id_liste, $statut , $flag_editable , _T('spiplistes:date_expedition_') , $date_debut_envoi, 'btn_changer_date' , false ) . "</li>\n" . ( (!$envoyer_maintenant) ? " <li>" . spiplistes_form_input_checkbox('envoyer_maintenant', 'oui' , _T('spiplistes:env_maint'), false, true) . "</li>\n" : "" ) . "</ul></div>\n" ; $checked = ($message_auto=='non') ? "checked='checked'" : ""; $class = $checked ? "class='bold'" : ""; $disabled = (empty($patron) ? " disabled='disabled' " : ""); $page_result .= "" . "<br /><input type='radio' name='message_auto' value='non' id='auto_non' $disabled $checked />" . "<span $class >" . " <label for='auto_non'>"._T('spiplistes:prog_env_non')."</label> " . "</span>\n" . "</td></tr>\n" ; $page_result .= "" . "<tr><td style='text-align:$spip_lang_right;'>" . ( ($id_liste) ? "<input type='hidden' name='id_liste' value='$id_liste' />" : "" ) . ( ($new) ? "<input type='hidden' name='new' value='$new' />" : "" ) // bouton de validation . (!empty($patron) ? spiplistes_form_bouton_valider('btn_modifier_courrier_auto', _T('bouton_valider'), true) : "") . "</td></tr>" ; } $page_result .= "" . "</table>\n" . spiplistes_form_fin(true) . fin_cadre_relief(true) ; // fin formulaire planifier $page_result .= "" . fin_cadre_relief(true) . $grosse_boite_abonnements . $grosse_boite_moderateurs ; // le super-admin peut abonner en masse if($connect_toutes_rubriques) { $page_result .= "" . "\n<!-- forcer abo -->\n" . debut_cadre_enfonce(_DIR_PLUGIN_SPIPLISTES_IMG_PACK."abonner-24.png", true, '', _T('spiplistes:forcer_les_abonnement_liste').spiplistes_plugin_aide("forcerliste"))."\n" . "<p class='verdana2'>\n" . _T('spiplistes:forcer_abonnement_desc') . "</p>\n" . "<p class='verdana2' style='margin-bottom:1em'><em>" . _T('spiplistes:forcer_abonnement_aide', array('lien_retour' => generer_url_ecrire(_SPIPLISTES_EXEC_ABONNES_LISTE))) . "</em></p>\n" . "<form action='".generer_url_ecrire(_SPIPLISTES_EXEC_LISTE_GERER,"id_liste=$id_liste#auteurs")."' id='form_forcer_abo' name='form_forcer_abo' method='post'>\n" . debut_cadre_relief("", true)."\n" // ////////////////////////// // propose de forcer les membres sauf invites si la liste est privee . ( ($statut==_SPIPLISTES_LIST_PRIVATE) ? "<div class='verdana2'><input type='radio' name='forcer_abo' value='auteurs' id='forcer_abo_tous' />\n" . "<label for='forcer_abo_tous'>"._T('spiplistes:Abonner_tous_les_inscrits_prives')."</label>" . "</div>\n" . spiplistes_boutons_forcer_format('forcer_format', _T('spiplistes:forcer_abonnements_nouveaux')) : "" ) // // propose de forcer les invites si la liste est publique ou periodique . ( (($statut!=_SPIPLISTES_LIST_PRIVATE) && ($statut!=_SPIPLISTES_TRASH_LIST)) ? "<div class='verdana2'><input type='radio' name='forcer_abo' value='6forum' id='forcer_abo_6forum' />\n" . "<label for='forcer_abo_6forum'>"._T('spiplistes:Abonner_tous_les_invites_public')."</label></div>\n" . spiplistes_boutons_forcer_format('forcer_format', _T('spiplistes:forcer_abonnements_nouveaux')) : "" ) . ( ($nb_abonnes) ? "<hr />\n" . "<div class='verdana2'><input type='radio' name='forcer_abo' value='aucun' id='forcer_desabo' />\n" . "<label for='forcer_desabo'>"._T('spiplistes:Forcer_desabonner_tous_les_inscrits')."</label></div>\n" : "" ) . fin_cadre_relief(true)."\n" . "<div style='text-align:right;'><input type='submit' name='btn_valider_forcer_abos' value='"._T('bouton_valider')."' class='fondo' /></div>\n" . "</form>\n" . fin_cadre_enfonce (true)."\n" ; } // $page_result .= "" . $gros_bouton_supprimer ; echo($page_result); echo pipeline('affiche_milieu',array('args'=>array('exec'=>$sous_rubrique),'data'=>'')) , spiplistes_html_signature(_SPIPLISTES_PREFIX) , fin_gauche(), fin_page(); } // end exec_spiplistes_liste_gerer()
/** * 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()