* @license http://www.gnu.org/copyleft/gpl.html GNU General Public License * @version $Id: view.php 422 2006-11-08 20:56:28Z bobe $ */ define('IN_NEWSLETTER', true); require './pagestart.php'; $mode = !empty($_REQUEST['mode']) ? $_REQUEST['mode'] : ''; $action = !empty($_REQUEST['action']) ? $_REQUEST['action'] : ''; $page_id = !empty($_REQUEST['page']) ? intval($_REQUEST['page']) : 1; $sql_type = !empty($_REQUEST['type']) ? trim($_REQUEST['type']) : ''; $sql_order = !empty($_REQUEST['order']) ? trim($_REQUEST['order']) : ''; $mode_ary = array('liste', 'log', 'abonnes', 'download', 'iframe', 'export'); if (!in_array($mode, $mode_ary)) { Location('index.php'); } if (isset($_POST['cancel'])) { Location('view.php?mode=' . $mode); } $vararray = array('purge', 'edit', 'delete'); foreach ($vararray as $varname) { if (isset($_POST[$varname])) { $action = $varname; } } if (($mode != 'liste' || $mode == 'liste' && $action != 'add') && !$admindata['session_liste']) { $output->build_listbox(AUTH_VIEW); } else { if ($admindata['session_liste']) { $listdata = $auth->listdata[$admindata['session_liste']]; } } $output->build_listbox(AUTH_VIEW, false, './view.php?mode=' . $mode);
$autologin = !empty($_POST['autologin']) ? TRUE : FALSE; $session->login($login, md5($passwd), $autologin); if (!$session->is_logged_in) { $error = TRUE; $msg_error[] = $lang['Message']['Error_login']; } } else { if ($mode == 'logout') { if ($session->is_logged_in) { $session->logout($admindata['admin_id']); } $error = TRUE; $msg_error[] = $lang['Message']['Success_logout']; } } } // // L'utilisateur est connecté ? // Dans ce cas, on le redirige vers la page demandée, ou vers l'accueil de l'administration par défaut // if ($session->is_logged_in) { Location($redirect); } if (!empty($redirect)) { $output->addHiddenField('redirect', htmlspecialchars($redirect)); } $output->page_header(); $output->set_filenames(array('body' => 'login_body.tpl')); $output->assign_vars(array('TITLE' => $lang['Module']['login'], 'L_LOGIN' => $lang['Login'], 'L_PASS' => $lang['Password'], 'L_AUTOLOGIN' => $lang['Autologin'], 'L_LOST_PASSWORD' => $lang['Lost_password'], 'L_VALID_BUTTON' => $lang['Button']['valid'], 'S_HIDDEN_FIELDS' => $output->getHiddenFields())); $output->pparse('body'); $output->page_footer();
<?php require_once "../User/include/session.php"; if (!$session->logged_in) { Location("header : ../User/main.php"); exit(1); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Athletes</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <link href="style.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="js/cufon-yui.js"></script> <script type="text/javascript" src="js/arial.js"></script> <script type="text/javascript" src="js/cuf_run.js"></script> <style type="text/css"> <!-- .style1 {color: #000000} .style2 {color: #FFFFFF} .style3 {color: #FFFF00} .style4 {color: #FFFFCC} .style5 {color: #FF0000} .style7 {color: #000000; font-family: Arial, Helvetica, sans-serif; } --> </style> </head> <body> <!-- ?php include('includes/includes.php');? -->
<?php if (!cms_is_employee()) { log_msg(__FILE__, __LINE__, "Access denied"); Location("../access_denied.php"); } include "cms/db.php"; include "cms/forms.php"; include "cms/pr_template_def.rec"; $form_fields = array("server" => array("pr_template_def", "server", EDIT, OPTIONAL | CHOOSER), "address" => array("pr_template_def", "address", EDIT, OPTIONAL), "freq" => array("pr_template_def", "freq", EDIT, OPTIONAL), "count" => array("pr_template_def", "count", EDIT, OPTIONAL), "yellowtime" => array("pr_template_def", "yellowtime", EDIT, OPTIONAL), "redtime" => array("pr_template_def", "redtime", EDIT, OPTIONAL)); $cms = new DB_CMS(); while ($__act == "submit") { cms_leave_if_canceled(); foreach ($HTTP_GET_VARS as $key => $value) { $fields[$key] = $HTTP_GET_VARS[$key]; } if (!cms_fieldcheck($form_fields, $fields)) { break; } $cms->query("begin"); if ($fields['contact'] < 1) { $fields['contact'] = 1; } $q = sprintf("insert into pr_probe_template set server = '%s', address = '%s', freq = '%s', " . "redtime = '%s', yellowtime = '%s'", $fields['server'], $fields['address'], $fields['freq'], $fields['redtime'], $fields['yellowtime']); $cms->query($q); $pr_probe_templateid = $cms->insert_id(); $newstate = 'running'; cms_add_history($fields['contact'], "CREATE", "pr_probe_template", $pr_probe_templateid, $fields['setup'] . " for " . $fields['contacttext']); $cms->query("commit"); previous_location(); break;
} } // // Fin de la vérification // $language = $mode == 'login' || $mode == 'sendkey' ? $nl_config['language'] : $abodata['language']; load_settings(array('admin_lang' => $language)); switch ($mode) { case 'login': if (isset($_POST['submit'])) { $regkey = !empty($_POST['passwd']) ? trim($_POST['passwd']) : ''; $regkey_md5 = md5($regkey); if (!empty($regkey) && validate_pass($regkey) && ($abodata = check_login($email, $regkey_md5))) { if ($abodata['status'] == ABO_ACTIF) { $session->send_cookie('abo', serialize(array('email' => $abodata['email'], 'key' => $regkey_md5)), time() + 3600); Location('profil_cp.php'); } $output->message('Inactive_account'); } else { $error = TRUE; $msg_error[] = $lang['Message']['Error_login']; } } $output->page_header(); $output->set_filenames(array('body' => 'login_body.tpl')); $output->assign_vars(array('TITLE' => $lang['Module']['login'], 'L_LOGIN' => $lang['Account_login'], 'L_PASS' => $lang['Account_pass'], 'L_SENDKEY' => $lang['Lost_password'], 'L_VALID_BUTTON' => $lang['Button']['valid'], 'S_LOGIN' => htmlspecialchars($email))); $output->pparse('body'); break; case 'sendkey': if (isset($_POST['submit'])) { if ($abodata = check_login($email)) {
$newentry = system('ls ~/"' . $newentry . '"'); $parser = new plistParser(); $plist = $parser->parseFile($newentry); $xml = '<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Creation Date</key> <date>' . $plist['Creation Date'] . '</date> <key>Entry Text</key> <string>' . $plist['Entry Text'] . '</string> <key>Starred</key> <false/> <key>Tags</key> <array>' . Tags($text_tags) . '</array> ' . Location($user_latitude, $user_longitude) . ' <key>UUID</key> <string>' . $plist['UUID'] . '</string> </dict> </plist>'; file_put_contents($newentry, $xml); $entries++; if ($photo_file != '') { $photos++; } } echo "[1;32m[40m\nComplete!\nExported: " . $entries . ' notes and ' . $photos . " photos [0m\n"; function Tags($tags) { $tags = trim($tags); if ($tags == '') {
* You should have received a copy of the GNU General Public License * along with Wanewsletter; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * @package Wanewsletter * @author Bobe <*****@*****.**> * @link http://phpcodeur.net/wascripts/wanewsletter/ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License * @version $Id: admin.php 319 2006-02-23 00:34:14Z bobe $ */ define('IN_NEWSLETTER', true); require './pagestart.php'; $mode = !empty($_REQUEST['mode']) ? $_REQUEST['mode'] : ''; $admin_id = !empty($_REQUEST['admin_id']) ? intval($_REQUEST['admin_id']) : 0; if (isset($_POST['cancel'])) { Location('admin.php'); } if (isset($_POST['delete_user'])) { $mode = 'deluser'; } // // Seuls les administrateurs peuvent ajouter ou supprimer un utilisateur // if (($mode == 'adduser' || $mode == 'deluser') && $admindata['admin_level'] != ADMIN) { $output->redirect('index.php', 4); $message = $lang['Message']['Not_authorized']; $message .= '<br /><br />' . sprintf($lang['Click_return_index'], '<a href="' . sessid('./index.php') . '">', '</a>'); $output->message($message); } if ($mode == 'adduser') { $new_login = !empty($_POST['new_login']) ? trim(strip_tags($_POST['new_login'])) : '';
require WA_ROOTDIR . '/includes/class.auth.php'; $liste = !empty($_REQUEST['liste']) ? intval($_REQUEST['liste']) : 0; // //// Start session and load settings // $session = new Session(); $admindata = $session->check($liste); load_settings($admindata); // //// End // if (!defined('IN_LOGIN')) { if (!$admindata) { $redirect = '?redirect=' . basename(server_info('PHP_SELF')); $redirect .= server_info('QUERY_STRING') != '' ? rawurlencode('?' . server_info('QUERY_STRING')) : ''; Location('login.php' . $redirect); } $auth = new Auth(); // // Si la liste en session n'existe pas, on met à jour la session // if (!isset($auth->listdata[$admindata['session_liste']])) { $admindata['session_liste'] = 0; $sql = "UPDATE " . SESSIONS_TABLE . "\n\t\t\tSET session_liste = 0 \n\t\t\tWHERE session_id = '" . $session->session_id . "' \n\t\t\t\tAND admin_id = " . $admindata['admin_id']; if (!$db->query($sql)) { trigger_error('Impossible de mettre à jour le session_liste', ERROR); } } if ($secure && strtoupper(server_info('REQUEST_METHOD')) == 'POST') { $sessid = !empty($_POST['sessid']) ? trim($_POST['sessid']) : ''; if ($session->new_session || $sessid != $session->session_id) {
$changed_fields = cms_changed_fields($form_fields, $fields); foreach ($changed_fields as $value) { $oldvar = "org" . $value; $q = sprintf("insert into history set created = NOW(), creator = '%s', contact = '%s', " . "type = 'CHANGED', lookup = 'pr_template_def', lookupid = '%s', value = '%s'", $sess->u_id, $fields['contact'], $id, mysql_escape_string($value . " from '" . $fields[$oldvar] . "' to '" . $fields[$value] . "'")); echo $q; $cms->query($q); } $cms->query("commit"); previous_location(); } if (!isset($__act)) { $cms->query("select pr_template_def.*, server.id, server.name as servertext, purchase.contact " . "from pr_template_def, server, purchase " . "where pr_template_def.id = {$id} and server.id = pr_template_def.server and purchase.id = server.purchase"); if ($cms->num_rows() == 0) { $err_msg = "pr_template_def with id = {$id} not found"; log_msg(__FILE__, __LINE__, $err_msg); Location("../internal_error.php?msg={$err_msg}"); } $cms->next_record(); foreach ($form_fields as $key => $value) { $fields[$key] = $cms->f($key); } foreach ($extra_fields as $value) { $fields[$value] = $cms->f($value); } $contact = $cms->f('contact'); } title(_("Wijzig Ping Probe") . " " . $fields['name']); cms_err_msg(); form_start("form", "POST"); html_input("hidden", "id", $id, 8); html_input("hidden", "contact", $contact, 8);
<?php // saving objects to session to pick up next time $_SESSION['oUser'] = $oUser; // saving global 'sticky' attributes values to session setStickyAttributes($ogFuseaction->getName(), $ogFuseaction->getStickyAttributes()); // saving 'sticky' attributes values to session setStickyAttributes($oFuseaction->getName(), $oFuseaction->getStickyAttributes()); // assigning variables before display _assign_by_ref("application", $application); _assign_by_ref("fusebox", $fusebox); _assign_by_ref("attributes", $attributes); // relocating if exit fuseaction exists and no error or warning to show... messages appended to XFA URL if (_gotxfa() && !_gotErrors() && !_gotWarnings()) { // appending messages to URL to allow processing messages on 'landing' page $xfa = _getxfa(); // saving XFAs to session to pick up next time $_SESSION['globalXFA'] = $XFA; if (_gotMessages()) { $tmparrMsgs = _getMessages(); $tmparrMsgs = array_keys($tmparrMsgs); $xfa .= "&messages=" . join(",", $tmparrMsgs); } // moving to exit Location($xfa, 0); // 0 means no PHPSESSID } else { // saving XFAs to session to pick up next time $_SESSION['globalXFA'] = $XFA; }
<?php /* * SECURITY FUSEBOX PLUGIN v.4B1 * (c) Rodion Bykov roddyb@yandex.ru 2005 * Created on Nov 14, 2005 * Last modified on Oct 27, 2006 * * Please ask for written permission before redistribute or use this plugin in your project * I give no warranty or support of any kind for this class, neither guarantee its suitability to any purpose */ if ($attributes['fuseaction'] == $fusebox['xfaLogin'] || $attributes['fuseaction'] == $fusebox['xfaLogout'] || $attributes['fuseaction'] == $fusebox['xfaAccessDenied'] || $attributes['fuseaction'] == $fusebox['xfaLoginForm']) { $access = true; } else { $access = $oSecurityManager->getUserAccess($attributes['fuseaction']); } if (!$access) { // saving location to go after successful login _xfa($here, $fusebox['xfaLogin']); // saving XFAs to session to pick up next time $_SESSION['globalXFA'] = $XFA; // moving to exit Location($fusebox['urlBase'] . $myself . $fusebox['xfaAccessDenied'], 0); // 0 means no PHPSESSID }
<?php Location("header : index.php");
// Téléchargement d'un fichier joint // case 'download': require WA_ROOTDIR . '/includes/class.attach.php'; $file_id = !empty($_GET['fid']) ? intval($_GET['fid']) : 0; $attach = new Attach(); $attach->download_file($file_id); break; case 'cancel': if (isset($_POST['confirm'])) { $sql = "SELECT log_id, liste_id, log_status\n\t\t\t\tFROM " . LOG_TABLE . "\n\t\t\t\tWHERE log_id = " . $logdata['log_id']; if (!($result = $db->query($sql))) { trigger_error('Impossible d\'obtenir la liste d\'appartenance du log', ERROR); } if (!($logdata = $result->fetch()) || $logdata['log_status'] != STATUS_STANDBY) { Location('envoi.php'); } $sql = "SELECT COUNT(send) AS sended\n\t\t\t\tFROM " . ABO_LISTE_TABLE . "\n\t\t\t\tWHERE liste_id = {$logdata['liste_id']} AND send = 1"; if (!($result = $db->query($sql))) { trigger_error('Impossible d\'obtenir les données d\'envoi des log', ERROR); } $sended = $result->column('sended'); // // Suppression du fichier lock correspondant s'il existe // et qu'aucun envoi n'est en cours. // $lockfile = sprintf(WA_LOCKFILE, $logdata['liste_id']); $fp = fopen($lockfile, file_exists($lockfile) ? 'r+' : 'w'); if (!flock($fp, LOCK_EX | LOCK_NB)) { fclose($fp); $output->message('List_is_busy');
/** * launch_sending() * * Cette fonction est appellée soit dans envoi.php lors de l'envoi, soit * dans le fichier appellé originellement cron.php * * @param array $listdata Tableau des données de la liste concernée * @param array $logdata Tableau des données de la newsletter * @param array $supp_address Adresses de destinataires supplémentaires * * @return string */ function launch_sending($listdata, $logdata, $supp_address = array()) { global $nl_config, $db, $lang, $other_tags; // // On commence par poser un verrou sur un fichier lock, // il ne faut pas qu'il y ait simultanément plusieurs flôts d'envois // pour une même liste de diffusion. // $lockfile = sprintf(WA_LOCKFILE, $listdata['liste_id']); if (file_exists($lockfile)) { $isBeginning = false; $fp = fopen($lockfile, 'r+'); $supp_address = array(); // On en tient pas compte, ça l'a déjà été lors du premier flôt } else { $isBeginning = true; $fp = fopen($lockfile, 'w'); @chmod($lockfile, 0600); } if (!flock($fp, LOCK_EX | LOCK_NB)) { fclose($fp); return $lang['Message']['List_is_busy']; } if (filesize($lockfile) > 0) { // // L'envoi a planté au cours d'un "flôt" précédent. On récupère les éventuels // identifiants d'abonnés stockés dans le fichier lock et on met à jour la table // $abo_ids = fread($fp, filesize($lockfile)); $abo_ids = array_map('trim', explode("\n", trim($abo_ids))); if (count($abo_ids) > 0) { $abo_ids = array_unique(array_map('intval', $abo_ids)); $sql = "UPDATE " . ABO_LISTE_TABLE . "\n\t\t\t\tSET send = 1\n\t\t\t\tWHERE abo_id IN(" . implode(', ', $abo_ids) . ")\n\t\t\t\t\tAND liste_id = " . $listdata['liste_id']; if (!$db->query($sql)) { trigger_error('Impossible de mettre à jour la table des abonnés', ERROR); } } ftruncate($fp, 0); fseek($fp, 0); } // // Initialisation de la classe mailer // require WAMAILER_DIR . '/class.mailer.php'; $mailer = new Mailer(WA_ROOTDIR . '/language/email_' . $nl_config['language'] . '/'); if ($nl_config['use_smtp']) { $mailer->smtp_path = WAMAILER_DIR . '/'; $mailer->use_smtp($nl_config['smtp_host'], $nl_config['smtp_port'], $nl_config['smtp_user'], $nl_config['smtp_pass']); } $mailer->set_charset($lang['CHARSET']); $mailer->set_from($listdata['sender_email'], unhtmlspecialchars($listdata['liste_name'])); if ($listdata['return_email'] != '') { $mailer->set_return_path($listdata['return_email']); } // // On traite les données de la newsletter à envoyer // if (preg_match('/[\\x80-\\x9F]/', $logdata['log_subject']) || preg_match('/[\\x80-\\x9F]/', $logdata['log_body_text']) || preg_match('/[\\x80-\\x9F]/', $logdata['log_body_html'])) { if (TRANSLITE_INVALID_CHARS == false) { $logdata['log_subject'] = wan_utf8_encode($logdata['log_subject']); $logdata['log_body_text'] = wan_utf8_encode($logdata['log_body_text']); $logdata['log_body_html'] = wan_utf8_encode($logdata['log_body_html']); $lang['Label_link'] = wan_utf8_encode($lang['Label_link']); $mailer->set_charset('UTF-8'); } else { $logdata['log_subject'] = purge_latin1($logdata['log_subject'], true); $logdata['log_body_text'] = purge_latin1($logdata['log_body_text'], true); $logdata['log_body_html'] = purge_latin1($logdata['log_body_html']); } } $mailer->set_subject($logdata['log_subject']); $body = array(FORMAT_TEXTE => $logdata['log_body_text'], FORMAT_HTML => $logdata['log_body_html']); // // Ajout du lien de désinscription, selon les méthodes d'envoi/format utilisés // $link = newsletter_links($listdata); if ($listdata['use_cron'] || $nl_config['engine_send'] == ENGINE_BCC) { $body[FORMAT_TEXTE] = str_replace('{LINKS}', $link[FORMAT_TEXTE], $body[FORMAT_TEXTE]); $body[FORMAT_HTML] = str_replace('{LINKS}', $link[FORMAT_HTML], $body[FORMAT_HTML]); } // // On s'occupe maintenant des fichiers joints ou incorporés // Si les fichiers sont stockés sur un serveur ftp, on les rapatrie le temps du flot d'envoi // $total_files = count($logdata['joined_files']); $tmp_files = array(); require WA_ROOTDIR . '/includes/class.attach.php'; $attach = new Attach(); hasCidReferences($body[FORMAT_HTML], $refs); for ($i = 0; $i < $total_files; $i++) { $real_name = $logdata['joined_files'][$i]['file_real_name']; $physical_name = $logdata['joined_files'][$i]['file_physical_name']; $mime_type = $logdata['joined_files'][$i]['file_mimetype']; $error = FALSE; $msg = array(); $attach->joined_file_exists($physical_name, $error, $msg); if ($error) { $error = FALSE; continue; } if ($nl_config['use_ftp']) { $file_path = $attach->ftp_to_tmp($logdata['joined_files'][$i]); array_push($tmp_files, $file_path); } else { $file_path = WA_ROOTDIR . '/' . $nl_config['upload_path'] . $physical_name; } if (is_array($refs) && in_array($real_name, $refs)) { $embedded = TRUE; } else { $embedded = FALSE; } $mailer->attachment($file_path, $real_name, 'attachment', $mime_type, $embedded); } // // Récupération des champs des tags personnalisés // if (count($other_tags) > 0) { $fields_str = ''; foreach ($other_tags as $data) { $fields_str .= 'a.' . $data['column_name'] . ', '; } } else { $fields_str = ''; } // // Si on en est au premier flôt, on récupère également les adresses email // des administrateurs ayant activés l'option de réception de copie // if ($isBeginning) { $sql = "SELECT a.admin_email\n\t\t\tFROM " . ADMIN_TABLE . " AS a\n\t\t\t\tINNER JOIN " . AUTH_ADMIN_TABLE . " AS aa ON aa.admin_id = a.admin_id\n\t\t\t\t\tAND aa.cc_admin = " . TRUE; if (!($result = $db->query($sql))) { trigger_error('Impossible d\'obtenir la liste des fichiers joints', ERROR); } while ($email = $result->column('admin_email')) { array_push($supp_address, $email); } $result->free(); $supp_address = array_unique($supp_address); // Au cas où... } // // On récupère les infos sur les abonnés destinataires // $sql = "SELECT COUNT(a.abo_id) AS total\n\t\tFROM " . ABONNES_TABLE . " AS a\n\t\t\tINNER JOIN " . ABO_LISTE_TABLE . " AS al ON al.abo_id = a.abo_id\n\t\t\t\tAND al.liste_id = {$listdata['liste_id']}\n\t\t\t\tAND al.confirmed = " . SUBSCRIBE_CONFIRMED . "\n\t\t\t\tAND al.send = 0\n\t\tWHERE a.abo_status = " . ABO_ACTIF; if (!($result = $db->query($sql))) { trigger_error('Impossible d\'obtenir le nombre d\'adresses emails', ERROR); } $total_abo = $result->column('total'); if ($nl_config['emails_sended'] > 0) { $total_abo = min($total_abo, $nl_config['emails_sended']); } $sql = "SELECT a.abo_id, a.abo_pseudo, {$fields_str} a.abo_email, al.register_key, al.format\n\t\tFROM " . ABONNES_TABLE . " AS a\n\t\t\tINNER JOIN " . ABO_LISTE_TABLE . " AS al ON al.abo_id = a.abo_id\n\t\t\t\tAND al.liste_id = {$listdata['liste_id']}\n\t\t\t\tAND al.confirmed = " . SUBSCRIBE_CONFIRMED . "\n\t\t\t\tAND al.send = 0\n\t\tWHERE a.abo_status = " . ABO_ACTIF; if ($nl_config['emails_sended'] > 0) { $sql .= " LIMIT {$nl_config['emails_sended']} OFFSET 0"; } if (!($result = $db->query($sql))) { trigger_error('Impossible d\'obtenir la liste des adresses emails', ERROR); } $abo_ids = array(); $format = $listdata['liste_format'] != FORMAT_MULTIPLE ? $listdata['liste_format'] : false; if ($row = $result->fetch()) { if ($nl_config['engine_send'] == ENGINE_BCC) { fake_header(false); $abonnes = array(FORMAT_TEXTE => array(), FORMAT_HTML => array()); $abo_ids = array(FORMAT_TEXTE => array(), FORMAT_HTML => array()); do { $abo_format = !$format ? $row['format'] : $format; array_push($abo_ids[$abo_format], $row['abo_id']); array_push($abonnes[$abo_format], $row['abo_email']); fake_header(true); } while ($row = $result->fetch()); if ($listdata['liste_format'] != FORMAT_HTML) { $abonnes[FORMAT_TEXTE] = array_merge($abonnes[FORMAT_TEXTE], $supp_address); } if ($listdata['liste_format'] != FORMAT_TEXTE) { $abonnes[FORMAT_HTML] = array_merge($abonnes[FORMAT_HTML], $supp_address); } // // Tableau pour remplacer les tags par des chaines vides // Non utilisation des tags avec le moteur d'envoi en copie cachée // $tags_replace = array('NAME' => ''); if (count($other_tags) > 0) { foreach ($other_tags as $data) { $tags_replace[$data['tag_name']] = ''; } } if (count($abonnes[FORMAT_TEXTE]) > 0) { $mailer->set_address($abonnes[FORMAT_TEXTE], 'Bcc'); $mailer->set_format(FORMAT_TEXTE); $mailer->set_message($body[FORMAT_TEXTE]); $mailer->assign_tags($tags_replace); if (!$mailer->send()) { trigger_error(sprintf($lang['Message']['Failed_sending2'], $mailer->msg_error), ERROR); } fwrite($fp, implode("\n", $abo_ids[FORMAT_TEXTE]) . "\n"); } $mailer->clear_address(); if (count($abonnes[FORMAT_HTML]) > 0) { $mailer->set_address($abonnes[FORMAT_HTML], 'Bcc'); $mailer->set_format($listdata['liste_format']); $mailer->assign_tags($tags_replace); $mailer->set_message($body[FORMAT_HTML]); if ($listdata['liste_format'] == FORMAT_MULTIPLE) { $mailer->set_altmessage($body[FORMAT_TEXTE]); } if (!$mailer->send()) { trigger_error(sprintf($lang['Message']['Failed_sending2'], $mailer->msg_error), ERROR); } fwrite($fp, implode("\n", $abo_ids[FORMAT_HTML]) . "\n"); } $abo_ids = array_merge($abo_ids[FORMAT_TEXTE], $abo_ids[FORMAT_HTML]); } else { if ($nl_config['engine_send'] == ENGINE_UNIQ) { if (defined('IN_COMMANDLINE')) { require WA_ROOTDIR . '/contrib/Console/ProgressBar.php'; // // Initialisation de la barre de progression des envois // $bar = new Console_ProgressBar('Sending emails %percent% [%bar%] %current% of %max%', '=>', ' ', 80, $total_abo + count($supp_address), array('ansi_terminal' => ANSI_TERMINAL)); } else { fake_header(false); } if (($isPHP5 = version_compare(phpversion(), '5.0.0', '>=')) == true) { eval('$mailerText = clone $mailer;'); eval('$mailerHTML = clone $mailer;'); } else { $mailerText = $mailer; $mailerHTML = $mailer; } if (!$listdata['use_cron']) { $body[FORMAT_TEXTE] = str_replace('{LINKS}', $link[FORMAT_TEXTE], $body[FORMAT_TEXTE]); $body[FORMAT_HTML] = str_replace('{LINKS}', $link[FORMAT_HTML], $body[FORMAT_HTML]); } $mailerText->set_format(FORMAT_TEXTE); $mailerText->set_message($body[FORMAT_TEXTE]); $mailerHTML->set_format(FORMAT_HTML); if ($listdata['liste_format'] == FORMAT_MULTIPLE) { $mailerHTML->set_format(FORMAT_MULTIPLE); $mailerHTML->set_altmessage($body[FORMAT_TEXTE]); } $mailerHTML->set_message($body[FORMAT_HTML]); $supp_address_ok = array(); foreach ($supp_address as $address) { if ($listdata['liste_format'] != FORMAT_HTML) { array_push($supp_address_ok, array('format' => FORMAT_TEXTE, 'abo_pseudo' => '', 'abo_email' => $address, 'register_key' => '', 'abo_id' => -1)); } if ($listdata['liste_format'] != FORMAT_TEXTE) { array_push($supp_address_ok, array('format' => FORMAT_HTML, 'abo_pseudo' => '', 'abo_email' => $address, 'register_key' => '', 'abo_id' => -1)); } } $counter = 0; $sendError = 0; do { $counter++; $abo_format = !$format ? $row['format'] : $format; if ($abo_format == FORMAT_TEXTE) { if ($isPHP5 == true) { eval('$mailer = clone $mailerText;'); } else { $mailer = $mailerText; } } else { if ($isPHP5 == true) { eval('$mailer = clone $mailerHTML;'); } else { $mailer = $mailerHTML; } } if ($row['abo_pseudo'] != '') { $address = array($row['abo_pseudo'] => $row['abo_email']); } else { $address = $row['abo_email']; } $mailer->clear_address(); $mailer->set_address($address); // // Traitement des tags et tags personnalisés // $tags_replace = array(); if ($row['abo_pseudo'] != '') { $tags_replace['NAME'] = $abo_format == FORMAT_HTML ? $row['abo_pseudo'] : unhtmlspecialchars($row['abo_pseudo']); } else { $tags_replace['NAME'] = ''; } if (count($other_tags) > 0) { foreach ($other_tags as $data) { if (isset($row[$data['column_name']])) { if (!is_numeric($row[$data['column_name']]) && $abo_format == FORMAT_HTML) { $row[$data['column_name']] = htmlspecialchars($row[$data['column_name']]); } $tags_replace[$data['tag_name']] = $row[$data['column_name']]; continue; } $tags_replace[$data['tag_name']] = ''; } } if (!$listdata['use_cron']) { $tags_replace = array_merge($tags_replace, array('WA_CODE' => $row['register_key'], 'WA_EMAIL' => rawurlencode($row['abo_email']))); } $mailer->assign_tags($tags_replace); // envoi if (!$mailer->send()) { $sendError++; } if ($row['abo_id'] != -1) { array_push($abo_ids, $row['abo_id']); fwrite($fp, "{$row['abo_id']}\n"); } if (defined('IN_COMMANDLINE')) { $bar->update($counter); if (SEND_DELAY > 0 && $counter % SEND_PACKET == 0) { sleep(SEND_DELAY); } } else { fake_header(true); } } while (($row = $result->fetch()) || ($row = array_pop($supp_address_ok)) != null); // // Aucun email envoyé, il y a manifestement un problème, on affiche le message d'erreur // if ($sendError == $total_abo) { flock($fp, LOCK_UN); fclose($fp); unlink($lockfile); trigger_error(sprintf($lang['Message']['Failed_sending2'], $mailer->msg_error), ERROR); } } else { trigger_error('Unknown_engine', ERROR); } } $result->free(); } else { if ($isBeginning) { // // Aucun abonné dont le champ send soit positionné à 0 et nous sommes au // début de l'envoi. Cette liste ne comporte donc pas encore d'abonné. // return $lang['Message']['No_subscribers']; } } // // Si l'option FTP est utilisée, suppression des fichiers temporaires // if ($nl_config['use_ftp']) { foreach ($tmp_files as $filename) { $attach->remove_file($filename); } } unset($tmp_files); $no_send = $sended = 0; if (!$db->ping()) { // // L'envoi a duré trop longtemps et la connexion au serveur SQL a été perdue // if (SQL_DRIVER == 'mysqli') { trigger_error("La connexion à la base de données a été perdue.<br />\nVous devriez mettre l'option PHP mysqli.reconnect à On dans le php.ini,<br />\npour permettre la reconnexion automatique au serveur.", ERROR); } else { trigger_error("La connexion à la base de données a été perdue", ERROR); } } if (count($abo_ids) > 0) { $sql = "UPDATE " . ABO_LISTE_TABLE . "\n\t\t\tSET send = 1\n\t\t\tWHERE abo_id IN(" . implode(', ', $abo_ids) . ")\n\t\t\t\tAND liste_id = " . $listdata['liste_id']; if (!$db->query($sql)) { trigger_error('Impossible de mettre à jour la table des abonnés (connexion au serveur sql perdue)', ERROR); } } $sql = "SELECT COUNT(*) AS num_dest, al.send\n\t\tFROM " . ABO_LISTE_TABLE . " AS al\n\t\t\tINNER JOIN " . ABONNES_TABLE . " AS a ON a.abo_id = al.abo_id\n\t\t\t\tAND a.abo_status = " . ABO_ACTIF . "\n\t\tWHERE al.liste_id = {$listdata['liste_id']}\n\t\t\tAND al.confirmed = " . SUBSCRIBE_CONFIRMED . "\n\t\tGROUP BY al.send"; if (!($result = $db->query($sql))) { trigger_error('Impossible d\'obtenir le nombre d\'envois restants à faire', ERROR); } while ($row = $result->fetch()) { if ($row['send'] == 1) { $sended = $row['num_dest']; } else { $no_send = $row['num_dest']; } } $result->free(); ftruncate($fp, 0); flock($fp, LOCK_UN); fclose($fp); if ($no_send > 0) { $message = sprintf($lang['Message']['Success_send'], $nl_config['emails_sended'], $sended, $sended + $no_send); if (!defined('IN_COMMANDLINE')) { if (!empty($_GET['step']) && $_GET['step'] == 'auto') { Location("envoi.php?mode=progress&id={$logdata['log_id']}&step=auto"); } $message .= '<br /><br />' . sprintf($lang['Click_resend_auto'], '<a href="' . sessid('./envoi.php?mode=progress&id=' . $logdata['log_id'] . '&step=auto') . '">', '</a>'); $message .= '<br /><br />' . sprintf($lang['Click_resend_manuel'], '<a href="' . sessid('./envoi.php?mode=progress&id=' . $logdata['log_id']) . '">', '</a>'); } } else { unlink($lockfile); $db->beginTransaction(); $sql = "UPDATE " . LOG_TABLE . "\n\t\t\tSET log_status = " . STATUS_SENDED . ",\n\t\t\t\tlog_numdest = {$sended}\n\t\t\tWHERE log_id = " . $logdata['log_id']; if (!$db->query($sql)) { trigger_error('Impossible de mettre à jour la table des logs', ERROR); } $sql = "UPDATE " . ABO_LISTE_TABLE . "\n\t\t\tSET send = 0\n\t\t\tWHERE liste_id = " . $listdata['liste_id']; if (!$db->query($sql)) { trigger_error('Impossible de mettre à jour la table des abonnés', ERROR); } $sql = "UPDATE " . LISTE_TABLE . "\n\t\t\tSET liste_numlogs = liste_numlogs + 1\n\t\t\tWHERE liste_id = " . $listdata['liste_id']; if (!$db->query($sql)) { trigger_error('Impossible de mettre à jour la table des listes', ERROR); } $db->commit(); $message = sprintf($lang['Message']['Success_send_finish'], $sended); } return $message; }