diff --git a/htdocs/admin/adherent.php b/htdocs/admin/adherent.php
index 3ea0368d669b89af79e01b5d5d932281fb34ea4b..67561d35948125d20d5ad74e4bcfa96607cee81e 100644
--- a/htdocs/admin/adherent.php
+++ b/htdocs/admin/adherent.php
@@ -54,27 +54,15 @@ $var=True;
 // Action mise a jour ou ajout d'une constante
 if ($_POST["action"] == 'update' || $_POST["action"] == 'add')
 {
-  if (isset($_POST["consttype"]) && $_POST["consttype"] != '')
+	if (! dolibarr_set_const($db, $_POST["constname"],$_POST["constvalue"],$typeconst[$_POST["consttype"]],0,isset($_POST["constnote"])?$_POST["constnote"]:''))
 	{
-		$sql = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = '".$_POST["constname"]."';";
-	    $db->query($sql);
-		$sql = '';
-		$sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,value,type,visible,note) VALUES ('".$_POST["constname"]."','".$_POST["constvalue"]."','".$typeconst[$_POST["consttype"]]."',0,'".$_POST["constnote"]."') ;";
-
-  }
+		print $db->error();
+	}
 	else
 	{
-	    $sql = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = '".$_POST["constname"]."';";
-	    $db->query($sql);
-		$sql ='';
-		$sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,value,visible,note) VALUES ('".$_POST["constname"]."','".$_POST["constvalue"]."',0,'".$_POST["constnote"]."') ;";
-  }
-  
-  if ($db->query($sql))
-    {
-      Header("Location: adherent.php");
-    }
-  
+        Header("Location: adherent.php");
+		exit;
+	}
 }
 
 // Action activation d'un sous module du module adh�rent
