Beispiel #1
0
 * @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);
Beispiel #2
0
        $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();
Beispiel #3
0
<?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;
Beispiel #5
0
    }
}
//
// 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)) {
Beispiel #6
0
    $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 "\nComplete!\nExported: " . $entries . ' notes and ' . $photos . " photos \n";
function Tags($tags)
{
    $tags = trim($tags);
    if ($tags == '') {
Beispiel #7
0
 * 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'])) : '';
Beispiel #8
0
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);
Beispiel #10
0
<?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
}
Beispiel #12
0
<?php

Location("header : index.php");
Beispiel #13
0
 // 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');
Beispiel #14
0
 /**
  * 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&amp;id=' . $logdata['log_id'] . '&amp;step=auto') . '">', '</a>');
             $message .= '<br /><br />' . sprintf($lang['Click_resend_manuel'], '<a href="' . sessid('./envoi.php?mode=progress&amp;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;
 }