diff --git a/htdocs/adherents/adherent.class.php b/htdocs/adherents/adherent.class.php
index 4a129702ee3..858b2533fdd 100644
--- a/htdocs/adherents/adherent.class.php
+++ b/htdocs/adherents/adherent.class.php
@@ -352,9 +352,11 @@ class Adherent
/**
\brief Fonction qui crée l'adhérent
- \return int <0 si ko, >0 si ok
+ \param user Objet user qui demande la creation
+ \param notrigger 1 ne declenche pas les triggers, 0 sinon
+ \return int <0 si ko, >0 si ok
*/
- function create()
+ function create($user='',$notrigger=0)
{
global $conf,$langs,$user;
@@ -385,7 +387,7 @@ class Adherent
{
$this->id=$id;
- // Mise a jour
+ // Update minor fields
$result=$this->update($user,1,1);
if ($result < 0)
{
@@ -395,12 +397,16 @@ class Adherent
$this->use_webcal=($conf->global->PHPWEBCALENDAR_MEMBERSTATUS=='always'?1:0);
- // Appel des triggers
- include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
- $interface=new Interfaces($this->db);
- $result=$interface->run_triggers('MEMBER_CREATE',$this,$user,$langs,$conf);
- if ($result < 0) $this->errors=$interface->errors;
- // Fin appel triggers
+ if (! $notrigger)
+ {
+ // Appel des triggers
+ include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
+ $interface=new Interfaces($this->db);
+ $result=$interface->run_triggers('MEMBER_CREATE',$this,$user,$langs,$conf);
+ if ($result < 0) $this->errors=$interface->errors;
+ // Fin appel triggers
+ }
+
if (sizeof($this->errors))
{
$this->db->rollback();
@@ -458,7 +464,7 @@ class Adherent
}
/**
- \brief Fonction qui met à jour l'adhérent
+ \brief Fonction qui met à jour l'adhérent (sauf mot de passe)
\param user Utilisateur qui réalise la mise a jour
\param notrigger 1=désactive le trigger UPDATE (quand appelé par creation)
\param nosyncuser Do not synchronize linked user
@@ -486,7 +492,6 @@ class Adherent
$sql.= " prenom = ".($this->prenom?"'".addslashes($this->prenom)."'":"null");
$sql.= ",nom=" .($this->nom?"'".addslashes($this->nom)."'":"null");
$sql.= ",login=" .($this->login?"'".addslashes($this->login)."'":"null");
- $sql.= ",pass=" .($this->pass?"'".addslashes($this->pass)."'":"null");
$sql.= ",societe=" .($this->societe?"'".addslashes($this->societe)."'":"null");
$sql.= ",adresse=" .($this->adresse?"'".addslashes($this->adresse)."'":"null");
$sql.= ",cp=" .($this->cp?"'".addslashes($this->cp)."'":"null");
@@ -548,6 +553,18 @@ class Adherent
}
}
+ // Mise a jour mot de passe
+ if ($this->pass)
+ {
+ if ($this->pass != $this->pass_indatabase && $this->pass != $this->pass_indatabase_crypted)
+ {
+ // Si mot de passe saisi et différent de celui en base
+ $result=$this->password($user,$this->pass,0,$notrigger);
+
+ if (! $nbrowsaffected) $nbrowsaffected++;
+ }
+ }
+
if ($nbrowsaffected)
{
if ($this->user_id && ! $nosyncuser)
@@ -707,11 +724,15 @@ class Adherent
* \param user Object user de l'utilisateur qui fait la modification
* \param password Nouveau mot de passe (à générer si non communiqué)
* \param isencrypted 0 ou 1 si il faut crypter le mot de passe en base (0 par défaut)
+ * \param notrigger 1=Ne declenche pas les triggers
+ * \param nosyncuser Do not synchronize linked user
* \return string If OK return clear password, 0 if no change, < 0 if error
*/
- function password($user, $password='', $isencrypted=0)
+ function password($user, $password='', $isencrypted=0, $notrigger=0, $nosyncuser=0)
{
- global $langs;
+ global $conf, $langs;
+
+ $error=0;
dolibarr_syslog("Adherent::Password user=".$user->id." password=".eregi_replace('.','*',$password)." isencrypted=".$isencrypted);
@@ -739,25 +760,57 @@ class Adherent
$sql = "UPDATE ".MAIN_DB_PREFIX."adherent SET pass = '".addslashes($password_indatabase)."'";
$sql.= " WHERE rowid = ".$this->id;
- dolibarr_syslog("Adherent::Password sql=hidden");
+ //dolibarr_syslog("Adherent::Password sql=hidden");
+ dolibarr_syslog("Adherent::Password sql=".$sql);
$result = $this->db->query($sql);
if ($result)
{
- if ($this->db->affected_rows($result))
+ $nbaffectedrows=$this->db->affected_rows();
+
+ if ($nbaffectedrows)
{
$this->pass=$password;
$this->pass_indatabase=$password_indatabase;
- // Appel des triggers
- include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
- $interface=new Interfaces($this->db);
- $result=$interface->run_triggers('MEMBER_NEW_PASSWORD',$this,$user,$langs,$conf);
- if ($result < 0) $this->errors=$interface->errors;
- // Fin appel triggers
+ if ($this->user_id && ! $nosyncuser)
+ {
+ // This member is linked with a user, so we also update users informations
+ // if this is an update.
+ $luser=new User($this->db);
+ $luser->id=$this->user_id;
+ $result=$luser->fetch();
+ if ($result >= 0)
+ {
+ $result=$luser->password($user,$this->pass,$conf->password_encrypted,0,0,1);
+ if ($result < 0)
+ {
+ $this->error=$luser->error;
+ dolibarr_syslog("Adherent::password ".$this->error,LOG_ERROR);
+ $error++;
+ }
+ }
+ else
+ {
+ $this->error=$luser->error;
+ $error++;
+ }
+ }
+
+ if (! $error && ! $notrigger)
+ {
+ // Appel des triggers
+ include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
+ $interface=new Interfaces($this->db);
+ $result=$interface->run_triggers('MEMBER_NEW_PASSWORD',$this,$user,$langs,$conf);
+ if ($result < 0) { $error++; $this->errors=$interface->errors; }
+ // Fin appel triggers
+ }
+
return $this->pass;
}
- else {
+ else
+ {
return 0;
}
}
diff --git a/htdocs/adherents/fiche.php b/htdocs/adherents/fiche.php
index 5c9b1ad3c62..9e412e8e57e 100644
--- a/htdocs/adherents/fiche.php
+++ b/htdocs/adherents/fiche.php
@@ -18,7 +18,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* $Id$
- * $Source$
*/
/**
@@ -165,15 +164,6 @@ if ($user->rights->adherent->creer && $_REQUEST["action"] == 'update' && ! $_POS
$result=$adh->update($user,0);
if ($result >= 0 && ! sizeof($adh->errors))
{
- if (isset($_POST["password"]) && $_POST["password"] !='')
- {
- $ret=$edituser->password($user,$password,$conf->password_encrypted,0);
- if ($ret < 0)
- {
- $message.='
'.$edituser->error.'
';
- }
- }
-
if (isset($_FILES['photo']['tmp_name']) && trim($_FILES['photo']['tmp_name']))
{
// If photo is provided
@@ -322,11 +312,6 @@ if ($user->rights->adherent->creer && $_POST["action"] == 'add')
$result=$adh->create($user);
if ($result > 0)
{
- if (isset($_POST['password']) && trim($_POST['password']))
- {
- $adh->password($user,trim($_POST['password']),0);
- }
-
if ($cotisation > 0)
{
$crowid=$adh->cotisation($datecotisation, $cotisation);
diff --git a/htdocs/conf/conf.class.php b/htdocs/conf/conf.class.php
index 231c1e4e24b..1d4a65c7fba 100644
--- a/htdocs/conf/conf.class.php
+++ b/htdocs/conf/conf.class.php
@@ -70,77 +70,76 @@ class Conf
var $oscommerce2;
- /**
- * \brief Positionne toutes les variables de configuration
- * \param $db Handler d'accès base
- * \return int < 0 si erreur, >= 0 si succès
- */
- function setValues($db)
- {
- dolibarr_syslog("functions.inc.php::setValues");
-
- // Par defaut, à oui
- $this->global->PRODUIT_CONFIRM_DELETE_LINE=1;
-
- /*
- * Definition de toutes les Constantes globales d'environnement
- * - En constante php (\todo a virer)
- * - En $this->global->key=value
- */
- $sql = "SELECT name, value FROM ".MAIN_DB_PREFIX."const";
- $result = $db->query($sql);
- if ($result)
- {
- $numr = $db->num_rows($result);
- $i = 0;
-
- while ($i < $numr)
- {
- $objp = $db->fetch_object($result);
- $key=$objp->name;
- $value=$objp->value; // Pas de stripslashes (ne s'applique pas sur lecture en base mais après POST quand get_magic_quotes_gpc()==1)
- if ($key)
- {
- define ("$key", $value);
- $this->global->$key=$value;
- }
- $i++;
- }
- }
- $db->free($result);
-
-
- // On reprend parametres du fichier de config conf.php
- // \TODO Mettre tous les param du fichier conf dans une propriété de la classe
- $this->password_encrypted=$this->global->DATABASE_PWD_ENCRYPTED;
-
-
- /*
- * Nettoyage variables des gestionnaires de menu
- * conf->menu_top et conf->menu_left sont définis dans main.inc.php (selon user)
- */
- if (! $this->global->MAIN_MENU_BARRETOP) $this->global->MAIN_MENU_BARRETOP="default.php";
- if (! $this->global->MAIN_MENUFRONT_BARRETOP) $this->global->MAIN_MENUFRONT_BARRETOP="default.php";
- if (! $this->global->MAIN_MENU_BARRELEFT) $this->global->MAIN_MENU_BARRELEFT="default.php";
- if (! $this->global->MAIN_MENUFRONT_BARRELEFT) $this->global->MAIN_MENUFRONT_BARRELEFT="default.php";
-
- // Variable globales LDAP
- if (! $this->global->LDAP_KEY_USERS) $this->global->LDAP_KEY_USERS=$this->global->LDAP_FIELD_FULLNAME;
- if (! $this->global->LDAP_KEY_GROUPS) $this->global->LDAP_KEY_GROUPS=$this->global->LDAP_FIELD_FULLNAME;
- if (! $this->global->LDAP_KEY_CONTACTS) $this->global->LDAP_KEY_CONTACTS=$this->global->LDAP_FIELD_FULLNAME;
- if (! $this->global->LDAP_KEY_MEMBERS) $this->global->LDAP_KEY_MEMBERS=$this->global->LDAP_FIELD_FULLNAME;
-
-
- /*
- * Charge l'objet de traduction et positionne langage courant global
- */
- if (! $this->global->MAIN_LANG_DEFAULT) $this->global->MAIN_LANG_DEFAULT="fr_FR";
-
- /*
- * Autres parametres globaux de configurations
- */
- $this->users->dir_output=DOL_DATA_ROOT."/users";
-
+ /**
+ * \brief Positionne toutes les variables de configuration
+ * \param $db Handler d'accès base
+ * \return int < 0 si erreur, >= 0 si succès
+ */
+ function setValues($db)
+ {
+ dolibarr_syslog("functions.inc.php::setValues");
+
+ // Par defaut, à oui
+ $this->global->PRODUIT_CONFIRM_DELETE_LINE=1;
+
+ /*
+ * Definition de toutes les Constantes globales d'environnement
+ * - En constante php (\todo a virer)
+ * - En $this->global->key=value
+ */
+ $sql = "SELECT name, value FROM ".MAIN_DB_PREFIX."const";
+ $result = $db->query($sql);
+ if ($result)
+ {
+ $numr = $db->num_rows($result);
+ $i = 0;
+
+ while ($i < $numr)
+ {
+ $objp = $db->fetch_object($result);
+ $key=$objp->name;
+ $value=$objp->value; // Pas de stripslashes (ne s'applique pas sur lecture en base mais après POST quand get_magic_quotes_gpc()==1)
+ if ($key)
+ {
+ define ("$key", $value);
+ $this->global->$key=$value;
+ }
+ $i++;
+ }
+ }
+ $db->free($result);
+
+
+ // On reprend parametres du fichier de config conf.php
+ // \TODO Mettre tous les param de conf DB dans une propriété de la classe
+
+
+ /*
+ * Nettoyage variables des gestionnaires de menu
+ * conf->menu_top et conf->menu_left sont définis dans main.inc.php (selon user)
+ */
+ if (! $this->global->MAIN_MENU_BARRETOP) $this->global->MAIN_MENU_BARRETOP="default.php";
+ if (! $this->global->MAIN_MENUFRONT_BARRETOP) $this->global->MAIN_MENUFRONT_BARRETOP="default.php";
+ if (! $this->global->MAIN_MENU_BARRELEFT) $this->global->MAIN_MENU_BARRELEFT="default.php";
+ if (! $this->global->MAIN_MENUFRONT_BARRELEFT) $this->global->MAIN_MENUFRONT_BARRELEFT="default.php";
+
+ // Variable globales LDAP
+ if (! $this->global->LDAP_KEY_USERS) $this->global->LDAP_KEY_USERS=$this->global->LDAP_FIELD_FULLNAME;
+ if (! $this->global->LDAP_KEY_GROUPS) $this->global->LDAP_KEY_GROUPS=$this->global->LDAP_FIELD_FULLNAME;
+ if (! $this->global->LDAP_KEY_CONTACTS) $this->global->LDAP_KEY_CONTACTS=$this->global->LDAP_FIELD_FULLNAME;
+ if (! $this->global->LDAP_KEY_MEMBERS) $this->global->LDAP_KEY_MEMBERS=$this->global->LDAP_FIELD_FULLNAME;
+
+
+ /*
+ * Charge l'objet de traduction et positionne langage courant global
+ */
+ if (! $this->global->MAIN_LANG_DEFAULT) $this->global->MAIN_LANG_DEFAULT="fr_FR";
+
+ /*
+ * Autres parametres globaux de configurations
+ */
+ $this->users->dir_output=DOL_DATA_ROOT."/users";
+
/*
* Autorisation globale d'uploader (necessaire pour desactiver dans la demo)
* conf->upload peut etre écrasée dans main.inc.php (selon user)
@@ -343,11 +342,14 @@ class Conf
* Modification de quelques variable de conf en fonction des Constantes
*/
+ // Cryped password in database
+ $this->password_encrypted=($this->global->DATABASE_PWD_ENCRYPTED ? 1 : 0);
+
// Debug Mode
$this->use_debug_mode=0;
if ($this->global->MAIN_ENABLE_DEBUG_MODE) $this->use_debug_mode=$this->global->MAIN_ENABLE_DEBUG_MODE;
- // outils systemes
+ // System tools
if (! $this->global->SYSTEMTOOLS_MYSQLDUMP) $this->global->SYSTEMTOOLS_MYSQLDUMP="mysqldump";
// societe
diff --git a/htdocs/user.class.php b/htdocs/user.class.php
index 8371b266e42..f2c32484575 100644
--- a/htdocs/user.class.php
+++ b/htdocs/user.class.php
@@ -705,9 +705,9 @@ class User
}
// Update minor fields
- if ($this->update($user,1,1) < 0)
+ $result = $this->update($user,1,1);
+ if ($result < 0)
{
- $this->error=$this->db->error();
$this->db->rollback();
return -4;
}
@@ -721,7 +721,7 @@ class User
$entrepot->statut = 1;
$entrepot->create($user);
}
-
+
if (! $notrigger)
{
// Appel des triggers
@@ -823,7 +823,7 @@ class User
*/
function create_from_member($member)
{
- global $user,$langs;
+ global $conf, $user,$langs;
// Positionne paramètres
$this->nom = $member->nom;
@@ -841,7 +841,7 @@ class User
$result=$this->create();
if ($result > 0)
{
- $result=$this->password($user,$this->pass,0,0,1);
+ $result=$this->password($user,$this->pass,$conf->password_encrypted);
$sql = "UPDATE ".MAIN_DB_PREFIX."user";
$sql.= " SET fk_member=".$member->id;
@@ -974,7 +974,7 @@ class User
if ($this->pass != $this->pass_indatabase && $this->pass != $this->pass_indatabase_crypted)
{
// Si mot de passe saisi et différent de celui en base
- $this->password($user,$this->pass,$conf->password_encrypted);
+ $result=$this->password($user,$this->pass,$conf->password_encrypted,0,$notrigger);
if (! $nbrowsaffected) $nbrowsaffected++;
}
@@ -1007,23 +1007,10 @@ class User
$adh->user_login=$this->login;
$result=$adh->update($user,0,1);
- if ($result)
+ if ($result < 0)
{
- // Mise a jour mot de passe
- if ($this->pass)
- {
- if ($this->pass != $this->pass_indatabase && $this->pass != $this->pass_indatabase_crypted)
- {
- // Si mot de passe saisi et différent de celui en base
- $adh->password($user,$this->pass,0); // Cryptage non géré dans module adhérent
-
- if (! $nbrowsaffected) $nbrowsaffected++;
- }
- }
- }
- else
- {
- $this->error=$adh->error;
+ $this->error=$luser->error;
+ dolibarr_syslog("User::update ".$this->error,LOG_ERROR);
$error++;
}
}
@@ -1134,12 +1121,15 @@ class User
* \param noclearpassword 0 ou 1 s'il ne faut pas stocker le mot de passe en clair
* \param changelater 1=Change password only after clicking on confirm email
* \param notrigger 1=Ne declenche pas les triggers
+ * \param nosyncmember Do not synchronize linked member
* \return string If OK return clear password, 0 if no change, < 0 if error
*/
- function password($user, $password='', $noclearpassword=0, $changelater=0, $notrigger=0)
+ function password($user, $password='', $noclearpassword=0, $changelater=0, $notrigger=0, $nosyncmember=0)
{
- global $langs, $conf;
-
+ global $conf, $langs;
+
+ $error=0;
+
dolibarr_syslog("User::Password user=".$user->id." password=".eregi_replace('.','*',$password)." noclearpassword=".$noclearpassword." changelater=".$changelater." notrigger=".$notrigger);
// Si nouveau mot de passe non communiqué, on génère par module
@@ -1180,7 +1170,31 @@ class User
$this->pass_indatabase=$password;
$this->pass_indatabase_crypted=$password_crypted;
- if (! $notrigger)
+ if ($this->fk_member && ! $nosyncmember)
+ {
+ // This user is linked with a member, so we also update members informations
+ // if this is an update.
+ $adh=new Adherent($this->db);
+ $result=$adh->fetch($this->fk_member);
+
+ if ($result >= 0)
+ {
+ $result=$adh->password($user,$this->pass,0,0,1); // Cryptage non géré dans module adhérent
+ if ($result < 0)
+ {
+ $this->error=$adh->error;
+ dolibarr_syslog("User::password ".$this->error,LOG_ERROR);
+ $error++;
+ }
+ }
+ else
+ {
+ $this->error=$adh->error;
+ $error++;
+ }
+ }
+
+ if (! $error && ! $notrigger)
{
// Appel des triggers
include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php");
diff --git a/htdocs/user/fiche.php b/htdocs/user/fiche.php
index bad93db1c62..d0c8ce4251d 100644
--- a/htdocs/user/fiche.php
+++ b/htdocs/user/fiche.php
@@ -1,7 +1,7 @@
* Copyright (C) 2002-2003 Jean-Louis Bergamo
- * Copyright (C) 2004-2006 Laurent Destailleur
+ * Copyright (C) 2004-2007 Laurent Destailleur
* Copyright (C) 2004 Eric Seigne
* Copyright (C) 2005-2007 Regis Houssin
* Copyright (C) 2005 Lionel COUSTEIX
@@ -21,7 +21,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* $Id$
- * $Source$
*/
/**