@@ -94,6 +82,7 @@ if ($_GET["action"] == 'set')
     if ($result)
     {
         Header("Location: adherent.php");
+		exit;
     }
     else {
         dolibarr_print_error($db);   
@@ -270,7 +259,7 @@ $db->close();
 print '<br>';
 
 
-llxFooter();
+llxFooter('$Date$ - $Revision$');
 
 
 function form_constantes($tableau){
diff --git a/htdocs/admin/ldap.php b/htdocs/admin/ldap.php
index b89142e98609617aee843937f527d6e54537bcc6..7e19d6c9da3b205e63ee8edff88da926e62d7547 100644
--- a/htdocs/admin/ldap.php
+++ b/htdocs/admin/ldap.php
@@ -3,6 +3,7 @@
  * Copyright (C) 2004 Sebastien Di Cintio  <sdicintio@ressource-toi.org>
  * Copyright (C) 2004 Benoit Mortier       <benoit.mortier@opensides.be>
  * Copyright (C) 2005 Regis Houssin        <regis.houssin@cap-networks.com>
+ * Copyright (C) 2006 Laurent Destailleur  <eldy@users.sourceforge.net>
  *
  * 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
@@ -52,91 +53,60 @@ if (!$user->admin)
  
 if ($_GET["action"] == 'setvalue' && $user->admin)
 {
-  $sql = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = 'LDAP_SERVER_HOST';";
-  $db->query($sql);
-
-  $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,value,visible) VALUES
-	('LDAP_SERVER_HOST','".$_POST["host"]."',0);";
-	$db->query($sql);
-	
-	$sql = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = 'LDAP_SERVER_PORT';";
-  $db->query($sql);
-
-  $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,value,visible) VALUES
-	('LDAP_SERVER_PORT','".$_POST["port"]."',0);";
-	$db->query($sql);
-  
-  //suppression pour compatibilit� divers config ldap
-  //
-  //$sql = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = 'LDAP_SUFFIX_DN';";
-  //$db->query($sql);
-
-  //$sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,value,visible) VALUES
-	//('LDAP_SUFFIX_DN','".$_POST["suffix"]."',0);";
-  //$db->query($sql);
-  
-  $sql = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = 'LDAP_ADMIN_DN';";
-  $db->query($sql);
-  
-  $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,value,visible) VALUES
-	('LDAP_ADMIN_DN','".$_POST["admin"]."',0);";
-  $db->query($sql);
-
-  $sql = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = 'LDAP_ADMIN_PASS';";
-  $db->query($sql);
-  
-  $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,value,visible) VALUES
-	('LDAP_ADMIN_PASS','".$_POST["pass"]."',0);";
-  $db->query($sql);
-  
-  $sql = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = 'LDAP_USER_DN';";
-  $db->query($sql);
-
-  $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,value,visible) VALUES
-	('LDAP_USER_DN','".$_POST["user"]."',0);";
-  $db->query($sql);
-  
-  $sql = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = 'LDAP_GROUP_DN';";
-  $db->query($sql);
-
-  $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,value,visible) VALUES
-	('LDAP_GROUP_DN','".$_POST["group"]."',0);";
-  $db->query($sql);
-  
-  $sql = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = 'LDAP_CONTACT_ACTIVE';";
-  $db->query($sql);
-
-  $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,value,visible) VALUES
-	('LDAP_CONTACT_ACTIVE','".$_POST["activecontact"]."',0);";
-  $db->query($sql);
-  
-  $sql = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = 'LDAP_CONTACT_DN';";
-  $db->query($sql);
-
-  $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,value,visible) VALUES
-	('LDAP_CONTACT_DN','".$_POST["contact"]."',0);";
-  $db->query($sql);
-
-  $sql = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = 'LDAP_SERVER_PROTOCOLVERSION';";
-  $db->query($sql);
-
-  $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,value,visible) VALUES
-	('LDAP_SERVER_PROTOCOLVERSION','".$_POST["version"]."',0);";
-  $db->query($sql);
-
-
-  $sql = "DELETE FROM ".MAIN_DB_PREFIX."const WHERE name = 'LDAP_SERVER_TYPE';";
-  $db->query($sql);
-
-  $sql = "INSERT INTO ".MAIN_DB_PREFIX."const (name,value,visible) VALUES
-	('LDAP_SERVER_TYPE','".$_POST["type"]."',0);";
-
-  if ($db->query($sql))
+	if (! dolibarr_set_const($db, 'LDAP_SERVER_TYPE',$_POST["type"]))
+	{
+		print $db->error();
+	}
+	if (! dolibarr_set_const($db, 'LDAP_SERVER_PROTOCOLVERSION',$_POST["version"]))
+	{
+		print $db->error();
+	}
+
+	if (! dolibarr_set_const($db, 'LDAP_SERVER_HOST',$_POST["host"]))
+	{
+		print $db->error();
+	}
+	if (! dolibarr_set_const($db, 'LDAP_SERVER_PORT',$_POST["port"]))
+	{
+		print $db->error();
+	}
+	if (! dolibarr_set_const($db, 'LDAP_ADMIN_DN',$_POST["admin"]))
+	{
+		print $db->error();
+	}
+	if (! dolibarr_set_const($db, 'LDAP_ADMIN_PASS',$_POST["pass"]))
+	{
+		print $db->error();
+	}
+	if (! dolibarr_set_const($db, 'LDAP_ADMIN_DN',$_POST["admin"]))
+	{
+		print $db->error();
+	}
+	if (! dolibarr_set_const($db, 'LDAP_USER_DN',$_POST["user"]))
+	{
+		print $db->error();
+	}
+	if (! dolibarr_set_const($db, 'LDAP_GROUP_DN',$_POST["group"]))
+	{
+		print $db->error();
+	}
+	if (! dolibarr_set_const($db, 'LDAP_CONTACT_ACTIVE',$_POST["activecontact"]))
+	{
+		print $db->error();
+	}
+	if (! dolibarr_set_const($db, 'LDAP_CONTACT_DN',$_POST["contact"]))
+	{
+		print $db->error();
+	}
+	if ($db->query($sql))
     {
-      Header("Location: ldap.php");
+    	Header("Location: ldap.php");
+    	exit;
     }
 }
 
+
+
 /*
  * Visu
  */
@@ -145,293 +115,216 @@ llxHeader();
 
 print_titre($langs->trans("LDAPSetup"));
 
