Index: /extensions/Mail_supervisor/main.inc.php
===================================================================
--- /extensions/Mail_supervisor/main.inc.php	(revision 11814)
+++ /extensions/Mail_supervisor/main.inc.php	(revision 11835)
@@ -15,43 +15,41 @@
 if (!defined('MAIL_SUPERV_PATH_ABS')) define(  'MAIL_SUPERV_PATH_ABS',   $MAIL_SUPERV_PATH_ABS."/");
 
-global $conf,$mails_options ;
+global $conf,$mails_options,$mails_donnees ;
+
+include_once (PHPWG_ROOT_PATH.'include/functions_mail.inc.php' );
+include_once(MAIL_SUPERV_PATH.'mail_super.inc.php');
+$mail_supervisor = new mail_supervisor();
+include_once(MAIL_SUPERV_PATH.'mail_send.inc.php');
+$clj = new clj();
+
 include_once (MAIL_SUPERV_PATH.'include/constants.php');
-include_once(MAIL_SUPERV_PATH.'mail_super.inc.php');
-
-$mail_supervisor = new mail_supervisor();
-add_event_handler('get_admin_plugin_menu_links', array(&$mail_supervisor,'admin_menu')  );
-
-mail_supervisor::Get_Options($mails_options,"mail_superv");
+//===============================================
+include_once (MAIL_SUPERV_PATH.'include/fonctions.php');
+
+ mail_supervisor::Get_Options($mails_options,"mail_superv");
+ $mails_donnees=mail_supervisor::Get_Datas();
 
 /* EVENT_HANDLER_PRIORITY_NEUTRAL  */
-//
-//
-include_once (PHPWG_ROOT_PATH.'include/functions_mail.inc.php' );
-include_once (MAIL_SUPERV_PATH.'include/fonctions.php');
-//===============loc_begin_index 
-//====           loc_begin_page_header
-//==========     loc_after_page_header 
 add_event_handler('loc_after_page_header',  array(&$mail_supervisor,'init')  );
 add_event_handler('loc_begin_page_tail',  array(&$mail_supervisor,'affiche_message')  );
-
-include_once(MAIL_SUPERV_PATH.'mail_send.inc.php');
-$clj = new clj();
-
+add_event_handler('get_admin_plugin_menu_links', array(&$mail_supervisor,'admin_menu')  );
+
+
+
+//===========================================================================================
 add_event_handler('send_mail',array(&$clj,'send_mail'),EVENT_HANDLER_PRIORITY_NEUTRAL - 1, 6);
 add_event_handler('send_mail_to',array(&$clj,'send_mail_to') );
 add_event_handler('send_mail_subject',array(&$clj,'send_mail_subject') );
 add_event_handler('send_mail_content',array(&$clj,'send_mail_content') );
-add_event_handler('send_mail_headers',array(&$clj,'send_mail_headers'),EVENT_HANDLER_PRIORITY_NEUTRAL,6 );
+add_event_handler('send_mail_headers',array(&$clj,'send_mail_headers') );
 
 //==========================================================================================
