diff --git a/htdocs/admin/boutique.php b/htdocs/admin/boutique.php
index c8d4c9d8894e853223105a5de38b7d88706762fe..27afb6173656990c71dc83bb5c366fecb04114f8 100644
--- a/htdocs/admin/boutique.php
+++ b/htdocs/admin/boutique.php
@@ -117,7 +117,6 @@ foreach ($modules as $key => $value)
   print '</td></tr>';
 }
 
-
 print '</table>';
 
 llxFooter();
diff --git a/htdocs/boutique/auteur/auteur.class.php b/htdocs/boutique/auteur/auteur.class.php
index 8e92376386b68f4386ca4362b6d75ef4a01df1a1..53f4d3d1aa28d2b97180ee05e8f78f9c3e76d7bd 100644
--- a/htdocs/boutique/auteur/auteur.class.php
+++ b/htdocs/boutique/auteur/auteur.class.php
@@ -171,17 +171,17 @@ class Auteur {
    *
    *
    */
-  Function delete($user) {
+  Function delete() {
 
-    $sql = "DELETE FROM ".DB_NAME_OSC.".products WHERE products_id = $idosc ";
+    $livres = $this->liste_livre();
+
+    if (sizeof($livres) == 0)
+      {
+	$sql = "DELETE FROM llx_auteur WHERE rowid = $this->id ";
+	$return = $this->db->query($sql) ;
+      }
 
-    $sql = "DELETE FROM ".DB_NAME_OSC.".products_to_categories WHERE products_id = $idosc";
 
-    $sql = "DELETE FROM ".DB_NAME_OSC.".products_description WHERE products_id = $idosc";
-	      
-    $sql = "DELETE FROM llx_livre WHERE rowid = $id";
-	    
-    
   }
 
 
diff --git a/htdocs/boutique/auteur/fiche.php b/htdocs/boutique/auteur/fiche.php
index fdf363169f698086424e87df744192a42a951c87..14cced4f1dc5fe1cfb3513db64f8538c37d906a4 100644
--- a/htdocs/boutique/auteur/fiche.php
+++ b/htdocs/boutique/auteur/fiche.php
@@ -22,8 +22,6 @@
 
 require("./pre.inc.php");
 
-llxHeader();
-
 $db = new Db();
 
 if ($action == 'add') {
@@ -40,6 +38,14 @@ if ($action == 'addga') {
   $auteur->linkga($id, $ga);
 }
 
+if ($HTTP_POST_VARS["action"] == 'confirm_delete' && $HTTP_POST_VARS["confirm"] == yes)
+{
+  $auteur = new Auteur($db);
+  $result = $auteur->fetch($id);
+  $auteur->delete();
+  Header("Location: index.php");
+}
+
 
 if ($action == 'update' && !$cancel) {
   $auteur = new Auteur($db);
@@ -49,6 +55,10 @@ if ($action == 'update' && !$cancel) {
   $auteur->update($id, $user);
 }
 
+llxHeader();
+
+
+
 /*
  *
  *
@@ -83,6 +93,37 @@ else
 
 	  $livres = $auteur->liste_livre();
 
+	  /*
+	   * Confirmation de la suppression de l'auteur
+	   *
+	   */
+	  
+	  if ($action == 'delete')
+	    {
+	      
+	      print '<form method="post" action="'.$PHP_SELF.'?id='.$id.'">';
+	      print '<input type="hidden" name="action" value="confirm_delete">';
+	      print '<table cellspacing="0" border="1" width="100%" cellpadding="3">';
+	      
+	      print '<tr><td colspan="3">Supprimer un auteur</td></tr>';
+	      
+	      print '<tr><td class="delete">Etes-vous sur de vouloir supprimer cet auteur ?</td><td class="delete">';
+	      $htmls = new Form($db);
+	      
+	      $htmls->selectyesno("confirm","no");
+	      
+	      print "</td>\n";
+	      print '<td class="delete" align="center"><input type="submit" value="Confirmer"</td></tr>';
+	      print '</table>';
+	      print "</form>\n";  
+	    }
+	  
+	  /*
+	   * Edition
+	   *
+	   */
+
+
 	  if ($action == 'edit')
 	    {
 	      print '<div class="titre">Edition de la fiche Auteur : '.$auteur->nom.'</div><br>';
@@ -107,7 +148,7 @@ else
 
 	  print '<table border="1" width="100%" cellspacing="0" cellpadding="4">';
 	  print "<tr>";
-	  print '<td width="20%">Nom</td><td width="30%">'.$auteur->nom.'</td></tr>';
+	  print '<td width="20%">Nom</td><td width="80%">'.$auteur->nom.'</td></tr>';
 
 	  print '<tr><td>Livres</td><td>';
 
@@ -142,9 +183,6 @@ else
 /* ************************************************************************** */
 
 print '<br><table width="100%" border="1" cellspacing="0" cellpadding="3">';
-print '<td width="20%" align="center">-</td>';
-print '<td width="20%" align="center">-</td>';
-print '<td width="20%" align="center">-</td>';
 
 if ($action == 'create')
 {
@@ -154,7 +192,20 @@ else
 {
   print '<td width="20%" align="center">[<a href="fiche.php?action=edit&id='.$id.'">Editer</a>]</td>';
 }
-print '<td width="20%" align="center">-</td>';    
+
+print '<td width="20%" align="center">-</td>';
+print '<td width="20%" align="center">-</td>';
+print '<td width="20%" align="center">-</td>';
+
+if(sizeof($livres)==0 && $id)
+{
+  print '<td width="20%" align="center">[<a href="fiche.php?action=delete&id='.$id.'">Supprimer</a>]</td>';
+}
+else
+{
+  print '<td width="20%" align="center">[Supprimer]</td>';
+}
+
 print '</table><br>';
 
 
diff --git a/htdocs/boutique/client/index.php b/htdocs/boutique/client/index.php
index 039286790f2d6a532805179aae778bfc392d19be..d6792e7531cfb0f043c871a4e3b597911ca76279 100644
--- a/htdocs/boutique/client/index.php
+++ b/htdocs/boutique/client/index.php
@@ -37,12 +37,10 @@ if ($page == -1) { $page = 0 ; }
 $limit = $conf->liste_limit;
 $offset = $limit * $page ;
 
-print_barre_liste("Liste des notifications", $page, $PHP_SELF);
+print_barre_liste("Liste des clients", $page, $PHP_SELF);
 
-$sql = "SELECT c.customers_id, c.customers_lastname, c.customers_firstname";
-$sql .= " FROM ".DB_NAME_OSC.".products_notifications as n,".DB_NAME_OSC.".products_description as p";
-$sql .= ",".DB_NAME_OSC.".customers as c";
-$sql .= " WHERE n.customers_id = c.customers_id AND p.products_id=n.products_id";
+$sql = "SELECT c.customers_id, c.customers_lastname, c.customers_firstname, c.customers_email_address, c.customers_newsletter";
+$sql .= " FROM ".DB_NAME_OSC.".customers as c";
 $sql .= " ORDER BY $sortfield $sortorder ";
 $sql .= $db->plimit( $limit ,$offset);
  
@@ -52,8 +50,10 @@ if ( $db->query($sql) )
   $i = 0;
   print "<p><TABLE border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"4\">";
   print "<TR class=\"liste_titre\"><td>";
-  print_liste_field_titre("Nom",$PHP_SELF, "e.nom");
-  print "</td>";
+  print_liste_field_titre("Pr�nom",$PHP_SELF, "c.customers_firstname");
+  print "</td><td>";
+  print_liste_field_titre("Nom",$PHP_SELF, "c.customers_lastname");
+  print '</td><td>Email</td><td align="center">Newsletter</td>';
   print "</TR>\n";
   $var=True;
   while ($i < $num)
@@ -61,7 +61,10 @@ if ( $db->query($sql) )
       $objp = $db->fetch_object( $i);
       $var=!$var;
       print "<TR $bc[$var]>";
-      print "<TD width='70%'><a href=\"fiche.php?id=$objp->rowid\">$objp->nom</a></TD>\n";
+      print '<TD><a href="fiche.php?id='.$objp->customers_id.'">'.$objp->customers_firstname."</a></TD>\n";
+      print '<TD><a href="fiche.php?id='.$objp->customers_id.'">'.$objp->customers_lastname."</a></TD>\n";
+      print "<TD>$objp->customers_email_address</TD>\n";
+      print "<TD align=\"center\">$objp->customers_newsletter</TD>\n";
       print "</TR>\n";
       $i++;
     }
diff --git a/htdocs/boutique/editeur/editeur.class.php b/htdocs/boutique/editeur/editeur.class.php
index 8453be3d0d05ef701acb3883ed67a79a71f0d726..60e66b3ba720519941b0ac8f5c4d2e2270591008 100644
--- a/htdocs/boutique/editeur/editeur.class.php
+++ b/htdocs/boutique/editeur/editeur.class.php
@@ -130,25 +130,56 @@ class Editeur {
     
     return $result;
   }
+  /*
+   *
+   *
+   *
+   */
+  Function liste_livre()
+  {
+    $ga = array();
 
+    $sql = "SELECT a.rowid, a.title FROM llx_livre as a";
+    $sql .= " WHERE a.fk_editeur = ".$this->id;
+    $sql .= " ORDER BY a.title";
 
+    if ($this->db->query($sql) )
+      {
+	$nump = $this->db->num_rows();
+	
+	if ($nump)
+	  {
+	    $i = 0;
+	    while ($i < $nump)
+	      {
+		$obj = $this->db->fetch_object($i);
+		
+		$ga[$obj->rowid] = $obj->title;
+		$i++;
+	      }
+	  }
+	return $ga;
+      }
+    else
+      {
+	print $this->db->error();
+      }    
+  }
   /*
    *
    *
    */
-  Function delete($user) {
+  Function delete() {
 
-    $sql = "DELETE FROM ".DB_NAME_OSC.".products WHERE products_id = $idosc ";
+    $livres = $this->liste_livre();
 
-    $sql = "DELETE FROM ".DB_NAME_OSC.".products_to_categories WHERE products_id = $idosc";
-
-    $sql = "DELETE FROM ".DB_NAME_OSC.".products_description WHERE products_id = $idosc";
-	      
-    $sql = "DELETE FROM llx_livre WHERE rowid = $id";
-	    
-    
-  }
+    if (sizeof($livres) == 0)
+      {
+	$sql = "DELETE FROM llx_editeur WHERE rowid = $this->id ";
+	$return = $this->db->query($sql) ;
+      }
 
 
+  }
 }
 ?>
diff --git a/htdocs/boutique/editeur/fiche.php b/htdocs/boutique/editeur/fiche.php
index 5c812afd26fa82ff35e600400e782cbac717da88..dd46feed3713820e6de44d660748a04007f1a18f 100644
--- a/htdocs/boutique/editeur/fiche.php
+++ b/htdocs/boutique/editeur/fiche.php
@@ -22,8 +22,6 @@
 
 require("./pre.inc.php");
 
-llxHeader();
-
 $db = new Db();
 
 if ($action == 'add') {
@@ -40,8 +38,8 @@ if ($action == 'addga') {
   $editeur->linkga($id, $ga);
 }
 
-
-if ($action == 'update' && !$cancel) {
+if ($action == 'update' && !$cancel)
+{
   $editeur = new Editeur($db);
 
   $editeur->nom = $nom;
@@ -49,6 +47,16 @@ if ($action == 'update' && !$cancel) {
   $editeur->update($id, $user);
 }
 
+if ($HTTP_POST_VARS["action"] == 'confirm_delete' && $HTTP_POST_VARS["confirm"] == yes)
+{
+  $editeur = new Editeur($db);
+  $result = $editeur->fetch($id);
+  $editeur->delete();
+  Header("Location: index.php");
+}
+
+llxHeader();
+
 /*
  *
  *
@@ -63,7 +71,7 @@ if ($action == 'create')
       
   print '<table border="1" width="100%" cellspacing="0" cellpadding="4">';
   print "<tr>";
-  print '<td>Nom</td><td><input name="nom" size="40" value=""></td></tr>';
+  print '<td width="20%">Nom</td><td><input name="nom" size="40" value=""></td></tr>';
   print '<tr><td>&nbsp;</td><td><input type="submit" value="Cr�er"></td></tr>';
   print '</table>';
   print '</form>';
@@ -80,6 +88,39 @@ else
 
       if ( $result )
 	{ 
+	  $livres = $editeur->liste_livre();
+
+	  /*
+	   * Confirmation de la suppression de l'editeur
+	   *
+	   */
+	  
+	  if ($action == 'delete')
+	    {
+	      
+	      print '<form method="post" action="'.$PHP_SELF.'?id='.$id.'">';
+	      print '<input type="hidden" name="action" value="confirm_delete">';
+	      print '<table cellspacing="0" border="1" width="100%" cellpadding="3">';
+	      
+	      print '<tr><td colspan="3">Supprimer un �diteur</td></tr>';
+	      
+	      print '<tr><td class="delete">Etes-vous sur de vouloir supprimer cet �diteur ?</td><td class="delete">';
+	      $htmls = new Form($db);
+	      
+	      $htmls->selectyesno("confirm","no");
+	      
+	      print "</td>\n";
+	      print '<td class="delete" align="center"><input type="submit" value="Confirmer"</td></tr>';
+	      print '</table>';
+	      print "</form>\n";  
+	    }
+	  
+	  /*
+	   * Edition de la fiche
+	   *
+	   */
+
+
 	  if ($action == 'edit')
 	    {
 	      print '<div class="titre">Edition de la fiche Editeur : '.$editeur->titre.'</div><br>';
@@ -89,7 +130,7 @@ else
 	      
 	      print '<table border="1" width="100%" cellspacing="0" cellpadding="4">';
 	      print "<tr>";
-	      print '<td width="20%">Nom</td><td><input name="nom" size="40" value="'.$editeur->nom.'"></td>';
+	      print '<td width="20%">Nom</td><td width="80%"><input name="nom" size="40" value="'.$editeur->nom.'"></td>';
 
 
 	      print '<tr><td colspan="2" align="center"><input type="submit" value="Enregistrer">&nbsp;<input type="submit" value="Annuler" name="cancel"></td></tr>';
@@ -104,7 +145,16 @@ else
 
 	  print '<table border="1" width="100%" cellspacing="0" cellpadding="4">';
 	  print "<tr>";
-	  print '<td width="20%">Nom</td><td width="30%">'.$editeur->nom.'</td></tr>';
+	  print '<td width="20%">Nom</td><td width="80%">'.$editeur->nom.'</td></tr>';
+
+	  print '<tr><td>Livres</td><td>';
+
+	  foreach ($livres as $key => $value)
+	    {
+	      print '<a href="../livre/fiche.php?id='.$key.'">'.$value."<br>\n";
+	    }
+	  print "</td></tr>";
+
 	  print "</table>";
 
 
@@ -130,9 +180,6 @@ else
 /* ************************************************************************** */
 
 print '<br><table width="100%" border="1" cellspacing="0" cellpadding="3">';
-print '<td width="20%" align="center">-</td>';
-print '<td width="20%" align="center">-</td>';
-print '<td width="20%" align="center">-</td>';
 
 if ($action == 'create')
 {
@@ -142,7 +189,21 @@ else
 {
   print '<td width="20%" align="center">[<a href="fiche.php?action=edit&id='.$id.'">Editer</a>]</td>';
 }
-print '<td width="20%" align="center">-</td>';    
+
+print '<td width="20%" align="center">-</td>';
+print '<td width="20%" align="center">-</td>';
+print '<td width="20%" align="center">-</td>';
+
+if(sizeof($livres)==0 && $id)
+{
+  print '<td width="20%" align="center">[<a href="fiche.php?action=delete&id='.$id.'">Supprimer</a>]</td>';
+}
+else
+{
+  print '<td width="20%" align="center">[Supprimer]</td>';
+}
+
+
 print '</table><br>';
 
 
diff --git a/htdocs/boutique/livre/fiche.php b/htdocs/boutique/livre/fiche.php
index c164a621bc773e48db034af65ae59286842b4ab0..895d62359e6291573a05b01e9fd2af9e7c9eac9b 100644
--- a/htdocs/boutique/livre/fiche.php
+++ b/htdocs/boutique/livre/fiche.php
@@ -293,11 +293,6 @@ else
 /* ************************************************************************** */
 
 print '<br><table width="100%" border="1" cellspacing="0" cellpadding="3">';
-print '<td width="20%" align="center">-</td>';
-
-print '<td width="20%" align="center">[<a href="fiche.php?action=updateosc&id='.$id.'">Update Osc</a>]</td>';
-
-print '<td width="20%" align="center">-</td>';
 
 if ($action == 'create')
 {
@@ -307,6 +302,10 @@ else
 {
   print '<td width="20%" align="center">[<a href="fiche.php?action=edit&id='.$id.'">Editer</a>]</td>';
 }
+
+print '<td width="20%" align="center">-</td>';
+print '<td width="20%" align="center">[<a href="fiche.php?action=updateosc&id='.$id.'">Update Osc</a>]</td>';
+print '<td width="20%" align="center">-</td>';
 print '<td width="20%" align="center">-</td>';    
 print '</table><br>';
 
diff --git a/htdocs/boutique/livre/livre.class.php b/htdocs/boutique/livre/livre.class.php
index f48252b2b107852fff536085da67e65114edc9f8..a4929b9f68a3e2eb52a5964769e80507d5635601 100644
--- a/htdocs/boutique/livre/livre.class.php
+++ b/htdocs/boutique/livre/livre.class.php
@@ -335,6 +335,7 @@ class Livre {
       {
 	$sql = "UPDATE ".DB_NAME_OSC.".products ";
 	$sql .= "SET products_model = '".$this->ref."'";
+	$sql .= ", products_image = '".strtolower($this->ref).".jpg'";
 	$sql .= ", products_price = ".$this->price."";
 
 	$sql .= " WHERE products_id = " . $this->oscid;
@@ -345,7 +346,7 @@ class Livre {
 	  }
 	else
 	  {
-	    print $this->db->error() . ' in ' . $sql;
+	    print $this->db->error() . ' in <br />' . $sql;
 	  }
       }
     else
@@ -409,11 +410,14 @@ class Livre {
 
     $sql .= " WHERE rowid = " . $id;
 
-    if ( $this->db->query($sql) ) {
-      return 1;
-    } else {
-      print $this->db->error() . ' in ' . $sql;
-    }
+    if ( $this->db->query($sql) )
+      {
+	return 1;
+      }
+    else
+      {
+	print $this->db->error() . ' in ' . $sql;
+      }
   }
   /*
    *
diff --git a/htdocs/boutique/newsletter/fiche.php b/htdocs/boutique/newsletter/fiche.php
index e303f00ac2e3ce9ca64e947bf751cf9a80ebb97d..af10fca20e999ae161ba77e3e303ebf8052b6209 100644
--- a/htdocs/boutique/newsletter/fiche.php
+++ b/htdocs/boutique/newsletter/fiche.php
@@ -27,7 +27,11 @@ $db = new Db();
 if ($action == 'add') {
   $newsletter = new Newsletter($db);
 
-  $newsletter->nom = $nom;
+  $newsletter->email_subject    = $HTTP_POST_VARS["email_subject"];
+  $newsletter->email_from_name  = $HTTP_POST_VARS["email_from_name"];
+  $newsletter->email_from_email = $HTTP_POST_VARS["email_from_email"];
+  $newsletter->email_replyto    = $HTTP_POST_VARS["email_replyto"];
+  $newsletter->email_body       = $HTTP_POST_VARS["email_body"];
 
   $id = $newsletter->create($user);
 }
@@ -42,7 +46,11 @@ if ($action == 'update' && !$cancel)
 {
   $newsletter = new Newsletter($db);
 
-  $newsletter->nom = $nom;
+  $newsletter->email_subject    = $HTTP_POST_VARS["email_subject"];
+  $newsletter->email_from_name  = $HTTP_POST_VARS["email_from_name"];
+  $newsletter->email_from_email = $HTTP_POST_VARS["email_from_email"];
+  $newsletter->email_replyto    = $HTTP_POST_VARS["email_replyto"];
+  $newsletter->email_body       = $HTTP_POST_VARS["email_body"];
 
   $newsletter->update($id, $user);
 }
@@ -55,6 +63,21 @@ if ($HTTP_POST_VARS["action"] == 'confirm_delete' && $HTTP_POST_VARS["confirm"]
   Header("Location: index.php");
 }
 
+if ($HTTP_POST_VARS["action"] == 'confirm_valid' && $HTTP_POST_VARS["confirm"] == yes)
+{
+  $newsletter = new Newsletter($db);
+  $result = $newsletter->fetch($id);
+  $newsletter->validate($user);
+}
+
+if ($HTTP_POST_VARS["action"] == 'confirm_send' && $HTTP_POST_VARS["confirm"] == yes)
+{
+  $newsletter = new Newsletter($db);
+  $result = $newsletter->fetch($id);
+  $newsletter->send($user);
+}
+
+
 llxHeader();
 
 /*
@@ -70,14 +93,13 @@ if ($action == 'create')
   print '<div class="titre">Nouvelle Newsletter</div><br>';
       
   print '<table border="1" width="100%" cellspacing="0" cellpadding="4">';
-  print "<tr>";
-  print '<td>Emetteur nom</td><td><input name="nom" size="30" value=""></td></tr>';
-  print '<td>Emetteur email</td><td><input name="nom" size="40" value=""></td></tr>';
-  print '<td>Email de r�ponse</td><td><input name="nom" size="40" value=""></td><td>Si vide, le mail de l\'�metteur est utilis�</tr>';
-  print '<td>Sujet</td><td><input name="nom" size="30" value=""></td></tr>';
-  print '<td>Cible</td><td><input name="nom" size="40" value=""></td></tr>';
-  print '<td>Texte</td><td><textarea name="body" rows="10" cols="60"></textarea></td></tr>';
-  print '<tr><td>&nbsp;</td><td><input type="submit" value="Cr�er"></td></tr>';
+  print '<tr><td width="20%">Emetteur nom</td><td><input name="email_from_name" size="30" value=""></td></tr>';
+  print '<tr><td width="20%">Emetteur email</td><td><input name="email_from_email" size="40" value=""></td></tr>';
+  print '<tr><td width="20%">Email de r�ponse</td><td><input name="email_replyto" size="40" value=""> (facultatif)</td></tr>';
+  print '<tr><td width="20%">Sujet</td><td width="80%"><input name="email_subject" size="30" value=""></td></tr>';
+  print '<tr><td width="20%">Cible</td><td><input name="nom" size="40" value=""></td></tr>';
+  print '<tr><td width="20%" valign="top">Texte</td><td width="80%"><textarea name="email_body" rows="10" cols="60"></textarea></td></tr>';
+  print '<tr><td colspan="2" align="center"><input type="submit" value="Cr�er"></td></tr>';
   print '</table>';
   print '</form>';
 
@@ -117,6 +139,41 @@ else
 	      print '</table>';
 	      print "</form>\n";  
 	    }
+
+	  /*
+	   * Confirmation de la validation
+	   *
+	   */	  
+	  if ($action == 'valid')
+	    {
+	      $htmls = new Form($db);
+	      $htmls->form_confirm($PHP_SELF.'?id='.$id,
+				   "Valider une newsletter",
+				   "Etes-vous s�r de vouloir valider cette newsletter ?");
+	    }
+	  /*
+	   *
+	   *
+	   */
+	  if ($action == 'send')
+	    {
+	      
+	      print '<form method="post" action="'.$PHP_SELF.'?id='.$id.'">';
+	      print '<input type="hidden" name="action" value="confirm_send">';
+	      print '<table cellspacing="0" border="1" width="100%" cellpadding="3">';
+	      
+	      print '<tr><td colspan="3">Envoi de newsletter</td></tr>';
+	      
+	      print '<tr><td class="delete">Etes-vous sur de vouloir envoyer cette newsletter ?</td><td class="delete">';
+	      $htmls = new Form($db);
+	      
+	      $htmls->selectyesno("confirm","no");
+	      
+	      print "</td>\n";
+	      print '<td class="delete" align="center"><input type="submit" value="Confirmer"</td></tr>';
+	      print '</table>';
+	      print "</form>\n";  
+	    }
 	  
 	  /*
 	   * Edition de la fiche
@@ -132,9 +189,16 @@ else
 	      print '<input type="hidden" name="action" value="update">';
 	      
 	      print '<table border="1" width="100%" cellspacing="0" cellpadding="4">';
+
+	      print '<tr><td>Emetteur nom</td><td><input name="email_from_name" size="30" value="'.$newsletter->email_from_name.'"></td></tr>';
+	      print '<tr><td>Emetteur email</td><td><input name="email_from_email" size="40" value="'.$newsletter->email_from_email.'"></td></tr>';
+	      print '<tr><td>Email de r�ponse</td><td><input name="email_replyto" size="40" value="'.$newsletter->email_replyto.'"></td></tr>';
+	      
 	      print "<tr>";
-	      print '<td width="20%">Nom</td><td><input name="nom" size="40" value="'.$newsletter->nom.'"></td>';
+	      print '<td width="20%">Sujet</td>';
+	      print '<td><input name="email_subject" size="40" value="'.$newsletter->email_subject.'"></td>';
 
+	      print '<tr><td width="20%" valign="top">Texte</td><td width="80%"><textarea name="email_body" rows="10" cols="60">'.$newsletter->email_body.'</textarea></td></tr>';
 
 	      print '<tr><td colspan="2" align="center"><input type="submit" value="Enregistrer">&nbsp;<input type="submit" value="Annuler" name="cancel"></td></tr>';
 	      
@@ -144,23 +208,35 @@ else
 	      
 	    }    
 
+	  /*
+	   * Affichage de la fiche
+	   *
+	   */
+
 	  print '<div class="titre">Fiche Newsletter : '.$newsletter->titre.'</div><br>';
 
 	  print '<table border="1" width="100%" cellspacing="0" cellpadding="4">';
-	  print "<tr>";
-	  print '<td width="20%">Nom</td><td width="80%">'.$newsletter->nom.'</td></tr>';
-
-	  print '<tr><td>Livres</td><td>';
 
-	  foreach ($livres as $key => $value)
-	    {
-	      print '<a href="../livre/fiche.php?id='.$key.'">'.$value."<br>\n";
-	    }
-	  print "</td></tr>";
+	  print '<tr><td width="20%">Emetteur nom</td><td>'.$newsletter->email_from_name.'</td></tr>';
+	  print '<tr><td width="20%">Emetteur email</td><td>'.$newsletter->email_from_email.'</td></tr>';
+	  print '<tr><td width="20%">Email de r�ponse</td><td>'.$newsletter->email_replyto.'</td></tr>';	  
+	  print '<tr><td width="20%">Nom</td><td width="80%">'.$newsletter->email_subject.'</td></tr>';
+	  print '<tr><td width="20%" valign="top">Texte</td><td width="80%">'.nl2br($newsletter->email_body).'</td></tr>';
 
 	  print "</table>";
 
+	  if ($newsletter->status == 3)
+	    {
+	      print "<br />";
+	      print '<table border="1" width="100%" cellspacing="0" cellpadding="4">';
 
+	      print '<tr><td width="20%">D�but de l\'envoi</td><td width="30%">'.strftime("%d %B %Y %H:%M:%S",$newsletter->date_send_begin).'</td>';
+	      print '<td width="20%">Nombre de mails envoy�s</td><td width="30%">'.$newsletter->nbsent.'</td></tr>';
+
+	      print '<tr><td width="20%">Fin de l\'envoi</td><td width="30%">'.strftime("%d %B %Y %H:%M:%S",$newsletter->date_send_end).'</td>';
+	      print '<td width="20%">Nombre de mails en erreur</td><td width="30%">'.$newsletter->nberror.'</td></tr>';
+	      print "</table>";
+	    }
 
 	}
       else
@@ -183,27 +259,47 @@ else
 /* ************************************************************************** */
 
 print '<br><table width="100%" border="1" cellspacing="0" cellpadding="3">';
-print '<td width="20%" align="center">-</td>';
 
 if ($action == 'create')
 {
   print '<td width="20%" align="center">-</td>';
 }
-else
+elseif ($newsletter->status == 0)
 {
   print '<td width="20%" align="center">[<a href="fiche.php?action=edit&id='.$id.'">Editer</a>]</td>';
 }
+else
+{
+  print '<td width="20%" align="center">-</td>';
+}
+
+if ($newsletter->status == 0 && $id)
+{
+  print '<td width="20%" align="center">[<a href="fiche.php?action=valid&id='.$id.'">Valider</a>]</td>';
+}
+else
+{
+  print '<td width="20%" align="center">-</td>';
+}
+
+if ($newsletter->status == 1)
+{
+  print '<td width="20%" align="center">[<a href="fiche.php?action=send&id='.$id.'">Envoyer</a>]</td>';
+}
+else
+{
+  print '<td width="20%" align="center">-</td>';
+}
 
-print '<td width="20%" align="center">-</td>';
 print '<td width="20%" align="center">-</td>';
 
-if(sizeof($livres)==0 && $id)
+if($id && $newsletter->status == 0)
 {
   print '<td width="20%" align="center">[<a href="fiche.php?action=delete&id='.$id.'">Supprimer</a>]</td>';
 }
 else
 {
-  print '<td width="20%" align="center">[Supprimer]</td>';
+  print '<td width="20%" align="center">-</td>';
 }
 
 
diff --git a/htdocs/boutique/newsletter/newsletter.class.php b/htdocs/boutique/newsletter/newsletter.class.php
new file mode 100644
index 0000000000000000000000000000000000000000..c8eeb7f7d72b3b239f73e6c8de4d94f0e4d8196d
--- /dev/null
+++ b/htdocs/boutique/newsletter/newsletter.class.php
@@ -0,0 +1,217 @@
+<?PHP
+/* Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * $Id$
+ * $Source$
+ *
+ */
+
+class Newsletter {
+  var $db ;
+
+  var $id ;
+  var $email_from_name;
+  var $email_from_email;
+  var $email_replyto;
+  var $email_body;
+  var $status;
+
+  Function Newsletter($DB, $id=0) {
+    $this->db = $DB;
+    $this->id = $id ;
+
+    $statustext[0] = "R�daction";
+    $statustext[1] = "Valid�";
+    $statustext[2] = "Envoi en cours";
+    $statustext[3] = "Envoy�";
+    $statustext[4] = "Non envoy� (erreur)";
+
+  }  
+  /*
+   *
+   *
+   *
+   */
+  Function create($user) {
+
+    $sql = "INSERT INTO llx_newsletter (fk_user_author, datec, nbsent) VALUES (".$user->id.",now(), 0)";
+    
+    if ($this->db->query($sql) )
+      {
+	$id = $this->db->last_insert_id();
+	
+	if ( $this->update($id, $user) )
+	  {
+	    return $id;
+	  }
+      }    
+  }
+
+  /*
+   *
+   *
+   */
+  Function update($id, $user)
+  {
+
+    if (strlen(trim($this->email_replyto))==0)
+      {
+	$this->email_replyto = $this->email_from_email;
+      }
+    $this->target = 1;
+
+    $this->target_sql = $this->build_sql($this->target);
+
+    $sql = "UPDATE llx_newsletter ";
+    $sql .= " SET email_subject = '" . trim($this->email_subject) ."'";
+    $sql .= ", email_from_name = '" . trim($this->email_from_name) ."'";
+    $sql .= ", email_from_email = '" . trim($this->email_from_email) ."'";
+    $sql .= ", email_replyto = '" . trim($this->email_replyto) ."'";
+    $sql .= ", email_body= '" . trim($this->email_body) ."'";
+    $sql .= ", target = ".$this->target;
+    $sql .= ", sql_target = '".$this->target_sql."'";
+    $sql .= " WHERE rowid = " . $id;
+
+    if ( $this->db->query($sql) ) {
+      return 1;
+    } else {
+      print $this->db->error() . ' in ' . $sql;
+    }
+  }
+  /*
+   *
+   *
+   *
+   */
+  Function fetch ($id) {
+    
+    $sql = "SELECT rowid, email_subject, email_from_name, email_from_email, email_replyto, email_body, target, sql_target, status, date_send_request,".$this->db->pdate("date_send_begin")." as date_send_begin,".$this->db->pdate("date_send_end")." as date_send_end, nbsent, nberror";
+    $sql .= " FROM llx_newsletter WHERE rowid=$id";
+
+    $result = $this->db->query($sql) ;
+
+    if ( $result )
+      {
+	$result = $this->db->fetch_array();
+
+	$this->id               = $result["rowid"];
+	$this->email_subject    = stripslashes($result["email_subject"]);
+	$this->email_from_name  = stripslashes($result["email_from_name"]);
+	$this->email_from_email = stripslashes($result["email_from_email"]);
+	$this->email_replyto    = stripslashes($result["email_replyto"]);
+	$this->email_body       = stripslashes($result["email_body"]);
+	$this->status           = $result["status"];
+	$this->nbsent           = $result["nbsent"];
+	$this->nberror          = $result["nberror"];
+	$this->date_send_end    = $result["date_send_end"];
+	$this->date_send_begin  = $result["date_send_begin"];
+
+	$this->status_text = $statustext[$this->status];
+	
+	$this->db->free();
+      }
+    else
+      {
+	print $this->db->error();
+      }
+    
+    return $result;
+  }
+  /*
+   *
+   *
+   *
+   */
+  Function liste_array ()
+  {
+    $ga = array();
+
+    $sql = "SELECT rowid, nom FROM llx_editeur ORDER BY nom";
+
+    if ($this->db->query($sql) )
+      {
+	$nump = $this->db->num_rows();
+	
+	if ($nump)
+	  {
+	    $i = 0;
+	    while ($i < $nump)
+	      {
+		$obj = $this->db->fetch_object($i);
+		
+		$ga[$obj->rowid] = $obj->nom;
+		$i++;
+	      }
+	  }
+	return $ga;
+      }
+    else
+      {
+	print $this->db->error();
+      }
+    
+  }
+  /*
+   *
+   *
+   *
+   */
+  Function validate($user) {
+
+    $sql = "UPDATE llx_newsletter SET status=1, fk_user_valid = $user->id WHERE rowid = $this->id";
+    $return = $this->db->query($sql) ;
+
+  }
+  /*
+   *
+   *
+   */
+  Function send($user) {
+
+    $sql = "UPDATE llx_newsletter SET status=2, date_send_request=now() WHERE rowid = $this->id";
+    $return = $this->db->query($sql) ;
+
+  }
+  /*
+   *
+   *
+   */
+  Function build_sql($target)
+  {
+    if ($target == 1)
+      {
+
+	$sql = "SELECT c.customers_lastname as name, c.customers_firstname as firstname, c.customers_email_address as email";
+	$sql .= " FROM ".DB_NAME_OSC.".customers as c";
+	$sql .= " WHERE c.customers_newsletter=1";
+
+      }
+
+    return $sql;
+  }
+  /*
+   *
+   *
+   */
+  Function delete() {
+
+    $sql = "DELETE FROM llx_newsletter WHERE rowid = $this->id ";
+    $return = $this->db->query($sql) ;
+
+  }
+}
+?>
diff --git a/htdocs/boutique/notification/index.php b/htdocs/boutique/notification/index.php
index 98fe893b1fdec8521d19f66fd810e50f5b57e9bb..3de692a0bbefbe6c5322b2ec2d591391f0393d6a 100644
--- a/htdocs/boutique/notification/index.php
+++ b/htdocs/boutique/notification/index.php
@@ -26,7 +26,7 @@ llxHeader();
 
 $db = new Db();
 if ($sortfield == "") {
-  $sortfield="lower(e.nom)";
+  $sortfield="lower(c.customers_lastname)";
 }
 if ($sortorder == "") {
   $sortorder="ASC";
@@ -37,30 +37,37 @@ if ($page == -1) { $page = 0 ; }
 $limit = $conf->liste_limit;
 $offset = $limit * $page ;
 
-print_barre_liste("Liste des Editeurs", $page, $PHP_SELF);
+print_barre_liste("Liste des notifications", $page, $PHP_SELF);
 
-$sql = "SELECT e.rowid, e.nom FROM llx_editeur as e";
-  
+$sql = "SELECT c.customers_id, c.customers_lastname, c.customers_firstname, p.products_name, p.products_id";
+$sql .= " FROM ".DB_NAME_OSC.".products_notifications as n,".DB_NAME_OSC.".products_description as p";
+$sql .= ",".DB_NAME_OSC.".customers as c";
+$sql .= " WHERE n.customers_id = c.customers_id AND p.products_id=n.products_id";
+$sql .= " AND p.language_id = ".OSC_LANGUAGE_ID;
 $sql .= " ORDER BY $sortfield $sortorder ";
 $sql .= $db->plimit( $limit ,$offset);
  
-if ( $db->query($sql) ) {
+if ( $db->query($sql) )
+{
   $num = $db->num_rows();
   $i = 0;
   print "<p><TABLE border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"4\">";
   print "<TR class=\"liste_titre\"><td>";
-  print_liste_field_titre("Nom",$PHP_SELF, "e.nom");
+  print_liste_field_titre("Client",$PHP_SELF, "c.customers_lastname");
   print "</td>";
+  print "<td>Produit</td>";
   print "</TR>\n";
   $var=True;
-  while ($i < $num) {
-    $objp = $db->fetch_object( $i);
-    $var=!$var;
-    print "<TR $bc[$var]>";
-    print "<TD width='70%'><a href=\"fiche.php?id=$objp->rowid\">$objp->nom</a></TD>\n";
-    print "</TR>\n";
-    $i++;
-  }
+  while ($i < $num)
+    {
+      $objp = $db->fetch_object( $i);
+      $var=!$var;
+      print "<TR $bc[$var]>";
+      print "<TD width='70%'><a href=\"fiche.php?id=$objp->rowid\">$objp->customers_firstname $objp->customers_lastname</a></TD>\n";
+      print '<td><a href="/boutique/livre/fiche.php?oscid='.$objp->products_id.'">'.$objp->products_name."</a></td>";
+      print "</TR>\n";
+      $i++;
+    }
   print "</TABLE>";
   $db->free();
 }
diff --git a/htdocs/lib/functions.inc.php3 b/htdocs/lib/functions.inc.php3
index 07b03f41ff6af84bfad4876d85380aa56fe78db4..e0ad366d6393fe61a8b430ca89a3a6f814e69611 100644
--- a/htdocs/lib/functions.inc.php3
+++ b/htdocs/lib/functions.inc.php3
@@ -254,7 +254,7 @@ function print_titre($titre)
  *
  *
  */
-function print_barre_liste($titre,$page,$file,$options='')
+function print_barre_liste($titre, $page, $file, $options='', $sortfield='', $sortorder='')
  {
   global $conf;
   print '<table width="100%" border="0" cellpadding="3" cellspacing="0">';
@@ -268,6 +268,18 @@ function print_barre_liste($titre,$page,$file,$options='')
      print '<tr><td><div class="titre">'.$titre.'</div></td>';
    }
   print '<td align="right">';
+
+  if (strlen($sortfield))
+    {
+      $options .= "&sortfield=$sortfield";
+    }
+
+  if (strlen($sortorder))
+    {
+      $options .= "&sortorder=$sortorder";
+    }
+
+
   if ($page > 0) 
     {
       print '<a href="'.$file.'?page='.($page-1).$options.'"><img alt="Page pr�c�dente" src="/theme/'.$conf->theme.'/img/1leftarrow.png" border="0"></a>';
diff --git a/scripts/newsletter-send.pl b/scripts/newsletter-send.pl
index 38cb9e826f220061f2e8acdfca52921bb04c62ad..82fbcd1b79023dc31030fda5669b7fe2494d2a2c 100755
--- a/scripts/newsletter-send.pl
+++ b/scripts/newsletter-send.pl
@@ -24,6 +24,7 @@ $SYSLOG_LEVEL = 'local3';
 use strict;
 use vars qw($SYSLOG_LEVEL);
 use DBI;
+use Net::SMTP;
 use Text::Wrap;
 use Getopt::Long;
 use Sys::Syslog qw(:DEFAULT setlogsock);
@@ -41,7 +42,7 @@ unless (defined $ENV{"DBI_DSN"}) {
 }
 
 
-my($dbh, $sth, $sthi, $i, $sqli, $sql, $stha, $digest, $mesg);
+my($dbh, $sth, $sthi, $i, $sqli, $sql, $stha, $digest);
 
 print "Running in verbose mode level $verbose\n" if $verbose>0;
 
@@ -49,9 +50,9 @@ my $sl = Sys::Syslog::setlogsock('unix');
 $sl = Sys::Syslog::openlog('send-newsletter.pl', 'pid', $SYSLOG_LEVEL);
 $sl = Sys::Syslog::syslog('info', 'Start');
 
-print "Start on "  if $verbose>0;
+print "Start\n"  if $verbose>0;
 
-print "Open DBI connection\n" if $verbose>3;
+print "DBI connection : open\n" if $verbose>3;
 $dbh = DBI->connect() || die $DBI::errstr;
 
 #
@@ -74,21 +75,19 @@ $dbh = DBI->connect() || die $DBI::errstr;
 
 my $sqli = "SELECT rowid, email_subject, email_from_name, email_from_email, email_replyto, email_body, target, sql_target, status, date_send_request, date_send_begin, date_send_end, nbsent";
 
-$sqli .= " FROM llx_newsletter WHERE status=1 AND date_send_request < now()";
+$sqli .= " FROM llx_newsletter WHERE status=2 AND date_send_request < now()";
 $sthi = $dbh->prepare($sqli);
 
 $sthi->execute;
 
 my ($hsri);
-while ( $hsri = $sthi->fetchrow_hashref )
-{
+while ( $hsri = $sthi->fetchrow_hashref ) {
 
     #
     # Update newsletter
     #
-    if (!$debug)
-    {
-	$stha = $dbh->prepare("UPDATE llx_newsletter SET date_send_begin=now() WHERE rwoid=" . $hsri->{"rowid"});
+    if (!$debug) {
+	$stha = $dbh->prepare("UPDATE llx_newsletter SET status=4,date_send_begin=now() WHERE rowid=" . $hsri->{"rowid"});
 	$stha->execute;
 	$stha->finish;
     }
@@ -96,42 +95,62 @@ while ( $hsri = $sthi->fetchrow_hashref )
     #
     #
     #
+    my ($fromemail, $from, $replyto, $subject, $mesg);
 
-    $from    = $hsri->{"email_from_name"} . "<" . $hsri->{"email_from_email"} . ">";
-    $replyto = $hsri->{"email_replyto"};
-    $mesg    = $hsri->{"email_body"};
-    $subject = $hsri->{"email_subject"};
-    $sql     = $hsri->{"sql_target"};
+    $from      = $hsri->{"email_from_name"} . " <" . $hsri->{"email_from_email"} . ">";
+    $fromemail = $hsri->{"email_from_email"};
+    $replyto   = $hsri->{"email_replyto"};
+    $mesg      = $hsri->{"email_body"};
+    $subject   = $hsri->{"email_subject"};
+    $sql       = $hsri->{"sql_target"};
+
+    print "Message de : $from\n" if $verbose;
 
     #
     # Read dest
     #
 
-    if ($sql)
-    {
+    if ($sql) {
 
 	$sth = $dbh->prepare($sql);
 	$sth->execute;
 
-	my($nbdest) = (0);
+	my($nbdest, $nberror) = (0,0);
     
-	while ( $hsr = $sth->fetchrow_hashref )
+	while (my $hsr = $sth->fetchrow_hashref )
 	{
 
 	    if (length($hsr->{"email"}) > 0)
 	    {
-		my $firstname = $hsr->{"prenom"};
-		my $name = $hsr->{"nom"};
+		my $firstname = $hsr->{"firstname"};
+		my $lastname = $hsr->{"name"};
+		my $email = "$firstname $lastname <".$hsr->{"email"}.">";
 		
-		my $gm = mail_it($hsr->{"email"}, 
-				 $from, 
-				 $subject,
-				 $mesg,
-				 $replyto);
+
+		if (!$debug)
+		{
+
+		    if (! mail_it($hsr->{"email"},
+				  $email,
+				  $fromemail, 
+				  $from,
+				  $subject,
+				  $mesg,
+				  $replyto))
+		    {
+			$nberror++;
+			print $nberror;
+
+		    }
+		    
+		}
+		else
+		{
+		    print "$nbdest : Mail $from -> ".$email."\n" if $verbose;
+		}
 	    }
 	    
-	    $nbdest++;
-	    
+	    $nbdest++;	    
 	}
 
 	$sth->finish;
@@ -141,18 +160,22 @@ while ( $hsri = $sthi->fetchrow_hashref )
 	#
 	if (!$debug)
 	{
-	    $stha = $dbh->prepare("UPDATE llx_newsletter SET status=3,date_send_end=now(), nbsent=$nbdest WHERE rowid=" . $hsri->{"rowid"});
+	    $stha = $dbh->prepare("UPDATE llx_newsletter SET status=3,date_send_end=now(), nbsent=$nbdest, nberror=$nberror WHERE rowid=" . $hsri->{"rowid"});
 	    $stha->execute;
 	    $stha->finish;
 	}
+    } else {
+	print "No sql request";
     }
 
 }
 $sthi->finish;
 
-print "Close DBI connection\n" if $verbose>3;
+print "DBI connection : close\n" if $verbose>3;
 
 $dbh->disconnect;
+
+print "End\n" if $verbose>0;
 #
 # 
 #
@@ -162,7 +185,6 @@ $sl = Sys::Syslog::syslog('info', 'End');
 
 Sys::Syslog::closelog();
 
-
 #
 #
 #
@@ -174,7 +196,7 @@ sub print_help {
 }
 
 sub mail_it {
-    my ($to, $from, $subject, $mesg, $replyto) = @_;
+    my ($toemail, $to, $fromemail, $from, $subject, $mesg, $replyto) = @_;
     my ($smtp);
 
     $mesg = wrap("","",$mesg);
@@ -183,24 +205,38 @@ sub mail_it {
 			   Hello => 'localhost',
 			   Timeout => 30);
     
-    if ($smtp)
-    {
-	$smtp->mail($from);
-	$smtp->to($to);
+    if ($smtp) {
+
+	print "Mail $from -> ".$to."\n" if $verbose;
+
+	if ($smtp->verify($toemail)) {
+
+	    $smtp->mail($fromemail);
+	    $smtp->to($toemail);
     
-	$smtp->data();
-	$smtp->datasend("From: $from\n");
-	$smtp->datasend("Reply-To: $replyto\n") if $replyto;
-	$smtp->datasend("Content-Type: text/plain; charset=\"iso-8859-1\"\n");
-	$smtp->datasend("To: $to\n");
-	$smtp->datasend("Subject: $subject\n");
-	$smtp->datasend("X-Mailer: Dolibarr\n");
-	$smtp->datasend("\n");
+	    $smtp->data();
+	    $smtp->datasend("From: $from\n");
+	    $smtp->datasend("Reply-To: $replyto\n") if $replyto;
+	    $smtp->datasend("Content-Type: text/plain; charset=\"iso-8859-1\"\n");
+	    $smtp->datasend("To: $to\n");
+	    $smtp->datasend("Subject: $subject\n");
+	    $smtp->datasend("X-Mailer: Dolibarr\n");
+	    $smtp->datasend("\n");
 	
-	$smtp->datasend($mesg);
+	    $smtp->datasend($mesg);
+	    
+	    $smtp->dataend();
+
+	    return 1;
+
+	} else {
+	    return 0;
+	}
 	
-	$smtp->dataend();
 	$smtp->quit;
+
+    } else {
+	return 0;
     }
 }