-print '<br>';
-print '<table class="noborder" width="100%">';
-print '<tr>';
-print '<td width="50%" valign="top">';
-
-print '<table class="border" width="100%">';
-print '<tr class="liste_titre">';
-print '<td>'.$langs->trans("Parameter").'</td>';
-print '<td>'.$langs->trans("Value").'</td><td colspan="2">&nbsp;</td>';
-print "</tr>\n";
-    
-if (defined("LDAP_SERVER_HOST") && LDAP_SERVER_HOST)
-{
-  print '<tr><td>'.$langs->trans("LDAPServer").'</td><td>'.LDAP_SERVER_HOST.'</td></tr>';
-}
-else
-{
-  print '<tr><td>'.$langs->trans("LDAPServer").'</td><td>'.$langs->trans("LDAPServerExample").'</td></tr>';
-}
-if (defined("LDAP_SERVER_PORT") && LDAP_SERVER_PORT)
-{
-  print '<tr><td>'.$langs->trans("LDAPServerPort").'</td><td>'.LDAP_SERVER_PORT.'</td></tr>';
-}
-else
-{
-  print '<tr><td>'.$langs->trans("LDAPServerPort").'</td><td>'.$langs->trans("LDAPServerPortExample").'</td></tr>';
-}
-
-//suppression pour compatibilit� divers config ldap
-//
-//if (defined("LDAP_SUFFIX_DN") && LDAP_SUFFIX_DN)
-//{
-//    print '<tr><td>'.$langs->trans("LDAPSuffix").'</td><td>'.LDAP_SUFFIX_DN.'</td></tr>';
-//}
-//else
-//{
-//	  print '<tr><td>'.$langs->trans("LDAPSuffix").'</td><td>'.$langs->trans("LDAPSuffixExample").'</td></tr>';
-//}
-
-if (defined("LDAP_ADMIN_DN") && LDAP_ADMIN_DN)
-{
-  print '<tr><td>'.$langs->trans("DNAdmin").'</td><td>'.LDAP_ADMIN_DN.'</td></tr>';
-}
-else
-{
-  print '<tr><td>'.$langs->trans("DNAdmin").'</td><td>'.$langs->trans("DNAdminExample").'</td></tr>';
-}
-if (defined("LDAP_ADMIN_PASS") && LDAP_ADMIN_PASS)
-{
-  print '<tr><td>'.$langs->trans("LDAPPassword").'</td><td>********</td></tr>';
-}
-else
-{
-  print '<tr><td>'.$langs->trans("LDAPPassword").'</td><td>'.$langs->trans("LDAPPasswordExample").'</td></tr>';
-}
-if (defined("LDAP_USER_DN") && LDAP_USER_DN)
+// Test si fonction LDAP actives
+if (! function_exists("ldap_connect"))
 {
-  print '<tr><td>'.$langs->trans("DNUser").'</td><td>'.LDAP_USER_DN.'</td></tr>';
-}
-else
-{
-  print '<tr><td>'.$langs->trans("DNUser").'</td><td>'.$langs->trans("DNUserExample").'</td></tr>';
-}
-if (defined("LDAP_GROUP_DN") && LDAP_GROUP_DN)
-{
-  print '<tr><td>'.$langs->trans("DNGroup").'</td><td>'.LDAP_GROUP_DN.'</td></tr>';
-}
-else
-{
-  print '<tr><td>'.$langs->trans("DNGroup").'</td><td>'.$langs->trans("DNGroupExample").'</td></tr>';
-}
-if (defined("LDAP_CONTACT_ACTIVE") && LDAP_CONTACT_ACTIVE)
-{
-  print '<tr><td>'.$langs->trans("DNContactActive").'</td><td>'.$langs->trans("DNContactActiveYes").'</td></tr>';
-}
-else
-{
-  print '<tr><td>'.$langs->trans("DNContactActive").'</td><td>'.$langs->trans("DNContactActiveExample").'</td></tr>';
-}
-if (defined("LDAP_CONTACT_DN") && LDAP_CONTACT_DN)
-{
-  print '<tr><td>'.$langs->trans("DNContact").'</td><td>'.LDAP_CONTACT_DN.'</td></tr>';
-}
-else
-{
-  print '<tr><td>'.$langs->trans("DNContact").'</td><td>'.$langs->trans("DNContactExample").'</td></tr>';
-}
-if (defined("LDAP_SERVER_TYPE") && LDAP_SERVER_TYPE)
-{
-  print '<tr><td>'.$langs->trans("Type").'</td><td>'.LDAP_SERVER_TYPE.'</td></tr>';
-}
-    else
-{
-  print '<tr><td>'.$langs->trans("Type").'</td><td>'.$langs->trans("TypeExample").'</td></tr>';
+	$mesg=$langs->trans("LDAPFunctionsNotAvailableOnPHP");
 }
 
-print '<tr><td>'.$langs->trans("Version").'</td><td>'.LDAP_SERVER_PROTOCOLVERSION.'</td></tr>';
+if ($mesg) print '<div class="error">'.$mesg.'</div>';
 
-print '</table>';
 
-print '</td><td width="50%">';
-
-/*
- * Modification
- */
 
 print '<form method="post" action="ldap.php?action=setvalue">';
 
-print '<table class="border" width="100%">';
+print '<table class="noborder" width="100%">';
 print '<tr class="liste_titre">';
 print '<td>'.$langs->trans("Parameter").'</td>';
