<?php

/**
 * @brief Classe DAO relatif à la classe user
 */
class user_dao extends dao {
    /**
     * @brief Récupère les informations d'un utilisateur
     * @arg $id login de l'utilisateur à récupérer
     * @return tableau clé valeur contenant les informations ou FALSE
     */
    public function select($id) {
        //Mise en place de la requête
        $query = "SELECT * FROM `user` WHERE `login`='$id'";

        // On récupère les informations suite à la requête
        $return = $this->db->query($query)->fetch();

        //On retourne les infos
        return $return;
    }

    /**
     * @brief Insert un nouvel utilisateur dans la base de données
     * @arg $objet information de l'utilisateur à ajouter
     */
    public function insert(&$objet) {
        //On récupère les informations à ajouter
        $login = $objet->getLogin();
        $passwd = $objet->getPassword();
        $nom = $objet->getNom();
        $prenom = $objet->getPrenom();
        $mail = $objet->getMail();

        //On prépare la requête SQL
        $query = "INSERT INTO `user`(`login`,`pwd`,`nom`,`prenom`,`dateinscription`, `email`)
                  VALUES ('$login','$passwd','$nom','$prenom',NOW(), '" . $mail . "')";

        //On exécute la requête
        try {
            $this->db->query($query);
            return TRUE;
        } catch (Exception $ex) {
            $ex = NULL;
            return FALSE;
        }
    }

    /**
     * @brief Met à jour un utilisateur avec les nouvelles données spécifiée
     * @arg $objet objet user contenant les nouvelles données
     * @note le login est le seul élément inchangeable. On se sert de ce dernier pour mettre à jour la base de données
     */
    public function update(&$object) {
        //On récupère les données de l'utilisateur
        $login = $object->getLogin();
        $passwd = $object->getPassword();
        $nom = $object->getNom();
        $prenom = $object->getPrenom();
        $mail = $object->getMail();

        //On prépare la requête
        $query = "UPDATE `user` 
        SET `pwd`='$passwd', `nom`='$nom', `prenom`='$prenom', `email`='$mail' 
        WHERE login='$login'";

        //On envoie la requête
        $result = $this->db->query($query);

        //On renvoie le résultat
        if ($result->rowCount() == 0) {
            return FALSE;
        } else {
            return TRUE;
        }
    }

    public function updateNoPassword($object) {
        $login = $object->getLogin();
        $nom = $object->getNom();
        $prenom = $object->getPrenom();
        $mail = $object->getMail();

        //On prépare la requête
        $query = "UPDATE `user` 
        SET `nom`='$nom', `prenom`='$prenom', `email`='$mail' 
        WHERE login='$login'";

        //On envoie la requête
        $result = $this->db->query($query);

        //On renvoie le résultat
        if ($result->rowCount() == 0) {
            return FALSE;
        } else {
            return TRUE;
        }
    }

    /**
     * @brief Supprime un utilisateur de la base
     * @arg $id login de l'utilisateur à supprimer
     * @note la suppression d'un utilisateur entraine la suppression de ses parties et de ses réponses avec le ON DELETE CASCADE
     */
    public function delete($id) {
        //On prépare la requête SQL
        $query = "DELETE FROM `user` WHERE `login`='$id'";

        //On envoie la requête SQL
        $result = $this->db->query($query);

        if ($result->rowCount() == 0) {
            return FALSE;
        } else {
            return TRUE;
        }
    }

}

?>