From 941156ce23dcdd315fa4d268283dbbd0d87ac0db Mon Sep 17 00:00:00 2001 From: ALGLAVE Ivan <ivan.alglave8@etu.univ-lorraine.fr> Date: Thu, 31 Dec 2020 23:29:31 +0100 Subject: [PATCH] Non tested -> favourites are synchronised with database when connected TODO : make database connection on every page --- MyAccount.php | 10 ++++ MyFavouriteRecipes.php | 20 ++++--- RecipeList.php | 47 +++++++++++++--- css/MyAccount.css | 0 scripts/DataQuery.js | 122 +++++++++++++++++++++++++++++++++++++++++ scripts/DataQuery.php | 30 +++++++++- scripts/SQL.php | 75 +++++++++++++++++++++++++ 7 files changed, 286 insertions(+), 18 deletions(-) create mode 100644 css/MyAccount.css create mode 100644 scripts/SQL.php diff --git a/MyAccount.php b/MyAccount.php index e7423ff..93307b6 100644 --- a/MyAccount.php +++ b/MyAccount.php @@ -8,6 +8,16 @@ <body> <h1>My Account</h1> + <?php + + include "scripts/SQL.php"; + + echo connect('ivanalglave@outlook.fr', '123'); + echo '<br>'; + echo get_email(); + echo '<br>'; + echo get_favourites(); + ?> </body> </html> \ No newline at end of file diff --git a/MyFavouriteRecipes.php b/MyFavouriteRecipes.php index 247eebc..7a2728e 100644 --- a/MyFavouriteRecipes.php +++ b/MyFavouriteRecipes.php @@ -3,18 +3,22 @@ <head> <title>Drinkpedia</title> <meta charset="UTF-8"> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> </head> <body> + <script src="scripts/DataQuery.js"></script> <script> - var data = { - event: 'recipelist', - value: sessionStorage.getItem('favourites'), - showScore: 'false', - title: 'Favoris :' - }; - window.top.postMessage(data, [data.event, data.value, data.showScore, data.title]); - + getFavourites(function(e) + { + var data = { + event: 'recipelist', + value: e, + showScore: 'false', + title: 'Favoris :' + }; + window.top.postMessage(data, [data.event, data.value, data.showScore, data.title]); + }) </script> </body> diff --git a/RecipeList.php b/RecipeList.php index ecb6310..bd2e359 100644 --- a/RecipeList.php +++ b/RecipeList.php @@ -4,6 +4,7 @@ <title>Drinkpedia</title> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="css/RecipeList.css"> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> </head> <body> @@ -58,6 +59,7 @@ </ul> + <script src="scripts/DataQuery.js"></script> <script> document.addEventListener('keyup', function (e) { @@ -82,24 +84,27 @@ function switchFavourite(img) { - let new_src = "images/favourite_off.png"; + //let new_src = "images/favourite_off.png"; if(!img.classList.contains('favouriteOn')) { new_src = "images/favourite_on.png"; img.classList.add('favouriteOn'); img.classList.remove('favouriteOff'); - let f = sessionStorage.getItem('favourites'); + /*let f = sessionStorage.getItem('favourites'); if(f != '') f += '|'; f += img.alt; - sessionStorage.setItem('favourites', f); + sessionStorage.setItem('favourites', f);*/ + addFavourite(img.alt, function(e) { + refreshFavourites(); + }); } else { img.classList.remove('favouriteOn'); img.classList.add('favouriteOff'); - let f = sessionStorage.getItem('favourites').split('|'); + /*let f = sessionStorage.getItem('favourites').split('|'); let nf = ''; for(let i = 0; i < f.length; i++) { @@ -108,17 +113,20 @@ if(i != 0) nf += '|'; nf += f[i]; } - } - sessionStorage.setItem('favourites', nf); + }*/ + + removeFavourite(img.alt, function(e){ + refreshFavourites(); + }); } - img.src= new_src; + //img.src= new_src; } function refreshFavourites() { let collection = document.getElementsByClassName('toggleFavourite'); - let favourites = sessionStorage.getItem('favourites').split('|'); + /*let favourites = sessionStorage.getItem('favourites').split('|'); for(let i = 0; i < collection.length; i++) { let node = collection[i]; @@ -135,7 +143,28 @@ node.classList.remove('favouriteOn'); node.src = "images/favourite_off.png"; } - } + }*/ + + getFavourites(function(e) { + let favourites = e; + for(let i = 0; i < collection.length; i++) + { + let node = collection[i]; + let r_id = node.value; + if(favourites.findIndex(val => val == node.alt) >= 0) + { + node.classList.add('favouriteOn'); + node.classList.remove('favouriteOff'); + node.src = "images/favourite_on.png"; + } + else + { + node.classList.add('favouriteOff'); + node.classList.remove('favouriteOn'); + node.src = "images/favourite_off.png"; + } + } + }) } diff --git a/css/MyAccount.css b/css/MyAccount.css new file mode 100644 index 0000000..e69de29 diff --git a/scripts/DataQuery.js b/scripts/DataQuery.js index 8122cb2..86f63e6 100644 --- a/scripts/DataQuery.js +++ b/scripts/DataQuery.js @@ -23,4 +23,126 @@ function getRecipeImage(id, callback) function getAllIngredients(callback) { query('getAllIngredients', [], callback); +} + +function create_user(u_email, u_pwd, callback) +{ + query('create_user', [u_email, u_pwd], callback); +} + +function connect(u_email, u_pwd, callback) +{ + query('connect', [u_email, u_pwd], callback); +} + +function is_connected(callback) +{ + query('is_connected', [], callback); +} + +function get_email(callback) +{ + query('get_email', [], callback); +} + +function get_favourites(callback) +{ + query('get_favourites', [], callback); +} + +function set_favourites(favourites, callback) +{ + query('set_favourites', [favourites], callback); +} + +function set_password(u_newpwd, callback) +{ + query('set_password', [u_newpwd], callback); +} + +function getFavourites(callback) +{ + is_connected(function(e) + { + alert('Connected : ' + (e ? 'true' : 'false')); + + get_favourites(function(f) + { + let localFavourites = sessionStorage.getItem('favourites').split('|'); + let dbFavourites = f.split('|'); + let res = joinCheckDuplicates(localFavourites, dbFavourites); + callback(res); + }); + }) +} + +function joinCheckDuplicates(e1, e2) +{ + let e3 = e1; + for(let i = 0; i < e2.length; i++) + { + if(e3.indexOf(e2[i]) < 0) e3.push(e2[i]); + } + return e3; +} + +function addFavourite(id, callback) +{ + get_favourites(function(f) + { + let localFavourites = sessionStorage.getItem('favourites').split('|'); + let dbFavourites = f.split('|'); + let res = joinCheckDuplicates(localFavourites, dbFavourites); + let indexOfTest = res.indexOf(id); + if(indexOfTest < 0) res.push(id); + + let resultStr = ''; + let first = true; + + for(let i = 0; i < res.length; i++) + { + if(res[i] != '') + { + if(!first) resultStr += '|'; + else first = false; + resultStr += res[i]; + } + } + + sessionStorage.setItem('favourites', resultStr); + + set_favourites(function(g) { + callback(resultStr); + }) + }); +} + +function removeFavourite(id, callback) +{ + get_favourites(function(f) + { + let localFavourites = sessionStorage.getItem('favourites').split('|'); + let dbFavourites = f.split('|'); + let res = joinCheckDuplicates(localFavourites, dbFavourites); + let indexOfToRemove = res.indexOf(id); + if(indexOfToRemove >= 0) res.splice(indexOfToRemove, 1); + + let resultStr = ''; + let first = true; + + for(let i = 0; i < res.length; i++) + { + if(res[i] != '') + { + if(!first) resultStr += '|'; + resultStr += res[i]; + } + } + + sessionStorage.setItem('favourites', resultStr); + + set_favourites(function(g) { + callback(resultStr); + }) + }); } \ No newline at end of file diff --git a/scripts/DataQuery.php b/scripts/DataQuery.php index 6e024dd..1ae0401 100644 --- a/scripts/DataQuery.php +++ b/scripts/DataQuery.php @@ -1,6 +1,7 @@ <?php include "Functions.php"; + include "SQL.php"; $funcName = $_POST['functionname']; @@ -26,9 +27,36 @@ { echo implode('|', getAllIngredients()); } + else if($funcName == 'create_user') + { + echo create_user($_POST['arguments'][0], $_POST['arguments'][1]); + } + else if($funcName == 'connect') + { + echo connect($_POST['arguments'][0], $_POST['arguments'][1]); + } + else if($funcName == 'is_connected') + { + echo is_connected(); + } + else if($funcName == 'get_email') + { + echo get_email(); + } + else if($funcName == 'get_favourites') + { + echo get_favourites(); + } + else if($funcName == 'set_favourites') + { + echo set_favourites($_POST['arguments'][0]); + } + else if($funcName == 'set_password') + { + echo set_password($_POST['arguments'][0]); + } else { echo 'error - unknown func'; } - ?> \ No newline at end of file diff --git a/scripts/SQL.php b/scripts/SQL.php new file mode 100644 index 0000000..a8376c5 --- /dev/null +++ b/scripts/SQL.php @@ -0,0 +1,75 @@ +<?php + +$bdd = new PDO('mysql:host=localhost;dbname=drinkpedia;charset=utf8', 'root', '', array( + PDO::ATTR_PERSISTENT => true +)); +$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); +$email = ''; + +function create_user($u_email, $u_pwd) +{ + global $bdd; + $bdd->query('INSERT INTO user (email, pwdhash, favourites) VALUES (\'' . $u_email . '\', \'' . $u_pwd . '\', \'1|2|4\')'); +} + +function connect($u_email, $u_pwd) +{ + global $bdd, $email; + $res = $bdd->query('SELECT pwdhash FROM user WHERE email LIKE \'' . $u_email . '\''); + if($res) + { + $res = $res->fetch(); + if(count($res) > 0) + { + $fetched_pwd = $res[0]; + if($fetched_pwd == $u_pwd) + { + $email = $u_email; + return true; + } + } + } + return false; +} + +function is_connected() +{ + global $email; + return $email == '' ? false : true; +} + +function get_email() +{ + global $email; + return $email; +} + +function get_favourites() +{ + global $bdd, $email; + if($email != '') + { + return $bdd->query('SELECT favourites FROM user WHERE email LIKE \'' . $email . '\'')->fetch()[0]; + } + return ''; +} + +function set_favourites($favourites) +{ + global $bdd, $email; + if($email != '') + { + $bdd->query('UPDATE user SET favourites=\'' . $favourites . '\' WHERE email like \'' . $email . '\''); + } +} + +function set_password($u_newpwd) +{ + global $bdd, $email; + if($email != '') + { + $bdd->query('UPDATE user SET pwdhash=\'' . $u_newpwd . '\' WHERE email like \'' . $email . '\''); + } +} + +?> \ No newline at end of file -- GitLab