-print '<td>'.$langs->trans("Value").'</td><td colspan="2">&nbsp;</td>';
+print '<td>'.$langs->trans("Value").'</td>';
+print '<td>'.$langs->trans("Example").'</td>';
 print "</tr>\n";
-print '<tr><td>';
+   
+$var=true;
+$html=new Form($db);
+
+// Type
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("Type").'</td><td>';
+$arraylist=array();
+$arraylist['activedirectory']='Active Directory';
+$arraylist['openldap']='OpenLdap';
+$arraylist['egroupware']='Egroupware';
+$html->select_array('type',$arraylist,$conf->global->LDAP_SERVER_TYPE);
+print '</td><td>&nbsp;</td></tr>';
+
+// Version
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("Version").'</td><td>';
+$arraylist=array();
+$arraylist['3']='Version 3';
+$arraylist['2']='Version 2';
+$html->select_array('version',$arraylist,$conf->global->LDAP_SERVER_PROTOCOLVERSION);
+print '</td><td>&nbsp;</td></tr>';
+
+// Serveur
+$var=!$var;
+print '<tr '.$bc[$var].'><td>';
 print $langs->trans("LDAPServer").'</td><td>';
-print '<input size="25" type="text" name="host" value="'.LDAP_SERVER_HOST.'">';
-print '</td></tr>';
-print '<tr><td>'.$langs->trans("LDAPServerPort").'</td><td>';
-if (defined("LDAP_SERVER_PORT") && LDAP_SERVER_PORT)
+print '<input size="25" type="text" name="host" value="'.$conf->global->LDAP_SERVER_HOST.'">';
+print '</td><td>'.$langs->trans("LDAPServerExample").'</td></tr>';
+
+// Port
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPServerPort").'</td><td>';
+if ($conf->global->LDAP_SERVER_PORT)
 {
-  print '<input size="25" type="text" name="port" value="'.LDAP_SERVER_PORT.'">';
+  print '<input size="25" type="text" name="port" value="'.$conf->global->LDAP_SERVER_PORT.'">';
 }
 else
 {
   print '<input size="25" type="text" name="port" value="389">';
 }
-print '</td></tr>';
-
-//suppression pour compatibilit� divers config ldap
-//
-//print '<tr><td>'.$langs->trans("LDAPSuffix").'</td><td>';
-//print '<input size="25" type="text" name="suffix" value="'.LDAP_SUFFIX_DN.'">';
-//print '</td></tr>';
-
-print '<tr><td>'.$langs->trans("DNAdmin").'</td><td>';
-print '<input size="25" type="text" name="admin" value="'.LDAP_ADMIN_DN.'">';
-print '</td></tr>';
-print '<tr><td>'.$langs->trans("LDAPPassword").'</td><td>';
-if (defined("LDAP_ADMIN_PASS") && LDAP_ADMIN_PASS)
-{
-  print '<input size="25" type="password" name="pass" value="'.LDAP_ADMIN_PASS.'">';
-}
-else
-{
-  print '<input size="25" type="text" name="pass" value="'.LDAP_ADMIN_PASS.'">';
-}
-print '</td></tr>';
-print '<tr><td>'.$langs->trans("DNUser").'</td><td>';
-print '<input size="25" type="text" name="user" value="'.LDAP_USER_DN.'">';
-print '</td></tr>';
-print '<tr><td>'.$langs->trans("DNGroup").'</td><td>';
-print '<input size="25" type="text" name="group" value="'.LDAP_GROUP_DN.'">';
-print '</td></tr>';
-print '<tr><td>'.$langs->trans("DNContactActive").'</td><td><select name="activecontact">';
-if (defined("LDAP_CONTACT_ACTIVE") && LDAP_CONTACT_ACTIVE == 1)
+print '</td><td>'.$langs->trans("LDAPServerPortExample").'</td></tr>';
+
+// DNAdmin
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("DNAdmin").'</td><td>';
+print '<input size="25" type="text" name="admin" value="'.$conf->global->LDAP_ADMIN_DN.'">';
+print '</td><td>&nbsp;</td></tr>';
+
+// Pass
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPPassword").'</td><td>';
+if ($conf->global->LDAP_ADMIN_PASS)
 {
-  print '<option value="1" selected="true">'.$langs->trans("Yes");
+	print '<input size="25" type="password" name="pass" value="'.$conf->global->LDAP_ADMIN_PASS.'">';
 }
 else
 {
-	print '<option value="0" selected="true">'.$langs->trans("No");
-}
-print '<option value="LDAP_CONTACT_ACTIVE">--------';
-print '<option value="0">'.$langs->trans("No");
-print '<option value="1">'.$langs->trans("Yes");
-print '</select>';
-print '</td></tr>';
-print '<tr><td>'.$langs->trans("DNContact").'</td><td>';
-print '<input size="25" type="text" name="contact" value="'.LDAP_CONTACT_DN.'">';
-print '</td></tr>';
-
-print '<tr><td>'.$langs->trans("Type").'</td><td><select name="type">';
-if (defined("LDAP_SERVER_TYPE") && LDAP_SERVER_TYPE == activedirectory)
-{
-  print '<option value="activedirectory" selected="true">Active Directory';
+	print '<input size="25" type="text" name="pass" value="'.$conf->global->LDAP_ADMIN_PASS.'">';
 }
