diff --git a/config/config.php b/config/config.php index 8bb400c..0ba1b8b 100644 --- a/config/config.php +++ b/config/config.php @@ -12,6 +12,7 @@ $base = ''; $login = ''; $mdp = ''; + //$racine='/~kemondejar/WF-Website'; // /~kekentin/WF/WF-Website /~lebeaulato/WF-Website /~kemondejar/WF-Website $racine='/~kekentin/WF/WF-Website'; //$repImg='/home/UCA/kemondejar/public_html/WF-Website/public/images/'; diff --git a/public/styles/style.css b/public/styles/style.css index 473067e..63472e3 100644 --- a/public/styles/style.css +++ b/public/styles/style.css @@ -13,6 +13,8 @@ /*--main-light-gradient : linear-gradient(90deg, #AAB9CF, #BDD4E7);*/ --main-light-gradient : #84e4a9; --main-light-other-color : #46BE73; + /* --main-light-gradient : #94d3ac; + --main-light-other-color : #75b48d; */ } @@ -23,7 +25,7 @@ /* Général */ body{ - font-family: "Lemon", serif; + font-family: "roboto condensed", sans-serif; margin : 0%; } diff --git a/public/styles/styleEndQuiz.css b/public/styles/styleEndQuiz.css index b1de2e1..c504692 100644 --- a/public/styles/styleEndQuiz.css +++ b/public/styles/styleEndQuiz.css @@ -27,7 +27,7 @@ body.light-mode .resultat { /* ====== ECRAN DEFAUT ====== */ h1 { - font-family: "Lemon", serif; + font-family: "roboto condensed", sans-serif; text-align: center; } diff --git a/public/styles/styleLogin.css b/public/styles/styleLogin.css index b950a71..cb91fd4 100644 --- a/public/styles/styleLogin.css +++ b/public/styles/styleLogin.css @@ -61,7 +61,7 @@ body.light-mode a{ } h1{ - font-family: "Lemon", serif; + font-family: "roboto condensed", sans-serif; text-align: center; font-size: 32px; margin-top: 10%; @@ -71,7 +71,7 @@ p{ margin-top: 6%; margin-bottom: 2%; font-size: 20px; - font-family: "Lemon", serif; + font-family: "roboto condensed", sans-serif; } .login{ @@ -88,11 +88,11 @@ p{ font-size: 1em; text-align: center; padding-top: 1%; - font-family: "Lemon", serif; + font-family: "roboto condensed", sans-serif; } .buttonSudmite{ - font-family: "Lemon", serif; + font-family: "roboto condensed", sans-serif; border: none; padding: 2%; border-radius: 25px; diff --git a/public/styles/styleProfil.css b/public/styles/styleProfil.css index b459c22..ba69592 100644 --- a/public/styles/styleProfil.css +++ b/public/styles/styleProfil.css @@ -10,8 +10,9 @@ body.dark-mode p{ } body.dark-mode :popover-open { - background: var(--main-dark-gradient); + background: black; color: var(--main-dark-text-color); + border-color: black; } body.dark-mode .buttonSudmite{ @@ -33,7 +34,7 @@ body.dark-mode .imgModify{ body.light-mode .inputPasswd{ - font-family: "Lemon", serif; + font-family: "roboto condensed", sans-serif; margin-top: 2%; color: black; } @@ -54,8 +55,9 @@ body.light-mode p{ body.light-mode :popover-open { - background: var(--main-light-gradient); + background: white; color: var(--main-light-text-color); + border-color: white; } body.light-mode .buttonSubmit{ @@ -75,7 +77,7 @@ body.light-mode .login{ body.light-mode .inputPasswd{ - font-family: "Lemon", serif; + font-family: "roboto condensed", sans-serif; margin-top: 2%; color: black; } @@ -88,7 +90,7 @@ body.light-mode .saveButtonPasswd { /* ====== ECRAN DEFAUT ====== */ h1{ - font-family: "Lemon", serif; + font-family: "roboto condensed", sans-serif; text-align: center; font-size: 35px; } @@ -97,7 +99,7 @@ p{ margin-top: 4%; margin-bottom: 2%; font-size: 20px; - font-family: "Lemon", serif; + font-family: "roboto condensed", sans-serif; } ::backdrop { @@ -108,12 +110,28 @@ p{ height: 60%; font-size: 15px; text-align: center; - font-family: "Lemon", serif; + font-family: "roboto condensed", sans-serif; + display: flex; + flex-wrap: wrap; + border: 15px solid; + border-radius: 20px; +} + +:popover-open >* { + flex: 1 1 20%; + } + +.ChangeImg{ + display:block; + margin: auto; +} +.imageProfil{ + margin-bottom: 20vh; } .buttonSudmite{ - font-family: "Lemon", serif; + font-family: "roboto condensed", sans-serif; border: none; padding: 2%; border-radius: 25px; @@ -127,7 +145,7 @@ p{ font-size: 15px; text-align: center; padding-top: 1%; - font-family: "Lemon", serif; + font-family: "roboto condensed", sans-serif; } .login{ @@ -153,7 +171,7 @@ p{ border-radius: 25px; border: none; font-size: 15px; - font-family: "Lemon", serif; + font-family: "roboto condensed", sans-serif; } diff --git a/public/styles/styleQuiz.css b/public/styles/styleQuiz.css index 8b837e3..6a50a68 100644 --- a/public/styles/styleQuiz.css +++ b/public/styles/styleQuiz.css @@ -22,7 +22,7 @@ body.dark-mode .submit-button { body.dark-mode .buttonSudmite { background: linear-gradient(90deg, #6100ff 0%, #1b0048 100%); - font-family: "Lemon", serif; + font-family: "roboto condensed", sans-serif; border: none; color: white; padding: 10px 20px; @@ -50,7 +50,7 @@ body.light-mode .answer { /* ====== ECRAN DEFAUT ====== */ h1, h2, p { - font-family: "Lemon", serif; + font-family: "roboto condensed", sans-serif; text-align: center; } diff --git a/public/styles/styleQuote.css b/public/styles/styleQuote.css index cdb801c..d1ad16e 100644 --- a/public/styles/styleQuote.css +++ b/public/styles/styleQuote.css @@ -160,7 +160,7 @@ body.light-mode .like-icon-none img { background-color: #fff; color: black; display: flex; - font-family: "Lemon", sans-serif; + font-family: "roboto condensed", sans-serif; flex-direction: column; margin-bottom: 1vh; border-radius: 20px; diff --git a/public/styles/styleSignin.css b/public/styles/styleSignin.css index 1fc6221..4d0ef16 100644 --- a/public/styles/styleSignin.css +++ b/public/styles/styleSignin.css @@ -50,7 +50,7 @@ body.light-mode a{ /* ====== ECRAN DEFAULT ====== */ h1{ - font-family: "Lemon", serif; + font-family: "roboto condensed", sans-serif; text-align: center; font-size: 32px; margin-top: 10%; @@ -68,7 +68,7 @@ p{ margin-top: 4%; margin-bottom: 2%; font-size: 20px; - font-family: "Lemon", serif; + font-family: "roboto condensed", sans-serif; } .confirmer{ @@ -87,7 +87,7 @@ p{ } .btn{ - font-family: "Lemon", serif; + font-family: "roboto condensed", sans-serif; border: none; padding: 2%; border-radius: 25px; @@ -101,7 +101,7 @@ p{ font-size: 1em; text-align: center; padding-top: 1%; - font-family: "Lemon", serif; + font-family: "roboto condensed", sans-serif; } .createAccount{ diff --git a/public/styles/styleSubmitQuote.css b/public/styles/styleSubmitQuote.css index b99085b..1686902 100644 --- a/public/styles/styleSubmitQuote.css +++ b/public/styles/styleSubmitQuote.css @@ -25,7 +25,7 @@ body.light-mode #box{ /* ====== ECRAN DEFAULT ====== */ h1, h2{ - font-family: "Lemon", serif; + font-family: "roboto condensed", sans-serif; text-align: center; } diff --git a/src/Controleur/FrontControler.php b/src/Controleur/FrontControler.php index cddf172..aca86f5 100644 --- a/src/Controleur/FrontControler.php +++ b/src/Controleur/FrontControler.php @@ -16,7 +16,7 @@ Class FrontControler{ global $twig,$racine; $this->listAction = ['visitor' => array('accueil','search','quote','login','signin','validlogin','validsignin'), - 'user' => array('quiz','randomQuiz','commentary','logout','addComment','favorite','profil','addFav','supFav','changedata', 'submit', 'validsubmit', 'add', 'accueilQuiz'), + 'user' => array('quiz','randomQuiz','commentary','logout','addComment','favorite','profil','addFav','supFav','changedata', 'submit', 'validsubmit', 'add', 'accueilQuiz', 'deleteAccount'), 'admin' => array('null')]; $dVueEreur = []; @@ -57,6 +57,8 @@ Class FrontControler{ $router->map('GET|POST', '/accueilQuiz', 'UserControler', 'accueilQuiz'); $router->map('GET|POST', '/error', 'VisitorControler','error'); $router->map('GET|POST', '/randomQuiz', 'UserControler','randomQuiz'); + $router->map('GET|POST', '/deleteAccount', 'UserControler', 'deleteAccount'); + $match = $router->match(); diff --git a/src/Controleur/UserControler.php b/src/Controleur/UserControler.php index 49b29e8..12a65c2 100644 --- a/src/Controleur/UserControler.php +++ b/src/Controleur/UserControler.php @@ -516,6 +516,7 @@ class UserControler { return null; } + public function add(){ global $vues, $repImg; $error = []; @@ -618,20 +619,67 @@ class UserControler { } - public function sendEmailChangeLogin(string $email) : void{ - $to = $email; // Adresse email de destination - $subject = "What The Fantasy - Changement d'Email"; // Sujet de l'email - $message = " - Bonjour, + + // ===================== DELETE ACCOUNT FUNCTION ===================== + + public function deleteAccount(){ + $this->uMod->deleteAllCommentary($_SESSION["user"]); // Delete all commentary + $this->uMod->deleteAllFavorite($_SESSION["user"]); // Delete all favorite + $this->uMod->deleteAccount($_SESSION["user"]); + $this->unlog(); + } + + + // ===================== EMAIL FUNCTION ===================== + + public function sendEmailChangeLogin(string $email) { + // Génère les données du message + $sujet = "What The Fantasy - Changement d'Email"; + $urlImage = "public/images/Baneer.png"; + + + // Génère une frontière unique pour l'email + $boundary = "-----=" . md5(uniqid(mt_rand())); + + //Instancie les headers + $headers = "From: noreply@whatTheFantasy.com\r\n"; + $headers .= "MIME-Version: 1.0\r\n"; + $headers .= "Content-Type: multipart/related; boundary=\"$boundary\"\r\n"; + - L'adresse mail $email est désormais votre nouvelle adresse. + // Corps de l'email HTML avec l'image intégrée + $corpsMessage = "--$boundary\r\n"; + $corpsMessage .= "Content-Type: text/html; charset=UTF-8\r\n"; + $corpsMessage .= "Content-Transfer-Encoding: 8bit\r\n\r\n"; - - L'équipe du site - "; // Contenu de l'email - $headers = "From: noreply@whatTheFantasy.com"; // Adresse email de l'expéditeur + // Ajoute le message HTML + $corpsMessage .= " + + \"Image\" +

