Fix: Dclenchement des triggers incorrects sur modif mot de passe adhrent ou user
This commit is contained in:
parent
38a0dea67e
commit
977f0a3fc1
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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.='<div class="error">'.$edituser->error.'</div>';
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<?php
|
||||
/* Copyright (C) 2002-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2002-2003 Jean-Louis Bergamo <jlb@j1b.org>
|
||||
* Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2004-2007 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
|
||||
* Copyright (C) 2005-2007 Regis Houssin <regis.houssin@cap-networks.com>
|
||||
* Copyright (C) 2005 Lionel COUSTEIX <etm_ltd@tiscali.co.uk>
|
||||
@ -21,7 +21,6 @@
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* $Id$
|
||||
* $Source$
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
Loading…
Reference in New Issue
Block a user