-else
-{
-  if (defined("LDAP_SERVER_TYPE") && LDAP_SERVER_TYPE == egroupware)
-    {
-      print '<option value="egroupware" selected="true">Egroupware';
-    }
-  else
-    {
-      print '<option value="openldap" selected="true">OpenLdap';
-    }
-}
-print '<option value="LDAP_SERVER_TYPE">------------------------';
-print '<option value="openldap">OpenLdap';
-print '<option value="egroupware">Egroupware';
-print '<option value="activedirectory">Active Directory';
-print '</select>';
-print '</td></tr>';
+print '</td><td>&nbsp;</td></tr>';
 
-print '<tr><td>'.$langs->trans("Version").'</td><td><select name="version">';
 
-if (defined("LDAP_SERVER_PROTOCOLVERSION") && LDAP_SERVER_PROTOCOLVERSION == 3)
-{
-  print '<option value="3" selected="true">Version 3';
-}
-else
-{
-  print '<option value="2" selected="true">Version 2';
-}
-print '<option value="LDAP_SERVER_PROTOCOLVERSION">------------------------';
-print '<option value="3">Version 3';
-print '<option value="2">Version 2';
-print '</select>';
-print '</td></tr>';
+print '<tr class="liste_titre">';
+print '<td colspan="3">'.$langs->trans("LDAPSynchronizeUsersAndGroup").'</td>';
+print "</tr>\n";
 
-print '<tr><td colspan="2" align="center"><input type="submit" value="'.$langs->trans("Modify").'"></td></tr>';
-print '</table></form>';
+// Synchro contact active
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("DNUserGroupActive").'</td><td>';
+$arraylist=array();
+$arraylist['0']=$langs->trans("Yes");
+$html->select_array('activecontact',$arraylist,$conf->global->LDAP_USERGROUP_ACTIVE);
+print '</td><td>'.$langs->trans("NotYetAvailable").'</td></tr>';
 
-print '</td></tr></table>';
+// DN Pour les utilisateurs
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("DNUser").'</td><td>';
+print '<input size="25" type="text" name="user" value="'.$conf->global->LDAP_USER_DN.'">';
+print '</td><td>'.$langs->trans("DNUserExample").'</td></tr>';
 
