Commit dcfd9c85 authored by Julien Ait azzouzene's avatar Julien Ait azzouzene
Browse files

🚧 in-progress: CRUD des utilisateurs

parent ec65c051
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -3,12 +3,18 @@ class AssertionFailedException extends Exception{}

function assertEquals($var1, $var2){
    if($var1 !== $var2){
        throw new AssertionFailedException("expected value : ".$var1." actual : ".$var2."");
        throw new AssertionFailedException("assertion : expected value : ".$var1." actual : ".$var2."");
    }
}

function assertTrue($bool){
    if(! $bool){
        throw new AssertionFailedException("expected true value");
        throw new AssertionFailedException("assertion : expected true value");
    }
}

function assertFalse($bool){
    if($bool){
        throw new AssertionFailedException("assertion : expected false value");
    }
}
 No newline at end of file
+1 −1
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ class Utilisateur {
     * @param string $id id de l'utilisateur (lecture seule)
     * @param string $dateInscription date d'inscription (lecture seule)
     */
    public function __construct(string $pseudo, string $hashMdp, string $email, string $type, string $statut = "A", string $id = "", string $nom = "", string $prenom = "", string $dateInscription = ""){$this->pseudo = $pseudo;$this->hashMdp = $hashMdp;$this->email = $email;$this->type = $type;$this->nom = $nom;$this->prenom = $prenom;$this->statut = $statut;$this->id = $id;$this->dateInscription = $dateInscription;}
    public function __construct(string $pseudo, string $email, string $type, string $statut = "A", string $id = "", string $nom = "", string $prenom = "", string $dateInscription = ""){$this->pseudo = $pseudo;$this->email = $email;$this->type = $type;$this->nom = $nom;$this->prenom = $prenom;$this->statut = $statut;$this->id = $id;$this->dateInscription = $dateInscription;}

    /**
     * Renvoie le pseudo de l'utilisateur.
+66 −10
Original line number Diff line number Diff line
@@ -14,6 +14,18 @@ require_once 'src/model/utilisateur.php';
 */
class UtilisateurManager extends Manager{

    private function utilisateurFromLigne(array $ligne): Utilisateur{
        $pseudo = $ligne['UTIL_PSEUDO'];
        $email = $ligne['UTIL_EMAIL'];
        $type = $ligne['UTIL_TYPE'];
        $nom = $ligne['UTIL_NOM'];
        $prenom = $ligne['UTIL_PRENOM'];
        $statut = $ligne['UTIL_STATUT'];
        $id = $ligne['UTIL_ID'];
        $dateInscription = $ligne['UTIL_DATE_INSCRIPTION'];

        return new Utilisateur($pseudo, $email, $type, $statut, $id, $nom, $prenom, $dateInscription);
    }
        
    /**
     * Renvoie un utilisateur en fonction de son id.
@@ -21,9 +33,18 @@ class UtilisateurManager extends Manager{
     * @return ?Utilisateur
     */
    public function getUtilisateur(string $id): ?Utilisateur{
        throw new Exception('not implemented yet');
        $requete = 
        "select * from CUI_UTILISATEUR
        WHERE UTIL_ID = '$id'";

        $resultat = $this->projectionBdd($requete);

        if(count($resultat) === 0){
            return null;
        }

        return $this->utilisateurFromLigne($resultat[0]);
    }
        
    /**
     * Renvoie tous les utilisateurs, sauf ceux qui ont été supprimés.
@@ -31,20 +52,55 @@ class UtilisateurManager extends Manager{
     * @return array un tableau d'Utilisateurs
     */
    public function getUtilisateurs(): array{
        throw new Exception('not implemented yet');
        $requete = "select * from CUI_UTILISATEUR WHERE UTIL_STATUT != 'D'";

        $resultat = $this->projectionBdd($requete);

        $utilisateurs = [];
        foreach($resultat as $ligne){
            $utilisateurs[] = $this->utilisateurFromLigne($ligne);
        }

        return $utilisateurs;
    }
    
    /**
     * Tente de connecter un utilisateur.
     * Renvoie l'Utilisateur si la connexion a réussi, sinon renvoie null.
     * @param string $identifiant le pseudo ou l'adresse email de l'utilisateur.
     * @param string $hashMdp le mot de passe hashé de l'utilisateur
     * @param string $motDePasse le mot de passe de l'utilisateur
     * @return ?Utilisateur
     */
    public function connecter(string $identifiant, string $hashMdp): ?Utilisateur{
        throw new Exception('not implemented yet');
    public function connecter(string $identifiant, string $motDePasse): ?Utilisateur{
        $requete = 
        "select * from CUI_UTILISATEUR
        WHERE UTIL_STATUT = 'A'
        AND (UTIL_PSEUDO = '$identifiant' OR UTIL_EMAIL = '$identifiant')";

        $resultat = $this->projectionBdd($requete);

        if(count($resultat) > 1){
            throw new Exception("plusieurs utilisateurs ont été trouvés");
        }

        if(count($resultat) === 0){
            return null;
        }

        if(! password_verify($motDePasse, $resultat[0]["UTIL_MDP"])){
            return null;
        }

        return $this->utilisateurFromLigne($resultat[0]);
    }

    private function setStatut(Utilisateur $utilisateur, string $codeStatut): void{
        $requete = "UPDATE CUI_UTILISATEUR SET UTIL_STATUT = ? WHERE UTIL_ID = ?";
        $nbLignes = $this->requetePrepare($requete, [$codeStatut, $utilisateur->getId()]);
        if($nbLignes === 0){
            throw new Exception("échec du changement de statut");
        }
    }
        
    /**
     * Suspends un utilisateur (change son statut).
@@ -52,7 +108,7 @@ class UtilisateurManager extends Manager{
     * @return void
     */
    public function suspendreUtilisateur(Utilisateur $utilisateur){
        throw new Exception('not implemented yet');
        $this->setStatut($utilisateur, 'S');
    }
    
    /**
@@ -61,7 +117,7 @@ class UtilisateurManager extends Manager{
     * @return void
     */
    public function leverSuspension(Utilisateur $utilisateur){
        throw new Exception('not implemented yet');
        $this->setStatut($utilisateur, 'A');
    }

        
@@ -73,6 +129,6 @@ class UtilisateurManager extends Manager{
     * @return void
     */
    public function supprimerUtilisateur(Utilisateur $utilisateur){
        throw new Exception('not implemented yet');
        $this->setStatut($utilisateur, 'D');
    }
}
 No newline at end of file
+48 −0
Original line number Diff line number Diff line
<?php

require_once 'src/lib/assertion.php';

require_once 'src/model/utilisateurManager.php';
require_once 'src/model/utilisateur.php';

testUtilisateurs();
function testUtilisateurs(){
    $manager = new UtilisateurManager();
    $motDePasse = "test";

    // Test de connexion
    $utilisateur = $manager->connecter('test', $motDePasse);

    assertTrue(! is_null($utilisateur));

    assertEquals('Jean', $utilisateur->getPrenom());
    assertEquals('Test', $utilisateur->getNom());

    // Test de la méthode getUtilisateur(string $id)
    $utilisateurBis = $manager->getUtilisateur($utilisateur->getId());

    assertEquals($utilisateur->getDateInscription(), $utilisateurBis->getDateInscription());

    // Test de la méthode getUtilisateurs()
    assertTrue(contientUtilisateur($manager->getUtilisateurs(), $utilisateur));

    // Test de la suspension d'utilisateurs
    $manager->suspendreUtilisateur($utilisateurBis);
    assertFalse($manager->getUtilisateur($utilisateurBis->getId())->estActif());
    $manager->leverSuspension($utilisateurBis);
    assertTrue($manager->getUtilisateur($utilisateurBis->getId())->estActif());

    // Test de la supression d'utilisateurs
    /*$manager->supprimerUtilisateur($utilisateur);
    assertTrue(is_null($manager->connecter('test', $motDePasse)));
    assertFalse(contientUtilisateur($manager->getUtilisateurs(), $utilisateur));*/
}

function contientUtilisateur($tab, $utilisateur){
    foreach ($tab as $element){
        if ($element->getId() == $utilisateur->getId()){
            return true;
        }
    }
    return false;
}
 No newline at end of file
+1 −0
Original line number Diff line number Diff line
@@ -5,5 +5,6 @@ require_once 'src/lib/assertion.php';
require_once 'test/testEdito.php';
require_once 'test/testTags.php';
require_once 'test/testsIngredients.php';
require_once 'test/testUtilisateurs.php';

echo "<h2>Les tests ont passés avec succès</h2>";
 No newline at end of file