IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Plugins PHP Discussion :

un form partiel sur sfGuardUser


Sujet :

Plugins PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut un form partiel sur sfGuardUser
    bonjour,
    voila j'ai besoin de gérer des groupes d'utilisateurs, après bien des péripéties on a décidé de gerer le groupe au niveau du user (sfGuardUser) et les infos concernant les groupes dans une autre table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    sfGuardUser: 
      actAs: [Timestampable]
      columns:
        first_name: string(255)
        last_name: string(255)
        email_address:
          type: string(255)
          notnull: true
          unique: true
        username:
          type: string(128)
          notnull: true
          unique: true
        algorithm:
          type: string(128)
          default: sha1
          notnull: true
        salt: string(128)
        password: string(128)
        is_active:
          type: boolean
          default: 1
        is_super_admin:
          type: boolean
          default: false
        last_login:
          type: timestamp
        matricule:
          type: integer
          unique: true           
    ....
        grpe_chq_dej_list_id: 
          type: integer
      indexes:
        is_active_idx:
          fields: [is_active]
      relations:
        Groups:
          class: sfGuardGroup
          local: user_id
          foreign: group_id
          refClass: sfGuardUserGroup
          foreignAlias: Users
        Permissions:
          class: sfGuardPermission
          local: user_id
          foreign: permission_id
          refClass: sfGuardUserPermission
          foreignAlias: Users    
        grpe_chq_dej_list:
          class: GrpeChqDej
          local: grpe_chq_dej_list_id
          foreign: id 
          onDelete: SET NULL
    et ma table group:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    GrpeChqDej:
      tableName: GrpeChqDej
      columns:
        name:
          type: string(50)
          notnull: true
        primary_user_id:
          type: integer
        secondary_user_id:
          type: integer
        site_id: integer    
      relations:
        primaryUser:
          class: sfGuardUser
          local: primary_user_id
          foreign: id
          onDelete: SET NULL
        secondaryUser:
          class: sfGuardUser
          local: secondary_user_id
          foreign: id
          onDelete: SET NULL
        site:
          class: Site
          local: site_id
          foreign: id
          onDelete: SET NULL
    je peut bien entendu gerer ce group via l'interface de sfGuardUser.... Sauf que les personnes gérant ces groupes en sont pas du tout les memes que celles qui gérent le profil.

    Donc dois je créer un module a part entier, basé sur sfGuardUser ou bien y a t il moyen de creer simplement un formulaire dans le module GrpeCheqDej ?

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Il y a plusieurs options.

    La première n'est pas mauvaise, sauf que je de dériverais du form de base, pour juste rajouter le champ. Ainsi, si tu modifies un validateur, tu n'as pas à le faire dans tous les forms.

    Si non, et si tu rends ton form dans le template sans faire de mise en page élaborée, tu peux aussi envisager de faire un test dans le config du form pour voir si le user courant à les droits (mais pas très propre) et générer le champ si oui.

    Tu peux aussi faire, dans ton form, une méthode qui rajoute le champ (widget et validateur) et tester dans le contrôleur si le user courant à les droits, si oui, tu envoies la méthode qui rajoute le champ.

    Pas de solution unique, à toi de juger ce qui te convient le mieux.

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    oui sauf que tu part du form de base et tu rajoute un champ..;
    Alors que moi c'est le contraire, je veut juste un form avec le champ en question.

    Donc plutôt partir du form original et unset tout les champs sauf celui qui me convient non ?

    mais celui ci est gerer via un fichier generator donc je suis un peu paume sur la methode a suivre

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Le problème c'est que si tu fais cela (soit un form avec un champ après avoir viré les autres) et que tu utilises le générateur, tu vas n'avoir à l'écran que le champ en question, sans savoir à quel utilisateur il correspond (dans la liste, ils y seront), ce qui n'est pas top.

    Et mettre des champs en affichage seul avec le générateur, c'est un peu du sport (il faut soit créé en widget spécifique, soit utiliser des partials).

    Dans le générateur tu as un paramètre qui permet d'indiquer quel est le form à utiliser pour l'édition et tu peux empêcher la création et la suppression, donc, tu as tous les outils dans la mains.

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    Citation Envoyé par Michel Rotta Voir le message
    ....

    Dans le générateur tu as un paramètre qui permet d'indiquer quel est le form à utiliser pour l'édition ....
    ça me plait bien, donc dans le generator on peut avoir plusieurs form ??

    j'ai cherche mais pas trouvé beaucoup d'info la dessus.

  6. #6
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Tu trouveras des informations ici : http://www.symfony-project.org/refer...dmin-Generator

    Théoriquement on doit pouvoir avoir un form pour l'édition et un form pour le news. Il n'y a pas de form pour la liste.

  7. #7
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    bon je vous soumet ma solution:

    une action dans GrpeChqDej
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function executeAddUser(sfWebRequest $request){
    		$this->forward404Unless($grpe_chq_dej = Doctrine::getTable('GrpeChqDej')->find(array($request->getParameter('id'))), sprintf('Object grpe_chq_dej does not exist (%s).', $request->getParameter('id')));
    		$this->form= new GrpeChqDejAddUserForm(array('groupe'=>$request->getParameter('id')));		
    	}
    un form:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    class GrpeChqDejAddUserForm extends sfForm
    {
      public function configure(){
      	sfContext::getInstance()->getConfiguration()->loadHelpers(array('Url'));
     
      	$this->setWidgets(array(
      		'groupe'    => new sfWidgetFormInputText(),
      		'username'  => new sfWidgetFormInputText()
      		));
     
        $this->widgetSchema['username'] = new sfWidgetFormDoctrineJQueryAutocompleter(
          array(
            'model' => "sfGuardUser",
            'url'   => url_for("@ajax_username")
          ), array('size' => 25)
        );
      }
    }
    et une action derriere:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public function executeAddUserCreate(sfWebRequest $request)
    	{
     
    		$this->forward404Unless($sfGuardUser = Doctrine::getTable('sfGuardUser')->find(array($request->getPostParameter('username'))), sprintf('Object sf_guard_user does not exist (%s).', $request->getPostParameter('username')));  	
    		$sfGuardUser->setGrpe_chq_dej_list_id($request->getPostParameter('groupe'));
    		$sfGuardUser->save();
     
    		$this->redirect('GrpeChqDej/UserListDisplay?id='.$request->getPostParameter('groupe'));
     
     
    	}
    pour le filtrage des user, je pense juste créer une liste différente

  8. #8
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Ton code s'améliore de sujet en sujet

    Pas pu testé, donc, à la lecture, partiel, du code, cela me semble correcte, mais je ne peux donner plus qu'un sentiment.

    Tu veux dire quoi par : "pour le filtrage des user, je pense juste créer une liste différente " ?

  9. #9
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    en fait j'ai créer une autre route ajax:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ajax_username_grpe_chq_dej:
      url: /AjaxUsernameGrpeChqDej
      param: {module: sfGuardUser, action: ajaxUsernameGrpeChqDej}
    mes actions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    class sfGuardUserActions extends autoSfGuardUserActions
    {
    	public function executeAjaxUsernameGrpeChqDej(sfWebRequest $request){
    		$where="p.grpe_chq_dej_list_id is null";
     
    		return $this->executeAjaxUsername($request,$where);
    	}
    	public function executeAjaxUsername(sfWebRequest $request,$where=null)
      	{
        	$this->getResponse()->setContentType('application/json');
        	$choices = array();
        	foreach($section = Doctrine::getTable('sfGuardUser')->getUsernameAutocompletion($request->getParameter('q'), $request->getParameter('limit'), $where)->getData() as $p)
        	{
          		$choices[$p->id] = $p->fullname;
        	}
        	if($section != array())
        	{
          		return $this->renderText(json_encode($choices));
        	}
      	}
     
    }
    sfGuardUserTable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    public function getUsernameAutocompletion($q, $limit,$where=null)
        {
        	$dq = Doctrine_Query::create()
                ->select("p.id, concat(p.last_name,' ',p.first_name) AS fullname")
                ->from("sfGuardUser p")
                ->where("concat(p.last_name,' ',p.first_name) LIKE ?","%".$q."%")
                ->andWhere("p.offrolldate is null")
                ->limit($limit)
                ->orderBy("concat(p.last_name,' ',p.first_name) ASC");
     
            if(!is_null($where)) $dq->where($where);
     
        	return $dq->execute();
    	}
    Je pense qu'il y moyen de mieux refactorisé mais j'ai pas encore trouve

  10. #10
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Je ne comprend pas l'intérêt de la méthode executeAjaxUsername(). Soit tu en as besoins ailleur (et c'est alors compréhensible), soit non, dans ce cas, tu peux tout mettre ensemble.

    Et si tu utilises deux endroit, je pense qu'il vaudrait mieux faire 3 méthodes, les deux exécutes et une troisième, sur l'objet du modèle pour la partie récupération, tu l'appel alors avec les paramètres pour effectuer la recherche (un objet du modèle n'est pas sensé aller voir dans un objet request).

  11. #11
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    en faites dans pas mal d'endroit j'ai besoin de mettre un user et vu le nombre, un select n'est pas possible.
    Donc j'utilise un champ autocomplete qui prend tout les utilisateurs toujours présent. et que je recupere via cette fonction.
    Par contre dans le cas des ChqDej, j'ai besoin de cette liste moins ceux étant déjà dans un groupe.

    mais effectivement la fonction particulière ne devrait pas se trouver dans sfGuardUserTable mais plutot dans grpCheqDej je pense.

Discussions similaires

  1. Réponses: 8
    Dernier message: 19/06/2006, 16h31
  2. Réponses: 6
    Dernier message: 10/02/2006, 13h46
  3. [PHP-JS] form agissant sur 2 pages
    Par splouf dans le forum Langage
    Réponses: 3
    Dernier message: 16/01/2006, 11h35
  4. Réponses: 4
    Dernier message: 15/11/2005, 18h53
  5. SS Form basé sur une requete
    Par _developpeur_ dans le forum Access
    Réponses: 8
    Dernier message: 19/10/2005, 09h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo