symfony gestion des utilisateurs
	
	
		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 
	Code:
	
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);
		} | 
 Le bout de code en rouge correspond au cas que je n'arrive pas à gérer. 
Comme l'admin est déjà enregistré  dans sfUser j'obtiens l'erreur
	Code:
	
SQLSTATE[23505]: Unique violation: 7 ERREUR: la valeur d'une clé dupliquée rompt la contrainte unique « sf_guard_user_group_pkey »
 J'ai essayé de faire des updates mais l'erreur est identique (  me semble t-il car j'ai fait plusieurs tests )
Je bloque :aie:
En vous remerciant d'avance de vos réponses.