diff --git a/AccountConnection.php b/AccountConnection.php new file mode 100644 index 0000000000000000000000000000000000000000..050f7513cda35a08aa62351378576ed6309917a1 --- /dev/null +++ b/AccountConnection.php @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<html> +<head> + <title>Drinkpedia</title> + <meta charset="UTF-8"> + <link rel="stylesheet" type="text/css" href="css/MyAccount.css"> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> +</head> + +<body> + <h1>Connexion</h1> + + <label>Email</label> + <input id="emailInput" type="email"> + <label>Mot de passe</label> + <input id="pwdInput" type="password"> + <button onclick="tryConnect();">Se connecter</button> + <label>Pas de compte ?</label> + <a onclick="goToCreate();">Créer</a> + + <script src="scripts/DataQuery.js"></script> + <script> + function goToCreate() + { + var data = { + event: 'usercreate', + value: '' + }; + window.top.postMessage(data, [data.event, data.value]); + } + + function tryConnect() + { + let ei = document.getElementById('emailInput'); + let pi = document.getElementById('pwdInput'); + let email = ei.value; + let pwd = pi.value; + connect_user(email, pwd, function(e){ + if(e == '1') + { + var data = { + event: 'useraccount', + value: e + }; + window.top.postMessage(data, [data.event, data.value]); + } + else + { + alert('Mauvaise combinaison email/mot de passe'); + } + }); + } + </script> + +</body> + +</html> \ No newline at end of file diff --git a/AccountCreation.php b/AccountCreation.php new file mode 100644 index 0000000000000000000000000000000000000000..cbbfd0564f608c0a6ace2c05f43bbf023b0ccf83 --- /dev/null +++ b/AccountCreation.php @@ -0,0 +1,67 @@ +<!DOCTYPE html> +<html> +<head> + <title>Drinkpedia</title> + <meta charset="UTF-8"> + <link rel="stylesheet" type="text/css" href="css/MyAccount.css"> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> +</head> + +<body> + <h1>Création d'un compte</h1> + + <label>Email</label> + <input id="emailInput" type="email"> + <label>Mot de passe</label> + <input id="pwdInput" type="password"> + <button onclick="createAccount();">Créer mon compte</button> + <label>Déjà un compte ?</label> + <a onclick="goToConnect();">Se connecter</a> + + <script src="scripts/DataQuery.js"></script> + <script> + function goToConnect() + { + var data = { + event: 'userconnect', + value: '' + }; + window.top.postMessage(data, [data.event, data.value]); + } + + function createAccount() + { + let ei = document.getElementById('emailInput'); + let pi = document.getElementById('pwdInput'); + let email = ei.value; + let pwd = pi.value; + create_user(email, pwd, function(e){ + if(e == '1') + { + connect_user(email, pwd, function(j) + { + if(j == '0') + { + alert('Oops something went wrong'); + } + else + { + var data = { + event: 'useraccount', + value: e + }; + window.top.postMessage(data, [data.event, data.value]); + } + }) + } + else + { + alert('Erreur - email déjà associé à un compte') + } + }); + } + </script> + +</body> + +</html> \ No newline at end of file diff --git a/Hierarchy.php b/Hierarchy.php index 2ba5390bef2925a84f2cde11778fdff772e276d5..b664e0e52cb06dad84004ef74e2449e6447d662d 100644 --- a/Hierarchy.php +++ b/Hierarchy.php @@ -13,7 +13,6 @@ <!-- PHP --> <?php - // DEBUT DES ACTIONS SUR LA PAGE : include "scripts/Functions.php"; diff --git a/Home.php b/Home.php index b6253bccf9d4f44f18658555ca996df001b6c14d..275d836cb28a15a8acb3f99124b9e9d8873d2c2d 100644 --- a/Home.php +++ b/Home.php @@ -8,6 +8,12 @@ <body id="body"> + <?php + include 'scripts/SQL.php'; + //connect_db(); + + ?> + <div class="background"></div> <div id="content"> @@ -73,6 +79,18 @@ setActiveTab('tabBtnI'); switchView('Hierarchy.php?element="' + m_value + '"'); } + else if(m_event == 'useraccount') + { + switchView('MyAccount.php'); + } + else if(m_event == 'userconnect') + { + switchView('AccountConnection.php'); + } + else if(m_event == 'usercreate') + { + switchView('AccountCreation.php'); + } } function hideBlurred() @@ -132,8 +150,8 @@ function tabButtonClicked(b) { - setActiveTab(b.id); - switchView(activeTabButton.value); + setActiveTab(b.id); + switchView(activeTabButton.value); } function startLoadingScreen() diff --git a/MyAccount.php b/MyAccount.php index 93307b639eaba9d61a9a742b64864264434e6500..442707276673045c7797c31eb6b1170956418098 100644 --- a/MyAccount.php +++ b/MyAccount.php @@ -4,20 +4,51 @@ <title>Drinkpedia</title> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="css/MyAccount.css"> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> + <script src="scripts/DataQuery.js"></script> </head> <body> + <script> + is_connected(function(e) + { + if(e == '0') + { + var data = { + event: 'userconnect', + value: e + }; + window.top.postMessage(data, [data.event, data.value]); + } + }); + </script> + <h1>My Account</h1> - <?php - include "scripts/SQL.php"; + <label id="email"></label> + + <button onclick="disconnect();">Se déconnecter</button> + + <script> + + let emailLabel = document.getElementById('email'); + get_email(function(e){ + emailLabel.innerHTML = 'Adresse email : ' + e; + }); + + function disconnect() + { + disconnect_user(function(f) + { + var data = { + event: 'userconnect', + value: '' + }; + window.top.postMessage(data, [data.event, data.value]); + }); + } + </script> - 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 7a2728e4dc22118a1e8e20915886211937efe59e..e5a007d78b4f351b51aa140b0417e358e7fa63f4 100644 --- a/MyFavouriteRecipes.php +++ b/MyFavouriteRecipes.php @@ -9,16 +9,17 @@ <body> <script src="scripts/DataQuery.js"></script> <script> - 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]); - }) + + 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 bd2e359bccb810a05f544a1e3e612907d22bcd2c..8a145305e2b4cc66497ac056013c3cfe2cc992b0 100644 --- a/RecipeList.php +++ b/RecipeList.php @@ -10,7 +10,6 @@ <body> <?php - include "Donnees.inc.php"; include "scripts/Functions.php"; @@ -84,17 +83,12 @@ function switchFavourite(img) { - //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'); - if(f != '') f += '|'; - f += img.alt; - sessionStorage.setItem('favourites', f);*/ addFavourite(img.alt, function(e) { refreshFavourites(); }); @@ -103,50 +97,19 @@ { img.classList.remove('favouriteOn'); img.classList.add('favouriteOff'); - - /*let f = sessionStorage.getItem('favourites').split('|'); - let nf = ''; - for(let i = 0; i < f.length; i++) - { - if(img.alt != f[i]) - { - if(i != 0) nf += '|'; - nf += f[i]; - } - }*/ removeFavourite(img.alt, function(e){ refreshFavourites(); }); } - - //img.src= new_src; } function refreshFavourites() { let collection = document.getElementsByClassName('toggleFavourite'); - /*let favourites = sessionStorage.getItem('favourites').split('|'); - 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"; - } - }*/ getFavourites(function(e) { - let favourites = e; + let favourites = e.split('|'); for(let i = 0; i < collection.length; i++) { let node = collection[i]; diff --git a/RecipeView.php b/RecipeView.php index e64b3e9200ec13c524f2ba32004fc941154b96a1..517e7ec80b5dee8fd49958272c1c4c6121cab54b 100644 --- a/RecipeView.php +++ b/RecipeView.php @@ -1,6 +1,7 @@ <!-- HTML Fragment to display a recipe --> <head> <link rel="stylesheet" type="text/css" href="css/RecipeView.css"> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> </head> <body> @@ -46,6 +47,7 @@ </div> + <script src="scripts/DataQuery.js"></script> <script> document.addEventListener('keyup', function (e) @@ -60,58 +62,56 @@ } }); - function switchFavourite(img) - { - let new_src = "images/favourite_off.png"; - if(!img.classList.contains('favouriteOn')) + function switchFavourite(img) { - new_src = "images/favourite_on.png"; - img.classList.add('favouriteOn'); - img.classList.remove('favouriteOff'); - - let f = sessionStorage.getItem('favourites'); - if(f != '') f += '|'; - f += img.alt; - sessionStorage.setItem('favourites', f); + if(!img.classList.contains('favouriteOn')) + { + new_src = "images/favourite_on.png"; + img.classList.add('favouriteOn'); + img.classList.remove('favouriteOff'); + + addFavourite(img.alt, function(e) { + refreshFavourites(); + }); + } + else + { + img.classList.remove('favouriteOn'); + img.classList.add('favouriteOff'); + + removeFavourite(img.alt, function(e){ + refreshFavourites(); + }); + } } - else + + function refreshFavourites() { - img.classList.remove('favouriteOn'); - img.classList.add('favouriteOff'); + let collection = document.getElementsByClassName('toggleFavourite'); - let f = sessionStorage.getItem('favourites').split('|'); - let nf = ''; - for(let i = 0; i < f.length; i++) - { - if(img.alt != f[i]) + getFavourites(function(e) { + let favourites = e.split('|'); + for(let i = 0; i < collection.length; i++) { - if(i == 0) nf += '|'; - nf += f[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"; + } } - } - sessionStorage.setItem('favourites', nf); + }) } - - img.src= new_src; - } - let collection = document.getElementsByClassName('toggleFavourite'); - let favourites = sessionStorage.getItem('favourites').split('|'); - 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.src = "images/favourite_on.png"; - } - else - { - node.classList.add('favouriteOff'); - node.src = "images/favourite_off.png"; - } - } + refreshFavourites(); </script> </body> \ No newline at end of file diff --git a/Recipes.php b/Recipes.php index 6c3f0b074fb5a3568ad271e797fece4f8dce587f..48c726f71d29e19347e311e3c19305d4f123ed46 100644 --- a/Recipes.php +++ b/Recipes.php @@ -10,7 +10,6 @@ <body> <script src="scripts/DataQuery.js"></script> <script> - getRecipes([], [], 0, true, true, function(e) { var data = { event: 'recipelist', diff --git a/scripts/DataQuery.js b/scripts/DataQuery.js index 86f63e64405937ae988848fb396020f3360176f8..ddab936acecbfb9e80afc089c7fd9f662eb795d6 100644 --- a/scripts/DataQuery.js +++ b/scripts/DataQuery.js @@ -25,14 +25,25 @@ function getAllIngredients(callback) query('getAllIngredients', [], callback); } +function connect_db(callback) +{ + query('connect_db', [], callback); +} + function create_user(u_email, u_pwd, callback) { query('create_user', [u_email, u_pwd], callback); } -function connect(u_email, u_pwd, callback) +function connect_user(u_email, u_pwd, callback) +{ + query('connect_user', [u_email, u_pwd], callback); +} + +function disconnect_user(callback) { - query('connect', [u_email, u_pwd], callback); + sessionStorage.setItem('favourites', ''); + query('disconnect_user', [], callback); } function is_connected(callback) @@ -62,18 +73,31 @@ function set_password(u_newpwd, callback) function getFavourites(callback) { - is_connected(function(e) + get_favourites(function(f) { - alert('Connected : ' + (e ? 'true' : 'false')); + let localFavourites = sessionStorage.getItem('favourites').split('|'); + let dbFavourites = f.split('|'); + let res = (dbFavourites == '' ? localFavourites : joinCheckDuplicates(localFavourites, dbFavourites)); - get_favourites(function(f) + var resultStr = ''; + let first = true; + + for(let i = 0; i < res.length; i++) { - let localFavourites = sessionStorage.getItem('favourites').split('|'); - let dbFavourites = f.split('|'); - let res = joinCheckDuplicates(localFavourites, dbFavourites); - callback(res); + if(res[i] != '') + { + if(!first) resultStr += '|'; + else first = false; + resultStr += res[i]; + } + } + + sessionStorage.setItem('favourites', resultStr); + + set_favourites(resultStr, function(g) { + callback(resultStr); }); - }) + }); } function joinCheckDuplicates(e1, e2) @@ -83,7 +107,9 @@ function joinCheckDuplicates(e1, e2) { if(e3.indexOf(e2[i]) < 0) e3.push(e2[i]); } - return e3; + return e3.sort(function(a, b) { + return a - b; + }); } function addFavourite(id, callback) @@ -92,11 +118,12 @@ function addFavourite(id, callback) { let localFavourites = sessionStorage.getItem('favourites').split('|'); let dbFavourites = f.split('|'); - let res = joinCheckDuplicates(localFavourites, dbFavourites); + let res = (dbFavourites == '' ? localFavourites : joinCheckDuplicates(localFavourites, dbFavourites)); + let indexOfTest = res.indexOf(id); if(indexOfTest < 0) res.push(id); - let resultStr = ''; + var resultStr = ''; let first = true; for(let i = 0; i < res.length; i++) @@ -108,12 +135,15 @@ function addFavourite(id, callback) resultStr += res[i]; } } + + //alert(sessionStorage.getItem('favourites') + ' ~ ' + f + ' + ' + id + ' => ' + resultStr); sessionStorage.setItem('favourites', resultStr); - set_favourites(function(g) { + set_favourites(resultStr, function(g) { + //alert('New favourites : ' + g); callback(resultStr); - }) + }); }); } @@ -123,11 +153,12 @@ function removeFavourite(id, callback) { let localFavourites = sessionStorage.getItem('favourites').split('|'); let dbFavourites = f.split('|'); - let res = joinCheckDuplicates(localFavourites, dbFavourites); + let res = (dbFavourites == '' ? localFavourites : joinCheckDuplicates(localFavourites, dbFavourites)); + res.sort(); let indexOfToRemove = res.indexOf(id); if(indexOfToRemove >= 0) res.splice(indexOfToRemove, 1); - let resultStr = ''; + var resultStr = ''; let first = true; for(let i = 0; i < res.length; i++) @@ -135,14 +166,18 @@ function removeFavourite(id, callback) if(res[i] != '') { if(!first) resultStr += '|'; + else first = false; resultStr += res[i]; } } + + //alert(sessionStorage.getItem('favourites') + ' ~ ' + f + ' - ' + id + ' => ' + resultStr); sessionStorage.setItem('favourites', resultStr); - set_favourites(function(g) { + set_favourites(resultStr, function(g) { + //alert('New favourites : ' + g); callback(resultStr); - }) + }); }); } \ No newline at end of file diff --git a/scripts/DataQuery.php b/scripts/DataQuery.php index 1ae0401152e0411f0a1a4b549cc57db80cbf9a94..cf6ce18eb62ac254f8233f4e5333a438564d8fe5 100644 --- a/scripts/DataQuery.php +++ b/scripts/DataQuery.php @@ -27,13 +27,21 @@ { echo implode('|', getAllIngredients()); } + else if($funcName == 'connect_db') + { + echo connect_db(); + } else if($funcName == 'create_user') { echo create_user($_POST['arguments'][0], $_POST['arguments'][1]); } - else if($funcName == 'connect') + else if($funcName == 'connect_user') + { + echo connect_user($_POST['arguments'][0], $_POST['arguments'][1]); + } + else if($funcName == 'disconnect_user') { - echo connect($_POST['arguments'][0], $_POST['arguments'][1]); + echo disconnect_user(); } else if($funcName == 'is_connected') { diff --git a/scripts/SQL.php b/scripts/SQL.php index a8376c5e0a8b7b0077a6fe1953a5a2745cdd5f83..4b5453b2f6eeabefc88976b5a6a7e09d1b4691eb 100644 --- a/scripts/SQL.php +++ b/scripts/SQL.php @@ -1,20 +1,28 @@ <?php +session_start(); $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 connect_db() +{ + +} function create_user($u_email, $u_pwd) { global $bdd; + $res = $bdd->query('SELECT email FROM user WHERE email LIKE \'' . $u_email . '\''); + if($res->fetch()) return '0'; $bdd->query('INSERT INTO user (email, pwdhash, favourites) VALUES (\'' . $u_email . '\', \'' . $u_pwd . '\', \'1|2|4\')'); + return '1'; } -function connect($u_email, $u_pwd) +function connect_user($u_email, $u_pwd) { - global $bdd, $email; + global $bdd; $res = $bdd->query('SELECT pwdhash FROM user WHERE email LIKE \'' . $u_email . '\''); if($res) { @@ -24,52 +32,71 @@ function connect($u_email, $u_pwd) $fetched_pwd = $res[0]; if($fetched_pwd == $u_pwd) { - $email = $u_email; - return true; + $_SESSION['email'] = $u_email; + return '1'; } } } - return false; + return '0'; +} + +function disconnect_user() +{ + $_SESSION['email'] = ''; } function is_connected() { - global $email; - return $email == '' ? false : true; + if(!isset($_SESSION['email'])) return '0'; + $email = $_SESSION['email']; + return $email == '' ? '0' : '1'; } function get_email() { - global $email; + if(!isset($_SESSION['email'])) return ''; + $email = $_SESSION['email']; return $email; } function get_favourites() { - global $bdd, $email; + global $bdd; + if(!isset($_SESSION['email'])) return ''; + $email = $_SESSION['email']; if($email != '') { - return $bdd->query('SELECT favourites FROM user WHERE email LIKE \'' . $email . '\'')->fetch()[0]; + $res = $bdd->query('SELECT favourites FROM user WHERE email LIKE \'' . $email . '\'')->fetch(PDO::FETCH_OBJ); + if(!$res) return ''; + else return $res->favourites; } return ''; } function set_favourites($favourites) { - global $bdd, $email; + global $bdd; + if(!isset($_SESSION['email'])) return ''; + $email = $_SESSION['email']; if($email != '') { $bdd->query('UPDATE user SET favourites=\'' . $favourites . '\' WHERE email like \'' . $email . '\''); + return $favourites; } + return ''; } function set_password($u_newpwd) { - global $bdd, $email; + global $bdd; + if(!isset($_SESSION['email'])) return ''; + $email = $_SESSION['email']; if($email != '') { $bdd->query('UPDATE user SET pwdhash=\'' . $u_newpwd . '\' WHERE email like \'' . $email . '\''); + return ''; } + return ''; } ?> \ No newline at end of file