Bonjour,

+ +

Vous venez de changer votre adresse mail. Dorénavant, votre email sera $email.

+

L'équipe du site

+ + \r\n"; + + // Ajoute l'image en pièce jointe + $corpsMessage .= "--$boundary\r\n"; + $corpsMessage .= "Content-Type: image/jpeg; name=\"image.jpg\"\r\n"; + $corpsMessage .= "Content-Transfer-Encoding: base64\r\n"; + $corpsMessage .= "Content-ID: \r\n\r\n"; + + + $imageContent = file_get_contents($urlImage);// Lecture et encodage de l'image en base64 + if ($imageContent === false) { + return "Impossible de charger l'image spécifiée."; + } + $corpsMessage .= chunk_split(base64_encode($imageContent)) . "\r\n"; - // Envoyer l'email - mail($to, $subject, $message, $headers); + + $corpsMessage .= "--$boundary--";// Fin du corps de l'email + + + mail($email, $sujet, $corpsMessage, $headers);// Envoi de l'email } } diff --git a/src/Controleur/VisitorControler.php b/src/Controleur/VisitorControler.php index 9f5f150..366c692 100644 --- a/src/Controleur/VisitorControler.php +++ b/src/Controleur/VisitorControler.php @@ -243,7 +243,7 @@ Class VisitorControler { // Ajoute le message HTML $corpsMessage .= " - \"Image\" + \"Image\"

