Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] [Resolu][Jelix 1.1.2] Probleme lastInsertId + create user master admin

Posted by Yann.L on 05/27/2009 17:36

Bonjour,

Dans mon application j'utilise le Master Admin de Jelix, mais aussi mon propre driver jDb pour MSSQL Server. J'ai un souci a la création de mon user dans la master admin. En effet, lors de la création d'un user, un groupe portant le nom du user est créer, une liaison entre le user et le groupe est créer dans la table jacl2_user_group (couple login + id group). Deux lignes sont affecté dans cette table => login user + id groupe par défaut et login user + id group perso du user. Pour cette dernière, l'id du groupe est récupéré ac la méthode lastInsertId() de la classe mssqlDbConnection qui hérite de jDbConnection. Or pour retourner le lastInsertId() j'ai besoin du nom de la table c'est pour ça que ma méthode s'inspire de celle pour PGSQL.

 public function lastInsertId($tabname=''){
        if($tabname == ''){
            trigger_error(get_class($this).'::lastInstertId invalide table name',E_USER_WARNING);
            return false;
        }
        $cur=$this->query("SELECT IDENT_CURRENT('".$tabname."') As ID");
        if($cur){
            $res=$cur->fetch();
            if($res)
                return $res->ID;
            else
                return false;
        }else{
            trigger_error(get_class($this).'::lastInstertId invalide table name',E_USER_WARNING);
            return false;
        }
    }

Or le tabname n'est jamais passé à la méthode lors de la création du user, j'ai donc pensé que ça venait de la classe mssqlDaoBuilder. J'ai donc redéfini la méthode :

 protected function genUpdateAutoIncrementPK($pkai, $pTableRealName) {
        return '    $record->'.$pkai->name.'= $this->_conn->lastInsertId(\''.$pkai->name.'\');';
    }

Mais sans succès vu que apparemment elle n'est pas appelé lors de la création d'un user.

Je ne vois pas comment faire pour passer la nom de la table ici jacl2_group a ma méthode lastInsertId() pour que la création d'un user se passe proprement. Une idée peut être ?

Merci.

  [Opened] Re: [Jelix 1.1.2] Probleme lastInsertId + create user master admin

Reply #1 Posted by Yann.L on 05/28/2009 11:30

La méthode Insert d'une factory d'une DAO ne retourne-t-elle pas l'id de l'objet record insérer ?

  [Opened] Re: [Jelix 1.1.2] Probleme lastInsertId + create user master admin

Reply #2 Posted by foxmask on 05/28/2009 12:08

Si

si la pk est définie et auto incrementée dans la DAO


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] Re: [Jelix 1.1.2] Probleme lastInsertId + create user master admin

Reply #3 Posted by Yann.L on 05/28/2009 13:38

En faite c'est sur la méthode _getAutoIncrementPKField() que j'avais un souci, je n'affecter pas de nom de table a sequenceName.

    /**
     * get autoincrement PK field
     */
    protected function _getAutoIncrementPKField ($using = null){
        if ($using === null){
            $using = $this->_dataParser->getProperties ();
        }
        $tb = $this->_dataParser->getTables();
        $tb = $tb[$this->_dataParser->getPrimaryTable()]['realname'];
        jLog::log('TB:'.$tb);
        foreach ($using as $id=>$field) {
            if(!$field->isPK) {
                continue;
            }
            if ($field->datatype == 'autoincrement' || $field->datatype == 'bigautoincrement') {
                if(!strlen($field->sequenceName)){
                  $field->sequenceName = $tb;
                }
                return $field;
            }
        }
        return null;
    }
 
Page
  1. [Resolu][Jelix 1.1.2] Probleme lastInsertId + create user master admin