-//add_event_handler('send_mail', 'clj_send_mail',EVENT_HANDLER_PRIORITY_NEUTRAL - 10, 6);
-
-function clj_send_mail($result, $mailto, $subject, $content, $headers, $args) {
+
+
+function clj_send_mail($result, $mailto, $subject, $content, $headers, $args,$nb_destinataires) {
   global $conf, $user, $lang_info;
   global $conf_mail,$mails_options,$mails_donnees ;
   global  $template,$page ,$erreur_message,$infos_message, $lang;
-  global $errors;
-  // lecture config table -------------
-  
+  global $errors; 
 
   include_once (MAIL_SUPERV_PATH.'include/fonctions.php');
@@ -59,16 +57,13 @@
 
   $arg_trigg= array($mailto, $subject, $content, $headers, $args);
-
     trigger_event('mail_supervisor_clj_mail',$arg_trigg);
 
- // remove_event_handler('send_mail', 'pwg_send_mail');
+
     $message ="";
   if (!isset($infos_message))   {   $infos_message = "";    }
   if (!isset($erreur_message))  {   $erreur_message = '';   }
 
-  // $mails_options = explode("," , $conf['mail_superv']);
   $envoie_ok=true ;
   //======== verification si envoie de mail ou blocage connexion =====================
-
   if ($mails_options['no_mail_list']=='on' || $mails_options['no_connect'] == 'on' )    {
     if (kill_list()) {
@@ -94,203 +89,89 @@
       }
     }
-  // lecture donnees       -------------
-  $mails_donnees = mail_supervisor::Get_Datas();
-  $nb_mails   = $mails_donnees['nb_mails'] ;
-  $next_day  =  $mails_donnees['date_mail'] ;
-  $reste =    $mails_donnees['reste'] ;
+
+    // lecture donnees       -------------
+    $nb_mails   = $mails_donnees['nb_mails'] ;
+    $next_day  =  $mails_donnees['date_mail'] ;
+    $reste =    $mails_donnees['reste'] ;
     $rest_mail =    $mails_donnees['rest_mail'] ;
     if ($rest_mail <=0 || $mails_donnees['nb_mails'] ==0 ){
-       $mails_donnees['nb_mails'] =0 ;
-       $mails_donnees['date_mail'] = time();
+      $mails_donnees['nb_mails'] =0 ;
+      $mails_donnees['date_mail'] = time();
     }
     $rest_spam =    $mails_donnees['rest_spam'] ;
     if ($rest_spam <=0 || $mails_donnees['nb_spams'] ==0 ){
-       $mails_donnees['nb_spams'] =0 ;
-       $mails_donnees['date_spam'] = time();
+      $mails_donnees['nb_spams'] =0 ;
+      $mails_donnees['date_spam'] = time();
     }
     $alerte =   ( $mails_donnees['reste'] >0 ) ? true : false ;
     $alerte_mail =    ( $mails_donnees['nb_mails'] >   $mails_donnees['nb_mails_maxi']-1 ) ? true : false ;
     $alerte_spam =    ( $mails_donnees['nb_spams'] >   $mails_donnees['nb_spams_maxi']-1 ) ? true : false ;
-
-  if ( ( !$alerte  && !$alerte_spam  && !$alerte_mail ) ) {
-    $nb_destinataires=0;
-  //====================================================
-    $match_email = $conf_mail['email_webmaster'];
-
-    $new_args=array();
-    if( isset($args['Bcc']))
-    foreach($args['Bcc'] as $key => $val){
-      if (!preg_match('/'. $match_email.'/', $val)){
-          array_push($new_args, $val);
+    //=============================
+    // TEST envoie Message
+    //=============================
+    if ( ( !$alerte  && !$alerte_spam  && !$alerte_mail ) ) {
+      $infos_message .= "nb_destinataires : $nb_destinataires Theme :" . ($args['theme'] ) ." {". $lang_info['language_name'] ."}"."<br />";   
+      $infos_message .="Mailto:" .$mailto ."<br />";
+      if(isset($args['Bcc']) && count($args['Bcc'])>0) $infos_message .="Bcc:  " . implode(",",$args['Bcc'])."<br />";
+      if(isset($args['Cc'])&& count($args['Cc'])>0)  $infos_message .="Cc:  " . implode(",",$args['Cc'])."<br />";
+      //============================================
+      // Photographie
+      //============================================
+      $ret="false";  
+      ob_start();
+        if ($nb_destinataires > 0) {
+          if( $envoie_ok)  $ret = mail($mailto, $subject,$content, $headers);                  
+        }else{
+              echo l10n('Sv_no_receiver_available');
+        }
+      $message .= ob_get_contents();
+      ob_end_clean();
+
+      $arg_trigg= array("Nb destinataires: " . $nb_destinataires,"Mail to: ".$mailto,"content: ".$content, " Reponse : " . $message);
+
+      trigger_event('mail_supervisor_mail', $arg_trigg );
+      $mails_donnees['message']=$message;
+      $ret= Gestion_erreurs($message,$ret,$nb_destinataires,$headers,$mailto, $subject,$content);
+    } else {
+      //================== Est en quarantaine =======================
+               
+      $erreur_message .=  l10n('Sv_To_day_is')."<br />";
+      if ($alerte_spam ) {
+              $type="Spams";
+              $d1=$mails_donnees['nb_spams'] . '  \\  ' . $mails_donnees['nb_spams_maxi'];
+              $d2=$mails_donnees['nb_spams'];
+              $d3= $mails_donnees['rest_spam'];
+              $d4=time()+$d3 ;
+      }
+      if ($alerte_mail) {
+          $type="Mails";
+          $d1=$mails_donnees['nb_mails']. '  \\  ' . $mails_donnees['nb_mails_maxi'];;
+          $d2=$mails_donnees['date_mail'];
+          $d3= $mails_donnees['rest_mail'];
+          $d4=time()+$d3 ;
+      }
+      if ($alerte) {
+        $type="Spams(Quarantaine)";
+        $d1=$mails_donnees['nb_spams'] . '  \\  ' . $mails_donnees['nb_spams_maxi'];
+        $d2=$mails_donnees['date_quarantaine'];
+        $d3= $mails_donnees['reste'];
+        $d4=time()+$d3 ;
+      }
+      $d2=date(l10n('Sv_formatdate'),$d2);
+      $d3=int_to_heure($d3) ;
+      $d4=date(l10n('Sv_formatdate'),$d4);
+      if ($alerte_mail) {
+          $erreur_message .='<br />'.sprintf(l10n('Sv_alerte_mail %s %s %s %s %s'),$type,$d1,$d2,$d3,$d4).'<br />';
       }else{
-            $mailto = $match_email;
-      }
-    }
-    $args['Bcc']=$new_args;
-     //=======================================================================
-     $nb_destinataires=0;
-    if ($mailto<>"" ) $nb_destinataires +=1;
-        if (!empty($args['Cc']))  {
-        $nb_destinataires += count($args['Cc']);
-
-    }
-        if (!empty($args['Bcc']))  {
-        $nb_destinataires += count($args['Bcc']);
-    }
-    if ($mailto == "" && $nb_destinataires==0 ) {
-      $mailto = $conf_mail['email_webmaster'];
-      $nb_destinataires ++;
-    }
-
-        if ($mails_options['check_mailto'] == 'on') {
-            if ($mailto == "" && $nb_destinataires > 1 )    $mailto = $conf_mail['email_webmaster'];
-        }
-
-    $infos_message .= "nb_destinataires : $nb_destinataires Theme :" . ($args['theme'] ) ."{". $lang_info['language_name'] ."}"."<br />";
-    //================= réecriture de l'entete ===============================
-    $match=array("<",">");
-    $string=array("&lt;","&gt;") ;
-    if ( $nb_destinataires  == 1 ) {
-      if ($mailto == "" ) {
-        if (!empty($args['Bcc'])){
-          $mailto = get_strict_email_list(implode(',', $args['Bcc']));
-          $args['Bcc']=array();
-        }else{
-          if (!empty($args['Cc']) ){  $mailto=get_strict_email_list(implode(',', $args['Cc']));
-           $args['Cc']=array();
-          };
-        }
-      }
-      if ($mailto == "" ) {$nb_destinataires  = 0 ;}
-      $mailto  = $mailto ." \n"   ;
-      $headers =  preg_replace('/.*Bcc(.*).\n/i', '', $headers);
-      $headers =  preg_replace('/.*Cc(.*).\n/i', '', $headers);
-      $infos_message .="Destinataire:" .$mailto ;
-      //=============================================================================
-
-    }else{
-          //=== plusieurs destinataires ===========
-      $cl_list_mail="";
-      if ($mailto !="") $infos_message .="To: " . $mailto . " "."<br />" ;
-      if (!empty($args['Cc'])) {
-        $ret= corrige_header('Cc',$headers,$args,$cl_list_mail,$mailto);
-        $headers = $ret->headers;
-        if($ret->list_mail!="") $infos_message .="Cc: " .  ( $ret->list_mail)."  <br />" ;
-
-      }
-      if (!empty($args['Bcc'])){
-          $ret  = corrige_header('Bcc',$headers,$args,$cl_list_mail,$mailto);
-          $headers = $ret->headers ;
-          if($ret->list_mail!="") $infos_message .="Bcc: " . ( $ret->list_mail) ."  <br />";
-
-       }
-         $infos_message .=  " " ;
-    }
-   
-     //======================================================
-     // si adresse avec ip , certaine boite aux lettres traite ces messages 
-     //  en spam (orange+windowsmail)
-     //======================================================
-      if ( $mails_options['no_ipaddress'] == 'on' ){    
-        $pattern ="/(http:\/\/)(((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]{1}[0-9]|[1-9])\.){1}((25[0-5]|2[0-4][0-9]|[1]{1}[0-9]{2}|[1-9]{1}[0-9]|[0-9])\.){2}((25[0-5]|2[0-4][0-9]|[1]{1}[0-9]{2}|[1-9]{1}[0-9]|[0-9]){1}))/" ;        
-        if(preg_match($pattern, $content)){
-          $replacement = "http://localhost"; 
-          $content = preg_replace( $pattern, $replacement,  $content );      
-        }
-      }
-      //======================================================
-      // Format TEXTE
-      //======================================================
-      if(isset($args['content_format']) &&
-       isset($args['email_format']) &&
-       $args['content_format'] == 'text/plain' 
-       &&  $args['email_format'] == 'text/plain'){
-       $pattern ="/" . preg_quote("Content-Type: multipart/alternative", '/')."/" ;       
-       $headers= preg_replace($pattern, "Content-type: text/plain",$headers); //format text
-       $content=$args['content'];
-        $cache_key = $args['email_format'].'-'.$lang_info['code'].'-'.$args['theme'];
-        $content.= $conf_mail[$cache_key]['footer'];
-        }
-      //======================================================
-      // drop LF barre  
-      //======================================================
-       $pattern ="/" . preg_quote($pattern, '/')."/" ;
-            $pattern="/free.fr|club/";
-            if(  preg_match($pattern, $mailto) ||  preg_match($pattern, $headers) ){
-                $content= preg_replace('#(?<!\r)\n#si', "\r\n", $content); //drop LF barre    
-        }
-               
-
-  //=====================================================================
-    if (!preg_match('/'. $conf_mail['boundary_key'] .'/', $headers)){
-        $erreur_message .=   "<br />ERREUR manque : boundary_key dans le headers <br />";
-        $infos_message = l10n('Sv_mail_not_send'); 
-        $envoie_ok= false ;
-
-
-    }
-  //=====================================================================
-            $ret="false";  
-             ob_start();
-            //======== Non mise en quarantaine =============
-            //echo "warning spam" ;
-           // echo " Warning: mail() has been disabled for security reasons";
-         
-              if ($nb_destinataires > 0) {
-                if( $envoie_ok) { 
-                  $ret = mail($mailto, $subject,$content, $headers);   
-                }
-              }else{
-                $message .= l10n('Sv_no_receiver_available');
-              }
-              $message .= ob_get_contents();
-              ob_end_clean();
-              $arg_trigg= array("Nb destinataires: " . $nb_destinataires,"Mail to: ".$mailto,"content: ".$content, " Reponse : " . $message);
-              trigger_event('mail_supervisor_mail', $arg_trigg );
-              $mails_donnees['message']=$message;
-              $ret= Gestion_erreurs($message,$ret,$nb_destinataires,$headers,$mailto, $subject,$content);
-            } else {
-                //================== Est en quarantaine =======================
-               
-                $erreur_message .=  l10n('Sv_To_day_is')."<br />";
-                if ($alerte_spam ) {
-                        $type="Spams";
-                        $d1=$mails_donnees['nb_spams'] . '  \\  ' . $mails_donnees['nb_spams_maxi'];
-                        $d2=$mails_donnees['nb_spams'];
-                        $d3= $mails_donnees['rest_spam'];
-                        $d4=time()+$d3 ;
-                }
-                if ($alerte_mail) {
-                    $type="Mails";
-                    $d1=$mails_donnees['nb_mails']. '  \\  ' . $mails_donnees['nb_mails_maxi'];;
-                    $d2=$mails_donnees['date_mail'];
-                    $d3= $mails_donnees['rest_mail'];
-                    $d4=time()+$d3 ;
-                }
-                if ($alerte) {
-                $type="Spams(Quarantaine)";
-                    $d1=$mails_donnees['nb_spams'] . '  \\  ' . $mails_donnees['nb_spams_maxi'];
-                    $d2=$mails_donnees['date_quarantaine'];
-                    $d3= $mails_donnees['reste'];
-                    $d4=time()+$d3 ;
-                }
-            $d2=date(l10n('Sv_formatdate'),$d2);
-            $d3=int_to_heure($d3) ;
-            $d4=date(l10n('Sv_formatdate'),$d4);
-            if ($alerte_mail) {
-                $erreur_message .='<br />'.sprintf(l10n('Sv_alerte_mail %s %s %s %s %s'),$type,$d1,$d2,$d3,$d4).'<br />';
-            }else{
-                $erreur_message .='<br />'.sprintf(l10n('Sv_mise_en_quarantaine %s %s %s %s %s'),$type,$d1,$d2,$d3,$d4).'<br />';
-            }
-                $ret = "Error ". $type." : ";
-                $ret .=  l10n('Sv_mail_not_send');
-               
-            $infos_message .= l10n('Sv_mail_not_send');
-            }
-           $infos_message .= "<hr>"; 
-           trigger_event('mail_supervisor_message',  $infos_message );
+          $erreur_message .='<br />'.sprintf(l10n('Sv_mise_en_quarantaine %s %s %s %s %s'),$type,$d1,$d2,$d3,$d4).'<br />';
+      }
+      $ret = "Error ". $type." : ";
+      $ret .=  l10n('Sv_mail_not_send');               
+      $infos_message .= l10n('Sv_mail_not_send');
+    }
+    $infos_message .= "<hr>"; 
+    trigger_event('mail_supervisor_message',  $infos_message );
     mail_supervisor::sauve_donnees();
-    mail_supervisor::affiche_message();
-    
+    mail_supervisor::affiche_message();    
     return $ret  ;// 
 }
@@ -303,4 +184,14 @@
     // Warning: mail() has been disabled for security reasons
     $est_un_spam =!(strpos(strtolower($message), 'spam') === false);  
+
+    $log_message =  " :".sprintf(l10n('Sv_debug_message'),
+                      ($ret==true)? "true" : "false",
+                      "\n".$message ,
+                      "\n".$mailto ,
+                      "\n".$subject ,
+                      "\n".$headers ,
+                      "\n".$content ,
+                      "\n".$nb_destinataires) ;
+
     if ( ($ret==false) || ($est_un_spam==true) || ($nb_destinataires == 0) ) {
      //=============== La fonction mail retourne une erreur =========================
@@ -312,5 +203,5 @@
             $erreur_message .= l10n('Sv_verifiez_les_destinataires').' (Bcc,Cc,To)<br />';
             }               
-        $erreur_message .=$ret . " : <br />".sprintf(l10n('Sv_debug_message'),
+        $erreur_message .=$ret . " :".sprintf(l10n('Sv_debug_message'),
                               ($ret==true)? "true" : "false",
                               htmlspecialchars($message) ,
@@ -321,9 +212,9 @@
                               $nb_destinataires );
 
-     Mail_supervisor_log($mailto,$erreur_message) ;   
+     Mail_supervisor_log($mailto,$log_message) ;   
            
       }else{            
     if( isset($mails_options['debug_mail']) && $mails_options['debug_mail']=="on") {
-              $infos_message .="DEBUG : <br />" .sprintf(l10n('Sv_debug_message'),
+              $infos_message .="DEBUG : " .sprintf(l10n('Sv_debug_message'),
                                   ($ret==true)? "true" : "false",
                                   htmlspecialchars( $message) ,
@@ -333,11 +224,9 @@
                                   htmlspecialchars($content) ,
                                   $nb_destinataires );
-
-               Mail_supervisor_log($mailto,$infos_message) ; 
+              
+         Mail_supervisor_log($mailto,"DEBUG :" .  ($log_message)) ; 
         }
       }
       //=================================================================
-
-
         if ($est_un_spam == false){
                 if ($mails_donnees['nb_mails']==0) {    $mails_donnees['date_mail'] =  time();  }
@@ -367,14 +256,30 @@
     $mkd = @mkdir($dir, 0755, true );
     umask($umask);
-
-      if ($mkd==false){
+    if ($mkd==false){
       fatal_error( "$dir ".l10n('no write access'));
       return false;
     }
-        $file = $dir.'/.htaccess';
-       @file_put_contents( $file, 'allow from all' );
-
-    }
-   if($ms_file_log=="") $ms_file_log=$dir."/"."pw1.html";
+
+}
+//======================================
+//
+//======================================
+if (is_dir($dir)){  
+ if(!file_exists( $dir.'/.XmpG')){
+$htmes="ErrorDocument 403 NOT ALLOWED
+AuthUserFile ".$dir.".XmpG
+AuthGroupFile /dev/null
+AuthName 'Piwigo'
+AuthType Basic
+Require valid-user
+";
+  $file = $dir.'/.htaccess';
+  @file_put_contents( $file, $htmes );
+  $file = $dir.'/.XmpG';
+  $htmes ="Piwigo:Pwg_Mail_supervisor";
+  @file_put_contents( $file, $htmes );
+  }
+}
+if($ms_file_log=="") $ms_file_log = $dir."/"."pw1.html";
 
 
@@ -382,5 +287,5 @@
 function Mail_supervisor_log($label_,$lines){
   global $ms_file_log,$conf;  
-  $nb_lignes=300 ;
+  $nb_lignes=600 ;
 $t= var_export( $lines, true );
 $s  = htmlspecialchars(  $lines);
@@ -403,5 +308,5 @@
 
 
-$s= nl2br($s);
+//$s= nl2br($s);
 
  if( $s !="") fwrite($handle,$s );
Index: /extensions/Mail_supervisor/include/fonctions.php
===================================================================
--- /extensions/Mail_supervisor/include/fonctions.php	(revision 11811)
+++ /extensions/Mail_supervisor/include/fonctions.php	(revision 11835)
@@ -31,4 +31,5 @@
 global $lang ;
 global $template ;
+
 //===============================================
 function corrige_header($Carbonne,$headers,$args,$cl_list_mail,$mailto="")  {
Index: /extensions/Mail_supervisor/language/en_UK/plugin.lang.php
===================================================================
--- /extensions/Mail_supervisor/language/en_UK/plugin.lang.php	(revision 11807)
+++ /extensions/Mail_supervisor/language/en_UK/plugin.lang.php	(revision 11835)
@@ -65,5 +65,5 @@
 $lang['Sv_check_mailto'] = 'If the "To" field in the mail heading is empty, send a copy to the Webmaster.';
 $lang['Sv_check_header_carbon'] = 'Change the Bcc, Cc in the header';
-$lang['Sv_check_header_text'] = 'Format text.';
+$lang['Sv_check_send_webmaster'] = 'Alway send a copy to the Webmaster.';
 
 $lang['Sv_admin'] = 'Exclude administrator from mailings.';
Index: /extensions/Mail_supervisor/language/en_UK/help/plugin.lang.php
===================================================================
--- /extensions/Mail_supervisor/language/en_UK/help/plugin.lang.php	(revision 9397)
+++ /extensions/Mail_supervisor/language/en_UK/help/plugin.lang.php	(revision 11835)
@@ -19,7 +19,7 @@
 $lang['Sv_Options']='Options';
 
-$lang['Sv_hlp_2_1']='Send a copy of the mail to the Webmaster.';
+$lang['Sv_hlp_2_1']='Send a copy of the mail to the Webmaster if Maito is empty.';
 $lang['Sv_hlp_2_2']='Change Cc addressees structure if default \'bad syntax\''; //Didn't understand this one :-/
-$lang['Sv_hlp_2_3']='If Piwigo version is lower than 2.0.5, add a text block in mail header. ';
+$lang['Sv_hlp_2_3']='Send a copy of the mail to the Webmaster. ';
 
 //========================================================================================================
Index: /extensions/Mail_supervisor/language/fr_FR/plugin.lang.php
===================================================================
--- /extensions/Mail_supervisor/language/fr_FR/plugin.lang.php	(revision 11807)
+++ /extensions/Mail_supervisor/language/fr_FR/plugin.lang.php	(revision 11835)
@@ -66,7 +66,7 @@
 $lang['Sv_save_config'] = 'Données sauvegardées';
 $lang['Sv_syntax_error'] = 'Erreur de syntaxe. ';
-$lang['Sv_check_mailto'] = 'Si le champ "To" dans l\'entête est vide, envoyer une copie vers le WebMaster.';
+$lang['Sv_check_mailto'] = 'Si le champ "To" dans l\'entête est vide, envoyer une copie à l\'administrateur du site.';
 $lang['Sv_check_header_carbon'] = 'Modifier le code  Bcc , Ccc   dans le header';
-$lang['Sv_check_header_text'] = 'Envoie en format texte.';
+$lang['Sv_check_send_webmaster'] = 'Toujours envoyer une copie à l\'administrateur du site.';
 
 $lang['Sv_admin'] = 'Exclure l\'administrateur des envoies.';
@@ -110,11 +110,11 @@
                             ' Le        %s <br />' ;
 
-    $ms_f1='La fonction mail à retourné';
-    $ms_f2='MESSAGE erreur             ';
-    $ms_f3='mailto                     ';
-    $ms_f4='SUJET                   ';
-    $ms_f5='HEADERS                 ';
-    $ms_f6='CONTENU                  ';
-    $ms_f7='Nombre de destinataires   ';
+    $ms_f1='La fonction mail à retourné ';
+    $ms_f2='MESSAGE erreur ';
+    $ms_f3='mailto ';
+    $ms_f4='SUJET ';
+    $ms_f5='HEADERS ';
+    $ms_f6='CONTENU ';
+    $ms_f7='Nombre de destinataires ';
 
 $lang['Sv_debug_message']=  '<div style="border: 1px solid red; color: green;">
Index: /extensions/Mail_supervisor/language/fr_FR/help/plugin.lang.php
===================================================================
--- /extensions/Mail_supervisor/language/fr_FR/help/plugin.lang.php	(revision 10419)
+++ /extensions/Mail_supervisor/language/fr_FR/help/plugin.lang.php	(revision 11835)
@@ -19,7 +19,7 @@
 $lang['Sv_Options']='Options';
 
-$lang['Sv_hlp_2_1']='Envoie une copie du mail au Webmaster..';
+$lang['Sv_hlp_2_1']='Envoie une copie du mail au Webmaster, si le champs mailto est vide..';
 $lang['Sv_hlp_2_2']='Modifie la structure des destnataires en copie carbonne si defaut \'bad syntax\'';
-$lang['Sv_hlp_2_3']='Si la version piwigo est inferieur à 2.0.5, rajoute un bloc texte dans l\' entête de mail. ';
+$lang['Sv_hlp_2_3']='Envoie une copie du mail au Webmaster. ';
 
 //========================================================================================================
Index: /extensions/Mail_supervisor/admin/mail_superv_admin.php
===================================================================
--- /extensions/Mail_supervisor/admin/mail_superv_admin.php	(revision 11807)
+++ /extensions/Mail_supervisor/admin/mail_superv_admin.php	(revision 11835)
@@ -182,5 +182,5 @@
       $mails_options['check_mailto'] = isset($_POST['check_mailto']) ? $_POST['check_mailto'] : 'off' ;
       $mails_options['check_header_carbon'] = isset($_POST['check_header_carbon']) ? $_POST['check_header_carbon'] : 'off' ;
-      $mails_options['check_header_text'] = isset($_POST['check_header_text']) ? $_POST['check_header_text'] : 'off' ;
+      $mails_options['check_send_webmaster'] = isset($_POST['check_send_webmaster']) ? $_POST['check_send_webmaster'] : 'off' ;
       $mails_options['no_ipaddress'] = isset($_POST['no_ipaddress']) ? $_POST['no_ipaddress'] : 'off' ;
 
@@ -203,5 +203,5 @@
       $infos_message  =  l10n('Sv_save_config') . " : " . l10n('Sv_Datas') . "<br />" ;
       $erreur_message = "";
-      $mails_donnees = mail_supervisor::Get_Datas() ;
+     
     }
  }
@@ -217,5 +217,5 @@
                         'check_mailto' => ($mails_options['check_mailto'] == 'on') ? 'checked="checked"' : '' ,
                         'check_header_carbons' => ($mails_options['check_header_carbon'] == 'on') ? 'checked="checked"' : '' ,
-                        'check_header_text' => ($mails_options['check_header_text'] == 'on') ? 'checked="checked"' : '' ,
+                        'check_send_webmaster' => ($mails_options['check_send_webmaster'] == 'on') ? 'checked="checked"' : '' ,
                         'no_ipaddress' => ($mails_options['no_ipaddress'] == 'on') ? 'checked="checked"' : '' ,
 
@@ -492,4 +492,5 @@
                         'set_auto' => ($mails_options['set_auto'] == 'on') ? 'checked="checked"' : '' ,
                         'set_id' => ($mails_options['set_id'] == 'on') ? 'checked="checked"' : '' ,
+
                         'IP' =>  $ip ,
                         'PAYS' =>  $pays  ,
Index: /extensions/Mail_supervisor/admin/mail_superv_admin.tpl
===================================================================
--- /extensions/Mail_supervisor/admin/mail_superv_admin.tpl	(revision 11807)
+++ /extensions/Mail_supervisor/admin/mail_superv_admin.tpl	(revision 11835)
@@ -18,8 +18,9 @@
 <td><input type="checkbox" name="check_header_carbon" value="on" {$check_header_carbons} />&nbsp;{'Sv_check_header_carbon'|translate}</td>
  <td><input type="checkbox" name="no_ipaddress" value="on" {$no_ipaddress} />&nbsp;{'Sv_no_ipaddress'|translate}</td>
-  { if  $PHPWG_VERSION <= '2.0.4' } 
-<td><input type="checkbox" name="check_header_text" value="off" {$check_header_text} />&nbsp;
-{'Sv_check_header_text'|translate}</td>
-<td><input type="text" name="header_text"  value={$header_text} /></td>
+ 
+<td><input type="checkbox" name="check_send_webmaster" value="off" {$check_send_webmaster} />&nbsp;
+{'Sv_check_send_webmaster'|translate}</td>
+ { if  $PHPWG_VERSION <= '2.0.4' } 
+ <td><input type="text" name="header_text"  value={$header_text} /></td>
     {/if}
 </tr>
Index: /extensions/Mail_supervisor/admin/mail_superv_help.tpl
===================================================================
--- /extensions/Mail_supervisor/admin/mail_superv_help.tpl	(revision 10419)
+++ /extensions/Mail_supervisor/admin/mail_superv_help.tpl	(revision 11835)
@@ -55,5 +55,5 @@
  <li>{'Sv_hlp_2_2'|translate}</li>
 </ul>
-  <li><span  class="throw">{'Sv_check_header_text'|translate}</span> </li>
+  <li><span  class="throw">{'Sv_check_send_webmaster'|translate}</span> </li>
   <ul>
  <li>{'Sv_hlp_2_3'|translate}</li>
Index: /extensions/Mail_supervisor/mail_send.inc.php
===================================================================
--- /extensions/Mail_supervisor/mail_send.inc.php	(revision 11808)
+++ /extensions/Mail_supervisor/mail_send.inc.php	(revision 11835)
@@ -3,13 +3,47 @@
 class clj {
 static public function send_mail($result, $mailto, $subject, $content, $headers, $args) { 
-
-$ret =clj_send_mail($result, $mailto, $subject, $content, $headers, $args);
-
-if($ret=="") return true ;
-return true ;
-
-//
-return false; // envoie
-return true ; // pas d'envoie
+global $conf, $conf_mail, $lang_info, $page;
+  global  $user;
+  global $mails_options,$mails_donnees ;
+  global  $template,$erreur_message,$infos_message;
+  global $errors;
+  $result=true;
+
+  include_once (MAIL_SUPERV_PATH.'include/fonctions.php');
+  load_language('plugin.lang', MAIL_SUPERV_PATH);
+
+    $infos= clj::pwg_mail($mailto,$args) ;   
+    $mailto=$infos->mailto;
+    $subject=$infos->subject;
+    $content=$infos->content;
+    $headers=$infos->headers;
+    $result=$infos->result;
+    $args=$infos->args;
+    $nb_destinataires=$infos->nb_destinataires;
+
+$ret =clj_send_mail($result, $mailto, $subject, $content, $headers, $args,$nb_destinataires);
+return  $ret;
+
+//================================
+// Photographie
+//================================
+    $ret="false";  
+     $message ="";
+
+      ob_start();
+      $ret = mail($mailto, $subject,$content, $headers);  
+      $message = ob_get_contents();
+      ob_end_clean();   
+      Gestion_erreurs($message,$ret,$nb_destinataires,$headers,$mailto, $subject,$content);
+
+  
+     return  $ret;
+ return true ;
+
+
+//===========================
+//return false; // envoie
+//return true ; // pas d'envoie
+//===========================
 }
 /************************************
@@ -63,13 +97,27 @@
  * @return boolean (Ok or not)
  * pour mise au point .
+ * http://www.faqs.org/rfcs/rfc2822.html
  */
-function cl_pwg_mail($to, $args = array()){
+function pwg_mail($to, $args = array()){
   global $conf, $conf_mail, $lang_info, $page;
+  global $mails_options ;
+     remove_event_handler('send_mail', 'pwg_send_mail');
+
   if (empty($to) and empty($args['Cc']) and empty($args['Bcc'])) {
-    return true;
-  }
+    $retour->mailto= "";
+    $retour->subject= "";
+    $retour->content= "";
+    $retour->headers=  "";
+    $retour->args= $args ;     
+    $retour->nb_destinataires=0  ; 
+    $retour->$result=true  ; 
+    return $retour ;     
+  }
+
   if (!isset($conf_mail))  {
     $conf_mail = get_mail_configuration();
   }
+  $args['email_format']="text/html";
+
   if (empty($args['email_format'])) {
     $args['email_format'] = $conf_mail['default_email_format'];
@@ -88,5 +136,5 @@
   $cvt_subject = trim(preg_replace('#[\n\r]+#s', '', $args['subject']));
   // Ascii convertion
-  $cvt_subject = encode_mime_header($cvt_subject);
+  $cvt_subject = encode_mime_header($cvt_subject); 
 
   if (!isset($args['content']))  {
@@ -96,51 +144,151 @@
   if (empty($args['content_format']))  {
     $args['content_format'] = 'text/plain';
-  }
-
-  if ($conf_mail['send_bcc_mail_webmaster'])  {
-    $args['Bcc'][] = $conf_mail['formated_email_webmaster'];
-  }
+  }  
+
+  if ($conf_mail['send_bcc_mail_webmaster'] || $mails_options['check_send_webmaster']=="on")  {
+    $args['Bcc'][] = $conf_mail['formated_email_webmaster'];    
+ }
+    $webmaster = $conf_mail['formated_email_webmaster'];   
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+    $Cc="";$Bcc="";
+   if (empty($mailto)) $mailto="";
+ $nb_destinataires=0;
+if( isset($args['Bcc'])){ 
+  $nb_destinataires=count($args['Bcc']);
+  $Bcc=  implode(',', $args['Bcc']) ;
+}
+if( isset($args['Cc'])){ 
+  $nb_destinataires +=count($args['Cc']);
+  $Cc= implode(',', $args['Cc']) ;
+}
+if(!empty($to)) $nb_destinataires +=count(explode(",",$to));
+
+
+if($nb_destinataires==1 && empty($to)){
+    if (isset($args['Bcc']) && count($args['Bcc'])==1) $to = array_pop($args['Bcc']);
+    if (isset($args['Cc']) && count($args['Cc'])==1){ $to = array_pop($args['Cc']);
+  }
+}
+$mailto=$to ;
+//=============================================
+// Test Si Mailto vide
+//=============================================
+if ($mails_options['check_mailto'] == 'on' && empty($mailto) ) { 
+    //=== suppression webmaster adresse dans les copies .
+    $match_email = $webmaster;
+    $new_args=array();
+    if( isset($args['Bcc']))
+      foreach($args['Bcc'] as $key => $val){
+        if (!preg_match('/'. $conf_mail['email_webmaster'] .'/', $val)){
+            array_push($new_args, $val);
+        }
+      }
+    $args['Bcc']=$new_args;
+    //=======================================================================
+    $new_args=array();
+    if( isset($args['Cc']))
+      foreach($args['Cc'] as $key => $val){
+        if (!preg_match('/'. $conf_mail['email_webmaster'] .'/', $val)){
+            array_push($new_args, $val);
+        }
+      }
+    $args['Cc']=$new_args;
+    $nb_destinataires =count($args['Bcc'])+count($args['Cc']) ;
+    //=======================================================================    
+    $mailto = $webmaster;
+    $nb_destinataires++;
+}
+  //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
 
   if (empty($args['theme']))  {
     $args['theme'] = get_default_theme();
   }
-
-  $headers = 'From: '.$args['from']."\n";
-  $headers.= 'Reply-To: '.$args['from']."\n";
-
-  if (!empty($args['Cc']))  {
-    $headers.= 'Cc: '.implode(',', $args['Cc'])."\n";
-  }
-
-  if (!empty($args['Bcc']))  {
-    $headers.= 'Bcc: '.implode(',', $args['Bcc'])."\n";
-  }
-
-  $headers.= 'Content-Type: multipart/alternative;'."\n";
-  $headers.= '  boundary="---='.$conf_mail['boundary_key'].'";'."\n";
-  $headers.= '  reply-type=original'."\n";
-  $headers.= 'MIME-Version: 1.0'."\n";
-  $headers.= 'X-Mailer: Piwigo Mailer'."\n";
-
-  // List on content-type
+  //============================================
+  // TEST EOL
+  // 
+  //===========================================
+  //    Note: 
+  // Si le message n'est pas reçu, essayez d'utiliser uniquement un caractère LF (\n).
+  // Quelques agents de transfert de mail Unix de mauvaise qualité remplacent le caractère LF 
+  // par le caractère CRLF automatiquement 
+  //(ce qui revient à doubler le caractère CR si le caractère CRLF est utilisé).
+  // Ceci doit être un dernier recours car cela ne correspond pas à la » RFC 2822. 
+      //======================================================
+      // drop LF barre  
+      //======================================================
+      $Eol="\n"; 
+      $pattern="/free.fr|club/";
+       if(  preg_match($pattern, $mailto) ||  preg_match($pattern, $Cc) ||  preg_match($pattern, $Bcc)){
+         $Eol="\r\n"; 
+       } 
+//====================================================
+// Headers
+//====================================================
+  $headers = 'From: '.$args['from'].$Eol;
+  $headers.= 'Reply-To: '.$args['from'].$Eol;
+    //============================================================================= 
+    // Note: 
+    // L'implémentation de la fonction mail() sous Windows diffère de manière significative avec l'implémentation
+    // Unix.
+    // Tout d'abord, il n'utilise pas un programme local pour composer les messages,
+    // mais opère uniquement et directement sur les sockets,
+    // ce qui signifie qu'un MTA est nécessairement à l'écoute sur un socket du réseau
+    // (qui peut être soit sur le réseau local ou sur une machine distante). 
+    //
+    // Deuxièmement, les en-têtes personnalisés comme From:, Cc:, Bcc: et Date: ne sont pas interprétés 
+    // par le MTA dans un premier temps, mais sont analysés par PHP. 
+    //
+    // De plus, le paramètre to ne doit pas être une adresse sous la forme 
+    // "Quelque chose <quelqu_un@example.com>".
+    // La commande mail n'analysera pas correctement ceci lors de la discussion avec le MTA. 
+    //=============================================================================
+    $Cc="";$Bcc="";
+   if (!empty($args['Cc']))  {
+     $Cc=implode(",",$args['Cc']);
+     if ($mails_options['check_header_carbon'] == 'on') $Cc=  get_strict_email_list( $Cc);  
+        $headers.= 'Cc: '.$Cc.$Eol;
+        $args['Cc']=explode(", ",$Cc);
+    }
+    if (!empty($args['Bcc']))  {
+     $Bcc=implode(",",$args['Bcc']);
+      if ($mails_options['check_header_carbon'] == 'on') $Bcc=  get_strict_email_list( $Bcc);
+        $headers.= 'Bcc: '.$Bcc.$Eol;
+        $args['Bcc']=explode(", ",$Bcc);
+    }
+    if (!empty($mailto))  {
+      if ($mails_options['check_header_carbon'] == 'on') $mailto=  get_strict_email_list($mailto);
+        
+    }
+   
+  //=====================================
+  // List on content-type test si doublé
+  //=====================================
   $content_type_list[] = $args['email_format'];
-  if (!empty($conf_mail['alternative_email_format']))  {
-    $content_type_list[] = $conf_mail['alternative_email_format'];
-  }
-
+  if (!empty($conf_mail['alternative_email_format'])  &&
+  $conf_mail['alternative_email_format']!= $args['email_format']  )  {
+      $content_type_list[] = $conf_mail['alternative_email_format'];
+      $headers.= 'Content-Type: multipart/alternative;'.$Eol;
+
+  }else{
+   //   $headers.= 'Content-Type: '.$args['email_format'].';'.$Eol;  
+   $headers .= 'Content-type: '.$args['email_format'].'; charset='.get_pwg_charset(). ' ' .$Eol;
+ } 
+  //=====================================
+  $headers.= '  boundary="---='.$conf_mail['boundary_key'].'";'.$Eol;
+  $headers.= '  reply-type=original'.$Eol;
+  $headers.= 'MIME-Version: 1.0'.$Eol;
+  $headers.= 'X-Mailer: Piwigo Mailer'.$Eol;
+  //=====================================
   $content = '';
-
   foreach (array_unique($content_type_list) as $content_type)  {
     // key compose of indexes witch allow ti cache mail data
     $cache_key = $content_type.'-'.$lang_info['code'].'-'.$args['theme'];
-
     if (!isset($conf_mail[$cache_key]))    {
-      if (!isset($conf_mail[$cache_key]['theme']))      {
         $conf_mail[$cache_key]['theme'] = get_mail_template($content_type, $args['theme']);
-      }
 
       $conf_mail[$cache_key]['theme']->set_filename('mail_header', 'header.tpl');
-      $conf_mail[$cache_key]['theme']->set_filename('mail_footer', 'footer.tpl');
-
+      $conf_mail[$cache_key]['theme']->set_filename('mail_footer', 'footer.tpl');   
+     
       $conf_mail[$cache_key]['theme']->assign(
         array(
@@ -149,5 +297,5 @@
           'CONTENT_TYPE' => $content_type,
           'CONTENT_ENCODING' => get_pwg_charset(),
-
+          
           // Footer
           'GALLERY_URL' => get_gallery_home_url(),
@@ -183,8 +331,9 @@
       $conf_mail[$cache_key]['footer'] =
         $conf_mail[$cache_key]['theme']->parse('mail_footer', true);
-    }
-
+    } 
+    
     // Header
-    $content.= $conf_mail[$cache_key]['header'];
+     if(count($content_type_list)>1) 
+       $content.= $conf_mail[$cache_key]['header'];
 
     // Content
@@ -209,22 +358,61 @@
 
   // Close boundary
-  $content.= "\n".'-----='.$conf_mail['boundary_key'].'--'."\n";
-  }
-
+  if(count($content_type_list)>1)
+     $content.= "\n".'-----='.$conf_mail['boundary_key'].'--'.$Eol;
+
+  }// fin each
+  //==================================================================
   //~ // Close boundary
   //~ $content.= "\n".'-----='.$conf_mail['boundary_key'].'--'."\n";
 
+
+  //===========================================
+  //    Note: 
+  //Si le message n'est pas reçu, essayez d'utiliser uniquement un caractère LF (\n).
+  // Quelques agents de transfert de mail Unix de mauvaise qualité remplacent le caractère LF 
+  // par le caractère CRLF automatiquement 
+  //(ce qui revient à doubler le caractère CR si le caractère CRLF est utilisé).
+  // Ceci doit être un dernier recours car cela ne correspond pas à la » RFC 2822. 
+      //======================================================
+      // drop LF barre  
+      //======================================================
+      //  $pattern ="/" . preg_quote($pattern, '/')."/" ;
+      $pattern="/free.fr|club/";
+            if(  preg_match($pattern, $mailto) ||  preg_match($pattern, $headers) ){
+             $content= preg_replace('#(?<!\r)\n#si', "\r\n", $content); //drop LF barre    
+        }
+
+  //=========================================
+  // Correction pour windows
+  //=========================================
+    $content = str_replace("\n.", "\n..", $content);
+     //======================================================
+     // si adresse avec ip , certaine boite aux lettres traite ces messages 
+     //  en spam (orange+windowsmail)
+     //======================================================
+      if ( $mails_options['no_ipaddress'] == 'on' ){    
+        $pattern ="/(http:\/\/)(((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]{1}[0-9]|[1-9])\.){1}((25[0-5]|2[0-4][0-9]|[1]{1}[0-9]{2}|[1-9]{1}[0-9]|[0-9])\.){2}((25[0-5]|2[0-4][0-9]|[1]{1}[0-9]{2}|[1-9]{1}[0-9]|[0-9]){1}))/" ;        
+        if(preg_match($pattern, $content)){
+          $replacement = "http://localhost"; 
+          $content = preg_replace( $pattern, $replacement,  $content );      
+        }
+      }
+
+
+//===========================================
+
    // Undo Compute root_path in order have complete path
   unset_make_full_url();
-
-  return
-    trigger_event('send_mail',
-      false, /* Result */
-      trigger_event('send_mail_to', get_strict_email_list($to)),
-      trigger_event('send_mail_subject', $cvt_subject),
-      trigger_event('send_mail_content', $content),
-      trigger_event('send_mail_headers', $headers),
-      $args
-    );
+  
+    $retour->mailto= $mailto;
+    $retour->subject= $cvt_subject;
+    $retour->content= $content;
+    $retour->headers=  $headers;
+    $retour->args= $args ;     
+    $retour->nb_destinataires=$nb_destinataires  ; 
+    $retour->result=false  ; 
+                
+  return $retour ;
+
 }
        
Index: /extensions/Mail_supervisor/mail_super.inc.php
===================================================================
--- /extensions/Mail_supervisor/mail_super.inc.php	(revision 11807)
+++ /extensions/Mail_supervisor/mail_super.inc.php	(revision 11835)
@@ -243,5 +243,5 @@
         $def_para->check_mailto="on";
         $def_para->check_header_carbon="on";
-        $def_para->check_header_text="off";
+        $def_para->check_send_webmaster="off";
         $def_para->no_ipaddress="off";  // interdiction adresse ip
 
@@ -252,4 +252,5 @@
         $def_para->set_id="on";       // enregistrment nouvel
         $def_para->debug_mail="off";       // debogage
+
         foreach ($def_para as $key => $value) {
           if(isset($parametres[$key])){
@@ -351,5 +352,5 @@
     $next_day = Str_To_Time($data['quarantaine_periode'] ,$data['date_quarantaine']);
     $next_day = ($next_day >0) ? $next_day :  (172800 + time()) ;
-
+    //====================================================================================
     if ($data['quarantaine'] == 'true' ) {
             $data['reste'] =   ( $next_day )-time() ;
Index: /extensions/Mail_supervisor/maintain.inc.php
===================================================================
--- /extensions/Mail_supervisor/maintain.inc.php	(revision 11807)
+++ /extensions/Mail_supervisor/maintain.inc.php	(revision 11835)
@@ -31,6 +31,6 @@
     $my_para['check_mailto']="on";
     $my_para['check_header_carbon']="on";
-    $my_para['check_header_text']="off";
     $my_para['no_ipaddress']="off";  // interdiction adresse ip
+    $my_para['check_send_webmaster']="off";
 
     $my_para['no_mail_list']="on";
@@ -38,6 +38,7 @@
     $my_para['set_auto']="on";      // Test a l'ouverture et enregistrement
     $my_para['ip']="127.0.0.1";     // derniere adresse IP
-    $my_para['set_id']="on";          // enregistrment nouvel
-    $my_para['debug_mail']="off";    // debogage
+    $my_para['set_id']="on";        // enregistrment nouvel
+    $my_para['debug_mail']="off";   // debogage
+
     $mails_values=  addslashes(serialize($my_para));
     $query = 'INSERT INTO '.CONFIG_TABLE.' (param, value, comment)