Bonjour $pseudo,

Merci de vous être inscrit sur notre site What The Fantasy. C’est avec grande joie que nous vous accueillons au sein de notre confrérie, pour découvrir ensemble... @@ -253,7 +253,7 @@ Class VisitorControler { \r\n"; - // Ajoute l'image en pièce jointe avec un CID + // Ajoute l'image en pièce jointe $corpsMessage .= "--$boundary\r\n"; $corpsMessage .= "Content-Type: image/jpeg; name=\"image.jpg\"\r\n"; $corpsMessage .= "Content-Transfer-Encoding: base64\r\n"; diff --git a/src/Entity/Quote.php b/src/Entity/Quote.php index f5eb1ab..fff3141 100644 --- a/src/Entity/Quote.php +++ b/src/Entity/Quote.php @@ -1,6 +1,8 @@ id = $id; $this->content = $content; @@ -32,6 +35,7 @@ $this->dateSrc = $dateSrc; $this->like = $like; $this->langue = $langue; + $this->type = $type; } /** @@ -162,7 +166,13 @@ $this->langue = $langue; } + public function getType(): TypeSourceEnum{ + return $this->type; + } + public function setType(TypeSourceEnum $type){ + $this->type = $type; + } } ?> diff --git a/src/Gateway/QuizGateway.php b/src/Gateway/QuizGateway.php index 00c6a8d..c80d372 100644 --- a/src/Gateway/QuizGateway.php +++ b/src/Gateway/QuizGateway.php @@ -25,7 +25,7 @@ class QuizGateway extends Gateway public function findQuizById(int $id) : array { - $query = "SELECT * FROM Quiz WHERE id_quiz = :id_q"; + $query = "SELECT id_quiz, title, imgPath, nb_quest FROM Quiz q JOIN Image i on q.img = i.id_img WHERE id_quiz = :id_q"; $this -> co -> executeQuery($query, [':id_q' => array($id, PDO::PARAM_INT)]); return $this -> co -> getResults(); } @@ -43,4 +43,10 @@ class QuizGateway extends Gateway return $this -> co -> getResults(); } + public function getNumberOfQuestion(int $id) : intdiv{ + $query = "SELECT nb_quest FROM quiz WHERE id_quiz = :id_q"; + $this -> co -> executeQuery($query, [':id_q' => array($id, PDO::PARAM_INT)]); + return $this -> co -> getResults(); + } + } \ No newline at end of file diff --git a/src/Gateway/UserGateway.php b/src/Gateway/UserGateway.php index f66e9a1..ec91f2b 100644 --- a/src/Gateway/UserGateway.php +++ b/src/Gateway/UserGateway.php @@ -75,14 +75,30 @@ Class UserGateway extends Gateway{ $query = 'SELECT id_user FROM Users WHERE username = :username'; $this->co->executeQuery($query, array(':username' => array($username,PDO::PARAM_STR))); $result = $this->co->getResults()[0]['id_user']; - var_dump($result); - var_dump($id); + $query = 'DELETE FROM Favorite WHERE users = :user AND quote = :id;'; $this->co->executeQuery($query, array(':user' => array($result,PDO::PARAM_INT), ':id' => array($id,PDO::PARAM_INT))); $query = 'UPDATE Quote SET likes = (likes - 1) WHERE id_quote = :id'; $this->co->executeQuery($query, array(':id' => array($id,PDO::PARAM_INT))); } + + public function deleteAllCommentaryUser(string $user){ + $query = 'DELETE FROM Commentary WHERE users IN ( SELECT id_user FROM Users WHERE username = :user);'; + $this->co->executeQuery($query, array(':user'=>array($user, PDO::PARAM_STR))); + } + + + public function deleteAllFavoriteUser(string $user){ + $query = 'DELETE FROM Favorite WHERE users IN ( SELECT id_user FROM Users WHERE username = :user);'; + $this->co->executeQuery($query, array(':user'=>array($user, PDO::PARAM_STR))); + } + + public function deleteUser(string $user){ + $query = 'DELETE FROM Users WHERE username=:user;'; + $this->co->executeQuery($query, array(':user'=>array($user, PDO::PARAM_STR))); + } + // ===================== GET FUNCTION ===================== public function getFavorite(string $id):array{ diff --git a/src/Model/QuizModel.php b/src/Model/QuizModel.php index edb52f9..cb12dac 100644 --- a/src/Model/QuizModel.php +++ b/src/Model/QuizModel.php @@ -20,7 +20,7 @@ class QuizModel extends Model{ return new QuizEntity( $q[0]['id_quiz'], $q[0]['nb_quest'], - $q[0]['img'], + $q[0]['imgpath'], $q[0]['title'] ); } diff --git a/src/Model/QuoteModel.php b/src/Model/QuoteModel.php index e2f5946..0c70fb5 100644 --- a/src/Model/QuoteModel.php +++ b/src/Model/QuoteModel.php @@ -3,6 +3,7 @@ use Entity\Quote; use Gateway\QuoteGateway; use Gateway\Gateway; + use Enum\TypeSourceEnum; class QuoteModel extends Model { @@ -12,7 +13,7 @@ if( count($res) == 0) return new Quote(-1,"NULL","NULL","NULL","NULL","NULL",0,"Default"); else - return new Quote($res[0]["id_quote"],$res[0]["content"],$res[0]["caracter"],$res[0]["imgpath"],$res[0]["title"],$res[0]["dates"],$res[0]["likes"],$res[0]["langue"]); + return new Quote($res[0]["id_quote"],$res[0]["content"],$res[0]["caracter"],$res[0]["imgpath"],$res[0]["title"],$res[0]["dates"],$res[0]["likes"],$res[0]["langue"],TypeSourceEnum::Movie); } public function getSuggest(int $numpage, string $language):array{ @@ -21,7 +22,7 @@ foreach($res as $q ){ $q["content"] = (strlen($q["content"]) > 153) ? substr($q["content"],0,150).'...' : $q["content"]; - $tabQ[]= new Quote($q["id_quote"],$q["content"],$q["caracter"],$q["imgpath"],$q["title"],$q["dates"],$q["likes"],$q["langue"]) ; + $tabQ[]= new Quote($q["id_quote"],$q["content"],$q["caracter"],$q["imgpath"],$q["title"],$q["dates"],$q["likes"],$q["langue"],TypeSourceEnum::Movie) ; } return $tabQ; } @@ -29,10 +30,10 @@ public function getQuoteOfTheDay(string $language):Quote{ $res = $this->gateway->getQuoteOfTheDay($language); if( count($res) == 0) - return new Quote(-1,"NULL","NULL","NULL","NULL","NULL",0,"Default"); + return new Quote(-1,"NULL","NULL","NULL","NULL","NULL",0,"Default",TypeSourceEnum::Movie); else $res["content"] = (strlen($res["content"]) > 153) ? substr($res["content"],0,150).'...' : $res["content"]; - return new Quote($res["id_quote"],$res["content"],$res["caracter"],$res["imgpath"],$res["title"],$res["dates"],$res["likes"],$res["langue"]) ; + return new Quote($res["id_quote"],$res["content"],$res["caracter"],$res["imgpath"],$res["title"],$res["dates"],$res["likes"],$res["langue"],TypeSourceEnum::Movie) ; } public function getFavorites(string $userId): array { @@ -41,7 +42,7 @@ foreach($res as $q ){ $q["content"] = (strlen($q["content"]) > 153) ? substr($q["content"],0,150).'...' : $q["content"]; - $tabQ[]= new Quote($q["id_quote"],$q["content"],$q["caracter"],$q["imgpath"],$q["title"],$q["dates"],$q["likes"],$q["langue"]) ; + $tabQ[]= new Quote($q["id_quote"],$q["content"],$q["caracter"],$q["imgpath"],$q["title"],$q["dates"],$q["likes"],$q["langue"],TypeSourceEnum::Movie) ; } return $tabQ; } diff --git a/src/Model/SearchModel.php b/src/Model/SearchModel.php index 48bd1f6..0762bf0 100644 --- a/src/Model/SearchModel.php +++ b/src/Model/SearchModel.php @@ -3,6 +3,7 @@ use Entity\Quote; use Gateway\QuoteGateway; use Gateway\Gateway; + use Enum\TypeSourceEnum; class SearchModel extends Model { @@ -14,7 +15,7 @@ foreach($res as $q ){ $q["content"] = (strlen($q["content"]) > 153) ? substr($q["content"],0,150).'...' : $q["content"]; - $tabQ[]= new Quote($q["id_quote"],$q["content"],$q["caracter"],$q["imgpath"],$q["title"],$q["dates"],$q["likes"],$q["langue"]) ; + $tabQ[]= new Quote($q["id_quote"],$q["content"],$q["caracter"],$q["imgpath"],$q["title"],$q["dates"],$q["likes"],$q["langue"],TypeSourceEnum::Movie) ; } return $tabQ; } diff --git a/src/Model/UserModel.php b/src/Model/UserModel.php index 5dd1edc..96293bd 100644 --- a/src/Model/UserModel.php +++ b/src/Model/UserModel.php @@ -170,6 +170,22 @@ public function supFavorite(string $username, int $id){ $this->gateway->supFavorite($username,$id); } + + + + // ===================== DELETE FUNCTION ===================== + + public function deleteAllCommentary(string $username){ + $this->gateway->deleteAllCommentaryUser($username); + } + + public function deleteAllFavorite(string $username){ + $this->gateway->deleteAllFavoriteUser($username); + } + + public function deleteAccount(string $username){ + $this->gateway->deleteUser($username); + } } ?> diff --git a/vue/quote.php b/vue/quote.php index 30ec5be..27b515e 100644 --- a/vue/quote.php +++ b/vue/quote.php @@ -1,4 +1,5 @@ $q->getLike(), 'idQuote' => $q->getId(), 'com' => $c, + 'type' => $q->getType()->name, 'fav' => $f)); ?> \ No newline at end of file diff --git a/vue/templates/login.html.twig b/vue/templates/login.html.twig index a9f8594..0830899 100644 --- a/vue/templates/login.html.twig +++ b/vue/templates/login.html.twig @@ -6,7 +6,7 @@

Mot de passe *

- + {% if error is defined and error is not empty %}

{{ error }}

diff --git a/vue/templates/profil.html.twig b/vue/templates/profil.html.twig index f32a82e..b1a62c5 100644 --- a/vue/templates/profil.html.twig +++ b/vue/templates/profil.html.twig @@ -55,6 +55,12 @@ + +
+ + + +
diff --git a/vue/templates/quote.html.twig b/vue/templates/quote.html.twig index ffc43f9..0e3de03 100644 --- a/vue/templates/quote.html.twig +++ b/vue/templates/quote.html.twig @@ -19,7 +19,7 @@
    -
  • - {{sourceName}}
  • +
  • - {{sourceName}} ({{type}})
  • - {{nameCarac}}
  • - {{dateSortie}}
diff --git a/vue/templates/recapSubmitQuote.html.twig b/vue/templates/recapSubmitQuote.html.twig index 0211f18..eef4834 100644 --- a/vue/templates/recapSubmitQuote.html.twig +++ b/vue/templates/recapSubmitQuote.html.twig @@ -1,4 +1,4 @@ -

▶ Your quote has been submitted successfully ◀

+

Votre citation a corectement été envoyé