/** * Installation du plugin * * A chaque appel de exec/admin_plugin, si le plugin est active, * spip detecte spiplistes_install() et l'appelle 3 fois : * 1/ $action = 'test' * 2/ $action = 'install' * 3/ $action = 'test' * @global string $GLOBALS['meta']['spiplistes_version'] * @return boolean */ function spiplistes_install ($action) { include_spip('inc/spipliste_api_globales'); spiplistes_debug_log('spiplistes_install()'); switch($action) { case 'test': // si renvoie true, c'est que la base est a jour, inutile de re-installer // la valise plugin "effacer tout" apparait. // si renvoie false, SPIP revient avec $action = 'install' (une seule fois) $spiplistes_version = $GLOBALS['meta']['spiplistes_version']; $result = ( $spiplistes_version && ($spiplistes_version >= spiplistes_real_version_get(_SPIPLISTES_PREFIX)) && sql_showtable("spip_listes",true) ); //spiplistes_debug_log("TEST: ".($result ? "OK" : "NO")); return($result); break; case 'install': if(!$GLOBALS['meta']['spiplistes_version']) { $result = spiplistes_base_creer(); $str_log = "create"; } else { // logiquement, ne devrait pas passer par la (upgrade assure par mes_options) include_spip('base/spiplistes_upgrade'); $result = spiplistes_upgrade(); $str_log = "upgrade"; } $result = ( $result && spiplistes_initialise_spip_metas_spiplistes() && spiplistes_activer_inscription_visiteurs() ); $str_log = "INSTALL: $str_log " . spiplistes_str_ok_error($result); if(!$result) { // nota: SPIP ne filtre pas le resultat. Si retour en erreur, // la case a cocher du plugin sera quand meme cochee $str_log .= ": PLEASE REINSTALL PLUGIN"; } else { echo(_T('spiplistes:_aide_install' , array('url_config' => generer_url_ecrire(_SPIPLISTES_EXEC_CONFIGURE)) )); } spiplistes_log($str_log); return($result); break; case 'uninstall': // est appelle lorsque "Effacer tout" dans exec=admin_plugin $result = spiplistes_vider_tables(); spiplistes_log("UNINSTALL: " . spiplistes_str_ok_error($result)); return($result); break; default: break; } return (FALSE); }
function exec_spiplistes_aide () { global $spip_lang; spiplistes_debug_log('exec_spiplistes_aide()'); $var_lang = _request('var_lang'); if (!changer_langue($var_lang)) { $var_lang = $spip_lang; changer_langue($var_lang); } $info = spiplistes_plugin_get_infos(spiplistes_get_meta_dir(_SPIPLISTES_PREFIX)); $nom = typo($info['nom']); $version = typo($info['version']); $f_lang = _DIR_PLUGIN_SPIPLISTES . 'docs/'._SPIPLISTES_EXEC_PREFIX.'aide_'.$var_lang.'html'; $fichier_aide_spiplistes = is_readable($f_lang) ? $f_lang : _DIR_PLUGIN_SPIPLISTES . 'docs/'._SPIPLISTES_EXEC_PREFIX.'aide_fr.html' ; if($content = file_get_contents($fichier_aide_spiplistes)) { // corrige les liens images $content = str_replace('../img_docs/', _DIR_PLUGIN_SPIPLISTES.'img_docs/', $content); // place les vars $pattern = array( '/@spiplistes_name@/' ,'/@spiplistes_version@/' ,'/\$LastChangedDate:/' ,'/\$EndLastChangedDate/' ,'/@_aide@/' ); $replacement = array( $nom , $version , '' , '' , _T('spiplistes:_aide') ); $content = preg_replace($pattern, $replacement, $content); echo($content); } else { aide_spiplistes_erreur(); } }
function exec_spiplistes_autocron () { include_spip('inc/spiplistes_api'); spiplistes_debug_log ("exec_autocron()"); $sql_result = sql_select( "id_courrier,total_abonnes,nb_emails_envoyes" , 'spip_courriers' , "statut=".sql_quote(_SPIPLISTES_COURRIER_STATUT_ENCOURS), '', '', 1 ); if(sql_count($sql_result) > 0 ){ $row = sql_fetch($sql_result); // Compter le nombre de mails a envoyer $id_mess = $row['id_courrier']; $nb_inscrits = $row['total_abonnes']; $nb_messages_envoyes = $row['nb_emails_envoyes']; if($nb_inscrits > 0) { echo "<p align='center'> <strong>".round($nb_messages_envoyes/$nb_inscrits *100)." %</strong> (".$nb_messages_envoyes."/".$nb_inscrits.") </p>"; } } else { echo "fin"; } // ?? $action = generer_url_action('cron','&var='.time()); echo ' <div style="background-image: url(\''. $action . '\');"> </div> '; spiplistes_debug_log ("exec_autocron ACTION: $action"); spiplistes_debug_log("fin exec_autocron()"); }
function exec_spiplistes_courrier_previsu () { global $meta; include_spip('base/abstract_sql'); include_spip('inc/presentation'); include_spip('inc/distant'); include_spip('inc/date'); include_spip('inc/urls'); include_spip('inc/meta'); include_spip('inc/filtres'); include_spip('inc/lang'); include_spip('inc/spiplistes_api'); include_spip('inc/spiplistes_api_courrier'); include_spip('inc/spiplistes_api_abstract_sql'); include_spip('public/assembler'); spiplistes_debug_log ('ACTION: exec_spiplistes_courrier_previsu()'); $eol = PHP_EOL; $int_values = array( 'id_rubrique', 'id_mot', 'id_courrier', 'id_liste' , 'annee', 'mois', 'jour', 'heure', 'minute' ); $str_values = array( 'lang' , 'avec_intro', 'message_intro' , 'avec_patron', 'patron', 'patron_pos' , 'avec_sommaire' , 'titre', 'message', 'pied_patron' , 'Confirmer', 'date' , 'lire_base', 'format', 'plein_ecran' , 'date_sommaire' , 'oeil_html', 'oeil_texte' ); foreach(array_merge($str_values, $int_values) as $key) { $$key = _request($key); // méfiance sur jQuery 1.4.4 qui semble // ne plus transmettre les vars qu'en 1.4.2 // @todo: a creuser, verifier les autres vars ajax transmises //spiplistes_debug_log('PREVISU: '.$key.': '.$$key); } foreach($int_values as $key) { $$key = intval($$key); } $date = format_mysql_date($annee,$mois,$jour,$heure,$minute); $charset = $meta['charset']; $contexte = array( 'id_courrier' => $id_courrier , 'lang' => $lang ); list($lien_html, $lien_texte) = spiplistes_courriers_assembler_patron ( _SPIPLISTES_PATRONS_TETE_DIR . spiplistes_pref_lire('lien_patron') , $contexte , !((spiplistes_pref_lire('opt_lien_en_tete_courrier') == 'oui') && $id_courrier) ); // si envoi a une liste, reprendre le patron de pied de la liste list($pied_html, $pied_texte) = spiplistes_pied_page_assembler_patron($id_liste, $lang); $texte_intro = $texte_patron = $tampon_html = $tampon_texte = $sommaire_html = ''; if(spiplistes_pref_lire('opt_ajout_tampon_editeur') == 'oui') { list($tampon_html, $tampon_texte) = spiplistes_tampon_assembler_patron(); } if($lire_base) { // prendre le courrier enregistre dans la base $sql_select = 'texte,titre' . (($format=='texte') ? ',message_texte' : ''); if( $id_courrier && ($row = sql_fetsel($sql_select, "spip_courriers", "id_courrier=".sql_quote($id_courrier), "", "", 1)) ) { foreach(explode(",", $sql_select) as $key) { $$key = propre($row[$key]); } //if($plein_ecran) { $texte_html = '' . $lien_html . $texte . $pied_html . $tampon_html ; if($format=="texte") { header("Content-Type: text/plain; charset=$charset"); // forcer IE a afficher en ligne. header("Content-Disposition: inline; filename=spiplistes-previsu.txt"); $message_texte = empty($message_texte) ? spiplistes_courrier_version_texte($texte_html) : spiplistes_courrier_version_texte($lien_texte) . spiplistes_courrier_version_texte($message_texte) . $pied_texte . spiplistes_courrier_version_texte($tampon_texte) ; echo($message_texte); exit(0); } // else $texte_html = '' . '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN">'.$eol . (($lang) ? '<html lang="'.$lang.'" dir="ltr">'.$eol : '') . '<head>'.$eol . '<meta http-equiv="Content-Type" content="text/html; charset='.$charset.'">'.$eol . '<meta http-equiv="Pragma" content="no-cache">'.$eol . '<title>'.textebrut($titre).'</title>'.$eol . '</head>'.$eol . '<body style="text-align:center">'.$eol . '<div style="margin:0 auto">'.$eol . $texte_html . '</div>'.$eol . '</body>'.$eol . '</html>'.$eol ; ajax_retour($texte_html); exit(0); //} // end if plein_ecran } else { echo(_T('spiplistes:Erreur_courrier_introuvable')); } } ////////////////////////////////////////////////// // si nouveau courrier (pas dans la base), generer un apercu else { //spiplistes_debug_log('ACTION: generate preview'); $intro_html = $intro_texte = $sommaire_html = $sommaire_texte = ''; if($avec_intro == 'oui') { $ii = propre($message_intro); $intro_html = '<div>'.$ii.'</div>'.$eol; $intro_texte = spiplistes_courrier_version_texte($ii).$eol.$eol; } if($avec_patron == 'oui') { // generer le contenu (editeur) include_spip('public/assembler'); $contexte_template = array( 'date' => trim ($date) , 'id_rubrique' => $id_rubrique , 'id_mot' => $id_mot , 'patron' => $patron , 'lang' => $lang , 'sujet' => $titre , 'message' => $message ); $titre_html = _T('spiplistes:lettre_info').' '.$nomsite; $titre_texte = spiplistes_courrier_version_texte($titre_html) . $eol; list($message_html, $message_texte) = spiplistes_courriers_assembler_patron ( _SPIPLISTES_PATRONS_DIR . $patron , $contexte_template); } // end if($avec_patron == 'oui') else { $titre_html = propre($titre); $message_html = propre($message); $titre_texte = spiplistes_courrier_version_texte($titre_html) . $eol; $message_texte = spiplistes_courrier_version_texte($message_html) . $eol; } if($avec_sommaire == 'oui') { if($id_rubrique > 0) { $sql_where = array('id_rubrique='.sql_quote($id_rubrique) , "statut=".sql_quote('publie')); if($date_sommaire == 'oui') { $sql_where[] = "date >= " . sql_quote($date); } if($sql_result = sql_select("titre,id_article" , "spip_articles" , $sql_where )) { while($row = sql_fetch($sql_result)) { $url = (spiplistes_spip_est_inferieur_193()) ? generer_url_article($row['id_article']) : generer_url_entite($row['id_article'], 'article') ; $ii = typo($row['titre']); $sommaire_html .= "<li> <a href='" . $url . "'>" . $ii . '</a></li>'.$eol; $sommaire_texte .= " - " . textebrut($ii) . "\n " . $url . $eol; } } } if($id_mot > 0) { if($sql_result = sql_select("a.titre,a.id_article" , "spip_articles AS a LEFT JOIN spip_mots_articles AS m ON a.id_article=m.id_article" , array( "a.statut=".sql_quote('publie') , "m.id_mot=".sql_quote($id_mot) , "a.date >= " . sql_quote($sql_date) ) )) { while($row = sql_fetch($sql_result)) { $ii = typo($row['titre']); $url = (spiplistes_spip_est_inferieur_193()) ? generer_url_article($row['id_article']) : generer_url_entite($row['id_article'], 'article') ; $sommaire_html .= "<li> <a href='" . $url . "'> " . $ii . "</a></li>\n"; $sommaire_texte .= " - " . textebrut($ii) . "\n " . $url . $eol; } } } if(!empty($sommaire_html)) { $sommaire_html = "<ul>" . $sommaire_html . "</ul>\n"; $message_html = ($patron_pos == "avant") ? $message_html . $sommaire_html : $sommaire_html . $message_html ; $message_texte = ($patron_pos == "avant") ? $message_texte . $eol . $sommaire_texte : $sommaire_texte . $eol . $message_texte ; } } // end if($avec_sommaire == 'oui') $form_action = ($id_courrier) ? generer_url_ecrire(_SPIPLISTES_EXEC_COURRIER_GERER, 'id_courrier='.$id_courrier) : generer_url_ecrire(_SPIPLISTES_EXEC_COURRIER_GERER) ; $message_html = spiplistes_liens_absolus ($intro_html . $message_html); $message_texte = spiplistes_liens_absolus ($intro_texte . $message_texte); spiplistes_debug_log('ACTION: generate page'); $page_result = '' // boite courrier au format html . debut_cadre_couleur('', true) . "<form id='choppe_patron-1' action='$form_action' method='post' name='choppe_patron-1'>\n" . "<div id='previsu-html' class='switch-previsu'>\n" . _T('spiplistes:version_html') . " / " . "<a href='javascript:jQuery(this).switch_previsu()'>" . _T('spiplistes:version_texte') . "</a>\n" . "<div class='previsu-content'>\n" . $message_html . $message_erreur . $pied_html . $tampon_html . "</div>\n" . "</div>\n" // fin id='previsu-html . "<div id='previsu-texte' class='switch-previsu' style='display:none;'>\n" . "<a href='javascript:jQuery(this).switch_previsu()'>" . _T('spiplistes:version_html') . "</a>\n" . " / " . _T('spiplistes:version_texte') . "<div class='previsu-content'>\n" . "<pre>" . $message_texte . $message_erreur . $pied_texte . $tampon_texte . "</pre>" . "</div>\n" . "</div>\n" // fin id='previsu-texte . "<p style='text-align:right;margin-bottom:0;'>" . "<input type='hidden' name='modifier_message' value='oui' />\n" . ( ($id_courrier) ? "<input type='hidden' name='id_courrier' value='$id_courrier' />\n" : "<input type='hidden' name='new' value='oui' />\n" ) . "<input type='hidden' name='titre' value=\"".htmlspecialchars($titre)."\">\n" . "<input type='hidden' name='message' value=\"".htmlspecialchars($message_html)."\">\n" . "<input type='hidden' name='message_texte' value=\"".htmlspecialchars($message_texte)."\">\n" . "<input type='hidden' name='date' value='$date'>\n" . "<input type='submit' name='btn_courrier_valider' value='"._T('bouton_valider')."' class='fondo' /></p>\n" . "</form>\n" . fin_cadre_couleur(true) . "<br />\n" ; echo($page_result); } exit(0); }
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()
function formulaires_modif_abonnement2_traiter_dist(){ spiplistes_debug_log('formulaires_modif_abonnement2_traiter_dist()'); $d = _request('d'); $list = _request('list'); $email_desabo = _request('email_desabo'); $format = _request('suppl_abo'); // cherche l'abonne' $sql_select = "id_auteur,statut,nom,email"; $sql_result = sql_select( $sql_select , 'spip_auteurs' , array( "cookie_oubli=".sql_quote($d) , "statut<>".sql_quote('5poubelle') , "pass<>".sql_quote('') ) , '', '', 1 ); $row = sql_fetch($sql_result); //print_r($row); foreach(explode(",",$sql_select) as $key) { $$key = $row[$key]; } $id_auteur = intval($id_auteur); $prev_format = spiplistes_format_abo_demande($id_auteur); // desabonne l'auteur de toute les listes spiplistes_abonnements_desabonner_statut($id_auteur, explode(";", _SPIPLISTES_LISTES_STATUTS_TOUS)); // re-abonne' l'auteur aux listes demandees if(is_array($list) && count($list)) { if(spiplistes_abonnements_ajouter($id_auteur, $list) !== false) { $message_formulaire = _T('spiplistes:abonnement_modifie'); } } spiplistes_format_abo_modifier($id_auteur, $format); if($format != $prev_format) { // affichage des modifs if($format == 'non') { $message_formulaire = _T('spiplistes:desabonnement_valid').": ".$email; } else { $message_formulaire = _T('spiplistes:abonnement_modifie'); $message_formulaire .= "<p>"._T('spiplistes:abonnement_nouveau_format').$format."<br />"; $message_ok = _T('spiplistes:abonnement_modifie'); } } // detruire le cookie perso //spip_query("UPDATE spip_auteurs SET cookie_oubli='' WHERE cookie_oubli =".sql_quote($d)); spiplistes_auteurs_cookie_oubli_updateq('', $d, $true); $contexte = array( 'editable' => true , 'message_ok' => $message_ok , 'message_formulaire' => $message_formulaire , 'format' => $format ); return ($contexte); }
/** * Mise à jour de la base de données (tables SPIP-Listes uniquement) * * @return string */ function spiplistes_upgrade_base ( $spiplistes_name , $spiplistes_current_version , $spiplistes_current_version_base , $spiplistes_real_version_base ) { //spiplistes_debug_log("spiplistes_upgrade_base(),); if($spiplistes_current_version_base && ($spiplistes_current_version_base >= $spiplistes_real_version_base)) { // La base est a jour return($spiplistes_current_version_base); } // faire la mise a jour spiplistes_debug_log("UPGRADING DATABASE $spiplistes_name $spiplistes_current_version_base TO $spiplistes_real_version_base"); // 'version_base' n'apparait que dans SPIP-Listes 1.98001 // Cherche sur $spiplistes_version pour les versions precedentes //install $version_base = 1.91; // ou inferieur ? if ( (!$spiplistes_current_version) || ($spiplistes_current_version < 1.98001) ) { // si etait deja installe mais dans une vieille version, on reprend a zero include_spip('base/abstract_sql'); $desc = sql_showtable("spip_listes",true); if (!isset($desc['field']['id_liste'])) $current_version = 0.0; if( sql_getfetsel("*", 'spip_articles' , "statut=".sql_quote('liste')." OR statut=".sql_quote('inact')." OR statut=".sql_quote('poublist')) ) { $current_version=0.0; } if ($current_version==0.0){ // Verifie que les tables spip_listes existent, sinon les creer //spiplistes_debug_log("UPGRADE: current_version: $current_version"); include_spip('base/create'); include_spip('base/abstract_sql'); //Migrer des listes anciennes // a deplacer dans une en fonction $resultat_aff = sql_select("*", 'spip_articles' , "statut=".sql_quote('liste')." OR statut=".sql_quote('inact')." OR statut=".sql_quote('poublist')); if(@sql_count($resultat_aff) > 0) { echo _T('spiplistes:mettre_a_jour'); while ($row = sql_fetch($resultat_aff)) { $id_article=$row['id_article']; $titre_liste=corriger_caracteres($row['titre']); $texte_liste = corriger_caracteres($row['texte']); $date_liste = $row['date']; $langue=$row["lang"]; $statut = $row['statut']; $extra=unserialize($row['extra']); $patron_liste=$extra["squelette"]; $periode_liste=$extra["periode"]; $maj_liste=$extra["majnouv"]; $email_envoi=$extra["email_envoi"]; $message_auto=$extra["auto"]; $options="<p>".$titre_liste."<br/>"; echo $options."</p>"; // ajout du pied de page include_spip('public/assembler'); $contexte_pied = array('lang'=>$langue); $pied = recuperer_fond('modeles/piedmail', $contexte_pied); $id_liste = sql_insertq( "spip_listes" , array( 'titre' => $titre_liste , 'texte' => $texte_liste , 'statut' => $statut , 'date' => $date_liste , 'lang' => $langue , 'pied_page' => $pied ) ); if($message_auto=="oui") sql_update( 'spip_listes' , array( 'patron' => sql_quote($patron_liste) , 'periode' => sql_quote($periode_liste) , 'maj' => "FROM_UNIXTIME(".sql_quote($maj_liste).")" , 'email_envoi' => sql_quote($email_envoi) , 'message_auto' => sql_quote($message_auto) ) , "id_liste=".sql_quote($id_liste) ); //Auteur de la liste (moderateur) sql_delete('spip_auteurs_mod_listes', "id_liste =".sql_quote($id_liste)); sql_insert( 'spip_auteurs_mod_listes' , "(id_auteur, id_liste)" , "(".sql_quote($connect_id_auteur).",".sql_quote($id_liste).")" ); //recuperer les abonnes (peut etre plus tard ?) $abos = sql_select('id_auteur,id_article', 'spip_auteurs_articles' , "id_article=".sql_quote($id_article)); while($abonnes = sql_fetch($abos)){ $abo = intval($abonnes['id_auteur']); sql_insert('spip_auteurs_listes' , "(id_auteur, id_liste)" , "(".sql_quote($abo).",".sql_quote($id_liste).")" ); } //effacer les anciens articles/abo sql_delete('spip_articles', "id_article =".sql_quote($id_article)); sql_delete('spip_auteurs_articles', "id_article =".sql_quote($id_article)); //manque un traitement pour recuperer les courriers } //evaluer les extras de tous les auteurs et les virer $result = sql_select( "extra AS e, spip_auteurs.id_auteur AS i" , 'spip_auteurs' ); while ($row = sql_fetch($result)) { $abo = unserialize($row['e']); $format = $abo['abo'] ; if($format=="texte" || $format=="html") { sql_insert( 'spip_auteurs_elargis' , "(id_auteur,`spip_listes_format`)" , "(".sql_quote($row['i']).",".sql_quote($format).")" ); } else { sql_insert( 'spip_auteurs_elargis' , "(id_auteur, `spip_listes_format`)" , "(".sql_quote($row['i']).",".sql_quote('non').")" ); } } // end while echo _T('spiplistes:regulariser'); $result = sql_select( "a.email, a.id_auteur" , "spip_auteurs AS a, spip_auteurs_listes AS l, spip_auteurs_elargis AS f" , array( "a.id_auteur=f.id_auteur" , "f.spip_listes_format=".sql_quote('non') , "a.id_auteur=l.id_auteur" , "a.statut!=".sql_quote('5poubelle') ) , array("email") ); // while($res = sql_fetch($result)) { sql_delete('spip_auteurs_listes', "id_auteur =".sql_quote($res['id_auteur'])) ; } } // end if(@sql_count($resultat_aff) > 0) ecrire_meta('spiplistes_version',$current_version=$version_base,'non'); } if ($current_version<1.92){ //spiplistes_debug_log("UPGRADE: current_version: $current_version"); echo "SpipListes Maj 1.92<br />"; sql_alter("TABLE spip_listes ADD titre_message varchar(255) NOT NULL default ''"); sql_alter("TABLE spip_listes ADD pied_page longblob NOT NULL"); ecrire_meta('spiplistes_version', $current_version=1.92); } if ($current_version<1.94){ //spiplistes_debug_log("UPGRADE: current_version: $current_version"); echo "SpipListes Maj 1.94<br />"; include_spip('base/abstract_sql'); if (($res = sql_select('id_auteur', 'spip_auteurs_mod_listes')) && (!sql_fetch($res)) && ($desc = sql_showtable("spip_abonnes_listes",true)) && isset($desc['field']['id_auteur']) ) { sql_drop_table("spip_auteurs_mod_listes"); // elle vient d'etre cree par un creer_base inopportun sql_drop_table("spip_auteurs_courriers"); // elle vient d'etre cree par un creer_base inopportun } sql_alter("TABLE spip_auteurs_listes RENAME spip_auteurs_mod_listes"); sql_alter("TABLE spip_abonnes_listes RENAME spip_auteurs_listes"); sql_alter("TABLE spip_abonnes_courriers RENAME spip_auteurs_courriers"); ecrire_meta('spiplistes_version', $current_version=1.94); } if ($current_version<1.95){ //spiplistes_debug_log("UPGRADE: current_version: $current_version"); echo "SpipListes Maj 1.95<br />"; include_spip('base/abstract_sql'); sql_alter("TABLE spip_auteurs_courriers ADD etat varchar(5) NOT NULL default '' AFTER statut"); ecrire_meta('spiplistes_version', $current_version=1.95); } if ($current_version<1.96){ //spiplistes_debug_log("UPGRADE: current_version: $current_version"); echo "SpipListes Maj 1.96<br />"; include_spip('base/abstract_sql'); //installer la table spip_auteurs_elargis si besoin $table_nom = "spip_auteurs_elargis"; sql_query("CREATE TABLE IF NOT EXISTS ".$table_nom." ( `id_auteur` BIGINT NOT NULL , `spip_listes_format` VARCHAR( 8 ) DEFAULT 'non' NOT NULL ) "); //evaluer les extras de tous les auteurs + compter tous les auteurs $result = sql_select( "extra AS e,spip_auteurs.id_auteur AS i" , 'spip_auteurs'); $nb_inscrits = 0; //repartition des extras $cmpt = array('texte'=>0, 'html'=>0, 'non'=>0); while ($row = sql_fetch($result)) { $nb_inscrits++ ; $abo = unserialize($row['e']); $format = $abo['abo'] ; if($format=="texte" || $format=="html") { sql_insert( 'spip_auteurs_elargis' , "(id_auteur, `spip_listes_format`)" , "(".sql_quote($row['i']).",".sql_quote($format).")" ); } else { sql_insert( 'spip_auteurs_elargis' , "(id_auteur, `spip_listes_format`)" , "(".sql_quote($row['i']).",".sql_quote('non').") " ); } if ($abo['abo']) { $cmpt[$abo['abo']] ++; } } echo "<br />html : ".$cmpt['html']." <br />texte : ".$cmpt['texte']."<br />non : ".$cmpt['non']."<br />somme :".$nb_inscrits ; ecrire_meta('spiplistes_version', $current_version=1.96); } if ($current_version<1.97) { //spiplistes_debug_log("UPGRADE: current_version: $current_version"); echo "SpipListes Maj 1.97<br />"; include_spip('base/abstract_sql'); echo "regulariser les desabonnes avec listes...<br />"; $result = sql_select( "a.email,a.id_auteur" , "spip_auteurs AS a, spip_auteurs_listes AS l, spip_auteurs_elargis AS f" , array( "a.id_auteur=f.id_auteur" , "f.spip_listes_format=".sql_quote('non') , "a.id_auteur=l.id_auteur" , "a.statut!=".sql_quote('5poubelle' ) ) , array("email") ); // $nb_inscrits = sql_count($result); echo($nb_inscrits); while($res = sql_fetch($result)) { sql_delete("spip_auteurs_listes", "id_auteur =".sql_quote($res['id_auteur'])) ; } ecrire_meta('spiplistes_version', $current_version=1.97); } // end if ($current_version<1.97) if ($current_version<1.98) { echo "SpipListes Maj 1.98<br />"; include_spip('base/abstract_sql'); echo "regulariser l'index"; $table_nom = "spip_auteurs_elargis"; //ajout des index $desc = sql_showtable($table_nom,true); if($desc['key']['PRIMARY KEY']!='id'){ sql_alter("TABLE ".$table_nom." DROP PRIMARY KEY"); if(!isset($desc['fields']['id'])) { sql_alter("TABLE ".$table_nom." ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY"); } else { sql_alter("TABLE ".$table_nom." ADD PRIMARY KEY (id)"); } } if($desc['key']['KEY id_auteur']) { sql_alter("TABLE ".$table_nom." DROP INDEX id_auteur, ADD INDEX id_auteur (id_auteur)"); } else { sql_alter("TABLE ".$table_nom." ADD INDEX id_auteur (id_auteur)"); } ecrire_meta('spiplistes_version', $current_version=1.98); } spiplistes_ecrire_metas(); } // A partir de SPIP-Listes 1.98001, on se base sur le vrai numero de version de // la base, (plugin.xml: <version_base>) if($spiplistes_current_version_base < $spiplistes_real_version_base) { spiplistes_debug_log("UPGRADING DATABASE version_base: $spiplistes_current_version_base TO $spiplistes_real_version_base"); /* ... */ // ajouter au dessus de cette ligne les patches si besoin pour nouvelle version de la base // fin des ajouts de patches ecrire_meta('spiplistes_base_version', $spiplistes_current_version_base); spiplistes_ecrire_metas(); } return($spiplistes_current_version_base); }
function balise_FORMULAIRE_ABONNEMENT_dyn($id_liste, $formulaire) { //spiplistes_debug_log("balise_FORMULAIRE_ABONNEMENT_dyn() -$id_liste-"); include_spip ('inc/meta'); include_spip ('inc/session'); include_spip ('inc/filtres'); include_spip ('inc/texte'); include_spip ('inc/meta'); include_spip ('inc/mail'); include_spip ('inc/acces'); include_once (_DIR_PLUGIN_SPIPLISTES.'inc/spiplistes_mail.inc.php'); //recuperation des variables utiles $oubli_pass = _request('oubli_pass'); $email_oubli = _request('email_oubli'); $type = _request('type'); // recuperation de la config SPIP-Listes // 'simple' = ne renvoie que la confirmation d'abonnement // 'membre' = complete le mail par un mot de passe pour s'identifier sur le site $acces_membres = ($GLOBALS['meta']['abonnement_config'] == 'membre') ? 'oui' : 'non'; // aller chercher le formulaire html qui va bien $formulaire = 'formulaires/'.$formulaire ; // Accepter l'inscription en tant qu'auteur ? // pour memo: l'auteur a acces a l'espace prive' $inscriptions_ecrire = ($GLOBALS['meta']['accepter_inscriptions'] == 'oui'); // Accepter l'inscription en tant que visiteur ? // pour memo: le visiteur n'a pas acces a l'espace prive' $inscriptions_publiques = ($GLOBALS['meta']['accepter_visiteurs'] == 'oui'); $affiche_formulaire = $inscription_redacteur = $inscription_visiteur = ''; $nom_site_spip = spiplistes_nom_site_texte ($lang); $adresse_site = $GLOBALS['meta']['adresse_site']; // envoyer le cookie de relance mot de passe si pass oublie if($email_oubli) { if(email_valide($email_oubli)) { $row = spiplistes_auteurs_auteur_select('id_auteur,statut' , 'email='.sql_quote($email_oubli) ); if($row /* = sql_fetch($sql_result) */ ) { if($row['statut'] == '5poubelle') { $erreur = _T('pass_erreur_acces_refuse'); } else if($id_abo = intval($row['id_auteur'])) { $cookie = creer_uniqid(); spiplistes_auteurs_cookie_oubli_updateq($cookie, $email_oubli); $message = _T('spiplistes:abonnement_mail_passcookie' , array( 'nom_site_spip' => $nom_site_spip , 'adresse_site' => $adresse_site , 'cookie' => $cookie) ); $objet = "[$nom_site_spip] " . _T('pass_oubli_mot'); $patron = spiplistes_patron_message(); $format = spiplistes_format_abo_demande($id_abo); $contexte = array(); $email_a_envoyer = spiplistes_preparer_message ( $objet , $patron , $format , $contexte , $abonne['email'] , $abonne['nom']); if(spiplistes_envoyer_mail($email_oubli , $objet , $email_a_envoyer )) { $erreur = _T('pass_recevoir_mail'); } else { $erreur = _T('pass_erreur_probleme_technique'); } } } else { $erreur = _T('pass_erreur_non_enregistre' , array('email_oubli' => htmlspecialchars($email_oubli)) ); } } else { $erreur = _T('pass_erreur_non_valide' , array('email_oubli' => htmlspecialchars($email_oubli)) ); } } // end if $email_oubli // afficher le formulaire d'oubli du pass if($oubli_pass == 'oui') { return array($formulaire, $GLOBALS['delais'], array( 'oubli_pass' => $oubli_pass , 'erreur' => $erreur , 'inscription_redac' => '' , 'inscription_visiteur' => '' , 'mode_login' => false , 'reponse_formulaire' => false , 'liste' => '' ) ); } //code pour s inscrire else if( $inscriptions_ecrire || $inscriptions_publiques || ($GLOBALS['meta']['forums_publics'] == 'abo') ) { $accepter_nouveau = 'oui'; // debut presentation $inscription_redacteur = ($inscriptions_ecrire && ($type=='redac')) ? 'oui' : 'non' ; $inscription_visiteur = (($type!='redac') && $inscriptions_publiques && ($acces_membres=='oui')) ? 'oui' : 'non' ; list($affiche_formulaire , $reponse_formulaire , $mode_modifier , $abonne ) = spiplistes_formulaire_abonnement( (($type=='redac') ? 'redac' : 'forum') , $acces_membres , $formulaire , $nom_site_spip , $inscription_redacteur , $inscription_visiteur ); } else { spiplistes_debug_log (_T('pass_erreur').' acces visiteurs non autorises'); } return array($formulaire, $GLOBALS['delais'], array( 'oubli_pass' => $oubli_pass , 'erreur' => $erreur , 'inscription_redacteur' => $inscription_redacteur //, 'acces_membres' => $acces_membres , 'inscription_visiteur' => $inscription_visiteur , 'mode_login' => $affiche_formulaire , 'message_formulaire' => $message_formulaire , 'reponse_formulaire' => $reponse_formulaire , 'accepter_auteur' => $GLOBALS['meta']['accepter_inscriptions'] , 'id_liste' => $id_liste , 'accepter_nouveau' => $accepter_nouveau , 'mode_modifier' => $mode_modifier , 'id_auteur' => $abonne['id_auteur'] , 'format' => $abonne['format'] ) ); } // end balise_FORMULAIRE_ABONNEMENT_dyn()
function auteur_cookie_ou_session($d) { //spiplistes_debug_log ("auteur_cookie_ou_session($d)"); $return = array(); // si pas de cookie on chope l'auteur de la session if(empty($d)) { if($id_auteur=$GLOBALS['visiteur_session']['id_auteur']) { $return['id_auteur'] = intval($id_auteur); $row = sql_fetsel( 'id_auteur,statut,nom,email', 'spip_auteurs', 'id_auteur='.sql_quote($id_auteur) ); if($row) { $return['id_auteur'] = $row['id_auteur']; $return['statut'] = $row['statut']; $return['nom'] = $row['nom']; $return['email'] = $row['email']; } } } // recuperer les donnes de l'auteur associe au cookie if(!empty($d)) { $row = sql_fetsel( 'id_auteur,statut,nom,email', 'spip_auteurs', 'cookie_oubli='.sql_quote($d).' AND statut<>'.sql_quote('5poubelle') ); if($row) { $return['id_auteur'] = $row['id_auteur']; $return['statut'] = $row['statut']; $return['nom'] = $row['nom']; $return['email'] = $row['email']; } else { spiplistes_debug_log ("auteur_cookie_ou_session ni cookie, ni id ?"); } } return $return; }
/** * CP-20110315 * @return bool */ function spiplistes_auteurs_auteur_statut_modifier ($id_auteur, $statut) { spiplistes_debug_log ('modification status for auteur #'.$id_auteur); $result = sql_update( 'spip_auteurs' , array('statut' => sql_quote($statut)) , 'id_auteur='.$id_auteur.' LIMIT 1' ); return ($result); }
function spiplistes_lire_serialized_meta ($meta_name) { if(isset($GLOBALS['meta'][$meta_name])) { if(!empty($GLOBALS['meta'][$meta_name])) { return(unserialize($GLOBALS['meta'][$meta_name])); } else spiplistes_debug_log ("erreur sur meta $meta_name (vide)"); } return(false); }
function formulaires_spip_listes_inscription_traiter_dist ($id_liste='') { // enregistre dans spip_auteurs, spip_auteurs_elargis, spip_auteurs_listes $val['email'] = _request('email'); $val['nom'] = _request('email'); $alea_actuel = creer_uniqid(); $alea_futur = creer_uniqid(); $val['alea_actuel'] = $alea_actuel; $val['alea_futur'] = $alea_futur; $val['low_sec'] = ''; $val['statut'] = 'aconfirmer'; $format = _request('format_abo'); $listes = _request('listes'); // si l'auteur existe deja, $auteur = spiplistes_auteurs_auteur_select('id_auteur,statut,lang' , 'email='.sql_quote($val['email'])); if ($auteur) { $id_auteur = $auteur['id_auteur']; // reactiver le compte si necessaire if ($auteur['statut'] == '5poubelle') { spiplistes_auteurs_auteur_statut_modifier ($id_auteur, 'aconfirmer'); } spiplistes_debug_log ('inscription auteur #'.$id_auteur.' email:'.$val['email']); } else { // creer le compte abonne' if ($id_auteur = spiplistes_auteurs_auteur_insertq ($val)) { sql_insertq( 'spip_auteurs_elargis' , array('id_auteur'=>$id_auteur ,'spip_listes_format'=>$format ) ); } spiplistes_debug_log ('NEW inscription email:'.$val['email']); $lang = $GLOBALS['meta']['langue_site']; } if ($listes) { foreach($listes as $liste) { sql_insertq ('spip_auteurs_listes' , array('id_auteur'=>$id_auteur ,'id_liste'=>$liste ) ); } } // envoyer mail de confirmation if ( spiplistes_envoyer_mail ( $val['email'] , _T('spiplistes:confirmation_inscription') , _T('spiplistes:inscription_reponses_s' , array('s' => spiplistes_nom_site_texte ($lang)) ) ) ) { $contexte = array('message_ok'=>_T('spiplistes:demande_ok'),'editable' => false,); } else { $contexte = array('message_ok'=>_T('spiplistes:demande_ko'),'editable' => false,); } return ($contexte); }
/** * Repasse un courrier en mode redac (en general, un test d'envoi) * * Change le statut d'un courrier pour <em>en cours</em>. * @param int $id_courrier * @return boolean */ function spiplistes_courriers_statut_redac ($id_courrier) { spiplistes_courrier_modifier( $id_courrier , array( 'email_test' => '' , 'total_abonnes' => 0 , 'statut' => _SPIPLISTES_COURRIER_STATUT_REDAC ) ); spiplistes_debug_log(_SPIPLISTES_PREFIX_LOG.'repasse document en statut redac'); return(true); }
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 spiplistes_courrier_remplir_queue_envois ($id_courrier, $id_liste, $id_auteur = 0) { $id_courrier = intval($id_courrier); $id_liste = intval($id_liste); spiplistes_debug_log("API: remplir courrier: #$id_courrier, liste: #$id_liste, auteur: #$id_auteur"); if($id_courrier > 0) { $statut_q = sql_quote('a_envoyer'); $id_courrier_q = sql_quote($id_courrier); $sql_valeurs = ""; if($id_liste > 0) { // prendre la liste des abonnes a cette liste $ids_abos = spiplistes_listes_liste_abo_ids($id_liste); if(count($ids_abos)) { $sql_where_q = "(".implode(",", array_map("sql_quote", $ids_abos)).")"; $sql_result = sql_select('id_auteur', 'spip_auteurs', "id_auteur IN $sql_where_q", '' , array('id_auteur')); $ids_auteurs = array(); while($row = sql_fetch($sql_result)) { $ids_auteurs[] = intval($row['id_auteur']); } foreach($ids_abos as $ii) { // l'auteur n'existe plus, le desabonner ! if(!in_array($ii, $ids_auteurs)) { spiplistes_abonnements_auteur_desabonner($ii, 'toutes'); } } if(count($ids_auteurs) > 0) { // remplir la queue d'envois foreach($ids_auteurs as $ii) { $sql_valeurs .= "(".sql_quote($ii).",$id_courrier_q, $statut_q, NOW()),"; } $sql_valeurs = rtrim($sql_valeurs, ","); } } } else if(($id_auteur = intval($id_auteur)) > 0) { // envoi mail test $sql_valeurs = "(".sql_quote($id_auteur).",$id_courrier_q, $statut_q, NOW())"; } if(!empty($sql_valeurs)) { sql_insert( 'spip_auteurs_courriers' , "(" . "id_auteur,id_courrier,statut,maj" . ")" , $sql_valeurs ); $nb_etiquettes = spiplistes_courriers_en_queue_compter( array( "id_courrier=".sql_quote($id_courrier) , "statut=".sql_quote('a_envoyer') ) ); if($nb_etiquettes && ($id_liste > 0)) { spiplistes_courrier_modifier( $id_courrier , array('total_abonnes' => sql_quote($nb_etiquettes)) ); } return(true); } } else { spiplistes_debug_log("ERR: spiplistes_courrier_remplir_queue_envois($id_courrier, $id_liste, $id_auteur) valeur nulle ?"); } return (false); }
function exec_spiplistes_courriers_casier () { include_spip ('inc/acces'); include_spip ('inc/filtres'); include_spip ('inc/config'); include_spip ('inc/barre'); include_spip ('inc/mots'); include_spip ('inc/documents'); include_spip('inc/spiplistes_api_globales'); include_spip('inc/spiplistes_api'); include_spip('inc/spiplistes_api_presentation'); include_spip('inc/spiplistes_naviguer_paniers'); global $connect_statut , $connect_toutes_rubriques , $connect_id_auteur , $supp_dest ; /////////////////////////// // initialise les variables postées par formulaire (formulaire gerer) foreach(array( 'btn_confirmer_envoi', 'id_courrier', 'id_liste', 'id_auteur_test', 'btn_annuler_envoi' , 'statut' , 'btn_supprimer_courrier' , 'btn_arreter_envoi' // si valide, contient id du courrier ) as $key) { $$key = _request($key); } foreach(array('id_courrier', 'id_liste', 'id_auteur_test' , 'btn_supprimer_courrier', 'btn_arreter_envoi' ) as $key) { $$key = intval($$key); } $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))); $flag_modifiable = ($flag_admin || $flag_moderateur || $flag_createur); if($flag_modifiable) { // annuler le destinataire d'un courrier (retour de courrier_gerer) // repasse le courrier en mode 'redac' if($btn_annuler_envoi) { spiplistes_courrier_modifier( $id_courrier , array( 'email_test' => '' , 'id_liste' => 0 , 'total_abonnes' => 0 , 'statut' => _SPIPLISTES_COURRIER_STATUT_REDAC ) ); } // confirmer l'envoi d'un courrier if($btn_confirmer_envoi) { // passe le courrier directement a la meleuse if($id_liste >= 0) { // destinataire(s) = abonnés à une liste // si id_liste == 0, destinataire = adresse email de test spiplistes_courrier_supprimer_queue_envois('id_courrier', $id_courrier); spiplistes_courrier_remplir_queue_envois($id_courrier, $id_liste, $id_auteur_test); if($id_liste > 0) { spiplistes_debug_log('SEND id_courrier #'.$id_courrier . ' ON id_liste #'.$id_liste . ' BY id_auteur #'.$connect_id_auteur ); } else { spiplistes_debug_log('SEND id_courrier #'.$id_courrier . ' TO id_auteur #'.$id_auteur_test . ' TEST BY id_auteur #'.$connect_id_auteur ); } } spiplistes_courrier_statut_modifier($id_courrier, _SPIPLISTES_COURRIER_STATUT_ENCOURS); } // supprimer un courrier des cases if($btn_supprimer_courrier) { sql_delete("spip_courriers", "id_courrier=".sql_quote($btn_supprimer_courrier)." LIMIT 1"); spiplistes_courrier_supprimer_queue_envois('id_courrier', $btn_supprimer_courrier); } // arreter un courrier en cours d'envoi if($btn_arreter_envoi) { spiplistes_courrier_modifier( $btn_arreter_envoi , array( 'statut' => _SPIPLISTES_COURRIER_STATUT_STOPE , 'date_fin_envoi' => "NOW()" ) ); spiplistes_courrier_supprimer_queue_envois('id_courrier', $btn_arreter_envoi); } } // end if $flag_modifiable //////////////////////////////////// // PAGE CONTENU //////////////////////////////////// $titre_page = _T('spiplistes:casier_a_courriers'); // Permet entre autres d'ajouter les classes a' la page : <body class='$rubrique $sous_rubrique'> $rubrique = _SPIPLISTES_PREFIX; $sous_rubrique = "courriers_casier"; $commencer_page = charger_fonction('commencer_page', 'inc'); echo($commencer_page(_T('spiplistes:spiplistes') . " - " . $titre_page, $rubrique, $sous_rubrique)); // la gestion des courriers est réservée 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_naviguer_paniers_courriers(_T('spiplistes:aller_au_panier_'), true) . 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) ; $icone = _DIR_PLUGIN_SPIPLISTES_IMG_PACK.'courriers_listes-24.png'; $_skip_statut = "Sauter une table pour afficher chronos"; // Début de liste $listes_statuts = array( _SPIPLISTES_COURRIER_STATUT_ENCOURS, _SPIPLISTES_COURRIER_STATUT_REDAC , _SPIPLISTES_COURRIER_STATUT_READY , $_skip_statut , _SPIPLISTES_COURRIER_STATUT_AUTO, _SPIPLISTES_COURRIER_STATUT_PUBLIE , _SPIPLISTES_COURRIER_STATUT_VIDE, _SPIPLISTES_COURRIER_STATUT_IGNORE , _SPIPLISTES_COURRIER_STATUT_STOPE, _SPIPLISTES_COURRIER_STATUT_ERREUR ); $mes_statuts = ($statut && in_array($statut, $listes_statuts)) ? array($statut) : $listes_statuts; foreach($mes_statuts as $statut) { if($statut == $_skip_statut) { // liste des courriers programmés (des listes) $page_result .= "" . spiplistes_afficher_pile_messages() . "<br />" ; } else { $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) , 'courriers' , $statut , false , 'position' , _SPIPLISTES_EXEC_COURRIER_GERER ) ; } } echo($page_result); echo pipeline('affiche_milieu',array('args'=>array('exec'=>$sous_rubrique),'data'=>'')) , spiplistes_html_signature(_SPIPLISTES_PREFIX) , fin_gauche(), fin_page(); } // exec_spip_listes()
function spiplistes_lister_courriers_listes ( $titre_tableau , $image , $element='listes' , $statut='' , $apres_maintenant=false , $nom_position='position' , $exec , $id_auteur=0 , $pas=10 , $return=true) { include_spip('inc/spiplistes_api'); include_spip('inc/spiplistes_api_courrier'); $position = intval($_GET[$nom_position]); $pas = intval($pas); $id_auteur = intval($id_auteur); //$retour = _DIR_RESTREINT_ABS.self(); $clause_where = ''; ////////////////////////////////// // requete // construction de la requete SQL // sera (en partie) utilisee plus bas pour compter et pagination switch($element) { case 'abonnements': $sql_select = "listes.id_liste,listes.titre,listes.statut,listes.date,abos.id_auteur"; $sql_from = "spip_auteurs_listes AS abos LEFT JOIN spip_listes AS listes ON abos.id_liste=listes.id_liste"; $sql_where = "abos.id_auteur=".sql_quote($id_auteur); $sql_order = "listes.titre"; break; case 'courriers': $sql_select = "id_courrier, titre, date, date_debut_envoi,date_fin_envoi, nb_emails_envoyes,total_abonnes,email_test"; $sql_from = "spip_courriers"; $sql_where = "statut=".sql_quote($statut); $sql_order = "date"; break; case 'listes': if ( // pour lister les listes programmees dans un futur in_array($statut, explode(";", _SPIPLISTES_LISTES_STATUTS_OK)) && ($apres_maintenant == true) ) { $clause_where.= " AND (maj NOT BETWEEN 0 AND NOW())"; } $sql_select = "id_liste,titre,date,patron,maj,periode,statut"; $sql_from = "spip_listes"; $sql_where = "statut=".sql_quote($statut)." $clause_where"; $sql_order = "date"; break; } // $resultat_aff = sql_select($sql_select, $sql_from, $sql_where, '', array($sql_order." DESC "), $position.",".$pas); ////////////////////// if (($nb_ = @sql_count($resultat_aff)) > 0) { // titre du tableau $en_liste = "" . "<div class='liste'>\n" . "<div style='position: relative;'>\n" . "<div style='position: absolute; top: -12px; left: 3px;'>\n" . "<img src='$image' alt='' width='24' height='24' />\n" . "</div>\n" . "<div style='background-color:white; color:black; padding:3px; padding-left:30px; border-bottom:1px solid #444;' class='verdana2'>\n" . "<strong>\n" . $titre_tableau . "</strong>\n" . "</div>\n" . "</div>\n" . "<table width='100%' cellpadding='2' cellspacing='0' border='0'>\n" ; while ($row = sql_fetch($resultat_aff)) { $titre = $row['titre']; $date = $row['date']; switch ($element){ case 'abonnements': $id_row = $row['id_liste']; $url_row = generer_url_ecrire($exec, 'id_liste='.$id_row); $retour = self(); $url_desabo = generer_action_auteur(_SPIPLISTES_ACTION_CHANGER_STATUT_ABONNE , $row['id_auteur'].'-listedesabo-'.$id_row , $retour); spiplistes_debug_log('desabo: '.$url_desabo); spiplistes_debug_log('retour: '.$retour); $statut = $row['statut']; break; case 'courriers': $id_row = $row['id_courrier']; $nb_emails_envoyes = $row['nb_emails_envoyes']; $date_debut_envoi = $row['date_debut_envoi']; $date_fin_envoi = $row['date_fin_envoi']; $total_abonnes = $row['total_abonnes']; $email_test = $row['email_test']; $url_row = generer_url_ecrire($exec, 'id_courrier='.$id_row); break; case 'listes': $id_row = $row['id_liste']; $url_row = generer_url_ecrire($exec, 'id_liste='.$id_row); $patron = $row['patron']; $maj = $row['maj']; $periode = $row['periode']; break; } $en_liste.= "" . "<tr class='tr_liste'>\n" . "<td width='11' style='vertical-align:top;'>" . "<img src='".spiplistes_items_get_item("puce", $statut)."' alt=\"" . spiplistes_items_get_item("alt", $statut)."\" border='0' style='margin: 3px 1px 1px;' />" . "</td>" . "<td class='arial2'>\n" . "<div>\n" . "<a href=\"".$url_row."\" dir='ltr' style='display:block;'>\n" . spiplistes_calculer_balise_titre(extraire_multi($titre)) ; switch($element) { // si courriers, donne le nombre de destinataires case 'courriers': $nb_abo = ""; if(empty($email_test)) { $nb_abo = spiplistes_nb_destinataire_str_get($total_abonnes); } else { $nb_abo = _T('spiplistes:email_adresse'); } if($nb_abo) { $en_liste .= " <span class='spiplistes-legend-stitre' dir='ltr'>($nb_abo)</span>\n" ; } break; // si liste, donne le nombre d'abonnes case 'listes': //$nb_abo = spiplistes_nb_abonnes_liste($id_row); // affiche infos complementaires pour les listes $en_liste .= "" . " <span style='font-size:100%;color:#666666' dir='ltr'>\n" . "<span class='spiplistes-legend-stitre'>".spiplistes_nb_abonnes_liste_str_get($id_row)."</span>" . "<br />" . ( empty($patron) ? "<span class='texte-alerte'>" . _T('spiplistes:liste_sans_patron') . "</span>" : _T('spiplistes:patron_') . " <strong>".$patron."</strong>" ) ; if (!empty($date) && intval($date)) { if($periode) { $en_liste .= "<br />" . _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) ) ) ; } else { // inutile de preciser le statut, c'est dans le titre du bloc } $en_liste .= "" . "" . "<br />" . _T('spiplistes:Prochain_envoi_') . " : <strong>".affdate_heure($date)."</strong>" ; } $en_liste .= "" . "</span>\n" ; break; } ////////////////////// $en_liste .= "" . "</a>\n" . "</div>\n" . "</td>\n" . "<td width='120' class='arial1'>" ; switch($element) { case 'abonnements': $en_liste .= "" . "<a href=\"$url_desabo\" dir='ltr' style='display:block;'>"._T('spiplistes:desabonnement')."</a>\n" ; break; case 'courriers': // - date debut envoi si encour, sinon date de publication if(!in_array($statut, array(_SPIPLISTES_COURRIER_STATUT_REDAC, _SPIPLISTES_COURRIER_STATUT_READY))) { $en_liste .= "" . ( ($statut==_SPIPLISTES_COURRIER_STATUT_ENCOURS) ? _T('spiplistes:envoi_en_cours') : affdate_heure($date_fin_envoi) ) ; } break; } $en_liste .= "" . "</td>\n" . "<td width='50' class='arial1'><strong>"._T('info_numero_abbreviation').$id_row."</strong></td>\n" . "</tr>\n" ; } $en_liste.= "</table>\n"; ////////////////////// // Pagination si besoin switch ($element){ case 'abonnements': $sql_select = "COUNT(listes.id_liste) AS n"; $param = "&id_auteur=$id_auteur"; break; case 'courriers': $sql_select = "COUNT(id_courrier) AS n"; $param = "&statut=$statut"; break; case 'listes': $sql_select = "COUNT(id_liste) AS n"; $param = ""; break; } $sql_result = sql_select($sql_select, $sql_from, $sql_where); if( $sql_result && ($row = sql_fetch($sql_result)) && ($total = $row['n']) ) { $retour = _request('exec'); $en_liste .= spiplistes_afficher_pagination($retour, $param, $total, $position, $nom_position, $pas); } $en_liste .= "" . "</div>\n" . "<br />\n" ; } if($return) return($en_liste); else echo($en_liste); }
/** * 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()