From 1b97b1fad311bea46363308e06b7cf790e651306 Mon Sep 17 00:00:00 2001 From: Hendrik Date: Thu, 12 Jan 2017 14:32:56 +0100 Subject: [PATCH 001/351] slightly modified css --- website/styles/adminpanel.css | 6 ++++++ website/views/adminpanel.php | 1 - 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/website/styles/adminpanel.css b/website/styles/adminpanel.css index f22de20..e7d84f4 100644 --- a/website/styles/adminpanel.css +++ b/website/styles/adminpanel.css @@ -6,6 +6,12 @@ box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); } +.admin-panel input[type="submit"], button { + background-color: #845663; + color: white; + padding: 5px; +} + .admin-actions { display: inline-block; margin: 10px; diff --git a/website/views/adminpanel.php b/website/views/adminpanel.php index 2723e40..3aa9e63 100644 --- a/website/views/adminpanel.php +++ b/website/views/adminpanel.php @@ -87,7 +87,6 @@ - -- 2.49.1 From 2905a9efee40421cec36d0416dc281399f6ee01a Mon Sep 17 00:00:00 2001 From: Lars van Hijfte Date: Thu, 12 Jan 2017 15:13:09 +0100 Subject: [PATCH 002/351] Changed background color header --- website/styles/header.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/styles/header.css b/website/styles/header.css index ffeaab6..038275f 100644 --- a/website/styles/header.css +++ b/website/styles/header.css @@ -8,7 +8,7 @@ header { width: 100%; color: white; - background-color: #845663; + background-color: rgba(132,86,99, 0.98); box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); } -- 2.49.1 From d900edfcda94feb8dca538d8209c8d73faa43fa1 Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Thu, 12 Jan 2017 15:20:47 +0100 Subject: [PATCH 003/351] Updated buttons --- website/styles/settings.css | 7 ++++++- website/views/settings-view.php | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/website/styles/settings.css b/website/styles/settings.css index 933f8b0..e5b629e 100644 --- a/website/styles/settings.css +++ b/website/styles/settings.css @@ -16,11 +16,16 @@ text-align: right; } +.settings input[type="submit"] { + background-color: #845663; + color: white; +} + .settings input[type="password"], .settings input[type="text"], .settings input[type="date"], .settings input[type="email"], -.settings textarea{ +.settings textarea { border: 1px solid black; } diff --git a/website/views/settings-view.php b/website/views/settings-view.php index 12415b4..7caf36c 100644 --- a/website/views/settings-view.php +++ b/website/views/settings-view.php @@ -44,6 +44,7 @@ -- 2.49.1 From f481c1c611c7732a7323f3fb3fdedf63e6bf4bf4 Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Thu, 12 Jan 2017 15:41:13 +0100 Subject: [PATCH 004/351] More uniform main css file. --- website/styles/main.css | 31 +++++++++++++++++++++++-------- website/styles/settings.css | 23 ++--------------------- 2 files changed, 25 insertions(+), 29 deletions(-) diff --git a/website/styles/main.css b/website/styles/main.css index 1346635..cbf9477 100644 --- a/website/styles/main.css +++ b/website/styles/main.css @@ -118,16 +118,31 @@ a, a:link, a:visited, a:hover, a:active { button, input, select { width: auto; height: 32px; - padding: 0 5px; - - background: white; - color: #3333333; cursor: pointer; border: none; - font-family: Arial; + font-family: Arial, sans-serif; font-size: 16px; + border-radius: 7px; +} + +textarea, input, select { + padding: 0 5px; + background: white; + color: #333333; + border: 1px solid #845663; + border-radius: 7px; + font-size: 16px; + + +} + +button, input[type="submit"], input[type="reset"] { + background-color: #845663; + color: white; + padding: 0 10px; + border: none; } /* Tables */ @@ -159,9 +174,9 @@ div[data-title]:hover:after{ -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; - -moz-box-shadow: 0px 0px 4px #222; - -webkit-box-shadow: 0px 0px 4px #222; - box-shadow: 0px 0px 4px #222; + -moz-box-shadow: 0 0 4px #222; + -webkit-box-shadow: 0 0 4px #222; + box-shadow: 0 0 4px #222; background-color: #333; font-size: 15px; line-height: normal; diff --git a/website/styles/settings.css b/website/styles/settings.css index e5b629e..751d0dc 100644 --- a/website/styles/settings.css +++ b/website/styles/settings.css @@ -1,13 +1,6 @@ -.settings { - -} - .settings input, .settings textarea{ - padding: 10px; margin: 5px; - border-radius: 10px; - width: 200px; } .settings label { @@ -16,23 +9,11 @@ text-align: right; } -.settings input[type="submit"] { - background-color: #845663; - color: white; -} - +/* All the fields for typing things. */ .settings input[type="password"], .settings input[type="text"], .settings input[type="date"], .settings input[type="email"], .settings textarea { - border: 1px solid black; -} - -.settings-password { - -} - -.settings-profile { - + width: 200px; } \ No newline at end of file -- 2.49.1 From d2ab86c0a255a907d1411db5b204a959d421622a Mon Sep 17 00:00:00 2001 From: Lars van Hijfte Date: Thu, 12 Jan 2017 15:41:46 +0100 Subject: [PATCH 005/351] Prepared for uniform css inputs --- website/styles/header.css | 13 ------------- website/styles/search.css | 3 --- website/views/search-view.php | 3 +++ 3 files changed, 3 insertions(+), 16 deletions(-) diff --git a/website/styles/header.css b/website/styles/header.css index ffeaab6..eb1451e 100644 --- a/website/styles/header.css +++ b/website/styles/header.css @@ -25,19 +25,6 @@ header { padding-left: 48px; } -#header-search input[type="text"] { - border-top-left-radius: 3px; - border-bottom-left-radius: 3px; -} - -#header-search input[type="submit"] { - background: none; - color: white; - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; -} - - header div { display: inline-block; } diff --git a/website/styles/search.css b/website/styles/search.css index 912723e..e69de29 100644 --- a/website/styles/search.css +++ b/website/styles/search.css @@ -1,3 +0,0 @@ -.search-form input { - border-bottom: #845663 solid 1px; -} \ No newline at end of file diff --git a/website/views/search-view.php b/website/views/search-view.php index 27c794c..1bd2286 100644 --- a/website/views/search-view.php +++ b/website/views/search-view.php @@ -18,6 +18,9 @@ x +
-- 2.49.1 From 984800fd0c5a90460be84e571dd5b1b9b0bcf7d2 Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Thu, 12 Jan 2017 15:52:14 +0100 Subject: [PATCH 006/351] End of day. --- website/styles/settings.css | 13 +++++++++++-- website/views/settings-view.php | 13 ++++++++++--- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/website/styles/settings.css b/website/styles/settings.css index 751d0dc..9a2c753 100644 --- a/website/styles/settings.css +++ b/website/styles/settings.css @@ -1,10 +1,11 @@ .settings input, -.settings textarea{ +.settings textarea { margin: 5px; + resize: none; } .settings label { - width: 125px; + width: 175px; display: inline-block; text-align: right; } @@ -16,4 +17,12 @@ .settings input[type="email"], .settings textarea { width: 200px; +} + +.settings textarea { + width: 400px; +} + +.settings label[for="bio"] { + vertical-align: middle; } \ No newline at end of file diff --git a/website/views/settings-view.php b/website/views/settings-view.php index 7caf36c..797217e 100644 --- a/website/views/settings-view.php +++ b/website/views/settings-view.php @@ -36,7 +36,6 @@ @@ -48,22 +47,25 @@ > -
Verander Wachtwoord

+
+
+
+ @@ -72,14 +74,19 @@
Verander Email

+
+
+ -- 2.49.1 From d14688295fdb74f58043c8ff8c592e8788171ff0 Mon Sep 17 00:00:00 2001 From: Hendrik Date: Thu, 12 Jan 2017 15:55:25 +0100 Subject: [PATCH 007/351] add title, slight css modification --- website/styles/adminpanel.css | 17 ++++++++++++++++- website/views/adminpanel.php | 9 ++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/website/styles/adminpanel.css b/website/styles/adminpanel.css index e7d84f4..b8a33c9 100644 --- a/website/styles/adminpanel.css +++ b/website/styles/adminpanel.css @@ -6,6 +6,18 @@ box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); } +<<<<<<< Updated upstream +======= +.admin-title { + margin: 10px; + /*color: #845663;*/ + /*color: white;*/ + /*text-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);*/ + padding-bottom: 5px; + border-bottom: 4px solid #845663; +} + +>>>>>>> Stashed changes .admin-panel input[type="submit"], button { background-color: #845663; color: white; @@ -14,8 +26,11 @@ .admin-actions { display: inline-block; - margin: 10px; + padding: 8px; vertical-align: top; + border-radius: 10px; + border: 4px solid #845663; + box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); } .admin-searchbar { diff --git a/website/views/adminpanel.php b/website/views/adminpanel.php index 3aa9e63..f9e4da3 100644 --- a/website/views/adminpanel.php +++ b/website/views/adminpanel.php @@ -19,9 +19,12 @@
- +
+

User Management Panel

+

+
- +
-

Actions:

+

Batch Actions:

Mute
Ban
Unban

-- 2.49.1 From 58779a3d4d71a8c36ad83e7e1056e13b236affb7 Mon Sep 17 00:00:00 2001 From: Hendrik Date: Thu, 12 Jan 2017 15:59:16 +0100 Subject: [PATCH 008/351] cleaning --- website/styles/adminpanel.css | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/website/styles/adminpanel.css b/website/styles/adminpanel.css index b8a33c9..9896568 100644 --- a/website/styles/adminpanel.css +++ b/website/styles/adminpanel.css @@ -6,18 +6,12 @@ box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); } -<<<<<<< Updated upstream -======= .admin-title { margin: 10px; - /*color: #845663;*/ - /*color: white;*/ - /*text-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);*/ padding-bottom: 5px; border-bottom: 4px solid #845663; } ->>>>>>> Stashed changes .admin-panel input[type="submit"], button { background-color: #845663; color: white; @@ -78,7 +72,3 @@ .usertable tr:hover { background-color: #f5f5f5; } - -/*div { - border: 1px solid black; -}*/ -- 2.49.1 From 89df0aba5251b2314950eabef8cf52a3e07ee18e Mon Sep 17 00:00:00 2001 From: Hendrik Date: Fri, 13 Jan 2017 10:20:34 +0100 Subject: [PATCH 009/351] readied for merge --- website/styles/adminpanel.css | 9 +++++---- website/views/adminpanel.php | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/website/styles/adminpanel.css b/website/styles/adminpanel.css index 9896568..be4da96 100644 --- a/website/styles/adminpanel.css +++ b/website/styles/adminpanel.css @@ -1,9 +1,10 @@ .admin-panel { margin: auto; - background-color: white; + /*background-color: white; border-radius: 10px; padding: 15px; - box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); + box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);*/ + min-width: 800px; } .admin-title { @@ -12,11 +13,11 @@ border-bottom: 4px solid #845663; } -.admin-panel input[type="submit"], button { +/*.admin-panel input[type="submit"], button { background-color: #845663; color: white; padding: 5px; -} +}*/ .admin-actions { display: inline-block; diff --git a/website/views/adminpanel.php b/website/views/adminpanel.php index f9e4da3..c11d648 100644 --- a/website/views/adminpanel.php +++ b/website/views/adminpanel.php @@ -18,7 +18,7 @@
-
+

User Management Panel


-- 2.49.1 From 8852a0d9184fbe6bf68f3e0a62df07cc21697131 Mon Sep 17 00:00:00 2001 From: Hendrik Date: Fri, 13 Jan 2017 10:23:31 +0100 Subject: [PATCH 010/351] use platform --- website/styles/adminpanel.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/styles/adminpanel.css b/website/styles/adminpanel.css index be4da96..3c26fdb 100644 --- a/website/styles/adminpanel.css +++ b/website/styles/adminpanel.css @@ -1,4 +1,4 @@ -.admin-panel { +.platform { margin: auto; /*background-color: white; border-radius: 10px; -- 2.49.1 From 83c994468ffc0f98eb7caa709fd224410a4c1557 Mon Sep 17 00:00:00 2001 From: Hendrik Date: Fri, 13 Jan 2017 10:37:06 +0100 Subject: [PATCH 011/351] ready for merge --- website/styles/adminpanel.css | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/website/styles/adminpanel.css b/website/styles/adminpanel.css index 3c26fdb..f63bcab 100644 --- a/website/styles/adminpanel.css +++ b/website/styles/adminpanel.css @@ -1,9 +1,5 @@ .platform { margin: auto; - /*background-color: white; - border-radius: 10px; - padding: 15px; - box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);*/ min-width: 800px; } @@ -19,6 +15,10 @@ padding: 5px; }*/ +input[type="radio"], input[type="checkbox"] { + height: auto; +} + .admin-actions { display: inline-block; padding: 8px; @@ -35,8 +35,6 @@ } .admin-searchinput { - border: 2px solid #B78996; - border-radius: 2px; margin-bottom: 10px; } -- 2.49.1 From 02149565cec398b8bd83511e56bc5a09c037ad9f Mon Sep 17 00:00:00 2001 From: "K. Nobel" Date: Fri, 13 Jan 2017 10:39:37 +0100 Subject: [PATCH 012/351] Fixed post width for Chrome --- website/styles/profile.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/styles/profile.css b/website/styles/profile.css index 1ac9a2b..7c6218c 100644 --- a/website/styles/profile.css +++ b/website/styles/profile.css @@ -49,12 +49,12 @@ /* fullscreen */ .post-box { - width: calc(25% - 68px); + width: calc(25% - 69px); } @media only screen and (max-width: 1500px) { .post-box { - width: calc(50% - 67px); + width: calc(50% - 68px); } } -- 2.49.1 From 863fde55e995a99d04c4adb201b04d51de6d8e7a Mon Sep 17 00:00:00 2001 From: Hendrik Date: Fri, 13 Jan 2017 10:46:09 +0100 Subject: [PATCH 013/351] minor fixes --- website/styles/adminpanel.css | 2 +- website/views/adminpanel.php | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/website/styles/adminpanel.css b/website/styles/adminpanel.css index f63bcab..4552951 100644 --- a/website/styles/adminpanel.css +++ b/website/styles/adminpanel.css @@ -1,4 +1,4 @@ -.platform { +.admin-panel { margin: auto; min-width: 800px; } diff --git a/website/views/adminpanel.php b/website/views/adminpanel.php index c11d648..b789aad 100644 --- a/website/views/adminpanel.php +++ b/website/views/adminpanel.php @@ -2,7 +2,6 @@ - Admin Panel - - - - + +MyHyvesbook+ + + + + + -- 2.49.1 From 1db9826de53b02bc277c2652186b22813ebd5979 Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Fri, 13 Jan 2017 12:14:44 +0100 Subject: [PATCH 021/351] Fixed Indent --- website/login.php | 350 +++++++++++++++++++++++----------------------- 1 file changed, 175 insertions(+), 175 deletions(-) diff --git a/website/login.php b/website/login.php index 664746f..4fc0321 100644 --- a/website/login.php +++ b/website/login.php @@ -1,192 +1,192 @@ - - - - - - - MyHyvesbook+ - - -
- MyHyvesbook+ -
+ + + + + + + MyHyvesbook+ + + +
+ MyHyvesbook+ +
-
-

Welkom bij MyHyvesbook+

+ +

Welkom bij MyHyvesbook+

- + - + - -
+ + - + -
-
-
-

Tekst

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec dictum turpis quam, eu ultrices sapien hendrerit tincidunt. Mauris laoreet eu elit vel rhoncus. Nam et tortor arcu. Maecenas sit amet leo quis tellus varius gravida. Sed quis fermentum odio, sed dictum nulla. Donec aliquam rutrum orci cursus tempus. Quisque sit amet ipsum eget velit aliquam facilisis ultricies quis ligula. Nunc nisi lacus, luctus non bibendum quis, sagittis sit amet odio.

- -
+
+

Lorem

+

Lorem ipsum dolor sit amet, consectetur.

+

Enkele minuten geleden geplaatst

- -
-
-

Tekst

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec dictum turpis quam, eu ultrices sapien hendrerit tincidunt. Nunc aliquam neque turpis, id porta quam iaculis id. Sed suscipit, nisl a fermentum congue, nunc augue finibus lectus, id varius nunc purus nec dolor. Integer laoreet tellus sit amet sapien auctor congue. Mauris laoreet eu elit vel rhoncus. Nam et tortor arcu. Maecenas sit amet leo quis tellus varius gravida. Sed quis fermentum odio, sed dictum nulla. Donec aliquam rutrum orci cursus tempus. Quisque sit amet ipsum eget velit aliquam facilisis ultricies quis ligula. Nunc nisi lacus, luctus non bibendum quis, sagittis sit amet odio.

- -
+
+

Image

+ Olympic Mountains, Washington +

Gisteren geplaatst

- -
-
-

Tekst

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec dictum turpis quam, eu ultrices sapien hendrerit tincidunt. Nunc aliquam neque turpis, id porta quam iaculis id. Sed suscipit, nisl a fermentum congue, nunc augue finibus lectus, id varius nunc purus nec dolor. Integer laoreet tellus sit amet sapien auctor congue. Sed quis fermentum odio, sed dictum nulla. Donec aliquam rutrum orci cursus tempus. Quisque sit amet ipsum eget velit aliquam facilisis ultricies quis ligula. Nunc nisi lacus, luctus non bibendum quis, sagittis sit amet odio.

- -
+
+

Ipsum

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Rem nihil alias amet dolores fuga totam sequi a cupiditate ipsa voluptas id facilis nobis.

+

Maandag geplaatst

- -
-
-

Tekst

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec dictum turpis quam, eu ultrices sapien hendrerit tincidunt. Nunc aliquam neque turpis, id porta quam iaculis id. Sed suscipit, nisl a fermentum congue, nunc augue finibus lectus, id varius nunc purus nec dolor. Integer laoreet tellus sit amet sapien auctor congue. Mauris laoreet eu elit vel rhoncus. Nam et tortor arcu. Maecenas sit amet leo quis tellus varius gravida. Sed quis fermentum odio, sed dictum nulla.

- -
+
+

Dolor

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit.

+

4 Januari geplaatst

- -
-
-

Tekst

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec dictum turpis quam, eu ultrices sapien hendrerit tincidunt. Nunc aliquam neque turpis, id porta quam iaculis id. Sed suscipit, nisl a fermentum congue, nunc augue finibus lectus, id varius nunc purus nec dolor. Integer laoreet tellus sit amet sapien auctor congue. Mauris laoreet eu elit vel rhoncus. Nam et tortor arcu. Maecenas sit amet leo quis tellus varius gravida. Sed quis fermentum odio, sed dictum nulla. Donec aliquam rutrum orci cursus tempus. Quisque sit amet ipsum eget velit aliquam facilisis ultricies quis ligula. Nunc nisi lacus, luctus non bibendum quis, sagittis sit amet odio.

- -
+
+

Sit

+

Lorem ipsum dolor sit.

+

4 Januari geplaatst

- -
-
-

Tekst

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec dictum turpis quam, eu ultrices sapien hendrerit tincidunt. Nunc aliquam neque turpis, id porta quam iaculis id. Sed suscipit, nisl a fermentum congue, nunc augue finibus lectus, id varius nunc purus nec dolor. Integer laoreet tellus sit amet sapien auctor congue. Mauris laoreet eu elit vel rhoncus. Nam et tortor arcu. Maecenas sit amet leo quis tellus varius gravida. Quisque sit amet ipsum eget velit aliquam facilisis ultricies quis ligula. Nunc nisi lacus, luctus non bibendum quis, sagittis sit amet odio.

- -
+
+

Image

+ Nunobiki Falls, Kobe Japan +

4 Januari geplaatst

- -
-
-

Tekst

-

Integer laoreet tellus sit amet sapien auctor congue. Mauris laoreet eu elit vel rhoncus. Nam et tortor arcu. Maecenas sit amet leo quis tellus varius gravida. Sed quis fermentum odio, sed dictum nulla. Donec aliquam rutrum orci cursus tempus. Quisque sit amet ipsum eget velit aliquam facilisis ultricies quis ligula. Nunc nisi lacus, luctus non bibendum quis, sagittis sit amet odio.

- -
+
+

Amet

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima asperiores eveniet vero velit eligendi aliquid in.

+

4 Januari geplaatst

- -
-
-

Afbeelding

- Foto van [gebruikersnaam] - -
+
+

Consectetur

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Error aliquid reprehenderit expedita odio beatae est.

+

4 Januari geplaatst

- -
-
-

Post

- - -
+
+

Adipisicing

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quaerat architecto quis tenetur fugiat veniam iste molestiae fuga labore!

+

4 Januari geplaatst

- -
-
-

Post

- -
+
+

Elit

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Rem ut debitis dolorum earum expedita eveniet voluptatem quibusdam facere eos numquam commodi ad iusto laboriosam rerum aliquam.

+

4 Januari geplaatst

+
+
+

Geen error

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloribus dolorem maxime minima animi cum.

+

4 Januari geplaatst

+
+
+

Image

+ Oregon cliffs are no joke. +

4 Januari geplaatst

+
+
+

Aliquid

+

Lorem ipsum dolor sit amet, consectetur.

+

4 Januari geplaatst

+
+
+

Odit

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odit accusamus tempore at porro officia rerum est impedit ea ipsa tenetur. Labore libero hic error sunt laborum expedita.

+

4 Januari geplaatst

+
+
+

Accusamus

+

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nobis quaerat suscipit ad.

+

4 Januari geplaatst

diff --git a/website/views/head.php b/website/views/head.php index 4da866c..74ef7a2 100644 --- a/website/views/head.php +++ b/website/views/head.php @@ -4,6 +4,7 @@ + + \ No newline at end of file -- 2.49.1 From f00b3d9a231ff7073c3fc77ea8d1b8600ce60d02 Mon Sep 17 00:00:00 2001 From: Hendrik Date: Tue, 17 Jan 2017 12:55:15 +0100 Subject: [PATCH 037/351] add page selector in adminpanel --- website/public/styles/adminpanel.css | 6 ++++++ website/views/adminpanel.php | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/website/public/styles/adminpanel.css b/website/public/styles/adminpanel.css index 019924e..5a9fb7e 100644 --- a/website/public/styles/adminpanel.css +++ b/website/public/styles/adminpanel.css @@ -44,6 +44,12 @@ margin: 10px; } +.admin-userpage { + width: 170px; + margin-bottom: 20px; + float: right; +} + .usertable { width: 100%; } diff --git a/website/views/adminpanel.php b/website/views/adminpanel.php index 95d518d..9c1c818 100644 --- a/website/views/adminpanel.php +++ b/website/views/adminpanel.php @@ -105,6 +105,11 @@ function test_input($data) {

Users:

+
+ + 1 / 1 + +

+ fetch(PDO::FETCH_ASSOC)) { $userID = $user['userID']; @@ -135,6 +182,7 @@ function test_input($data) { $role = $user['role']; $bancomment = $user['bancomment']; $thispage = htmlspecialchars($_SERVER['PHP_SELF']); + echo(" - - - - - + + + + + - "); + "); + } + } else { + $q = search20GroupsFromNByStatus($db, $listnr, $search, $groupstatus); + + while ($group = $q->fetch(PDO::FETCH_ASSOC)) { + $groupID = $group['groupID']; + $name = $group['name']; + $role = $group['status']; + $description = $group['description']; + $thispage = htmlspecialchars($_SERVER['PHP_SELF']); + + echo(" + + + + + + + + "); + } } ?>
-- 2.49.1 From be26e89dbf43e6a482d8124c24e27779298b2c9b Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Tue, 17 Jan 2017 13:43:00 +0100 Subject: [PATCH 038/351] 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
-- 2.49.1 From eb2a343d5fe5d4dc1ab44fbb3fb792579fbfca46 Mon Sep 17 00:00:00 2001 From: Lars van Hijfte Date: Wed, 18 Jan 2017 12:08:53 +0100 Subject: [PATCH 051/351] 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 @@
-
+ + + /> + />
-- 2.49.1 From afcd048260123e1a150ec76b5d65de64eff8a2b8 Mon Sep 17 00:00:00 2001 From: Joey Lai Date: Wed, 18 Jan 2017 12:35:41 +0100 Subject: [PATCH 052/351] 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 @@ * - + - - - -- 2.49.1 From ed0d0990adf858a985cd4b0918dbd2f3bd99d98d Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Wed, 18 Jan 2017 13:14:06 +0100 Subject: [PATCH 053/351] 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 -- 2.49.1 From b201d8287856990da373e2e936c94bef0566a2d9 Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Wed, 18 Jan 2017 13:14:43 +0100 Subject: [PATCH 054/351] 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 -- 2.49.1 From d627c8a83742360c3c79d6057ace31f5a0727147 Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Wed, 18 Jan 2017 13:46:50 +0100 Subject: [PATCH 055/351] 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, -- 2.49.1 From b5ceb1b5e0fe7edee7d0dcec754e68ac03fbabe1 Mon Sep 17 00:00:00 2001 From: Hendrik Date: Wed, 18 Jan 2017 14:20:32 +0100 Subject: [PATCH 056/351] add pagetype selector, add search filter --- website/public/styles/adminpanel.css | 10 +++- website/queries/user.php | 28 +++++++++ website/views/adminpanel.php | 88 +++++++++++++++++++++------- 3 files changed, 104 insertions(+), 22 deletions(-) diff --git a/website/public/styles/adminpanel.css b/website/public/styles/adminpanel.css index 5a9fb7e..c8e29b6 100644 --- a/website/public/styles/adminpanel.css +++ b/website/public/styles/adminpanel.css @@ -32,7 +32,7 @@ margin-bottom: 10px; } -.admin-filter, .admin-filtertype { +.admin-filter, .admin-filtertype, .admin-groupfilter { display: inline-block; margin: 10px; vertical-align: top; @@ -40,6 +40,14 @@ margin-left: 50px; } +.admin-filter, .admin-groupfilter { + width: 120px; +} + +.admin-groupfilter { + display: none; +} + .admin-users { margin: 10px; } diff --git a/website/queries/user.php b/website/queries/user.php index 8029154..42d90bc 100644 --- a/website/queries/user.php +++ b/website/queries/user.php @@ -41,4 +41,32 @@ function search20UsersFromN($db, $n, $keyword) { return $q; } +function search20UsersFromNByStatus($db, $n, $keyword, $status) { + $q = $db->prepare(" + SELECT + `userID`, + `username`, + `role`, + `bancomment` + FROM + `user` + WHERE + `username` LIKE :keyword AND + FIND_IN_SET (`role`, :statuses) + ORDER BY + `username` + LIMIT + :n, 20 + "); + + $keyword = "%$keyword%"; + $q->bindParam(':keyword', $keyword); + $q->bindParam(':n', $n, PDO::PARAM_INT); + $statuses = implode(',', $status); + $q->bindParam(':statuses', $statuses); + $q->execute(); + return $q; +} + + ?> diff --git a/website/views/adminpanel.php b/website/views/adminpanel.php index a8cdb73..8ce9fb1 100644 --- a/website/views/adminpanel.php +++ b/website/views/adminpanel.php @@ -4,6 +4,10 @@ Admin Panel @@ -20,13 +35,14 @@ ">
-
+ +

Show:

- > + + >
- > + >
- > + >
- > + >
- > - + > +
+ > +
+ +
+

Show:

+ + > +
+ > +
+ > +
+
+

Page Type:

> + + onchange="changeFilter()">
> + + onchange="changeFilter()">
+

Batch Actions:

@@ -107,8 +151,10 @@ function test_input($data) {

+

Users:

+
1 / 1 @@ -126,8 +172,9 @@ function test_input($data) {
Action
- -
-- 2.49.1 From e80ce3b793adee1844f826f7aa8aa41b91fd20af Mon Sep 17 00:00:00 2001 From: "K. Nobel" Date: Wed, 18 Jan 2017 14:22:03 +0100 Subject: [PATCH 057/351] Improved selectAllFriends query --- website/queries/friendship.php | 46 +++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/website/queries/friendship.php b/website/queries/friendship.php index 45a599e..94cd123 100644 --- a/website/queries/friendship.php +++ b/website/queries/friendship.php @@ -1,24 +1,30 @@ query(" - SELECT - `user`.`username`, - `user`.`profilepicture`, - `user`.`onlinestatus`, - `user`.`role` - FROM - `user` - INNER JOIN - `friendship` - WHERE - `friendship`.`user1ID` = $userID AND - `friendship`.`user2ID` = `user`.`userID` OR - `friendship`.`user2ID` = $userID AND - `friendship`.`user1ID` = `user`.`userID`" - ); + $stmt = $db->prepare(" + SELECT + `username`, + IFNULL( + `profilepicture`, + 'img/notbad.png' + ) AS profilepicture, + `onlinestatus`, + `role` + FROM + `user` + INNER JOIN + `friendship` + WHERE + (`friendship`.`user1ID` = :userID AND + `friendship`.`user2ID` = `user`.`userID` OR + `friendship`.`user2ID` = :userID AND + `friendship`.`user1ID` = `user`.`userID`) AND + `role` != 5 AND + `status` = 1 + "); + + $stmt->bindParam(':userID', $userID, PDO::PARAM_INT); + $stmt->execute(); + return $stmt; } - - - -?> \ No newline at end of file -- 2.49.1 From bdf5c221a7026fcd4e9a4477664e41bb776d37e1 Mon Sep 17 00:00:00 2001 From: "K. Nobel" Date: Wed, 18 Jan 2017 14:23:36 +0100 Subject: [PATCH 058/351] Added queries related to users. --- website/queries/user.php | 72 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 website/queries/user.php diff --git a/website/queries/user.php b/website/queries/user.php new file mode 100644 index 0000000..a73c16c --- /dev/null +++ b/website/queries/user.php @@ -0,0 +1,72 @@ +prepare(" + SELECT + `username`, + IFNULL( + `profilepicture`, + 'img/notbad.png' + ) AS profilepicture, + `bio`, + `role`, + `onlinestatus`, + `loggedin`, + `fname`, + `lname` + FROM + `user` + WHERE + `userID` = :userID + "); + + $stmt->bindParam(':userID', $userID, PDO::PARAM_INT); + $stmt->execute(); + return $stmt->fetch(); +} + +function selectAllUserGroups($db, $userID) { + $stmt = $db->prepare(" + SELECT + `group_page`.`groupID`, + `name`, + `picture`, + `userID` + FROM + `group_page` + INNER JOIN + `group_member` + ON + `group_page`.`groupID` = `group_member`.`groupID` + WHERE + `userID` = :userID AND + `status` = 1 + "); + + $stmt->bindParam(':userID', $userID, PDO::PARAM_INT); + $stmt->execute(); + return $stmt; +} + +function selectAllUserPosts($db, $userID) { + $stmt = $db->prepare(" + SELECT + `postID`, + `author`, + `title`, + `content`, + `creationdate` + FROM + `post` + WHERE + `author` = :userID AND + `groupID` IS NULL + ORDER BY + `creationdate` DESC + "); + + $stmt->bindParam(':userID', $userID, PDO::PARAM_INT); + $stmt->execute(); + return $stmt; +} \ No newline at end of file -- 2.49.1 From 19f525d168703a217ba6dfc981b3e91c05511388 Mon Sep 17 00:00:00 2001 From: Lars van Hijfte Date: Wed, 18 Jan 2017 14:34:15 +0100 Subject: [PATCH 059/351] 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 -- 2.49.1 From 0808d46d9ec52a70af07bc0f7d22ec4c99291301 Mon Sep 17 00:00:00 2001 From: Joey Lai Date: Wed, 18 Jan 2017 14:46:32 +0100 Subject: [PATCH 060/351] 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(); } ?> -- 2.49.1 From 4fe142eb51aa82d0600f17bae7031caddce6eff3 Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Wed, 18 Jan 2017 14:50:11 +0100 Subject: [PATCH 061/351] 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 -- 2.49.1 From e73fcd420c70124544a27438775a3774b15a7df4 Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Wed, 18 Jan 2017 14:51:03 +0100 Subject: [PATCH 062/351] 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
    -- 2.49.1 From e7ceb254ce09d62537d1e203913fd78909798cc3 Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Wed, 18 Jan 2017 14:57:16 +0100 Subject: [PATCH 063/351] 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 @@ -- 2.49.1 From 37ad2e0ea48424c54508ceb240c38a6893a22cc1 Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Wed, 18 Jan 2017 15:08:48 +0100 Subject: [PATCH 064/351] 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(); " > -- 2.49.1 From 95fd3c0040abd55e1e0e90b409d8d8283a931976 Mon Sep 17 00:00:00 2001 From: Lars van Hijfte Date: Wed, 18 Jan 2017 15:09:52 +0100 Subject: [PATCH 065/351] 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 @@
-
- $username$role$bancomment -
- - - -
-
+ $username$role$bancomment +
+ + + +
+
+ $name$role$description +
+ + + +
+
+
+            
+        
-- 2.49.1 From 097ccf49b3e1d29a90823444b57d33aa291b7f42 Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Wed, 18 Jan 2017 15:27:51 +0100 Subject: [PATCH 068/351] New Button --- website/public/external/nietslecht_button.png | Bin 62172 -> 64763 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/website/public/external/nietslecht_button.png b/website/public/external/nietslecht_button.png index 4fca19ad6673ce8b2209286055d930a0d8ce14fd..74b6baa407bcd931e3cb5e988bf69f91c82441bd 100644 GIT binary patch literal 64763 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 M85QYbN#p1L2U(Tw(*OVf literal 62172 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 Y-t4_rCU%hGC>j1!lvBQtea_hTf0a@4!T Date: Wed, 18 Jan 2017 15:37:49 +0100 Subject: [PATCH 069/351] Fixed Chat! --- website/public/js/chat.js | 2 +- website/public/styles/chat.css | 4 ---- website/queries/private_message.php | 2 +- website/views/chat-view.php | 28 ++-------------------------- 4 files changed, 4 insertions(+), 32 deletions(-) diff --git a/website/public/js/chat.js b/website/public/js/chat.js index dd0b00f..cf33f69 100644 --- a/website/public/js/chat.js +++ b/website/public/js/chat.js @@ -34,7 +34,7 @@ function sendMessage() { function addMessages(messages) { for(i in messages) { - if (messages[i].origin == 2) { + if (messages[i].destination == $(".destinationID").val()) { type = "chat-message-self"; } else { type = "chat-message-other"; diff --git a/website/public/styles/chat.css b/website/public/styles/chat.css index 132c750..8f486bb 100644 --- a/website/public/styles/chat.css +++ b/website/public/styles/chat.css @@ -16,10 +16,6 @@ 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/private_message.php b/website/queries/private_message.php index 6cf8b16..2d953c5 100644 --- a/website/queries/private_message.php +++ b/website/queries/private_message.php @@ -49,7 +49,7 @@ function sendMessage($destination, $content) { "); return $stmt->execute(array( - "origin" => $_SESSION["userID"], + "origin" => $_SESSION["userID"], "destination" => $destination, "content" => $content )); diff --git a/website/views/chat-view.php b/website/views/chat-view.php index 1f9a0d8..a3acd4c 100644 --- a/website/views/chat-view.php +++ b/website/views/chat-view.php @@ -47,30 +47,6 @@
- - - - - - - - - - - - - - - - - - - - - - - -
@@ -89,7 +65,7 @@ Date: Wed, 18 Jan 2017 15:53:10 +0100 Subject: [PATCH 070/351] 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 @@ -- 2.49.1 From df9f782809173e2d42c3e431fd234c60741d64e2 Mon Sep 17 00:00:00 2001 From: Lars van Hijfte Date: Wed, 18 Jan 2017 15:54:13 +0100 Subject: [PATCH 071/351] 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) { -- 2.49.1 From 62d77fc61664fca1ca266cbe753dd481e7e2bfa1 Mon Sep 17 00:00:00 2001 From: "K. Nobel" Date: Wed, 18 Jan 2017 15:56:59 +0100 Subject: [PATCH 072/351] Added query needed to get userID --- website/queries/user.php | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/website/queries/user.php b/website/queries/user.php index a73c16c..fee8fe8 100644 --- a/website/queries/user.php +++ b/website/queries/user.php @@ -1,6 +1,21 @@ prepare(" + SELECT + `userID` + FROM + `user` + WHERE + LOWER(`username`) = LOWER(:username) + "); + + $stmt->bindParam(':username', $username, PDO::PARAM_STR); + $stmt->execute(); + return $stmt->fetch()["userID"]; +} + function selectUser($db, $userID) { $stmt = $db->prepare(" SELECT @@ -41,7 +56,7 @@ function selectAllUserGroups($db, $userID) { `group_page`.`groupID` = `group_member`.`groupID` WHERE `userID` = :userID AND - `status` = 1 + `role` = 1 "); $stmt->bindParam(':userID', $userID, PDO::PARAM_INT); -- 2.49.1 From e7e3ae9c8be3492b20fcddd0c16d444099ee17b9 Mon Sep 17 00:00:00 2001 From: Hendrik Date: Wed, 18 Jan 2017 15:57:39 +0100 Subject: [PATCH 073/351] add changing single group status --- website/queries/group_page.php | 14 ++++++++++++++ website/queries/user.php | 1 + website/views/adminpanel.php | 8 +++++--- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/website/queries/group_page.php b/website/queries/group_page.php index 8f04ca3..c6db01b 100644 --- a/website/queries/group_page.php +++ b/website/queries/group_page.php @@ -80,6 +80,20 @@ function search20GroupsFromNByStatus($db, $n, $keyword, $status) { return $q; } +function changeGroupStatusByID($db, $id, $status) { + $q = $db->query(" + UPDATE + `group_page` + SET + `status` = $status + WHERE + `groupID` = $id + "); + + return $q; +} + + ?> diff --git a/website/queries/user.php b/website/queries/user.php index de8c52b..bfd9579 100644 --- a/website/queries/user.php +++ b/website/queries/user.php @@ -54,6 +54,7 @@ function search20UsersFromNByStatus($db, $n, $keyword, $status) { `username` LIKE :keyword AND FIND_IN_SET (`role`, :statuses) ORDER BY + `role`, `username` LIMIT :n, 20 diff --git a/website/views/adminpanel.php b/website/views/adminpanel.php index d478003..5a3ba97 100644 --- a/website/views/adminpanel.php +++ b/website/views/adminpanel.php @@ -62,6 +62,8 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { if (!empty($_POST["actions"]) && !empty($_POST["userID"])) { changeUserStatusByID($db, $_POST["userID"], $_POST["actions"]); + } elseif (!empty($_POST["actions"]) && !empty($_POST["groupID"])) { + changeGroupStatusByID($db, $_POST["groupID"], $_POST["actions"]); } } @@ -239,9 +241,9 @@ function test_input($data) { action='$thispage' method='post'> -- 2.49.1 From e86a6a6d6f27f187d2c74e065ebd53a0cdd42610 Mon Sep 17 00:00:00 2001 From: "K. Nobel" Date: Wed, 18 Jan 2017 16:01:26 +0100 Subject: [PATCH 074/351] Changed queries include --- website/views/head.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/views/head.php b/website/views/head.php index fc28320..9306edf 100644 --- a/website/views/head.php +++ b/website/views/head.php @@ -15,6 +15,6 @@ \ No newline at end of file -- 2.49.1 From 3ee5488a88ad92cd7a5fddcaeb570459b8995768 Mon Sep 17 00:00:00 2001 From: "K. Nobel" Date: Wed, 18 Jan 2017 16:02:11 +0100 Subject: [PATCH 075/351] Improved profile page, profile now takes data from the DB! --- website/public/profile.php | 57 +++++++++++++++++ website/views/profile.php | 125 ++++++++++--------------------------- 2 files changed, 90 insertions(+), 92 deletions(-) diff --git a/website/public/profile.php b/website/public/profile.php index d82fe48..4854080 100644 --- a/website/public/profile.php +++ b/website/public/profile.php @@ -1,3 +1,60 @@ + $unix_date) { + $difference = $now - $unix_date; + $tense = "geleden"; + } else { + $difference = $unix_date - $now; + $tense = "vanaf nu"; + } + + for($i = 0; $difference >= $lengths[$i] && $i < count($lengths) - 1; $i++) { + $difference /= $lengths[$i]; + } + + $difference = round($difference); + + if($difference != 1) { + $period = $multiple_periods[$i]; + } else { + $period = $single_periods[$i]; + } + + return "$difference $period $tense"; +} + +if(empty($_GET["username"])) { + echo "User does not exist!"; + return; +} + +$userID = getUserID($db, $_GET["username"]); + +$user = selectUser($db, $userID); +$friends = selectAllFriends($db, $userID); +$groups = selectAllUserGroups($db, $userID); +$posts = selectAllUserPosts($db, $userID); + +?> + diff --git a/website/views/profile.php b/website/views/profile.php index 8f5efe2..395dd15 100644 --- a/website/views/profile.php +++ b/website/views/profile.php @@ -1,113 +1,54 @@
    - + ">

    Als vriend toevoegen

    -

    [gebruikersnaam]

    -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec dictum turpis quam, eu ultrices sapien hendrerit tincidunt. Nunc aliquam neque turpis, id porta quam iaculis id. Sed suscipit, nisl a fermentum congue, nunc augue finibus lectus, id varius nunc purus nec dolor. Integer laoreet tellus sit amet sapien auctor congue. Mauris laoreet eu elit vel rhoncus. Nam et tortor arcu. Maecenas sit amet leo quis tellus varius gravida. Sed quis fermentum odio, sed dictum nulla. Donec aliquam rutrum orci cursus tempus. Quisque sit amet ipsum eget velit aliquam facilisis ultricies quis ligula. Nunc nisi lacus, luctus non bibendum quis, sagittis sit amet odio.

    +

    +

    Vrienden

    - [gebruikersnaam]'s profielfoto - [gebruikersnaam]'s profielfoto - [gebruikersnaam]'s profielfoto - [gebruikersnaam]'s profielfoto - [gebruikersnaam]'s profielfoto - ...en nog 25 anderen! + fetch()) { + echo "" . $friend["username"] . ""; + } + + if($friends->rowCount() === 0) { + echo "

    Deze gebruiker heeft nog geen vrienden gemaakt.

    "; + } + ?>

    Groepen

    - [groepsnaam]'s logo - [groepsnaam]'s logo - [groepsnaam]'s logo - [groepsnaam]'s logo - [groepsnaam]'s logo - ...en nog 6 anderen! + fetch()) { + echo "${group["name"]}s logo"; + } + + if($groups->rowCount() === 0) { + echo "

    Deze gebruiker is nog geen lid van een groep.

    "; + } + ?>

    -
    -

    Lorem

    -

    Lorem ipsum dolor sit amet, consectetur.

    -

    Enkele minuten geleden geplaatst

    -
    -
    -

    Image

    - Olympic Mountains, Washington -

    Gisteren geplaatst

    -
    -
    -

    Ipsum

    -

    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Rem nihil alias amet dolores fuga totam sequi a cupiditate ipsa voluptas id facilis nobis.

    -

    Maandag geplaatst

    -
    -
    -

    Dolor

    -

    Lorem ipsum dolor sit amet, consectetur adipisicing elit.

    -

    4 Januari geplaatst

    -
    -
    -

    Sit

    -

    Lorem ipsum dolor sit.

    -

    4 Januari geplaatst

    -
    -
    -

    Image

    - Nunobiki Falls, Kobe Japan -

    4 Januari geplaatst

    -
    -
    -

    Amet

    -

    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima asperiores eveniet vero velit eligendi aliquid in.

    -

    4 Januari geplaatst

    -
    -
    -

    Consectetur

    -

    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Error aliquid reprehenderit expedita odio beatae est.

    -

    4 Januari geplaatst

    -
    -
    -

    Adipisicing

    -

    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quaerat architecto quis tenetur fugiat veniam iste molestiae fuga labore!

    -

    4 Januari geplaatst

    -
    -
    -

    Elit

    -

    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Rem ut debitis dolorum earum expedita eveniet voluptatem quibusdam facere eos numquam commodi ad iusto laboriosam rerum aliquam.

    -

    4 Januari geplaatst

    -
    -
    -

    Geen error

    -

    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloribus dolorem maxime minima animi cum.

    -

    4 Januari geplaatst

    -
    -
    -

    Image

    - Oregon cliffs are no joke. -

    4 Januari geplaatst

    -
    -
    -

    Aliquid

    -

    Lorem ipsum dolor sit amet, consectetur.

    -

    4 Januari geplaatst

    -
    -
    -

    Odit

    -

    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odit accusamus tempore at porro officia rerum est impedit ea ipsa tenetur. Labore libero hic error sunt laborum expedita.

    -

    4 Januari geplaatst

    -
    -
    -

    Accusamus

    -

    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nobis quaerat suscipit ad.

    -

    4 Januari geplaatst

    -
    -
    - + fetch()) { + $nicetime = nicetime($post["creationdate"]); + echo " +
    +

    ${post["title"]}

    +

    ${post["content"]}

    +

    ${nicetime} geplaatst.

    +
    + "; + } + ?>
    \ No newline at end of file -- 2.49.1 From d06ad5a44d094501f9b3a49124cc1ea106ea7fe5 Mon Sep 17 00:00:00 2001 From: Lars van Hijfte Date: Wed, 18 Jan 2017 16:12:38 +0100 Subject: [PATCH 076/351] fixed menu more friends bug --- website/public/js/menu.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/public/js/menu.js b/website/public/js/menu.js index d4471eb..32b048a 100644 --- a/website/public/js/menu.js +++ b/website/public/js/menu.js @@ -6,7 +6,7 @@ $(document).ready(function() { $("#more-friends-click").click(function() { // Show only friends $("#groups-menu-section").slideUp(); - $("#friends-menu-section a").show(); + $("#friends-menu-section li").show(); // Change buttons $("#more-friends-click").hide(); @@ -17,7 +17,7 @@ $(document).ready(function() { $("#more-groups-click").click(function() { // Show only groups $("#friends-menu-section").slideUp(); - $("#groups-menu-section a").show(); + $("#groups-menu-section li").show(); // Change buttons $("#more-groups-click").hide(); -- 2.49.1 From 380b256d292630a028a0096036c6568d2b351343 Mon Sep 17 00:00:00 2001 From: Lars van Hijfte Date: Wed, 18 Jan 2017 16:20:33 +0100 Subject: [PATCH 077/351] added this file because it is needed --- website/public/loadMessages.php | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 website/public/loadMessages.php diff --git a/website/public/loadMessages.php b/website/public/loadMessages.php new file mode 100644 index 0000000..fb9f129 --- /dev/null +++ b/website/public/loadMessages.php @@ -0,0 +1,11 @@ + Date: Wed, 18 Jan 2017 16:22:27 +0100 Subject: [PATCH 078/351] Added personal Header --- website/queries/header.php | 17 +++++++++++++++++ website/views/header.php | 10 ++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 website/queries/header.php diff --git a/website/queries/header.php b/website/queries/header.php new file mode 100644 index 0000000..5e78291 --- /dev/null +++ b/website/queries/header.php @@ -0,0 +1,17 @@ +prepare(" + SELECT + `fname`, + `lname`, + `profilepicture` + FROM + `user` + WHERE + `userID` = :userID + "); + $stmt->bindParam(":userID", $_SESSION["userID"]); + $stmt->execute(); + return $stmt->fetch(); + +} \ No newline at end of file diff --git a/website/views/header.php b/website/views/header.php index af3d0f0..12877b6 100644 --- a/website/views/header.php +++ b/website/views/header.php @@ -1,3 +1,9 @@ +
    - + "/>
    -- 2.49.1 From 1fb6c90fa6748f2dd91112a812f289278fd1329d Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Wed, 18 Jan 2017 16:41:45 +0100 Subject: [PATCH 079/351] Session Start doubble fixes --- website/views/header.php | 1 - 1 file changed, 1 deletion(-) diff --git a/website/views/header.php b/website/views/header.php index 12877b6..bb809ee 100644 --- a/website/views/header.php +++ b/website/views/header.php @@ -1,5 +1,4 @@ Date: Thu, 19 Jan 2017 11:00:55 +0100 Subject: [PATCH 080/351] Ignore .idea folder --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 49adb33..9479d1a 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,7 @@ # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - +.idea/* # User-specific stuff: .idea/workspace.xml .idea/tasks.xml -- 2.49.1 From ff19b5e1b9d33ae2f3d6c374a1e762997f52c2e9 Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Thu, 19 Jan 2017 11:01:29 +0100 Subject: [PATCH 081/351] Settings messages now uses a Class (: --- website/public/settings.php | 12 ++---- website/queries/settings.php | 67 ++++++++++++++++++++++----------- website/views/settings-view.php | 6 +-- 3 files changed, 53 insertions(+), 32 deletions(-) diff --git a/website/public/settings.php b/website/public/settings.php index 2f91690..c3645f1 100644 --- a/website/public/settings.php +++ b/website/public/settings.php @@ -5,6 +5,7 @@ include("../views/head.php"); include_once("../queries/connect.php"); include_once("../queries/settings.php"); + $_SESSION["userID"] = 2; ?> "; } + + $randomUser = selectRandomNotFriendUser($_SESSION["userID"])["username"]; + + echo " +
  • +
    + +
    +
  • + "; if ($i > 1) { $i -= 1; echo " -
  • - En nog $i anderen... -
  • "; +
  • + En nog $i anderen... +
  • + "; } + ?> @@ -87,17 +106,28 @@ // Echo the friend. echo " - -
  • -
    - PF - $name -
    -
  • -
    +
  • +
    + +
    +
  • "; } - if ($i > 3) { + + if ($i == 0) { + echo "
  • +
    + Je hoort nergens bij. +
    +
  • "; + } else if ($i > 3) { $i -= 3; echo "
  • -- 2.49.1 From daff2f41faf4b0f8b7def9edc294aace9976f068 Mon Sep 17 00:00:00 2001 From: Hendrik Date: Fri, 20 Jan 2017 12:29:34 +0100 Subject: [PATCH 107/351] minor fix --- website/views/adminpanel.php | 7 ------- 1 file changed, 7 deletions(-) diff --git a/website/views/adminpanel.php b/website/views/adminpanel.php index 86c674a..52681a4 100644 --- a/website/views/adminpanel.php +++ b/website/views/adminpanel.php @@ -99,15 +99,8 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { changeMultipleGroupStatusByID($db, $_POST["checkbox-group"], $_POST["groupbatchactions"]); } -<<<<<<< HEAD if (isset($_POST["pageselect"])) { $currentpage = $_POST["pageselect"]; -======= - if (!empty($_POST["actions"]) && !empty($_POST["userID"])) { - changeUserStatusByID($_POST["userID"], $_POST["actions"]); - } elseif (!empty($_POST["actions"]) && !empty($_POST["groupID"])) { - changeGroupStatusByID($_POST["groupID"], $_POST["actions"]); ->>>>>>> master } } -- 2.49.1 From eb1fc154015d8477041aee70a05c2561f8983196 Mon Sep 17 00:00:00 2001 From: Joey Lai Date: Fri, 20 Jan 2017 12:32:39 +0100 Subject: [PATCH 108/351] script on right lines --- website/public/login.php | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/website/public/login.php b/website/public/login.php index 65babdf..3d37da7 100644 --- a/website/public/login.php +++ b/website/public/login.php @@ -7,6 +7,18 @@ include_once("../queries/checkInput.php") ?> + + - - - -- 2.49.1 From 6c41e825fe4527ca83949d647183d70eb34466c4 Mon Sep 17 00:00:00 2001 From: Lars van Hijfte Date: Fri, 20 Jan 2017 12:53:23 +0100 Subject: [PATCH 109/351] Removed absolute path --- website/views/head.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/website/views/head.php b/website/views/head.php index e267d61..bb6eec4 100644 --- a/website/views/head.php +++ b/website/views/head.php @@ -1,17 +1,17 @@ MyHyvesbook+ - - - - + + + + Date: Fri, 20 Jan 2017 12:58:34 +0100 Subject: [PATCH 110/351] fix queries for global and prepared --- website/queries/group_page.php | 43 ++++++++++++++++++++-------------- website/queries/user.php | 29 ++++++++++++++--------- website/views/adminpanel.php | 16 ++++++------- 3 files changed, 52 insertions(+), 36 deletions(-) diff --git a/website/queries/group_page.php b/website/queries/group_page.php index 44d346c..ef7af07 100644 --- a/website/queries/group_page.php +++ b/website/queries/group_page.php @@ -1,7 +1,7 @@ query(" + $q = $GLOBALS["db"]->prepare(" SELECT `group_page`.`name`, `group_page`.`picture`, @@ -11,12 +11,16 @@ function selectGroupById($groupID) { FROM `group_page` WHERE - `group_page`.`groupID` = $groupID + `group_page`.`groupID` = :groupID "); + + $q->bindParam(':groupID', $groupID); + $q->execute(); + return $q; } function select20GroupsFromN($n) { - return $GLOBALS["db"]->query(" + $q = $GLOBALS["db"]->prepare(" SELECT `group_page`.`groupID`, `group_page`.`name`, @@ -29,12 +33,16 @@ function select20GroupsFromN($n) { ORDER BY `group_page`.`name` ASC LIMIT - $n, 20 + :n, 20 "); + + $q->bindParam(':n', $n); + $q->execute(); + return $q; } function select20GroupsByStatusFromN($n, $status) { - return $GLOBALS["db"]->query(" + $q = $GLOBALS["db"]->prepare(" SELECT `group_page`.`groupID`, `group_page`.`name`, @@ -45,12 +53,17 @@ function select20GroupsByStatusFromN($n, $status) { FROM `group_page` WHERE - `group_page`.`status` = $status + `group_page`.`status` = :status ORDER BY `group_page`.`name` ASC LIMIT - $n, 20 + :n, 20 "); + + $q->bindParam(':status', $status); + $q->bindParam(':n', $n); + $q->execute(); + return $q; } function search20GroupsFromNByStatus($n, $keyword, $status) { @@ -80,8 +93,8 @@ function search20GroupsFromNByStatus($n, $keyword, $status) { return $q; } -function searchSomeGroupsByStatus($db, $n, $m, $keyword, $status) { - $q = $db->prepare(" +function searchSomeGroupsByStatus($n, $m, $keyword, $status) { + $q = $GLOBALS['db']->prepare(" SELECT `groupID`, `name`, @@ -108,8 +121,8 @@ function searchSomeGroupsByStatus($db, $n, $m, $keyword, $status) { return $q; } -function countSomeGroupsByStatus($db, $keyword, $status) { - $q = $db->prepare(" +function countSomeGroupsByStatus($keyword, $status) { + $q = $GLOBALS['db']->prepare(" SELECT COUNT(*) FROM @@ -141,11 +154,9 @@ function changeGroupStatusByID($id, $status) { return $q; } -<<<<<<< HEAD - -function changeMultipleGroupStatusByID($db, $ids, $status) { - $q = $db->prepare(" +function changeMultipleGroupStatusByID($ids, $status) { + $q = $GLOBALS['db']->prepare(" UPDATE `group_page` SET @@ -163,5 +174,3 @@ function changeMultipleGroupStatusByID($db, $ids, $status) { ?> -======= ->>>>>>> master diff --git a/website/queries/user.php b/website/queries/user.php index 71cef11..719a40f 100644 --- a/website/queries/user.php +++ b/website/queries/user.php @@ -87,7 +87,7 @@ function selectAllUserPosts($userID) { } function select20UsersFromN($n) { - return $GLOBALS["db"]->query(" + $q = $GLOBALS["db"]->prepare(" SELECT `userID`, `username`, @@ -99,8 +99,12 @@ function select20UsersFromN($n) { `role`, `username` LIMIT - $n, 20 + :n, 20 "); + + $q->bindParam(':n', $n); + $q->execute(); + return $q; } function search20UsersFromN($n, $keyword) { @@ -155,8 +159,8 @@ function search20UsersFromNByStatus($n, $keyword, $status) { return $q; } -function searchSomeUsersByStatus($db, $n, $m, $keyword, $status) { - $q = $db->prepare(" +function searchSomeUsersByStatus($n, $m, $keyword, $status) { + $q = $GLOBALS["db"]->prepare(" SELECT `userID`, `username`, @@ -184,8 +188,8 @@ function searchSomeUsersByStatus($db, $n, $m, $keyword, $status) { return $q; } -function countSomeUsersByStatus($db, $keyword, $status) { - $q = $db->prepare(" +function countSomeUsersByStatus($keyword, $status) { + $q = $GLOBALS["db"]->prepare(" SELECT COUNT(*) FROM @@ -208,20 +212,23 @@ function countSomeUsersByStatus($db, $keyword, $status) { function changeUserStatusByID($id, $status) { - $q = $GLOBALS["db"]->query(" + $q = $GLOBALS["db"]->prepare(" UPDATE `user` SET - `role` = $status + `role` = :status WHERE - `userID` = $id + `userID` = :id "); + $q->bindParam(':status', $status); + $q->bindParam(':id', $id); + $q->execute(); return $q; } -function changeMultipleUserStatusByID($db, $ids, $status) { - $q = $db->prepare(" +function changeMultipleUserStatusByID($ids, $status) { + $q = $GLOBALS["db"]->prepare(" UPDATE `user` SET diff --git a/website/views/adminpanel.php b/website/views/adminpanel.php index 52681a4..af23dae 100644 --- a/website/views/adminpanel.php +++ b/website/views/adminpanel.php @@ -84,19 +84,19 @@ if (isset($_GET["groupstatus"])) { if ($_SERVER["REQUEST_METHOD"] == "POST") { if (isset($_POST["actions"]) && isset($_POST["userID"])) { - changeUserStatusByID($db, $_POST["userID"], $_POST["actions"]); + changeUserStatusByID($_POST["userID"], $_POST["actions"]); } if (isset($_POST["actions"]) && isset($_POST["groupID"])) { - changeGroupStatusByID($db, $_POST["groupID"], $_POST["actions"]); + changeGroupStatusByID($_POST["groupID"], $_POST["actions"]); } if (isset($_POST["batchactions"]) && isset($_POST["checkbox-user"])) { - changeMultipleUserStatusByID($db, $_POST["checkbox-user"], $_POST["batchactions"]); + changeMultipleUserStatusByID($_POST["checkbox-user"], $_POST["batchactions"]); } if (isset($_POST["groupbatchactions"]) && isset($_POST["checkbox-group"])) { - changeMultipleGroupStatusByID($db, $_POST["checkbox-group"], $_POST["groupbatchactions"]); + changeMultipleGroupStatusByID($_POST["checkbox-group"], $_POST["groupbatchactions"]); } if (isset($_POST["pageselect"])) { @@ -226,9 +226,9 @@ function test_input($data) {
    fetchColumn(); $mincount = min($listm, $countresults); @@ -277,7 +277,7 @@ function test_input($data) { $listm = $currentpage * $perpage; if ($pagetype == 'user') { - $q = searchSomeUsersByStatus($db, $listn, $listm, $search, $status); + $q = searchSomeUsersByStatus($listn, $listm, $search, $status); while($user = $q->fetch(PDO::FETCH_ASSOC)) { $userID = $user['userID']; @@ -316,7 +316,7 @@ function test_input($data) { "); } } else { - $q = searchSomeGroupsByStatus($db, $listn, $listm, $search, $groupstatus); + $q = searchSomeGroupsByStatus($listn, $listm, $search, $groupstatus); while ($group = $q->fetch(PDO::FETCH_ASSOC)) { $groupID = $group['groupID']; -- 2.49.1 From bfdf9e989b2a724f505975d9ab79ccef106e937d Mon Sep 17 00:00:00 2001 From: "K. Nobel" Date: Fri, 20 Jan 2017 13:07:47 +0100 Subject: [PATCH 111/351] Fixed profile page, now shows current user when no username is given in get variable. --- website/public/profile.php | 61 ++++++------------------------------ website/queries/nicetime.php | 39 +++++++++++++++++++++++ 2 files changed, 49 insertions(+), 51 deletions(-) create mode 100644 website/queries/nicetime.php diff --git a/website/public/profile.php b/website/public/profile.php index f3f499b..0fe2feb 100644 --- a/website/public/profile.php +++ b/website/public/profile.php @@ -1,45 +1,16 @@ + + + + + + + $unix_date) { - $difference = $now - $unix_date; - $tense = "geleden"; - } else { - $difference = $unix_date - $now; - $tense = "vanaf nu"; - } - - for($i = 0; $difference >= $lengths[$i] && $i < count($lengths) - 1; $i++) { - $difference /= $lengths[$i]; - } - - $difference = round($difference); - - if($difference != 1) { - $period = $multiple_periods[$i]; - } else { - $period = $single_periods[$i]; - } - - return "$difference $period $tense"; -} +include("../queries/nicetime.php"); if(empty($_GET["username"])) { $userID = $_SESSION["userID"]; @@ -52,18 +23,6 @@ $profile_friends = selectAllFriends($userID); $profile_groups = selectAllUserGroups($userID); $posts = selectAllUserPosts($userID); -?> - - - - - - - - - $unix_date) { +$difference = $now - $unix_date; +$tense = "geleden"; +} else { +$difference = $unix_date - $now; +$tense = "vanaf nu"; +} + +for($i = 0; $difference >= $lengths[$i] && $i < count($lengths) - 1; $i++) { +$difference /= $lengths[$i]; +} + +$difference = round($difference); + +if($difference != 1) { +$period = $multiple_periods[$i]; +} else { +$period = $single_periods[$i]; +} + +return "$difference $period $tense"; +} \ No newline at end of file -- 2.49.1 From 6418b2b679fdaee5f70da8dddf6321989ea5ea5d Mon Sep 17 00:00:00 2001 From: Hendrik Date: Fri, 20 Jan 2017 13:14:28 +0100 Subject: [PATCH 112/351] move js to /js --- website/public/js/admin.js | 44 +++++++++++++++++++++++++++++++ website/views/adminpanel.php | 50 ++---------------------------------- 2 files changed, 46 insertions(+), 48 deletions(-) create mode 100644 website/public/js/admin.js diff --git a/website/public/js/admin.js b/website/public/js/admin.js new file mode 100644 index 0000000..2055123 --- /dev/null +++ b/website/public/js/admin.js @@ -0,0 +1,44 @@ +window.onload = function() { + changeFilter(); +}; + +function checkAll(allbox) { + var checkboxes = document.getElementsByClassName('checkbox-list'); + + for (var i = 0; i < checkboxes.length; i++) { + if (checkboxes[i].type == 'checkbox') { + checkboxes[i].checked = allbox.checked; + } + } +} + +function checkCheckAll(allbox) { + var checkboxes = document.getElementsByClassName('checkbox-list'); + var checked = true; + + for (var i = 0; i < checkboxes.length; i++) { + if (checkboxes[i].type == 'checkbox') { + if (checkboxes[i].checked == false) { + checked = false; + break; + } + } + } + allbox.checked = checked; +} + +function changeFilter() { + if (document.getElementById('group').checked) { + document.getElementById('admin-filter').style.display = 'none'; + document.getElementById('admin-groupfilter').style.display = 'inline-block'; + + document.getElementById('admin-batchactions').style.display = 'none'; + document.getElementById('admin-groupbatchactions').style.display = 'inline-block'; + } else { + document.getElementById('admin-filter').style.display = 'inline-block'; + document.getElementById('admin-groupfilter').style.display = 'none'; + + document.getElementById('admin-batchactions').style.display = 'inline-block'; + document.getElementById('admin-groupbatchactions').style.display = 'none'; + } +} diff --git a/website/views/adminpanel.php b/website/views/adminpanel.php index af23dae..fde8237 100644 --- a/website/views/adminpanel.php +++ b/website/views/adminpanel.php @@ -3,53 +3,7 @@ Admin Panel - + fetchColumn(); $mincount = min($listm, $countresults); -- 2.49.1 From 61c148e127bade2b031d75264504a84754b70200 Mon Sep 17 00:00:00 2001 From: Lars van Hijfte Date: Fri, 20 Jan 2017 13:30:40 +0100 Subject: [PATCH 113/351] Made chat xss prove --- website/public/API/loadMessages.php | 7 +++---- website/public/API/sendMessage.php | 15 +++++++-------- website/public/js/chat.js | 6 +----- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/website/public/API/loadMessages.php b/website/public/API/loadMessages.php index fef9db7..1c6b942 100644 --- a/website/public/API/loadMessages.php +++ b/website/public/API/loadMessages.php @@ -3,11 +3,10 @@ session_start(); require_once("../../queries/connect.php"); require_once("../../queries/private_message.php"); +require_once("../../queries/checkInput.php"); if (isset($_POST["lastID"]) && $_POST["lastID"] != "") { - - echo getNewChatMessages($_POST["lastID"], $_POST["destination"]); - + echo getNewChatMessages(test_input($_POST["lastID"]), test_input($_POST["destination"])); } else { - echo getOldChatMessages($_POST["destination"]); + echo getOldChatMessages(test_input($_POST["destination"])); } \ No newline at end of file diff --git a/website/public/API/sendMessage.php b/website/public/API/sendMessage.php index d1bc758..c5d47d1 100644 --- a/website/public/API/sendMessage.php +++ b/website/public/API/sendMessage.php @@ -3,16 +3,15 @@ session_start(); require_once("../../queries/connect.php"); require_once("../../queries/private_message.php"); +require_once("../../queries/checkInput.php"); -if (isset($_POST["destination"]) && - isset($_POST["content"])) { - - if (sendMessage($_POST["destination"], $_POST["content"])) { - echo $_POST["content"] . " is naar " . $_POST["destination"] . " gestuurd"; +if (!empty(test_input($_POST["destination"])) && + !empty(test_input($_POST["content"]))) { + if (sendMessage(test_input($_POST["destination"]), test_input($_POST["content"]))) { + echo 1; } else { - echo "YOU FAILED!!!"; + echo 0; } - } else { - echo "maybe dont try to hax the system?"; + echo 0; } \ No newline at end of file diff --git a/website/public/js/chat.js b/website/public/js/chat.js index 75eb32e..6c420a1 100644 --- a/website/public/js/chat.js +++ b/website/public/js/chat.js @@ -10,7 +10,6 @@ function loadMessages() { $("#lastIDForm").serialize() ).done(function(data) { if (data && data != "[]") { - console.log(data); messages = JSON.parse(data); addMessages(messages); $("#lastID").val(messages[messages.length - 1].messageID); @@ -23,13 +22,10 @@ function loadMessages() { function sendMessage() { - console.log($("#sendMessageForm").serialize()); $.post( "API/sendMessage.php", $("#sendMessageForm").serialize() - ).done(function( data ) { - console.log(data); - }); + ); $("#newContent").val(""); } -- 2.49.1 From b7620fe4dbe3cdaf595eb71087b485e4bbeaf81e Mon Sep 17 00:00:00 2001 From: "K. Nobel" Date: Fri, 20 Jan 2017 14:05:20 +0100 Subject: [PATCH 114/351] Moved .htaccess --- website/.htaccess | 14 -------------- website/public/.htaccess | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 14 deletions(-) delete mode 100644 website/.htaccess create mode 100644 website/public/.htaccess diff --git a/website/.htaccess b/website/.htaccess deleted file mode 100644 index 5c0147b..0000000 --- a/website/.htaccess +++ /dev/null @@ -1,14 +0,0 @@ -Options +FollowSymLinks -RewriteEngine On - -ErrorDocument 404 /error404.jpg - -RewriteCond %{SCRIPT_FILENAME} !-d -RewriteCond %{SCRIPT_FILENAME} !-f - -# Resolve .php file for extensionless php urls -RewriteRule ^([^/.]+)$ $1.php [L] - -RewriteRule ^([^/.]+)\/$ $1.php [L] - -RewriteRule ^profile/([A-z0-9]+)\/?$ profile.php?username=$1 [NC] \ No newline at end of file diff --git a/website/public/.htaccess b/website/public/.htaccess new file mode 100644 index 0000000..69fda24 --- /dev/null +++ b/website/public/.htaccess @@ -0,0 +1,14 @@ +#Options +FollowSymLinks +#RewriteEngine On +# +#ErrorDocument 404 /error404.jpg +# +#RewriteCond %{SCRIPT_FILENAME} !-d +#RewriteCond %{SCRIPT_FILENAME} !-f +# +## Resolve .php file for extensionless php urls +#RewriteRule ^([^/.]+)$ $1.php [L] +# +#RewriteRule ^([^/.]+)\/$ $1.php [L] +# +#RewriteRule ^profile/([A-z0-9]+)\/?$ profile.php?username=$1 [NC] \ No newline at end of file -- 2.49.1 From f9c55323ad54047ab80381499fef430b3f49fd8b Mon Sep 17 00:00:00 2001 From: "K. Nobel" Date: Fri, 20 Jan 2017 14:09:04 +0100 Subject: [PATCH 115/351] Made friends and groups clickable. --- website/views/profile.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/views/profile.php b/website/views/profile.php index 6c273a6..47b880d 100644 --- a/website/views/profile.php +++ b/website/views/profile.php @@ -13,7 +13,7 @@

    fetch()) { - echo "${friend["username"]}"; + echo "${friend["username"]}"; } @@ -29,7 +29,7 @@

    fetch()) { - echo "${group["name"]}s logo"; + echo "${group["name"]}s logo"; } if($groups->rowCount() === 0) { -- 2.49.1 From 0e5f7dc9fb4e7581bef3d1f85ef1231ad9ad71c0 Mon Sep 17 00:00:00 2001 From: "K. Nobel" Date: Fri, 20 Jan 2017 14:10:32 +0100 Subject: [PATCH 116/351] Fixed no friends text and no groups text. --- website/views/profile.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/views/profile.php b/website/views/profile.php index 47b880d..83ac799 100644 --- a/website/views/profile.php +++ b/website/views/profile.php @@ -17,7 +17,7 @@ } - if($friends->rowCount() === 0) { + if($profile_friends->rowCount() === 0) { echo "

    Deze gebruiker heeft nog geen vrienden gemaakt.

    "; } ?> @@ -32,7 +32,7 @@ echo "${group["name"]}s logo"; } - if($groups->rowCount() === 0) { + if($profile_groups->rowCount() === 0) { echo "

    Deze gebruiker is nog geen lid van een groep.

    "; } ?> -- 2.49.1 From adb7f2f37db78f7099b3fedbcfe48d783c9c91a7 Mon Sep 17 00:00:00 2001 From: "K. Nobel" Date: Fri, 20 Jan 2017 14:31:49 +0100 Subject: [PATCH 117/351] Fixed .htaccess --- website/public/.htaccess | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/website/public/.htaccess b/website/public/.htaccess index 69fda24..5c0147b 100644 --- a/website/public/.htaccess +++ b/website/public/.htaccess @@ -1,14 +1,14 @@ -#Options +FollowSymLinks -#RewriteEngine On -# -#ErrorDocument 404 /error404.jpg -# -#RewriteCond %{SCRIPT_FILENAME} !-d -#RewriteCond %{SCRIPT_FILENAME} !-f -# -## Resolve .php file for extensionless php urls -#RewriteRule ^([^/.]+)$ $1.php [L] -# -#RewriteRule ^([^/.]+)\/$ $1.php [L] -# -#RewriteRule ^profile/([A-z0-9]+)\/?$ profile.php?username=$1 [NC] \ No newline at end of file +Options +FollowSymLinks +RewriteEngine On + +ErrorDocument 404 /error404.jpg + +RewriteCond %{SCRIPT_FILENAME} !-d +RewriteCond %{SCRIPT_FILENAME} !-f + +# Resolve .php file for extensionless php urls +RewriteRule ^([^/.]+)$ $1.php [L] + +RewriteRule ^([^/.]+)\/$ $1.php [L] + +RewriteRule ^profile/([A-z0-9]+)\/?$ profile.php?username=$1 [NC] \ No newline at end of file -- 2.49.1 From 6478ce920f56a1fe1b004b99ef253cdc6fe10a1e Mon Sep 17 00:00:00 2001 From: "K. Nobel" Date: Fri, 20 Jan 2017 14:40:21 +0100 Subject: [PATCH 118/351] Fixed .htaccess --- website/public/.htaccess | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/website/public/.htaccess b/website/public/.htaccess index 5c0147b..f08898a 100644 --- a/website/public/.htaccess +++ b/website/public/.htaccess @@ -9,6 +9,4 @@ RewriteCond %{SCRIPT_FILENAME} !-f # Resolve .php file for extensionless php urls RewriteRule ^([^/.]+)$ $1.php [L] -RewriteRule ^([^/.]+)\/$ $1.php [L] - -RewriteRule ^profile/([A-z0-9]+)\/?$ profile.php?username=$1 [NC] \ No newline at end of file +RewriteRule ^profile/([A-z0-9]+)$ profile.php?username=$1 [NC] \ No newline at end of file -- 2.49.1 From 42188609363a214a33a7df8a5bbd8c91a3e6334a Mon Sep 17 00:00:00 2001 From: Hendrik Date: Fri, 20 Jan 2017 14:43:04 +0100 Subject: [PATCH 119/351] remove testinput --- website/views/adminpanel.php | 6 ------ 1 file changed, 6 deletions(-) diff --git a/website/views/adminpanel.php b/website/views/adminpanel.php index fde8237..116512c 100644 --- a/website/views/adminpanel.php +++ b/website/views/adminpanel.php @@ -62,12 +62,6 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { $listn = ($currentpage-1) * $perpage; $listm = $currentpage * $perpage; -function test_input($data) { - $data = trim($data); - $data = stripslashes($data); - $data = htmlspecialchars($data); - return $data; -} ?>
    -- 2.49.1 From ca28724274047a90649944303022a2d503cd45f7 Mon Sep 17 00:00:00 2001 From: "K. Nobel" Date: Fri, 20 Jan 2017 14:48:00 +0100 Subject: [PATCH 120/351] Fixed script tags and @import. Has to be absolute path in order to work with the .htaccess file. --- website/public/profile.php | 3 ++- website/views/head.php | 17 ++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/website/public/profile.php b/website/public/profile.php index 0fe2feb..6ede201 100644 --- a/website/public/profile.php +++ b/website/public/profile.php @@ -2,8 +2,9 @@ + diff --git a/website/views/head.php b/website/views/head.php index bb6eec4..4347650 100644 --- a/website/views/head.php +++ b/website/views/head.php @@ -1,17 +1,16 @@ MyHyvesbook+ - - - - + + + Date: Fri, 20 Jan 2017 14:55:47 +0100 Subject: [PATCH 121/351] Alpha 0.0.1 profile picture upload shizzle! --- website/public/settings.php | 3 ++- website/queries/settings.php | 28 +++++++++++++++++++++++++--- website/views/settings-view.php | 3 ++- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/website/public/settings.php b/website/public/settings.php index 45e50d8..d52608b 100644 --- a/website/public/settings.php +++ b/website/public/settings.php @@ -22,12 +22,13 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { $result = updateSettings(); break; case "password": - $result = updatePassword(); + $result = changePassword(); break; case "email": $result = changeEmail(); break; case "picture": + updateProfilePicture(); $result = $notImplemented; break; } diff --git a/website/queries/settings.php b/website/queries/settings.php index 7c92583..b85cae8 100644 --- a/website/queries/settings.php +++ b/website/queries/settings.php @@ -99,11 +99,11 @@ function updateSettings() { return new settingsMessage("happy", "Instellingen zijn opgeslagen."); } -function updatePassword() { +function changePassword() { $user = getPasswordHash(); if (password_verify($_POST["password-old"], $user["password"])) { if ($_POST["password-new"] == $_POST["password-confirm"] && (strlen($_POST["password-new"]) >= 8)) { - if (changePassword()) { + if (doChangePassword()) { return new settingsMessage("happy", "Wachtwoord gewijzigd."); } else { return new settingsMessage("angry", "Er is iets mis gegaan."); @@ -116,7 +116,7 @@ function updatePassword() { } } -function changePassword() { +function doChangePassword() { $stmt = $GLOBALS["db"]->prepare(" UPDATE `user` @@ -184,4 +184,26 @@ function doChangeEmail($email) { $stmt->bindParam(":userID", $_SESSION["userID"]); $stmt->execute(); return $stmt->rowCount(); +} + +function updateProfilePicture() { + $profilePictureDir = "/var/www/html/public/"; + $relativePath = "uploads/" . $_SESSION["userID"] . "_" . basename($_FILES["pp"]["name"]); + move_uploaded_file($_FILES['pp']['tmp_name'], $profilePictureDir . $relativePath); + setProfilePictureToDatabase("../" . $relativePath); +} + +function setProfilePictureToDatabase($url) { + $stmt = $GLOBALS["db"]->prepare(" + UPDATE + `user` + SET + `profilepicture` = :profilepicture + WHERE + `userID` = :userID + "); + + $stmt->bindParam(":profilepicture", $url); + $stmt->bindParam(":userID", $_SESSION["userID"]); + $stmt->execute(); } \ No newline at end of file diff --git a/website/views/settings-view.php b/website/views/settings-view.php index 6d9d660..f6c4e07 100644 --- a/website/views/settings-view.php +++ b/website/views/settings-view.php @@ -1,5 +1,6 @@
    @@ -68,7 +69,7 @@ $settings = getSettings();
  • -
    +
    Verander profielfoto
    • -- 2.49.1 From e547712b2a6020aaee8cb59ee4795287f82dfa74 Mon Sep 17 00:00:00 2001 From: "K. Nobel" Date: Fri, 20 Jan 2017 15:02:05 +0100 Subject: [PATCH 122/351] Changed links to absolute path. --- website/views/adminpanel.php | 2 +- website/views/header.php | 12 ++++++------ website/views/login-view.php | 4 ++-- website/views/login_head.php | 6 +++--- website/views/menu.php | 2 +- website/views/profile.php | 2 +- website/views/register-view.php | 2 +- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/website/views/adminpanel.php b/website/views/adminpanel.php index fde8237..e8efe6f 100644 --- a/website/views/adminpanel.php +++ b/website/views/adminpanel.php @@ -3,7 +3,7 @@ Admin Panel - +
      diff --git a/website/views/login-view.php b/website/views/login-view.php index 33fa7e9..7a023f0 100644 --- a/website/views/login-view.php +++ b/website/views/login-view.php @@ -1,6 +1,6 @@
      MyHyvesbook+
      diff --git a/website/views/login_head.php b/website/views/login_head.php index a41e87e..645f919 100644 --- a/website/views/login_head.php +++ b/website/views/login_head.php @@ -3,9 +3,9 @@ MyHyvesbook+ + href="/styles/main.css"> - + href="/styles/index.css"> + diff --git a/website/views/menu.php b/website/views/menu.php index 88ae076..c6b030a 100644 --- a/website/views/menu.php +++ b/website/views/menu.php @@ -51,7 +51,7 @@ echo "
    • -
      +
    - -
    -- 2.49.1 From e7d63c2f572a79d6a2250e2f3ae23a57f6e370fc Mon Sep 17 00:00:00 2001 From: "K. Nobel" Date: Fri, 20 Jan 2017 15:34:01 +0100 Subject: [PATCH 124/351] Changed how name is displayed on profile page. --- website/public/styles/profile.css | 23 ++++------------------- website/views/profile.php | 7 ++++--- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/website/public/styles/profile.css b/website/public/styles/profile.css index af1ed58..7437e4c 100644 --- a/website/public/styles/profile.css +++ b/website/public/styles/profile.css @@ -10,9 +10,12 @@ margin: 0 20px 20px 0; } -.profile-box .profile-username { +.profile-box h1.profile-username { padding-top: 50px; } +.profile-box h5.profile-username { + padding-top: 0; +} div.posts { padding-top: 20px; @@ -37,24 +40,6 @@ div.posts .post p.subscript { font-size: 8pt; } -/*.posts {*/ - /*z-index: -1;*/ - /*margin-right: 0;*/ - /*width: calc(100% + 15px);*/ -/*}*/ - -/*.post-box {*/ - /*display: inline-flex;*/ - /*margin: 20px 15px 0 0;*/ - /*padding: 25px;*/ - /*background-color: #FFFFFF;*/ -/*}*/ - -/*!* fullscreen *!*/ -/*.post-box {*/ - /*width: calc(25% - 69px);*/ -/*}*/ - @media only screen and (max-width: 1500px) { .post-box { width: calc(50% - 68px); diff --git a/website/views/profile.php b/website/views/profile.php index f8cdadd..1457dee 100644 --- a/website/views/profile.php +++ b/website/views/profile.php @@ -4,7 +4,8 @@

    Als vriend toevoegen

    -

    ()

    +

    +

    @@ -13,7 +14,7 @@

    fetch()) { - echo "${friend["username"]}"; + echo "${friend["username"]}"; } @@ -29,7 +30,7 @@

    fetch()) { - echo "${group["name"]}s logo"; + echo "${group["name"]}s logo"; } if($profile_groups->rowCount() === 0) { -- 2.49.1 From 587d0e6ac351787fe1d944b06c6a05b42e1952f1 Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Fri, 20 Jan 2017 15:41:13 +0100 Subject: [PATCH 125/351] fixed crosssitescripting on settings pagw --- website/queries/settings.php | 8 ++++---- website/views/settings-view.php | 1 - 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/website/queries/settings.php b/website/queries/settings.php index b85cae8..7d3bf9c 100644 --- a/website/queries/settings.php +++ b/website/queries/settings.php @@ -87,11 +87,11 @@ function updateSettings() { `userID` = :userID "); - $stmt->bindParam(":fname", $_POST["fname"]); - $stmt->bindParam(":lname", $_POST["lname"]); - $stmt->bindParam(":location", $_POST["location"]); + $stmt->bindParam(":fname", test_input($_POST["fname"])); + $stmt->bindParam(":lname", test_input($_POST["lname"])); + $stmt->bindParam(":location", test_input($_POST["location"])); $stmt->bindParam(":bday", $_POST["bday"]); - $stmt->bindParam(":bio", $_POST["bio"]); + $stmt->bindParam(":bio", test_input($_POST["bio"])); $stmt->bindParam(":userID", $_SESSION["userID"]); $stmt->execute(); diff --git a/website/views/settings-view.php b/website/views/settings-view.php index f6c4e07..1fa5278 100644 --- a/website/views/settings-view.php +++ b/website/views/settings-view.php @@ -1,6 +1,5 @@

    -- 2.49.1 From e17a55e82dff94723917a2393698892134aab18e Mon Sep 17 00:00:00 2001 From: Joey Lai Date: Fri, 20 Jan 2017 16:01:08 +0100 Subject: [PATCH 126/351] Fixed redirect to profile page after going back 1 page --- website/public/js/registerAndLogin.js | 8 ++++++++ website/public/login.php | 13 +------------ website/public/register.php | 6 ++++-- website/views/login_head.php | 1 + 4 files changed, 14 insertions(+), 14 deletions(-) create mode 100644 website/public/js/registerAndLogin.js diff --git a/website/public/js/registerAndLogin.js b/website/public/js/registerAndLogin.js new file mode 100644 index 0000000..8428440 --- /dev/null +++ b/website/public/js/registerAndLogin.js @@ -0,0 +1,8 @@ +function checkLoggedIn() { + if (confirm("You are already logged in!\nDo you want to logout?\nPress ok to logout.") == true) { + window.location.href = "logout.php"; + } else { + window.history.back(); + } + document.getElementById("demo").innerHTML = x; +} diff --git a/website/public/login.php b/website/public/login.php index b3da203..0d07413 100644 --- a/website/public/login.php +++ b/website/public/login.php @@ -4,20 +4,9 @@ include("../views/login_head.php"); require_once("../queries/connect.php"); include_once("../queries/login.php"); - include_once("../queries/checkInput.php") + include_once("../queries/checkInput.php"); ?> - - + -- 2.49.1 From 6ff70440e67ad96ef71867ef26ca1a1f3f90135c Mon Sep 17 00:00:00 2001 From: Joey Lai Date: Fri, 20 Jan 2017 16:14:32 +0100 Subject: [PATCH 127/351] history back -> profile.php --- website/public/js/registerAndLogin.js | 2 +- website/public/register.php | 2 +- website/views/login_head.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/website/public/js/registerAndLogin.js b/website/public/js/registerAndLogin.js index 8428440..0452d15 100644 --- a/website/public/js/registerAndLogin.js +++ b/website/public/js/registerAndLogin.js @@ -2,7 +2,7 @@ function checkLoggedIn() { if (confirm("You are already logged in!\nDo you want to logout?\nPress ok to logout.") == true) { window.location.href = "logout.php"; } else { - window.history.back(); + window.location.href = "profile.php"; } document.getElementById("demo").innerHTML = x; } diff --git a/website/public/register.php b/website/public/register.php index ec1f879..8c0f8e4 100644 --- a/website/public/register.php +++ b/website/public/register.php @@ -29,7 +29,7 @@ } else { $bday = test_input($_POST["bday"]); } -g + checkInputChoice("username", "username"); checkInputChoice("password", "longerEight"); checkInputChoice("confirmpassword", ""); diff --git a/website/views/login_head.php b/website/views/login_head.php index 7f1771a..05c9e38 100644 --- a/website/views/login_head.php +++ b/website/views/login_head.php @@ -7,6 +7,6 @@ - + -- 2.49.1 From 173ef3e50c2feceb27e715fddbfc33aac08ff5db Mon Sep 17 00:00:00 2001 From: Lars van Hijfte Date: Fri, 20 Jan 2017 16:17:56 +0100 Subject: [PATCH 128/351] Added a notification bar --- website/public/js/header.js | 24 ++++++++++++++++++++++-- website/public/styles/header.css | 22 +--------------------- website/public/styles/menu.css | 17 +++++++++++++++++ website/queries/friendship.php | 3 ++- website/views/header.php | 9 +++------ website/views/notification-center.php | 11 +++++++++++ 6 files changed, 56 insertions(+), 30 deletions(-) create mode 100644 website/views/notification-center.php diff --git a/website/public/js/header.js b/website/public/js/header.js index 797c56c..ceb6086 100644 --- a/website/public/js/header.js +++ b/website/public/js/header.js @@ -1,7 +1,27 @@ $(document).ready(function() { + // Hide notification center. $("#profile-menu-popup").hide(); + + // $("#own-profile-picture").click(function() { + // $("#profile-menu-popup").toggle(); + // $("#profile-hello-popup").toggle(); + // }); + $("#own-profile-picture").click(function() { - $("#profile-menu-popup").toggle(); - $("#profile-hello-popup").toggle(); + if($("#notification-center").css('right') == "-256px") { + // $(".content").animate({ + // marginRight: "256px" + // }, 500); + $("#notification-center").animate({ + right: "0px" + }, 500); + } else { + // $(".content").animate({ + // marginRight: "0px" + // }, 500); + $("#notification-center").animate({ + right: "-256px" + }, 500); + } }); }); diff --git a/website/public/styles/header.css b/website/public/styles/header.css index 84f308c..ddefdec 100644 --- a/website/public/styles/header.css +++ b/website/public/styles/header.css @@ -33,32 +33,12 @@ header { header div { display: inline-block; } - -#open-chat { - font-size: 32px; - line-height: 80px; - margin-right: 50px; -} - -.profile-menu { - font-size: 21px; -} - .profile-menu img { padding: 8px; height: 64px; width: 64px; } -#own-profile-picture, #profile-menu-popup span { +#own-profile-picture { cursor: pointer; } - -#profile-menu-popup { - padding: 5px; - - background: white; - color: #666; - - border-radius: 3px; -} diff --git a/website/public/styles/menu.css b/website/public/styles/menu.css index 4d4b8bb..b9e3904 100644 --- a/website/public/styles/menu.css +++ b/website/public/styles/menu.css @@ -42,4 +42,21 @@ height: 100%; padding: 0; text-align: left; +} + +#notification-center { + left: auto; + width: 256px; + right: -256px; +} + +#quick-links { + text-align: center; + box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); +} + +#quick-links i { + color: #845663; + font-size: 42px; + padding: 7px; } \ No newline at end of file diff --git a/website/queries/friendship.php b/website/queries/friendship.php index 258699f..df6a917 100644 --- a/website/queries/friendship.php +++ b/website/queries/friendship.php @@ -15,13 +15,14 @@ function selectAllFriends($userID) { `user` INNER JOIN `friendship` + WHERE (`friendship`.`user1ID` = :userID AND `friendship`.`user2ID` = `user`.`userID` OR `friendship`.`user2ID` = :userID AND `friendship`.`user1ID` = `user`.`userID`) AND `role` != 5 AND - `status` = 1 + `status` = 1 "); $stmt->bindParam(':userID', $userID, PDO::PARAM_INT); diff --git a/website/views/header.php b/website/views/header.php index a58e5f0..2d65291 100644 --- a/website/views/header.php +++ b/website/views/header.php @@ -19,11 +19,6 @@ $userinfo = getHeaderInfo();
    -
    - | - | - -
    Hallo @@ -32,5 +27,7 @@ $userinfo = getHeaderInfo();
    "/>
    -
    + + + diff --git a/website/views/notification-center.php b/website/views/notification-center.php new file mode 100644 index 0000000..f4b4b5d --- /dev/null +++ b/website/views/notification-center.php @@ -0,0 +1,11 @@ + \ No newline at end of file -- 2.49.1 From 9152ae4f75b17fd7903ba10624f54560f337a637 Mon Sep 17 00:00:00 2001 From: Hendrik Date: Fri, 20 Jan 2017 16:18:09 +0100 Subject: [PATCH 129/351] add searching users, searching groups, remembering search options --- website/public/search.php | 6 +- website/public/styles/search.css | 5 ++ website/queries/group_page.php | 23 +++++- website/queries/user.php | 35 ++++++++- website/views/search-view.php | 120 +++++++++++++++++++------------ 5 files changed, 137 insertions(+), 52 deletions(-) diff --git a/website/public/search.php b/website/public/search.php index c314791..6cfadd8 100644 --- a/website/public/search.php +++ b/website/public/search.php @@ -1,7 +1,11 @@ - + diff --git a/website/public/styles/search.css b/website/public/styles/search.css index 4b2281c..b54723d 100644 --- a/website/public/styles/search.css +++ b/website/public/styles/search.css @@ -9,4 +9,9 @@ #search-friends-output { margin-right: 10px; +} + +.searchleft, .searchright { + display: inline-block; + vertical-align: top; } \ No newline at end of file diff --git a/website/queries/group_page.php b/website/queries/group_page.php index ef7af07..d704e8c 100644 --- a/website/queries/group_page.php +++ b/website/queries/group_page.php @@ -172,5 +172,26 @@ function changeMultipleGroupStatusByID($ids, $status) { return $q; } +function searchSomeGroups($n, $m, $search) { + $stmt = $GLOBALS["db"]->prepare(" + SELECT + `name`, + `picture` + FROM + `group_page` + WHERE + `name` LIKE :keyword + ORDER BY + `name` + LIMIT + :n, :m + "); -?> + $search = "%$search%"; + $stmt->bindParam(':keyword', $search); + $stmt->bindParam(':n', $n, PDO::PARAM_INT); + $stmt->bindParam(':m', $m, PDO::PARAM_INT); + $stmt->execute(); + return $stmt; +} +?> \ No newline at end of file diff --git a/website/queries/user.php b/website/queries/user.php index 398e2e4..114d673 100644 --- a/website/queries/user.php +++ b/website/queries/user.php @@ -252,12 +252,12 @@ function selectRandomNotFriendUser($userID) { FROM `user` WHERE - `userID` NOT IN (SELECT + `userID` NOT IN (SELECT `user1ID` FROM `friendship` WHERE `user1ID` = :userID) OR - `userID` NOT IN (SELECT + `userID` NOT IN (SELECT `user2ID` FROM `friendship` @@ -271,4 +271,33 @@ function selectRandomNotFriendUser($userID) { $stmt->bindParam(':userID', $userID, PDO::PARAM_INT); $stmt->execute(); return $stmt->fetch(); -} \ No newline at end of file +} + +function searchSomeUsers($n, $m, $search) { + $stmt = $GLOBALS["db"]->prepare(" + SELECT + `username`, + `profilepicture`, + `fname`, + `lname` + FROM + `user` + WHERE + `username` LIKE :keyword OR + `fname` LIKE :keyword OR + `lname` LIKE :keyword + ORDER BY + `fname`, + `lname`, + `username` + LIMIT + :n, :m + "); + + $search = "%$search%"; + $stmt->bindParam(':keyword', $search); + $stmt->bindParam(':n', $n, PDO::PARAM_INT); + $stmt->bindParam(':m', $m, PDO::PARAM_INT); + $stmt->execute(); + return $stmt; +} diff --git a/website/views/search-view.php b/website/views/search-view.php index b1418d1..0d650d4 100644 --- a/website/views/search-view.php +++ b/website/views/search-view.php @@ -1,3 +1,16 @@ + +
    @@ -7,72 +20,85 @@ + value= + >
    -
    +

    Gebruikers

    -
    - \ No newline at end of file +
    -- 2.49.1 From 18185020c3b4a389d623042050a8edafe622dc6a Mon Sep 17 00:00:00 2001 From: "K. Nobel" Date: Fri, 20 Jan 2017 16:18:12 +0100 Subject: [PATCH 130/351] Added improvements to profile page. --- website/public/styles/profile.css | 21 +++++++++++++-------- website/views/profile.php | 12 ++++++++++++ 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/website/public/styles/profile.css b/website/public/styles/profile.css index 7437e4c..9c07242 100644 --- a/website/public/styles/profile.css +++ b/website/public/styles/profile.css @@ -40,6 +40,19 @@ div.posts .post p.subscript { font-size: 8pt; } +div.posts .post form input, div.posts .post form textarea { + width: calc(100% - 15px); +} + +div.posts .post form input[type="submit"] { + width: 100%; +} + +div.posts .post form textarea.newpost { + margin: 15px 0 15px 0; + height: 100px; +} + @media only screen and (max-width: 1500px) { .post-box { width: calc(50% - 68px); @@ -53,14 +66,6 @@ div.posts .post p.subscript { } } -.post { - width: 100%; -} - -.post img { - width: 100%; -} - .post .post-date { float: right; color: #aaaaaa; diff --git a/website/views/profile.php b/website/views/profile.php index 1457dee..19bd908 100644 --- a/website/views/profile.php +++ b/website/views/profile.php @@ -42,6 +42,18 @@
    +
    +
    + + + +
    +
    + fetch()) { $nicetime = nicetime($post["creationdate"]); echo " -- 2.49.1 From ac96200d1642a663c61545de841af182285d9981 Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Fri, 20 Jan 2017 16:20:34 +0100 Subject: [PATCH 131/351] Kind of works now: Profile update --- website/public/settings.php | 2 +- website/queries/settings.php | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/website/public/settings.php b/website/public/settings.php index d52608b..06d17c0 100644 --- a/website/public/settings.php +++ b/website/public/settings.php @@ -29,7 +29,7 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") { break; case "picture": updateProfilePicture(); - $result = $notImplemented; + $result = new settingsMessage("happy", "Deze melding doet nog niks nuttigs."); break; } } diff --git a/website/queries/settings.php b/website/queries/settings.php index 7d3bf9c..0e6dff2 100644 --- a/website/queries/settings.php +++ b/website/queries/settings.php @@ -188,22 +188,28 @@ function doChangeEmail($email) { function updateProfilePicture() { $profilePictureDir = "/var/www/html/public/"; - $relativePath = "uploads/" . $_SESSION["userID"] . "_" . basename($_FILES["pp"]["name"]); + $relativePath = "uploads/profilepictures/" . $_SESSION["userID"] . "_" . basename($_FILES["pp"]["name"]); +// removeOldProfilePicture(); move_uploaded_file($_FILES['pp']['tmp_name'], $profilePictureDir . $relativePath); setProfilePictureToDatabase("../" . $relativePath); } +//function removeOldProfilePicture() { +// +// unlink("/var/www/html/public/uploads/profilepictures/" . $_SESSION["userID"] . "_*"); +//} + function setProfilePictureToDatabase($url) { $stmt = $GLOBALS["db"]->prepare(" UPDATE `user` SET - `profilepicture` = :profilepicture + `profilepicture` = :profilePicture WHERE `userID` = :userID "); - $stmt->bindParam(":profilepicture", $url); + $stmt->bindParam(":profilePicture", $url); $stmt->bindParam(":userID", $_SESSION["userID"]); $stmt->execute(); } \ No newline at end of file -- 2.49.1 From 2a44057233f4abb86eec42c419e566adcb5e7d2d Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Sun, 22 Jan 2017 11:23:13 +0100 Subject: [PATCH 132/351] Changed binParam for bindValue --- website/queries/settings.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/website/queries/settings.php b/website/queries/settings.php index 0e6dff2..f4c7011 100644 --- a/website/queries/settings.php +++ b/website/queries/settings.php @@ -87,12 +87,12 @@ function updateSettings() { `userID` = :userID "); - $stmt->bindParam(":fname", test_input($_POST["fname"])); - $stmt->bindParam(":lname", test_input($_POST["lname"])); - $stmt->bindParam(":location", test_input($_POST["location"])); - $stmt->bindParam(":bday", $_POST["bday"]); - $stmt->bindParam(":bio", test_input($_POST["bio"])); - $stmt->bindParam(":userID", $_SESSION["userID"]); + $stmt->bindValue(":fname", test_input($_POST["fname"])); + $stmt->bindValue(":lname", test_input($_POST["lname"])); + $stmt->bindValue(":location", test_input($_POST["location"])); + $stmt->bindValue(":bday", $_POST["bday"]); + $stmt->bindValue(":bio", test_input($_POST["bio"])); + $stmt->bindValue(":userID", $_SESSION["userID"]); $stmt->execute(); -- 2.49.1 From 93b6835ea4400193d9a8fe98ecbafb7018ab4697 Mon Sep 17 00:00:00 2001 From: Lars van Hijfte Date: Mon, 23 Jan 2017 11:33:27 +0100 Subject: [PATCH 133/351] Changed style and added friendrequests --- website/public/API/loadMessages.php | 1 + website/public/API/loadNotifications.php | 8 +++ website/public/js/notifications.js | 34 ++++++++++++ website/public/profile.php | 2 +- website/public/styles/adminpanel.css | 4 +- website/public/styles/chat.css | 2 +- website/public/styles/header.css | 8 ++- website/public/styles/index.css | 2 +- website/public/styles/main.css | 71 +++++++++++++++++------- website/public/styles/menu.css | 12 +++- website/public/styles/profile.css | 16 +++++- website/queries/friendship.php | 33 ++++++++++- website/views/head.php | 17 +++--- website/views/header.php | 2 +- website/views/menu.php | 6 +- website/views/notification-center.php | 7 ++- 16 files changed, 178 insertions(+), 47 deletions(-) create mode 100644 website/public/API/loadNotifications.php create mode 100644 website/public/js/notifications.js diff --git a/website/public/API/loadMessages.php b/website/public/API/loadMessages.php index 1c6b942..e30acc8 100644 --- a/website/public/API/loadMessages.php +++ b/website/public/API/loadMessages.php @@ -1,6 +1,7 @@ \ +
    \ + \ +
    \ + \ + "); + } +} + +function loadNotifications() { + $.post( + "API/loadNotifications.php" + ).done(function(data) { + if (data && data != "[]") { + showNotifications(JSON.parse(data), "friendrequestslist"); + } + }); + + setTimeout(loadNotifications, 10000); +} + +loadNotifications(); + diff --git a/website/public/profile.php b/website/public/profile.php index 6ede201..e4f1452 100644 --- a/website/public/profile.php +++ b/website/public/profile.php @@ -4,7 +4,7 @@ diff --git a/website/public/styles/adminpanel.css b/website/public/styles/adminpanel.css index b226cd3..4c5356f 100644 --- a/website/public/styles/adminpanel.css +++ b/website/public/styles/adminpanel.css @@ -6,7 +6,7 @@ .admin-title { margin: 10px; padding-bottom: 5px; - border-bottom: 4px solid #845663; + border-bottom: 4px solid #FBC02D; } .admin-panel input[type="radio"], input[type="checkbox"] { @@ -18,7 +18,7 @@ padding: 8px; vertical-align: top; border-radius: 10px; - border: 4px solid #845663; + border: 4px solid #FBC02D; box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); } diff --git a/website/public/styles/chat.css b/website/public/styles/chat.css index e2fa7c9..f6060dd 100644 --- a/website/public/styles/chat.css +++ b/website/public/styles/chat.css @@ -83,7 +83,7 @@ .chat-field input[type="submit"] { width: auto; float: right; - background-color: #845663; + background-color: #FBC02D; color: white; padding: 5px 10px; border-radius: 0 10px 10px 0; diff --git a/website/public/styles/header.css b/website/public/styles/header.css index ddefdec..e39f204 100644 --- a/website/public/styles/header.css +++ b/website/public/styles/header.css @@ -8,21 +8,23 @@ header { width: 100%; color: white; - background-color: rgba(132,86,99, 0.98); + background-color: #FBC02D; box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); } +#header-logo { + padding-left: 42px; +} #header-logo, #header-logo img { height: 80px; vertical-align: middle; line-height: 80px; - padding-left: 5px; } #header-search { - padding-left: 48px; + padding-left: 42px; } diff --git a/website/public/styles/index.css b/website/public/styles/index.css index 4b55904..6c12823 100644 --- a/website/public/styles/index.css +++ b/website/public/styles/index.css @@ -19,7 +19,7 @@ body { background-size: cover; background-attachment: fixed;*/ - /*background-color: #B78996;*/ + /*background-color: #EEE;*/ color: #333; font-family: Arial, sans-serif; } diff --git a/website/public/styles/main.css b/website/public/styles/main.css index 014d05b..062d5d9 100644 --- a/website/public/styles/main.css +++ b/website/public/styles/main.css @@ -18,7 +18,7 @@ html { body { height: 100%; - background-color: #B78996; + background-color: #EEE; color: #333; font-family: Arial, sans-serif; } @@ -37,11 +37,12 @@ h3 { } h4 { - font-size: 1.6em; + font-size: 1.2em; } h5 { - font-size: 1.4em; + font-size: 1.0em; + color: #666; } ul { @@ -54,12 +55,12 @@ p { /* Selection colors */ ::selection { - background: #845663; + background: #FBC02D; color: white; } ::-moz-selection { - background: #845663; + background: #FBC02D; color: white; } @@ -75,7 +76,7 @@ p { .platform { padding: 20px; margin-bottom: 10px; - border-radius: 10px; + border-radius: 5px; background-color: #FFFFFF; box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); } @@ -143,7 +144,7 @@ button, input, select { cursor: pointer; border: none; font-size: 16px; - border-radius: 7px; + transition-duration: 250ms; } /* All textinput and sections */ @@ -151,19 +152,53 @@ textarea, input, select { padding: 0 5px; background: white; color: #333333; - border: 1px solid #845663; - border-radius: 7px; + border-radius: 5px; + border-bottom: 1px solid #4CAF50; font-size: 16px; + outline: none; + transition-duration: 250ms; +} + +textarea { + padding: 5px; + resize: none; +} + +textarea:hover, input:hover, select:hover { + border-radius: 10px; +} + +textarea:focus, input:focus, select:focus { + border-radius: 10px; + box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); } /* All buttons */ button, input[type="submit"], input[type="reset"] { - background-color: #845663; + background-color: #FBC02D; color: white; padding: 0 10px; border: none; + border-radius: 5px; +} + +button:focus, +input[type="submit"]:focus, +input[type="reset"]:focus { + outline: none; +} + +button:active, +input[type="submit"]:active, +input[type="reset"]:active { + outline: none; + box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24) +} + +input[type="radio"] { + border-radius: 100%; } /* Tables */ @@ -190,19 +225,17 @@ img[data-title]:hover:after, span[data-title]:hover:after, div[data-title]:hover:after { content: attr(data-title); - padding: 4px 4px; + padding: 7px 7px; color: #FFFFFF; position: absolute; left: 0; - top: 100%; - z-index: 20; + top: 150%; + z-index: 200; white-space: nowrap; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - border-radius: 5px; - -moz-box-shadow: 0 0 4px #222; - -webkit-box-shadow: 0 0 4px #222; - box-shadow: 0 0 4px #222; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); background-color: #333; font-size: 15px; line-height: normal; diff --git a/website/public/styles/menu.css b/website/public/styles/menu.css index b9e3904..69aa8a9 100644 --- a/website/public/styles/menu.css +++ b/website/public/styles/menu.css @@ -1,6 +1,7 @@ .menu { position: fixed; z-index: 50; + overflow-y: auto; left: 0; top: 80px; @@ -11,6 +12,10 @@ box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); } +.menu section { + box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); +} + .menu h4 { padding: 10px; } @@ -26,12 +31,13 @@ cursor: pointer; } -.friend-item { +.friend-item, .group-item { cursor: pointer; + transition-duration: 250ms; } .friend-item:hover, .group-item:hover { - background: #845663; + background: #FBC02D; color: white; } @@ -56,7 +62,7 @@ } #quick-links i { - color: #845663; + color: #4CAF50; font-size: 42px; padding: 7px; } \ No newline at end of file diff --git a/website/public/styles/profile.css b/website/public/styles/profile.css index 9c07242..f5dd6b1 100644 --- a/website/public/styles/profile.css +++ b/website/public/styles/profile.css @@ -14,7 +14,7 @@ padding-top: 50px; } .profile-box h5.profile-username { - padding-top: 0; + padding: 0 0 10px 0; } div.posts { @@ -28,6 +28,15 @@ div.posts div.post { margin: 20px 0 0 0; padding: 10px; width: calc(100% - 40px); + cursor: pointer; + transition-duration: 250ms; +} + +div.posts div.post:hover { + /*margin: 15px 0 0 -5px;*/ + /*padding: 15px;*/ + /*z-index: 20;*/ + box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23); } div.posts div.post img { @@ -76,11 +85,12 @@ div.posts .post form textarea.newpost { float: right; padding: 10px; border-radius: 5px; - background-color: #845663; + background-color: #4CAF50; color: #FFFFFF; transition-duration: 250ms; + cursor: pointer; } .profile-button:hover { - background-color: #B78996; + box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23); } \ No newline at end of file diff --git a/website/queries/friendship.php b/website/queries/friendship.php index df6a917..0deba63 100644 --- a/website/queries/friendship.php +++ b/website/queries/friendship.php @@ -22,11 +22,42 @@ function selectAllFriends($userID) { `friendship`.`user2ID` = :userID AND `friendship`.`user1ID` = `user`.`userID`) AND `role` != 5 AND - `status` = 1 + `status` = 1 "); $stmt->bindParam(':userID', $userID, PDO::PARAM_INT); $stmt->execute(); return $stmt; +} + +function selectAllFriendRequests() { + $stmt = $GLOBALS["db"]->prepare(" + SELECT + `userID`, + `username`, + IFNULL( + `profilepicture`, + '../img/notbad.jpg' + ) AS profilepicture, + `onlinestatus`, + `role` + FROM + `user` + INNER JOIN + `friendship` + + WHERE + (`friendship`.`user1ID` = :userID AND + `friendship`.`user2ID` = `user`.`userID` OR + `friendship`.`user2ID` = :userID AND + `friendship`.`user1ID` = `user`.`userID`) AND + `role` != 5 AND + `status` = 0 + "); + + $stmt->bindParam(':userID', $_SESSION["userID"], PDO::PARAM_INT); + $stmt->execute(); + + return json_encode($stmt->fetchAll()); } \ No newline at end of file diff --git a/website/views/head.php b/website/views/head.php index 4347650..044ac83 100644 --- a/website/views/head.php +++ b/website/views/head.php @@ -1,16 +1,17 @@ MyHyvesbook+ - - - + + + + MyHyvesbook+