-/*
- * test de la connexion
- */
- 
- 
-if (defined("LDAP_SERVER_HOST") && LDAP_SERVER_HOST) {
-    print '<a class="tabAction" href="ldap.php?action=test">'.$langs->trans("TestConnectLdap").'</a><br><br>';
-}
+// DN pour les groupes
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("DNGroup").'</td><td>';
+print '<input size="25" type="text" name="group" value="'.$conf->global->LDAP_GROUP_DN.'">';
+print '</td><td>'.$langs->trans("DNGroupExample").'</td></tr>';
 
 
-if (defined("LDAP_SERVER_HOST") && LDAP_SERVER_HOST && LDAP_ADMIN_DN && LDAP_ADMIN_PASS && $_GET["action"] == 'test')
-{
-  $ds = dolibarr_ldap_connect();
-  
-  if ($ds)
-    {
-      print img_picto('','info');
-      print "connexion au serveur ldap r�ussie<br>";
-    }
-  else
-    {
-      print img_picto('','alerte');
-  
-      print "connexion au serveur ldap �chou�e";
-      print "<br>";
-      print ldap_error($ds);
-      print "<br>";
-    }
-  if ((dolibarr_ldap_getversion($ds) == 3))
-    {
-      print img_picto('','info');
-      print "Serveur ldap configur� en version 3<br>";
-    }
-  else
-    {
-      print img_picto('','info');
-      print "Serveur ldap configur� en version 2<br>";
-    }
-  
-  $bind = @dolibarr_ldap_bind($ds);
-  
-  if ($bind)
-    {
-      print img_picto('','info');
-      print "connexion au dn $dn r�ussi<br>";
-    }
-  else
-    {
-      print img_picto('','alerte');
+print '<tr class="liste_titre">';
+print '<td colspan="3">'.$langs->trans("LDAPSynchronizeContacts").'</td>';
+print "</tr>\n";
 
-      print "connexion au dn $dn rat� : ";
-      print ldap_error($ds);
-      print "<br>";
-    }
-  
-  $unbind = @dolibarr_ldap_unbind($ds);
-  
-  if ($bind)
-    {
-      print img_picto('','info');
-      print "d�connection du dn $dn r�ussi<br>";
-    }
-  else
-    {
-      print img_picto('','alerte');
+// Synchro contact active
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("DNContactActive").'</td><td>';
+$arraylist=array();
+$arraylist['0']=$langs->trans("No");
+$arraylist['1']=$langs->trans("Yes");
+$html->select_array('activecontact',$arraylist,$conf->global->LDAP_CONTACT_ACTIVE);
+print '</td><td>'.$langs->trans("DNContactActiveExample").'</td></tr>';
 
-      print "d�connection du dn $dn rat�";
-      print "<br>";
-    }
+// DN Pour les contacts
+$var=!$var;
+print '<tr '.$bc[$var].'><td>'.$langs->trans("DNContact").'</td><td>';
+print '<input size="25" type="text" name="contact" value="'.$conf->global->LDAP_CONTACT_DN.'">';
+print '</td><td>'.$langs->trans("DNContactExample").'</td></tr>';
+
+
+print '<tr><td colspan="3" align="center"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></td></tr>';
+print '</table>';
+
+print '</form>';
+
+
+
+/*
+ * Test de la connexion
+ */
+if (function_exists("ldap_connect"))
+{
+	if ($conf->global->LDAP_SERVER_HOST)
+	{
+	    print '<a class="tabAction" href="ldap.php?action=test">'.$langs->trans("TestConnectLdap").'</a><br><br>';
+	}
+	
+	
+	if ($conf->global->LDAP_SERVER_HOST && $conf->global->LDAP_ADMIN_DN && $conf->global->LDAP_ADMIN_PASS && $_GET["action"] == 'test')
+	{
+		// Test ldap_connect
+		$ds = dolibarr_ldap_connect();
+	
+		if ($ds)
+		{
+			print img_picto('','info');
+			print $langs->trans("LDAPTestOK").'<br>';
+		}
+		else
+		{
+			print img_picto('','alerte');
+			print $langs->trans("LDAPTestKO").'<br>';
+			print "<br>";
+			print ldap_error($ds);
+			print "<br>";
+		}
+
+		// Test ldap_getversion
+		if ((dolibarr_ldap_getversion($ds) == 3))
+		{
+			print img_picto('','info');
+			print $langs->trans("LDAPSetupForVersion3").'<br>';
+		}
+		else
+		{
+			print img_picto('','info');
+			print $langs->trans("LDAPSetupForVersion2").'<br>';
+		}
+	
+		// Test ldap_bind
+		$bind = @dolibarr_ldap_bind($ds);
+		if ($bind)
+		{
+			print img_picto('','info');
+			print "Connexion au dn $dn r�ussi<br>";
+		}
+		else
+		{
+			print img_picto('','alerte');
+	
+			print "Connexion au dn $dn rat� : ";
+			print ldap_error($ds);
+			print "<br>";
+		}
+
+		// Test ldap_unbind
+		$unbind = @dolibarr_ldap_unbind($ds);
+		if ($bind)
+		{
+			print img_picto('','info');
+			print "D�connection du dn $dn r�ussi<br>";
+		}
+		else
+		{
+			print img_picto('','alerte');
+	
+			print "D�connection du dn $dn rat�";
+			print "<br>";
+		}
+	}
 }
 
 $db->close();
 
-llxFooter();
+llxFooter('$Date$ - $Revision$');
+
 ?>
diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php
index c3a1e9d3280bed8be0e4f1ec5a493271715a6dd3..12362da0b28e152039a91927485e2bcdc8f2fb3b 100644
--- a/htdocs/admin/modules.php
+++ b/htdocs/admin/modules.php
@@ -1,7 +1,7 @@
 <?php
 /* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
  * Copyright (C) 2003      Jean-Louis Bergamo   <jlb@j1b.org>
- * Copyright (C) 2004-2005 Laurent Destailleur  <eldy@users.sourceforge.net>
+ * Copyright (C) 2004-2006 Laurent Destailleur  <eldy@users.sourceforge.net>
  * Copyright (C) 2004      �ric Seigne          <eric.seigne@ryxeo.com>
  *
  * This program is free software; you can redistribute it and/or modify
@@ -30,9 +30,13 @@
 
 require("./pre.inc.php");
 
+$mode=isset($_GET["mode"])?$_GET["mode"]:0;
+$mesg=isset($_GET["mesg"])?urldecode($_GET["mode"]):"";
+
 if (!$user->admin)
     accessforbidden();
 
+
 /*
  * Actions
  */
@@ -42,7 +46,7 @@ if ($_GET["action"] == 'set' && $user->admin)
     $result=Activate($_GET["value"]);
     $mesg='';
     if ($result) $mesg=$result;
-    Header("Location: modules.php?spe=".$_GET["spe"]."&mesg=".urlencode($mesg));
+    Header("Location: modules.php?mode=".$mode."&mesg=".urlencode($mesg));
 	exit;
 }
 
