Bonjour,
Avant de montrer les lignes de code une petite explication du contexte
J'utilise symfony 1.4 avec le plugin sfGuard
Un module de gestion des utilisateurs à été crée.
Dans le formulaire de gestion des utilisateurs deux champs sont modifiables is_admin et photo_ok qui modifie deux tables différentes ( agent et sfGuard)
Je dois géré les cas suivants :
- Un utilisateur n'est pas admin et le devient ( enregistrement dans la table sfGuardUser et sfGuardUserGroup)
- Un adminstrateur est déchu de ses droits ( effacement dans la table sfGuardUserGroupe mais reste dans sfGuardUser)
- Un utilisateur déja enregistré dans sfGuard devient admin ( déjà dans SfGuard mais pas SfGuardUserGroup)
- Un administrateur ne veut pas que sa photo soit visible ( déjà enregistré dans SfGuardUser)
Voici le code que j'ai fait
Le bout de code en rouge correspond au cas que je n'arrive pas à gérer.
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69 protected function save(Doctrine_Connection $conn = null) { // test existance de l'utisateur dans sfguarduser $query = Doctrine_Query::create() ->select('*') ->from('sfGuardUser') ->where('username = ?', $this->getMatricule()); $user = $query->fetchOne(); if (!$user && $this->getIsAdmin() == TRUE) { // Si l'utilisateur n existe pas dans sfGuardUseur on le creer $user = new sfGuardUser(); $user->setUsername($this->getMatricule()); $user->setAlgorithm("sha1"); $user->setIsActive(true); $user->setIsSuperAdmin(false); $user->save(); //puis on ajoute le groupe admin de l'utilisateur dans sfGuardUseurGroup $groupe = new sfGuardUserGroup(); $groupe->setUserId($user->id); $groupe->setGroupId(1); $groupe->save(); } else { // Si l'utilisateur est deja dans la table sfGuardUseur if ($this->getIsAdmin() == FALSE ) { // si la case is_admin est décrochée suppression de l'utilisateur dans le groupe admin $q = Doctrine_Query::create() ->delete('sfGuardUserGroup u') ->where('u.user_id = ?', $user->id); $q->execute(); } if ($this->getIsAdmin() == TRUE ) { // permet de gerer le cas ou un utilisateur admin //veut changer le choix de le case photo $query = Doctrine_Query::create() ->select('*') ->from('agent') ->where('matricule = ?', $this->getMatricule()); $user = $query->fetchOne(); if($user->getPhotoOk() != $this->photo_ok) { $user->setPhotoOk($this->photo_ok); $user->save(); exit(); } // si l'utilisateur n'est pas dans le groupe admin mais deja present //dans la table sfguard ajout de l'utilisateur dans le groupe admin $groupe = new sfGuardUserGroup(); $groupe->setUserId($user->id); $groupe->setGroupId(1); $groupe->save(); } return parent::save($conn); }
Comme l'admin est déjà enregistré dans sfUser j'obtiens l'erreur
J'ai essayé de faire des updates mais l'erreur est identique ( me semble t-il car j'ai fait plusieurs tests )
Code : Sélectionner tout - Visualiser dans une fenêtre à part SQLSTATE[23505]: Unique violation: 7 ERREUR: la valeur d'une clé dupliquée rompt la contrainte unique « sf_guard_user_group_pkey »
Je bloque
En vous remerciant d'avance de vos réponses.
Partager