From be26e89dbf43e6a482d8124c24e27779298b2c9b Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Tue, 17 Jan 2017 13:43:00 +0100 Subject: [PATCH 01/22] Added profile picture part in settings --- website/views/settings-view.php | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/website/views/settings-view.php b/website/views/settings-view.php index cb22af5..15ee39c 100644 --- a/website/views/settings-view.php +++ b/website/views/settings-view.php @@ -60,7 +60,29 @@ - +
+
Verander profielfoto
+ +
Verander Wachtwoord
From eb2a343d5fe5d4dc1ab44fbb3fb792579fbfca46 Mon Sep 17 00:00:00 2001 From: Lars van Hijfte Date: Wed, 18 Jan 2017 12:08:53 +0100 Subject: [PATCH 06/22] added live sending messages from user 2 to user 2 --- website/public/chat.php | 1 + website/public/js/sendMessage.js | 14 ++++++++ website/public/sendMessage.php | 16 +++++++++ website/queries/private_message.php | 51 +++++++++++++++++++++++++++++ website/views/chat-view.php | 12 ++++--- 5 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 website/public/js/sendMessage.js create mode 100644 website/public/sendMessage.php create mode 100644 website/queries/private_message.php diff --git a/website/public/chat.php b/website/public/chat.php index f077a4d..150638d 100644 --- a/website/public/chat.php +++ b/website/public/chat.php @@ -5,6 +5,7 @@ + prepare(" + SELECT + * + FROM + `private_message` + WHERE + `origin` = :user1 AND + `destination` = :user2 OR + `origin` = :user2 AND + `destination` = :user1 + ORDER BY + `creationdate` DESC + LIMIT + :n, 100 + "); + + $stmt->bindParam(":user1", $user1ID); + $stmt->bindParam(":user2", $user2ID); + $stmt->bindParam(":n", $n); + + return $stmt->execute(); +} + +function sendMessage($destination, $content) { + $db = $GLOBALS["db"]; + $stmt = $db->prepare(" + INSERT INTO + `private_message` + ( + `origin`, + `destination`, + `content` + ) + VALUES + ( + :origin, + :destination, + :content + ) + "); + + return $stmt->execute(array( + "origin" => 2, + "destination" => $destination, + "content" => $content + )); +} \ No newline at end of file diff --git a/website/views/chat-view.php b/website/views/chat-view.php index a23a1c5..6b6aecd 100644 --- a/website/views/chat-view.php +++ b/website/views/chat-view.php @@ -37,16 +37,20 @@
-
+ + + /> + />
From afcd048260123e1a150ec76b5d65de64eff8a2b8 Mon Sep 17 00:00:00 2001 From: Joey Lai Date: Wed, 18 Jan 2017 12:35:41 +0100 Subject: [PATCH 07/22] Almost finished login/register page --- website/public/login.php | 39 +++-------------- website/public/register.php | 77 +++++++++------------------------ website/public/styles/index.css | 3 +- website/queries/login.php | 18 ++++++++ website/queries/register.php | 57 ++++++++++++++++++++++++ website/queries/settings.php | 6 +-- website/views/register-view.php | 24 +++------- 7 files changed, 113 insertions(+), 111 deletions(-) create mode 100644 website/queries/login.php create mode 100644 website/queries/register.php diff --git a/website/public/login.php b/website/public/login.php index e20c204..40907a7 100644 --- a/website/public/login.php +++ b/website/public/login.php @@ -1,7 +1,9 @@ diff --git a/website/public/register.php b/website/public/register.php index 1d65102..8b8f4e6 100644 --- a/website/public/register.php +++ b/website/public/register.php @@ -3,6 +3,7 @@ @@ -10,8 +11,8 @@ session_start(); // define variables and set to empty values - $name = $surname = $bday = $username = $password = $confirmpassword = $streetname = $housenumber = $email = ""; - $genericErr = $nameErr = $surnameErr = $bdayErr = $usernameErr = $passwordErr = $confirmpasswordErr = $streetnameErr = $housenumberErr = $emailErr = ""; + $name = $surname = $bday = $username = $password = $confirmpassword = $location = $housenumber = $email = ""; + $genericErr = $nameErr = $surnameErr = $bdayErr = $usernameErr = $passwordErr = $confirmpasswordErr = $locationErr = $housenumberErr = $emailErr = ""; $correct = true; // Saves information of filling in the form @@ -35,8 +36,8 @@ $password = $_POST["password"]; } - if (isset($_POST["streetname"])) { - $streetname = $_POST["streetname"]; + if (isset($_POST["location"])) { + $location = $_POST["location"]; } if (isset($_POST["housenumber"])) { @@ -87,6 +88,10 @@ $usernameErr = "Gebruikersnaam moet minstens 6 karakters bevatten"; $correct = false; + } else if (getExistingUser() == 1 ){ + $usernameErr = "Gebruikersnaam bestaat al"; + $correct = false; + } } @@ -108,30 +113,24 @@ } - if ($_POST["password"]!= $_POST["confirmpassword"]) { + if ($_POST["password"] != $_POST["confirmpassword"]) { $confirmpasswordErr = "Wachtwoorden matchen niet"; $correct = false; } - if (empty($_POST["streetname"])) { - $streetnameErr = "Straatnaam is verplicht!"; + if (empty($_POST["location"])) { + $locationErr = "Straatnaam is verplicht!"; $correct = false; } else { - if (!preg_match("/^[a-zA-Z ]*$/",$streetname)) { - $streetnameErr = "Alleen letters en spaties zijn toegestaan!"; + if (!preg_match("/^[a-zA-Z ]*$/",$location)) { + $locationErr = "Alleen letters en spaties zijn toegestaan!"; $correct = false; } } - if (empty($_POST["housenumber"])) { - $housenumberErr = "Huisnummer is verplicht!"; - $correct = false; - - } - if (empty($_POST["email"])) { $emailErr = "Email is verplicht!"; $correct = false; @@ -140,6 +139,11 @@ if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $emailErr = "Geldige email invullen!"; $correct = false; + + } else if (getExistingEmail() == 1){ + $emailErr = "Email bestaat al"; + $correct = false; + } } @@ -148,48 +152,9 @@ $genericErr = "Bepaalde velden zijn verkeerd of niet ingevuld!"; } else { - $servername = "agile136.science.uva.nl"; - $username = "mhbp"; - $password = "qdtboXhCHJyL2szC"; + registerAccount(); + // header("location: login.php"); - // Creates connection - $conn = new mysqli($servername, $username, $password); - - // Checks connection - if ($conn->connect_error) { - die("Connection failed: " . $conn->connect_error); - } - - // Query for inserting all the data in the database - $sql = "INSERT INTO - VALUES ($name, $surname, $bday, $username, $password, - $confirmpassword, $streetname, $housenumber, $email)"; - - // Checks if able to insert into database - if (mysqli_query($conn, $sql)) { - echo "New record created successfully"; - } else { - echo "Error: " . $sql . "
" . mysqli_error($conn); - } - - - - prepare('SELECT name, colour, calories - FROM fruit - WHERE calories < :calories AND colour = :colour'); - $sth->bindParam(':calories', $calories, PDO::PARAM_INT); - $sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12); - $sth->execute(); - ?> - - - - // Closing connection - mysql_close($connection); } } diff --git a/website/public/styles/index.css b/website/public/styles/index.css index 5978f9d..a368066 100644 --- a/website/public/styles/index.css +++ b/website/public/styles/index.css @@ -59,8 +59,9 @@ div[data-title]:hover:after{ body { height: 900px; - background-image: url(https://images2.pixlis.com/background-image-plaid-checkered-seamless-tileable-235ftm.png); + background-image: url(https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTEnqKdVtLbxjKuNsCSCxFRhTOpp3Gm0gsU8bMgA_MeUYyzrUFy); background-size: contain; + background-repeat: repeat-x; background-attachment: fixed; /*background-color: #B78996;*/ diff --git a/website/queries/login.php b/website/queries/login.php new file mode 100644 index 0000000..23cdbcd --- /dev/null +++ b/website/queries/login.php @@ -0,0 +1,18 @@ +prepare(" + SELECT + `password` + FROM + `user` + WHERE + `username` = :username + "); + + $stmt->bindParam(":username", $_POST["uname"]); + $stmt->execute(); + return $stmt->fetch(PDO::FETCH_ASSOC); +} + +?> diff --git a/website/queries/register.php b/website/queries/register.php new file mode 100644 index 0000000..4d7d593 --- /dev/null +++ b/website/queries/register.php @@ -0,0 +1,57 @@ +prepare(" + SELECT * FROM `user` WHERE `username` = :username + "); + + $stmt->bindParam(":username", $_POST["username"]); + $stmt->execute(); + return $stmt->rowCount(); + +} + +function getExistingEmail() { + $stmt = $GLOBALS["db"]->prepare(" + SELECT * FROM `user` WHERE `email` = :email + "); + + $stmt->bindParam(":email", $_POST["email"]); + $stmt->execute(); + return $stmt->rowCount(); +} + +function registerAccount() { + $stmt = $GLOBALS["db"]->prepare(" + INSERT INTO + `user`(fname, + lname, + birthdate, + username, + password, + location, + email) + VALUES( + :fname, + :lname, + :bday, + :username, + :password, + :location, + :email + )"); + + $hash=password_hash($_POST["password"], PASSWORD_DEFAULT); + + $stmt->bindParam(":fname", $_POST["name"]); + $stmt->bindParam(":lname", $_POST["surname"]); + $stmt->bindParam(":bday", $_POST["bday"]); + $stmt->bindParam(":username", $_POST["username"]); + $stmt->bindParam(":password", $hash); + $stmt->bindParam(":location", $_POST["location"]); + $stmt->bindParam(":email", $_POST["email"]); + + print("execute".$stmt->execute()); + print("count".$stmt->rowCount()); +} +?> diff --git a/website/queries/settings.php b/website/queries/settings.php index 66ddda8..bd9e542 100644 --- a/website/queries/settings.php +++ b/website/queries/settings.php @@ -10,9 +10,9 @@ function getSettings() { `birthdate`, `bio`, `profilepicture` - FROM + FROM `user` - WHERE + WHERE `userID` = :userID "); @@ -43,4 +43,4 @@ function updateSettings() { $stmt->bindParam(":userID", $_SESSION["userID"]); $stmt->execute(); -} \ No newline at end of file +} diff --git a/website/views/register-view.php b/website/views/register-view.php index a184f71..3ccc978 100644 --- a/website/views/register-view.php +++ b/website/views/register-view.php @@ -94,28 +94,16 @@ * - + - - - From ed0d0990adf858a985cd4b0918dbd2f3bd99d98d Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Wed, 18 Jan 2017 13:14:06 +0100 Subject: [PATCH 08/22] Removed LaTeX pdf frop git --- .gitignore | 2 +- projectplan/projectplan.pdf | Bin 44839 -> 0 bytes 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 projectplan/projectplan.pdf diff --git a/.gitignore b/.gitignore index b1a2ad1..49adb33 100644 --- a/.gitignore +++ b/.gitignore @@ -117,7 +117,7 @@ Temporary Items # *.pdf ## Generated if empty string is given at "Please type another file name for output:" -projectplan.pdf +projectplan/projectplan.pdf ## Bibliography auxiliary files (bibtex/biblatex/biber): *.bbl diff --git a/projectplan/projectplan.pdf b/projectplan/projectplan.pdf deleted file mode 100644 index e41b19d7edf00e6d51fc296410aa7724192b642f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44839 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 k7{FE%3AO(HT-@AET;080EiBn+a From b201d8287856990da373e2e936c94bef0566a2d9 Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Wed, 18 Jan 2017 13:14:43 +0100 Subject: [PATCH 09/22] Projectplan now has the "Planning" --- projectplan/projectplan.tex | 79 +++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/projectplan/projectplan.tex b/projectplan/projectplan.tex index 42c6475..8605209 100644 --- a/projectplan/projectplan.tex +++ b/projectplan/projectplan.tex @@ -14,6 +14,9 @@ \documentclass{uva-inf-article} \usepackage[dutch]{babel} \usepackage{enumitem} +\usepackage{pgfgantt} +\usepackage{pdflscape} +\usepackage{geometry} %------------------------------------------------------------------------------- % GEGEVENS VOOR IN DE TITEL @@ -173,6 +176,82 @@ Voor deze opdracht hebben we met 5 mensen 4 weken de tijd. %Zet de planning indien gewenst in een apart document %\input{planning} +\newgeometry{top=20mm, bottom=20mm, left=10mm, right=10mm} +\begin{landscape} +\begin{ganttchart}[ + vgrid, + hgrid, + x unit=1cm, + y unit title=.6cm, + y unit chart=.7cm, + group left peak width=.2, + group right peak width=.2 + ]{1}{21} + \gantttitle{MyHyvesBook+}{21} \ganttnewline + \gantttitle{Week 1}{5} + \gantttitle{Week 2}{5} + \gantttitle{Week 3}{5} + \gantttitle{Week 4}{5} \ganttnewline + \gantttitlelist{9,...,13}{1} + \gantttitlelist{16,...,20}{1} + \gantttitlelist{23,...,27}{1} + \gantttitlelist{30,31,1,2,3}{1} \ganttnewline + + \ganttbar{Inleiden}{1}{1} \ganttnewline + + \ganttlinkedgroup{Frontend}{2}{5} \ganttnewline + + \ganttbar{html/views}{2}{5} \ganttnewline + \ganttbar{css/styles}{2}{5} \ganttnewline + \ganttbar{javascript}{2}{5} \ganttnewline + \ganttmilestone{Week 1}{5} \ganttnewline + + \ganttlink[link mid=.833]{elem2}{elem5} + \ganttlink[link mid=.75]{elem3}{elem5} + \ganttlink[link mid=.5]{elem4}{elem5} + + \ganttlinkedgroup{Backend}{6}{10} \ganttnewline + + \ganttbar{Database/PhpMyAdmin}{6}{6} \ganttnewline + \ganttbar{SQL-queries/MySql}{7}{10} \ganttnewline + \ganttbar{Forms/php}{6}{10} \ganttnewline + \ganttbar{Livechat/AJAX, PHP}{6}{10} \ganttnewline + \ganttmilestone{Week 2}{10} \ganttnewline + + \ganttlink[link mid=.5]{elem7}{elem8} + \ganttlink[link mid=.833]{elem8}{elem11} + \ganttlink[link mid=.75]{elem9}{elem11} + \ganttlink[link mid=.5]{elem10}{elem11} + + \ganttbar{Beveiliging/testen}{6}{15} \ganttnewline + + \ganttgroup{Gebruiksvriendleijk}{11}{15} \ganttnewline + \ganttbar{Mobileformaat}{11}{15} \ganttnewline + \ganttbar{Restyle}{11}{15} \ganttnewline + \ganttbar{Extra's}{11}{15} \ganttnewline + \ganttbar{Code opschonen}{14}{15} \ganttnewline + + \ganttmilestone{Week 3}{15} \ganttnewline + \ganttlink[link mid=.75]{elem11}{elem13} + \ganttlink[link mid=.917]{elem12}{elem18} + \ganttlink[link mid=.875]{elem14}{elem18} + \ganttlink[link mid=.833]{elem15}{elem18} + \ganttlink[link mid=.75]{elem16}{elem18} + \ganttlink[link mid=.5]{elem17}{elem18} + + \ganttlinkedgroup{Afronding}{16}{20} \ganttnewline + \ganttbar{Rapport}{16}{20} \ganttnewline + \ganttbar{Documentatie}{16}{20} \ganttnewline + \ganttbar{Demo}{18}{20} \ganttnewline + + \ganttmilestone{Finshed!}{20} + \ganttlink[link mid=.833]{elem20}{elem23} + \ganttlink[link mid=.75]{elem21}{elem23} + \ganttlink[link mid=.5]{elem22}{elem23} + +\end{ganttchart} +\end{landscape} + %------------------------------------------------------------------------------- % BIJLAGEN EN EINDE From d627c8a83742360c3c79d6057ace31f5a0727147 Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Wed, 18 Jan 2017 13:46:50 +0100 Subject: [PATCH 10/22] Projectplan --- projectplan/projectplan.tex | 1 + 1 file changed, 1 insertion(+) diff --git a/projectplan/projectplan.tex b/projectplan/projectplan.tex index 8605209..bcd0fce 100644 --- a/projectplan/projectplan.tex +++ b/projectplan/projectplan.tex @@ -178,6 +178,7 @@ Voor deze opdracht hebben we met 5 mensen 4 weken de tijd. %\input{planning} \newgeometry{top=20mm, bottom=20mm, left=10mm, right=10mm} \begin{landscape} +\section{Planning} \begin{ganttchart}[ vgrid, hgrid, From 19f525d168703a217ba6dfc981b3e91c05511388 Mon Sep 17 00:00:00 2001 From: Lars van Hijfte Date: Wed, 18 Jan 2017 14:34:15 +0100 Subject: [PATCH 11/22] Live chatting now shows up in the chat-history --- website/public/chat.php | 2 +- website/public/js/chat.js | 50 +++++++++++++++++++++++ website/public/js/sendMessage.js | 14 ------- website/public/sendMessage.php | 2 +- website/queries/private_message.php | 46 ++++++++++++++++++--- website/views/chat-view.php | 63 +++++++++++++++++------------ website/views/head.php | 2 + 7 files changed, 132 insertions(+), 47 deletions(-) create mode 100644 website/public/js/chat.js delete mode 100644 website/public/js/sendMessage.js diff --git a/website/public/chat.php b/website/public/chat.php index 150638d..09be336 100644 --- a/website/public/chat.php +++ b/website/public/chat.php @@ -5,7 +5,7 @@ - + \ +
\ + ' + messages[i].content + '\ +
\ + \ + '); + } +} \ No newline at end of file diff --git a/website/public/js/sendMessage.js b/website/public/js/sendMessage.js deleted file mode 100644 index 1c300b2..0000000 --- a/website/public/js/sendMessage.js +++ /dev/null @@ -1,14 +0,0 @@ -// $("#sendMessageForm").submit(function(e) { -function sendMessage() { - console.log($("#sendMessageForm").serialize()); - $.post( - "sendMessage.php", - $("#sendMessageForm").serialize() - ).done(function( data ) { - alert( "Data Loaded: " + data ); - }); -} - -function loadMessages() { - -} \ No newline at end of file diff --git a/website/public/sendMessage.php b/website/public/sendMessage.php index c0dde12..e555e2a 100644 --- a/website/public/sendMessage.php +++ b/website/public/sendMessage.php @@ -5,7 +5,7 @@ include_once("../queries/private_message.php"); if (isset($_POST["destination"]) && isset($_POST["content"])) { - if (sendMessage($db, $_POST["destination"], $_POST["content"])) { + if (sendMessage($_POST["destination"], $_POST["content"])) { echo $_POST["content"] . " is naar " . $_POST["destination"] . " gestuurd"; } else { echo "YOU FAILED!!!"; diff --git a/website/queries/private_message.php b/website/queries/private_message.php index 22fb085..56c0c26 100644 --- a/website/queries/private_message.php +++ b/website/queries/private_message.php @@ -1,7 +1,13 @@ prepare(" SELECT * @@ -13,16 +19,15 @@ function get100ChatMessagesFromN($n, $user1ID, $user2ID) { `origin` = :user2 AND `destination` = :user1 ORDER BY - `creationdate` DESC - LIMIT - :n, 100 + `messageID` ASC "); $stmt->bindParam(":user1", $user1ID); $stmt->bindParam(":user2", $user2ID); - $stmt->bindParam(":n", $n); - return $stmt->execute(); + $stmt->execute(); + + return json_encode($stmt->fetchAll()); } function sendMessage($destination, $content) { @@ -48,4 +53,33 @@ function sendMessage($destination, $content) { "destination" => $destination, "content" => $content )); +} + +function getNewChatMessages($lastID, $destination) { + $db = $GLOBALS["db"]; + $origin = 2; + + $stmt = $db->prepare(" + SELECT + * + FROM + `private_message` + WHERE + ( + `origin` = :user1 AND + `destination` = :user2 OR + `origin` = :user2 AND + `destination` = :user1) AND + `messageID` > :lastID + ORDER BY + `messageID` ASC + "); + + $stmt->bindParam(':user1', $origin); + $stmt->bindParam(':user2', $destination); + $stmt->bindParam(':lastID', $lastID); + + $stmt->execute(); + + return json_encode($stmt->fetchAll()); } \ No newline at end of file diff --git a/website/views/chat-view.php b/website/views/chat-view.php index 6b6aecd..dabd348 100644 --- a/website/views/chat-view.php +++ b/website/views/chat-view.php @@ -10,32 +10,43 @@
-
-
-
Hi!
-
-
-
Hi!
-
-
-
How it's going?
-
-
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-
-
-
Hi!
-
-
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-
-
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-
-
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
-
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
diff --git a/website/views/head.php b/website/views/head.php index 9306edf..39e29af 100644 --- a/website/views/head.php +++ b/website/views/head.php @@ -17,4 +17,6 @@ include_once("../queries/connect.php"); +session_start(); + ?> \ No newline at end of file From 0808d46d9ec52a70af07bc0f7d22ec4c99291301 Mon Sep 17 00:00:00 2001 From: Joey Lai Date: Wed, 18 Jan 2017 14:46:32 +0100 Subject: [PATCH 12/22] Added salting and no similar username --- website/public/login.php | 10 ++++++---- website/public/register.php | 6 +++--- website/queries/login.php | 5 +++-- website/queries/register.php | 15 ++++++++++----- 4 files changed, 22 insertions(+), 14 deletions(-) diff --git a/website/public/login.php b/website/public/login.php index 40907a7..82570a6 100644 --- a/website/public/login.php +++ b/website/public/login.php @@ -21,14 +21,16 @@ } else { - $uname=$_POST["uname"]; + $uname=strtolower($_POST["uname"]); $psw=$_POST["psw"]; $hash=hashPassword()["password"]; - + $userid=hashPassword()["userID"]; + // If there's an account, go to the profile page - if(password_verify($psw, $hash)) { + if(password_verify($psw.$uname, $hash)) { + $_SESSION["userID"] = $userid; + header("location: /profile.php"); - header("location: myhyvesbookplus.nl/profile.php"); } else { $loginErr = "Inloggegevens zijn niet correct"; } diff --git a/website/public/register.php b/website/public/register.php index 8b8f4e6..2299cf0 100644 --- a/website/public/register.php +++ b/website/public/register.php @@ -88,9 +88,9 @@ $usernameErr = "Gebruikersnaam moet minstens 6 karakters bevatten"; $correct = false; - } else if (getExistingUser() == 1 ){ + } else if (getExistingUsername() == 1){ $usernameErr = "Gebruikersnaam bestaat al"; - $correct = false; + $correct = false; } } @@ -153,7 +153,7 @@ } else { registerAccount(); - // header("location: login.php"); + header("location: login.php"); } } diff --git a/website/queries/login.php b/website/queries/login.php index 23cdbcd..c710833 100644 --- a/website/queries/login.php +++ b/website/queries/login.php @@ -3,11 +3,12 @@ function hashPassword() { $stmt = $GLOBALS["db"]->prepare(" SELECT - `password` + `password`, + `userID` FROM `user` WHERE - `username` = :username + `username` LIKE :username "); $stmt->bindParam(":username", $_POST["uname"]); diff --git a/website/queries/register.php b/website/queries/register.php index 4d7d593..9881872 100644 --- a/website/queries/register.php +++ b/website/queries/register.php @@ -1,8 +1,13 @@ prepare(" - SELECT * FROM `user` WHERE `username` = :username + SELECT + `username` + FROM + `user` + WHERE + `username` LIKE :username "); $stmt->bindParam(":username", $_POST["username"]); @@ -41,7 +46,7 @@ function registerAccount() { :email )"); - $hash=password_hash($_POST["password"], PASSWORD_DEFAULT); + $hash=password_hash($_POST["password"].(strtolower($_POST["username"])), PASSWORD_DEFAULT); $stmt->bindParam(":fname", $_POST["name"]); $stmt->bindParam(":lname", $_POST["surname"]); @@ -51,7 +56,7 @@ function registerAccount() { $stmt->bindParam(":location", $_POST["location"]); $stmt->bindParam(":email", $_POST["email"]); - print("execute".$stmt->execute()); - print("count".$stmt->rowCount()); + $stmt->execute(); + $stmt->rowCount(); } ?> From 4fe142eb51aa82d0600f17bae7031caddce6eff3 Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Wed, 18 Jan 2017 14:50:11 +0100 Subject: [PATCH 13/22] Projectplan added to gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index b1a2ad1..49adb33 100644 --- a/.gitignore +++ b/.gitignore @@ -117,7 +117,7 @@ Temporary Items # *.pdf ## Generated if empty string is given at "Please type another file name for output:" -projectplan.pdf +projectplan/projectplan.pdf ## Bibliography auxiliary files (bibtex/biblatex/biber): *.bbl From e73fcd420c70124544a27438775a3774b15a7df4 Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Wed, 18 Jan 2017 14:51:03 +0100 Subject: [PATCH 14/22] settings succes mesages --- website/public/settings.php | 4 ++-- website/public/styles/settings.css | 11 +++++++++ website/queries/settings.php | 37 ++++++++++++++++++++++++------ website/views/settings-view.php | 7 ++++++ 4 files changed, 50 insertions(+), 9 deletions(-) diff --git a/website/public/settings.php b/website/public/settings.php index e21ce9b..97c47e4 100644 --- a/website/public/settings.php +++ b/website/public/settings.php @@ -19,10 +19,10 @@ include("../views/main.php"); if ($_SERVER["REQUEST_METHOD"] == "POST") { switch ($_POST["form"]) { case "profile": - updateSettings(); + $result = updateSettings(); break; case "password": - updatePassword(); + $result = updatePassword(); break; case "email": break; diff --git a/website/public/styles/settings.css b/website/public/styles/settings.css index f1648c8..933e7fd 100644 --- a/website/public/styles/settings.css +++ b/website/public/styles/settings.css @@ -5,6 +5,17 @@ .settings-password { margin-right: 15px; } +.settings-message { + color: white; +} +.settings-message-angry { + background-color: firebrick; +} + +.settings-message-happy { + background-color: forestgreen; + +} .settings li { diff --git a/website/queries/settings.php b/website/queries/settings.php index ee37688..1d47d32 100644 --- a/website/queries/settings.php +++ b/website/queries/settings.php @@ -24,7 +24,8 @@ function getSettings() { function getPasswordHash() { $stmt = $GLOBALS["db"]->prepare(" SELECT - `password` + `password`, + `username` FROM `user` WHERE @@ -57,19 +58,40 @@ function updateSettings() { $stmt->bindParam(":userID", $_SESSION["userID"]); $stmt->execute(); + + return array ( + "type" => "settings-message-happy", + "message" => "Instellingen zijn opgeslagen." + ); } function updatePassword() { - if (password_verify($_POST["password-old"], getPasswordHash()["password"])) { - if ($_POST["password-new"] == $_POST["password-confirm"]) { - changePassword(); + $user = getPasswordHash(); + if (password_verify($_POST["password-old"].strtolower($user["username"]), $user["password"])) { + if ($_POST["password-new"] == $_POST["password-confirm"] && (strlen($_POST["password-new"]) >= 8)) { + if (changePassword($user)) { + return array ("type" => "settings-message-happy", + "message" => "Wachtwoord gewijzigd."); + } else { + return array ( + "type" => "settings-message-angry", + "message" => "Er is iets mis gegaan."); + } + } else { + return array ( + "type" => "settings-message-angry", + "message" => "Wachtwoorden komen niet oveeen." + ); } } else { - print("Did not match"); + return array( + "type" => "settings-message-angry", + "message" => "Oud wachtwoord niet correct." + ); } } -function changePassword() { +function changePassword($user) { $stmt =$GLOBALS["db"]->prepare(" UPDATE `user` @@ -79,8 +101,9 @@ function changePassword() { `userID` = :userID "); - $hashed_password = password_hash($_POST["password-new"], PASSWORD_DEFAULT); + $hashed_password = password_hash($_POST["password-new"].strtolower($user["username"]), PASSWORD_DEFAULT); $stmt->bindParam(":new_password", $hashed_password); $stmt->bindParam(":userID", $_SESSION["userID"]); $stmt->execute(); + return $stmt->rowCount(); } \ No newline at end of file diff --git a/website/views/settings-view.php b/website/views/settings-view.php index ffc7c74..a4fc139 100644 --- a/website/views/settings-view.php +++ b/website/views/settings-view.php @@ -4,6 +4,13 @@ $settings = getSettings();
+ + ${result["message"]} +
"; + } + ?>
Profiel Instellingen
    From e7ceb254ce09d62537d1e203913fd78909798cc3 Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Wed, 18 Jan 2017 14:57:16 +0100 Subject: [PATCH 15/22] No standard marijn user --- website/public/settings.php | 1 - 1 file changed, 1 deletion(-) diff --git a/website/public/settings.php b/website/public/settings.php index 97c47e4..22ae99c 100644 --- a/website/public/settings.php +++ b/website/public/settings.php @@ -3,7 +3,6 @@ From 37ad2e0ea48424c54508ceb240c38a6893a22cc1 Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Wed, 18 Jan 2017 15:08:48 +0100 Subject: [PATCH 16/22] New placeholder for date --- website/views/settings-view.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/views/settings-view.php b/website/views/settings-view.php index a4fc139..3e68fe4 100644 --- a/website/views/settings-view.php +++ b/website/views/settings-view.php @@ -47,7 +47,7 @@ $settings = getSettings(); " > From 95fd3c0040abd55e1e0e90b409d8d8283a931976 Mon Sep 17 00:00:00 2001 From: Lars van Hijfte Date: Wed, 18 Jan 2017 15:09:52 +0100 Subject: [PATCH 17/22] chat is done? --- website/public/js/chat.js | 7 ++ website/public/styles/chat.css | 4 ++ website/queries/friendship.php | 1 + website/queries/private_message.php | 6 +- website/views/chat-view.php | 100 +++++++++++++++++++--------- 5 files changed, 84 insertions(+), 34 deletions(-) diff --git a/website/public/js/chat.js b/website/public/js/chat.js index 5b56586..dd0b00f 100644 --- a/website/public/js/chat.js +++ b/website/public/js/chat.js @@ -12,6 +12,7 @@ function loadMessages() { messages = JSON.parse(data); addMessages(messages); $("#lastID").val(messages[messages.length - 1].messageID); + $("#chat-history").scrollTop($("#chat-history")[0].scrollHeight); } }); @@ -47,4 +48,10 @@ function addMessages(messages) {
\ '); } +} + +function switchUser(userID) { + $(".destinationID").val(userID); + $("#chat-history").html(""); + $("#lastID").val(""); } \ No newline at end of file diff --git a/website/public/styles/chat.css b/website/public/styles/chat.css index 8f486bb..132c750 100644 --- a/website/public/styles/chat.css +++ b/website/public/styles/chat.css @@ -16,6 +16,10 @@ overflow-y: auto; } +.chat-left .friend-item { + cursor: pointer; +} + .chat-right { width: calc(100% - 256px - 40px); height: calc(100% - 80px); diff --git a/website/queries/friendship.php b/website/queries/friendship.php index 56ce274..dc7a669 100644 --- a/website/queries/friendship.php +++ b/website/queries/friendship.php @@ -3,6 +3,7 @@ function selectAllFriends($db, $userID) { return $db->query(" SELECT + `user`.`userID`, `user`.`username`, `user`.`profilepicture`, `user`.`onlinestatus`, diff --git a/website/queries/private_message.php b/website/queries/private_message.php index 56c0c26..6cf8b16 100644 --- a/website/queries/private_message.php +++ b/website/queries/private_message.php @@ -6,7 +6,7 @@ session_start(); function getOldChatMessages($user2ID) { $db = $GLOBALS["db"]; - $user1ID = 2; + $user1ID = $_SESSION["userID"]; $stmt = $db->prepare(" SELECT @@ -49,7 +49,7 @@ function sendMessage($destination, $content) { "); return $stmt->execute(array( - "origin" => 2, + "origin" => $_SESSION["userID"], "destination" => $destination, "content" => $content )); @@ -57,7 +57,7 @@ function sendMessage($destination, $content) { function getNewChatMessages($lastID, $destination) { $db = $GLOBALS["db"]; - $origin = 2; + $origin = $_SESSION["userID"]; $stmt = $db->prepare(" SELECT diff --git a/website/views/chat-view.php b/website/views/chat-view.php index dabd348..1f9a0d8 100644 --- a/website/views/chat-view.php +++ b/website/views/chat-view.php @@ -1,40 +1,76 @@
-
- - - - - - - - - - - - - - - - - - - - - - - -
@@ -89,7 +65,7 @@ Date: Wed, 18 Jan 2017 15:53:10 +0100 Subject: [PATCH 21/22] Fixed login link --- website/public/login.php | 6 +++--- website/public/styles/index.css | 14 +++++++------- website/queries/register.php | 10 ++++++++-- website/views/login-view.php | 8 +++++--- website/views/register-view.php | 6 ++++-- 5 files changed, 27 insertions(+), 17 deletions(-) diff --git a/website/public/login.php b/website/public/login.php index 82570a6..09dce8c 100644 --- a/website/public/login.php +++ b/website/public/login.php @@ -15,21 +15,21 @@ // Trying to login if ($_SERVER["REQUEST_METHOD"] == "POST") { + $uname=strtolower($_POST["uname"]); // Empty username or password field if (empty($_POST["uname"]) || empty($_POST["psw"])) { $loginErr = "Gebruikersnaam of wachtwoord is niet ingevuld"; } else { - $uname=strtolower($_POST["uname"]); $psw=$_POST["psw"]; $hash=hashPassword()["password"]; $userid=hashPassword()["userID"]; - + // If there's an account, go to the profile page if(password_verify($psw.$uname, $hash)) { $_SESSION["userID"] = $userid; - header("location: /profile.php"); + header("location: profile.php"); } else { $loginErr = "Inloggegevens zijn niet correct"; diff --git a/website/public/styles/index.css b/website/public/styles/index.css index a368066..c7d482f 100644 --- a/website/public/styles/index.css +++ b/website/public/styles/index.css @@ -60,7 +60,7 @@ body { height: 900px; background-image: url(https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTEnqKdVtLbxjKuNsCSCxFRhTOpp3Gm0gsU8bMgA_MeUYyzrUFy); - background-size: contain; + background-size: cover; background-repeat: repeat-x; background-attachment: fixed; @@ -109,10 +109,10 @@ form { border: 5px solid #325da3; background-color: #a87a87; border-radius: 12px; - height: 57%; - margin: 8px auto; + height: 55%; + margin: 35px auto; width: 45%; - overflow: auto; + overflow-y:auto; } /* inlog titel */ @@ -135,14 +135,14 @@ input[type=text], input[type=password], input[type=email], input[type="date"] { box-sizing: border-box; display: inline-block; height: 50%; - padding: 12px 20px; - margin: 8px 0; + padding: 8px 20px; + margin: 4px 0; width: 50%; font-family: Arial; font-size: 16px; } -input[type=submit] { +button[type=submit] { background-color: #845663; border: 2px solid black; border-radius: 12px; diff --git a/website/queries/register.php b/website/queries/register.php index 9881872..893bb3a 100644 --- a/website/queries/register.php +++ b/website/queries/register.php @@ -18,12 +18,18 @@ function getExistingUsername() { function getExistingEmail() { $stmt = $GLOBALS["db"]->prepare(" - SELECT * FROM `user` WHERE `email` = :email + SELECT + `email` + FROM + `user` + WHERE + `email` LIKE :email "); $stmt->bindParam(":email", $_POST["email"]); $stmt->execute(); return $stmt->rowCount(); + } function registerAccount() { @@ -54,7 +60,7 @@ function registerAccount() { $stmt->bindParam(":username", $_POST["username"]); $stmt->bindParam(":password", $hash); $stmt->bindParam(":location", $_POST["location"]); - $stmt->bindParam(":email", $_POST["email"]); + $stmt->bindParam(":email", (strtolower($_POST["email"]))); $stmt->execute(); $stmt->rowCount(); diff --git a/website/views/login-view.php b/website/views/login-view.php index e70d96b..df29cbc 100644 --- a/website/views/login-view.php +++ b/website/views/login-view.php @@ -27,7 +27,7 @@
@@ -36,10 +36,12 @@ diff --git a/website/views/register-view.php b/website/views/register-view.php index 3ccc978..b7efbc8 100644 --- a/website/views/register-view.php +++ b/website/views/register-view.php @@ -120,10 +120,12 @@ From df9f782809173e2d42c3e431fd234c60741d64e2 Mon Sep 17 00:00:00 2001 From: Lars van Hijfte Date: Wed, 18 Jan 2017 15:54:13 +0100 Subject: [PATCH 22/22] Friends in the menu now redirects to the users profile. --- website/public/styles/menu.css | 13 +++++++++++++ website/views/menu.php | 20 ++++++++++++-------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/website/public/styles/menu.css b/website/public/styles/menu.css index 7778545..45163de 100644 --- a/website/public/styles/menu.css +++ b/website/public/styles/menu.css @@ -25,3 +25,16 @@ font-size: 14px; cursor: pointer; } + +.friend-item { + cursor: pointer; +} + +.menu button { + background: none; + color: #333; + width: 100%; + height: 100%; + padding: 0; + text-align: left; +} \ No newline at end of file diff --git a/website/views/menu.php b/website/views/menu.php index 5486cd6..731b284 100644 --- a/website/views/menu.php +++ b/website/views/menu.php @@ -34,14 +34,18 @@ // Echo the friend. echo " - -
  • -
    - PF - $username -
    -
  • -
    +
  • +
    + +
    +
  • "; } if ($i > 1) {