@@ -51,7 +55,7 @@ if ($_GET["action"] == 'reset' && $user->admin)
     $result=UnActivate($_GET["value"]);
     $mesg='';
     if ($result) $mesg=$result;
-    Header("Location: modules.php?spe=".$_GET["spe"]."&mesg=".urlencode($mesg));
+    Header("Location: modules.php?mode=".$mode."&mesg=".urlencode($mesg));
 	exit;
 }
 
@@ -143,33 +147,31 @@ llxHeader("","");
 
 $h = 0;
 
-$head[$h][0] = DOL_URL_ROOT."/admin/modules.php?spe=0";
+$head[$h][0] = DOL_URL_ROOT."/admin/modules.php?mode=0";
 $head[$h][1] = $langs->trans("ModulesCommon");
-if (!$_GET["spe"]) $hselected=$h;
+if ($mode==0) $hselected=$h;
+$h++;
+
+$head[$h][0] = DOL_URL_ROOT."/admin/modules.php?mode=1";
+$head[$h][1] = $langs->trans("ModulesInterfaces");
+if ($mode==1) $hselected=$h;
 $h++;
 
-$head[$h][0] = DOL_URL_ROOT."/admin/modules.php?spe=1";
+$head[$h][0] = DOL_URL_ROOT."/admin/modules.php?mode=2";
 $head[$h][1] = $langs->trans("ModulesSpecial");
-if ($_GET["spe"]) $hselected=$h;
+if ($mode==2) $hselected=$h;
 $h++;
 
 dolibarr_fiche_head($head, $hselected, $langs->trans("Modules"));
 
 
-if (!$_GET["spe"])
-{
-    print $langs->trans("ModulesDesc")."<br>\n";
-}
-else
-{
-    print $langs->trans("ModulesSpecialDesc")."<br>\n";
-}
+if ($mode==0) print $langs->trans("ModulesDesc")."<br>\n";
+if ($mode==1) print $langs->trans("ModulesInterfaceDesc")."<br>\n";
+if ($mode==2) print $langs->trans("ModulesSpecialDesc")."<br>\n";
 
-if ($_GET["mesg"]) 
-{
-    $mesg=urldecode($_GET["mesg"]);
-    print '<div class="error">'.$mesg.'</div>';
-}
+
+
+if ($mesg) print '<div class="error">'.$mesg.'</div>';
 
 print "<br>\n";
 print "<table class=\"noborder\" width=\"100%\">\n";
@@ -258,7 +260,7 @@ foreach ($orders as $key => $value)
         $atleastoneforfamily=0;
     }
 
