Page 1 sur 1

Création compte client /// Surcharge users

Message Publié : 14 Juillet 2013, 10:08
par aj13
Dans ma création de compte client je surcharge la fonction create_or_update_user ce qui donne :
Code : Tout sélectionner
    public function create_or_update_user($request, $params = null)
    {       
        $ns 
= $this->getModel('fonctions');
        $profil = $this->getModel('compte');
        $users = $this->_crud;
        $auth = $users->getAuth();
        $groups = $users->getGroupsByUser($auth['id']);
       
        $id 
= $ns->ifPost('int', 'id');
        // verifie si l'utilisateur est un adjoint

        $user = $users->getUser($id);
        $ret = null;
       
        if 
(($auth && ($users->hasPrivilege('manage_users') || !$user)) || (!$auth && !$user)) {
            $ret = parent::create_or_update_user($request, $params);
        }
        $err = $this->getHelper('errors');
       
      
        $donnees 
= $users->sanitize($request->POST);
        if (isset($ret['user']) && $ret['user']) {
            if (isset($ret['isnew']) && $ret['isnew']) {
            //print_r($ret);
            //die('die6');
                $group = '2';
                $users->addUserToGroup($ret['user']['id'], $group);
                // ajoute une zone de vigilance basee sur le code postal fourni par l'utilisateur a la creation
                $adresse = $profil->addAdresseForUser($ret['user']['id'], $donnees);
            } else {
                // le code inscription ne doit plus etre transmis si ce n'est pas un nouvel utilisateur
                unset($donnees['code_inscription']);
            }
        } else if($donnees['id'] == $auth['id']){
            //print_r($donnees);
            //print_r($params);
            //die('create_or_update_user mod');
            $id_adresse = $this->getModel('compte')->modAdresseForUser($auth['id'], $donnees);
            if (!$id_adresse) {
                $err->register_err('user', 'address_modification_failed', "Impossible de modifier l'adresse de cet utilisateur" . "\r\n");
            } else {
                //$this->data['adresse']['adresse_modifie'] = "1";
                $ret['adresse'] = $id_adresse;
            }
        }
        return $ret;
    }    


A l'intérieur je fais :
Code : Tout sélectionner
        if (($auth && ($users->hasPrivilege('manage_users') || !$user)) || (!$auth && !$user)) {
            $ret = parent::create_or_update_user($request, $params);
        } 


Pour créer dans un premier temps mon utilisateur, pour ensuite ajouter une adresse. Par contre je rencontre un problème avec l'id que je récupère qui est toujours 0. Penses tu que je dois rajouter une fonction qui me récupère le dernier utilisateur créer pour ensuite insérer mon adresse et mon utilisateur dans le bon groupe ?

Re: Création compte client /// Surcharge users

Message Publié : 14 Juillet 2013, 14:39
par pa-de-solminihac
Hello,

D'après ce que j'ai vu tu utilises la version 4.4 du module users... la dernière étant la 4.14, oublie pas de faire les mises à jour, ça vaut toujours le coup.

Je base ma réponse sur le code de la version 4.14. Dans le controleur (https://github.com/pa-de-solminihac/cle ... r.php#L596) on a les lignes suivantes :
Code : Tout sélectionner

        $erreurs 
= $err->get();
        $ret = array();
        if (!count($erreurs)) {
            if (!$id) {
                $id = $users->addUser($donnees['login']);
                if ($id) {
                    $ret['isnew'] = array('password' => $donnees['password']);
                }
            }
            if (!$id) {
                $err->register_err('user', 'user_already_exists', 'Cet utilisateur existe déjà' . "\r\n");
            } else {
                $user = $users->modUser($id, $donnees);
                if (!$user) {
                    $err->register_err('user', 'user_modification_failed', 'Impossible de modifier cet utilisateur' . "\r\n");
                } else {
                    $ret['user'] = $user;
                }
            }
        }
        $erreurs = $err->get();
        if (count($erreurs)) {
            $ret['errors'] = $erreurs;
        }
        return $ret;
 


Si tu debug a coup de die(), en ajoutant juste avant le return les lignes suivantes :
Code : Tout sélectionner
Clementine::dump($ret);
die();
 


Tu devrais voir s'afficher un tableau, avec une clé 'user' qui pointe sur un tableau qui contient les infos de ton utilisateur nouvellement créé. Il y a pas son id dedans ?

Re: Création compte client /// Surcharge users

Message Publié : 14 Juillet 2013, 15:23
par aj13
Voila le print et le id est toujours 0

Code : Tout sélectionner
 
array (
  
'isnew' => array(
    
'password' => '123456',
  ),
  
'user' => array(
    
'id' => '0',
    
'is_alias_of' => NULL,
    
'login' => 'jeremy1345@quai13.com',
    
'password' => 'd9ce627109fbcc7a7cb46a62147141480a2c364a46b1e4b65c0390b1961c6ea5',
    
'salt' => NULL,
    
'code_confirmation' => NULL,
    
'date_modification' => '2013-07-14 17:22:47',
    
'date_creation' => '2013-07-14 17:22:47',
    
'active' => '1',
    
'adresse' => 'adresse',
    
'password_conf' => '123456',
    
'civilite' => 'M',
    
'nom' => 'test nom',
    
'prenom' => 'test prenom',
    
'telephone_fixe' => '0909090909',
    
'telephone_mobile' => '0609090909',
    
'adresse2' => '',
    
'code_postal' => '13016',
    
'ville' => 'marseille',
    
'societe' => 'societe',
    
'id_parent' => 0,
  ),
)
 

Re: Création compte client /// Surcharge users

Message Publié : 14 Juillet 2013, 20:47
par pa-de-solminihac
C'est curieux en effet... je viens de tester de mon côté et l'id est bien renseigné correctement lors de la création d'un nouvel utilisateur...

Ce qui est d'autant plus curieux c'est que tu as bien le "isnew". Du coup je me pose la question suivante : tu n'aurais pas surchargé le modèle ? La fonction modUser() par exemple ?

Re: Création compte client /// Surcharge users

Message Publié : 16 Juillet 2013, 07:59
par aj13
J'ai trouvé c'est en fait la fonction sanitize du modèle users qui était surchargé, et du coup mal surchargé ;)
Merci de tes retours