-    if ((!$objMod->special && !$_GET["spe"] ) or ($objMod->special && $_GET["spe"]))
+    if ($objMod->special == $mode)
     {
         $atleastoneforfamily=1;
         $var=!$var;
@@ -302,7 +304,7 @@ foreach ($orders as $key => $value)
         {
             // Module actif
             if ($family == 'base') print $langs->trans("Required");
-            else print "<a href=\"modules.php?id=".$objMod->numero."&amp;action=reset&amp;value=" . $modName . "&amp;spe=" . $_GET["spe"] . "\">" . $langs->trans("Disable") . "</a></td>\n";
+            else print "<a href=\"modules.php?id=".$objMod->numero."&amp;action=reset&amp;value=" . $modName . "&amp;mode=" . $mode . "\">" . $langs->trans("Disable") . "</a></td>\n";
 
             if ($objMod->config_page_url)
             {
@@ -345,7 +347,7 @@ foreach ($orders as $key => $value)
             }
 
             // Module non actif
-            print "<a href=\"modules.php?id=".$objMod->numero."&amp;action=set&amp;value=" . $modName . "&amp;spe=" . $_GET["spe"] . "\">" . $langs->trans("Activate") . "</a></td>\n  <td>&nbsp;</td>\n";
+            print "<a href=\"modules.php?id=".$objMod->numero."&amp;action=set&amp;value=" . $modName . "&amp;mode=" . $mode . "\">" . $langs->trans("Activate") . "</a></td>\n  <td>&nbsp;</td>\n";
         }
 
         print "</tr>\n";
diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang
index 52da9e80127eaa4dd47fa415f99287f9630aea4c..2723ed2d1cbccb825f3c9bce6ce3f3aee5ca2a83 100644
--- a/htdocs/langs/en_US/admin.lang
+++ b/htdocs/langs/en_US/admin.lang
@@ -392,9 +392,11 @@ MembersSetup=Members module setup
 MemberMainOptions=Main options
 AddSubscriptionIntoAccount=Add subscriptions into bank or cash account, of bank module
 AdherentMailRequired=EMail required to create a new member
-##### LDAP setup ####
+##### LDAP setup #####
 LDAPSetup=LDAP Setup
 LDAPFunctionsNotAvailableOnPHP=LDAP functions are not availbale on your PHP
+LDAPSynchronizeUsersAndGroup=Synchronize Dolibarr users and groups to LDAP
+LDAPSynchronizeContacts=Synchronize Dolibarr contacts to LDAP
 LDAPTypeExample=OpenLdap, Egroupware or Active Directory
 LDAPServer=LDAP Server
 LDAPServerPort=LDAP server port
@@ -408,9 +410,10 @@ LDAPServerExample=Server address (ex: localhost, 127.0.0.1, 192.168.0.2)
 #LDAPSuffixExample=Complete DN (ex: dc=company,dc=com)
 DNAdminExample=Complete DN (ex: cn=adminldap,dc=society,dc=com)
 LDAPPasswordExample=Admin password
+DBUserGroupActive=Users and groups synchronization
 DNUserExample=Complete DN (ex: ou=users,dc=society,dc=com)
 DNGroupExample=Complete DN (ex: ou=groups,dc=society,dc=com)
-DNContactActive=Contacts' synchronization?
+DNContactActive=Contacts' synchronization
 DNContactActiveYes=Activated synchronization
 DNContactActiveExample=Activated/Unactivated synchronization
 DNContact=Dolibarr contacts' DN
diff --git a/htdocs/langs/fr_FR/admin.lang b/htdocs/langs/fr_FR/admin.lang
index da53538ce1551822a4c10fd728b2361bd11d1625..d62ea72838734e5037786c34017d9d9c860d5ab8 100644
--- a/htdocs/langs/fr_FR/admin.lang
+++ b/htdocs/langs/fr_FR/admin.lang
@@ -395,6 +395,8 @@ AdherentMailRequired=EMail obligatoire pour cr
 ##### LDAP setup #####
 LDAPSetup=Configuration du module LDAP
 LDAPFunctionsNotAvailableOnPHP=Les fonctions LDAP ne sont pas disponibles sur votre PHP
+LDAPSynchronizeUsersAndGroup=Synchronisation des utilisateurs et groupes Dolibarr vers LDAP
+LDAPSynchronizeContacts=Synchronisation des contacts Dolibarr vers LDAP
 LDAPTypeExample=OpenLdap, Egroupware ou Active Directory
 LDAPServer=Serveur LDAP
 LDAPServerPort=Port du serveur LDAP
@@ -408,9 +410,10 @@ LDAPServerExample=Adresse du serveur (ex: localhost, 127.0.0.1, 192.168.0.2)
 #LDAPSuffixExample=DN complet (ex: dc=societe,dc=com)
 DNAdminExample=DN complet (ex: cn=adminldap,dc=societe,dc=com)
 LDAPPasswordExample=Mot de passe de l'administrateur
+DBUserGroupActive=Synchronisation des utilisateurs et groupes
 DNUserExample=DN complet (ex: ou=users,dc=societe,dc=com)
 DNGroupExample=DN complet (ex: ou=groups,dc=societe,dc=com)
-DNContactActive=Synchronisation des contacts ?
+DNContactActive=Synchronisation des contacts
 DNContactActiveYes=Synchronisation activ�e
 DNContactActiveExample=Synchronisation activ�e/d�sactiv�e
 DNContact=DN des contacts Dolibarr