Compare commits
22 Commits
hendrik-te
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
490d39ba47 | ||
|
|
1193078e8f | ||
|
|
bcb01e3296 | ||
|
|
7cc6450e6a | ||
|
|
4643dfcddb | ||
|
|
833bfd3292 | ||
|
|
1ac6a7da87 | ||
|
|
52ce787241 | ||
|
|
fb5f76c499 | ||
|
|
3aae884bb5 | ||
|
|
05d6bf8aa6 | ||
|
|
1e60941a3f | ||
|
|
e3f4fa0b3c | ||
|
|
1fd984cc02 | ||
|
|
16f83d93ce | ||
|
|
306fd3090f | ||
|
|
4eae09dfc7 | ||
|
|
53e1d7fef3 | ||
|
|
c29be662bc | ||
|
|
000d1f4072 | ||
|
|
d260bf04bc | ||
|
|
ba6f86e70e |
BIN
website/public/apple-touch-icon-114x114-precomposed.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
website/public/apple-touch-icon-120x120-precomposed.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
website/public/apple-touch-icon-144x144-precomposed.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
website/public/apple-touch-icon-152x152-precomposed.png
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
BIN
website/public/apple-touch-icon-180x180-precomposed.png
Normal file
|
After Width: | Height: | Size: 9.7 KiB |
BIN
website/public/apple-touch-icon-57x57-precomposed.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
website/public/apple-touch-icon-60x60-precomposed.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
website/public/apple-touch-icon-72x72-precomposed.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
website/public/apple-touch-icon-76x76-precomposed.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
website/public/apple-touch-icon-precomposed.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
12
website/public/browserconfig.xml
Executable file
@@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<browserconfig>
|
||||||
|
<msapplication>
|
||||||
|
<tile>
|
||||||
|
<square70x70logo src="tiny.png"/>
|
||||||
|
<square150x150logo src="square.jpg"/>
|
||||||
|
<wide310x150logo src="wide.jpg"/>
|
||||||
|
<square310x310logo src="large.jpg"/>
|
||||||
|
<TileColor>#000000</TileColor>
|
||||||
|
</tile>
|
||||||
|
</msapplication>
|
||||||
|
</browserconfig>
|
||||||
BIN
website/public/favicon-1.png
Normal file
|
After Width: | Height: | Size: 492 B |
BIN
website/public/favicon-2.png
Normal file
|
After Width: | Height: | Size: 782 B |
BIN
website/public/favicon-3.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
website/public/favicon-4.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
website/public/favicon.ico
Normal file
|
After Width: | Height: | Size: 97 KiB |
@@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
include_once("../queries/group_page.php");
|
include_once("../queries/group_page.php");
|
||||||
|
|
||||||
if(!$group = selectGroupByName($_GET["groupname"])) {
|
if(isset($_SESSION["userID"]) and !$group = selectGroupByName($_GET["groupname"])) {
|
||||||
header("HTTP/1.0 404 Not Found");
|
header("HTTP/1.0 404 Not Found");
|
||||||
header("Location: error/404.php");
|
header("Location: error/404.php");
|
||||||
die();
|
die();
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ function sendMessage() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
$("#newContent").val("");
|
$("#newContent").val("");
|
||||||
|
$("#newContent").focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add messages to the chat.
|
// Add messages to the chat.
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
|
// Show the right friendship buttonsto the user.
|
||||||
function placeFriendButtons() {
|
function placeFriendButtons() {
|
||||||
$.post("API/getFriendshipStatus.php", { usr: userID })
|
$.post("API/getFriendshipStatus.php", { usr: userID })
|
||||||
.done(function(data) {
|
.done(function(data) {
|
||||||
|
//save the friendship status
|
||||||
var friendshipStatus = data;
|
var friendshipStatus = data;
|
||||||
var $buttonContainer = $("div.friend-button-container");
|
var $buttonContainer = $("div.friend-button-container");
|
||||||
$("#start-profile-chat").hide();
|
$("#start-profile-chat").hide();
|
||||||
@@ -22,6 +24,7 @@ function placeFriendButtons() {
|
|||||||
text1 = "Word vrienden";
|
text1 = "Word vrienden";
|
||||||
icon1 = "fa-user-plus";
|
icon1 = "fa-user-plus";
|
||||||
break;
|
break;
|
||||||
|
// Users are friends.
|
||||||
case "1":
|
case "1":
|
||||||
value1 = userID;
|
value1 = userID;
|
||||||
class1 = "green";
|
class1 = "green";
|
||||||
@@ -32,12 +35,14 @@ function placeFriendButtons() {
|
|||||||
text2 = "Ontvriend";
|
text2 = "Ontvriend";
|
||||||
icon2 = "fa-user-times";
|
icon2 = "fa-user-times";
|
||||||
break;
|
break;
|
||||||
|
// This user sent request.
|
||||||
case "2":
|
case "2":
|
||||||
value1 = "delete";
|
value1 = "delete";
|
||||||
class1 = "red";
|
class1 = "red";
|
||||||
text1 = "Trek verzoek in";
|
text1 = "Trek verzoek in";
|
||||||
icon1 = "fa-times";
|
icon1 = "fa-times";
|
||||||
break;
|
break;
|
||||||
|
// Other user sent request.
|
||||||
case "3":
|
case "3":
|
||||||
value1 = "accept";
|
value1 = "accept";
|
||||||
class1 = "green";
|
class1 = "green";
|
||||||
@@ -50,6 +55,7 @@ function placeFriendButtons() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Append buttons to the container.
|
||||||
$buttonContainer.append(
|
$buttonContainer.append(
|
||||||
"<div><button class='"+ class1 +" fancy-button friend-button' value='"+ value1 +"'>" +
|
"<div><button class='"+ class1 +" fancy-button friend-button' value='"+ value1 +"'>" +
|
||||||
"<span>"+ text1 +"</span>" +
|
"<span>"+ text1 +"</span>" +
|
||||||
@@ -61,7 +67,7 @@ function placeFriendButtons() {
|
|||||||
"<i class='fa fa-fw "+ icon2 +"'></i> " +
|
"<i class='fa fa-fw "+ icon2 +"'></i> " +
|
||||||
"</button></div>");
|
"</button></div>");
|
||||||
|
|
||||||
|
// Gets triggered when a friend button is triggered.
|
||||||
$buttonContainer.find("button").click(function() {
|
$buttonContainer.find("button").click(function() {
|
||||||
if (isNaN(this.value))
|
if (isNaN(this.value))
|
||||||
editFriendship(userID, this.value);
|
editFriendship(userID, this.value);
|
||||||
|
|||||||
@@ -3,22 +3,28 @@ function placeGroupButtons() {
|
|||||||
.done(function(data) {
|
.done(function(data) {
|
||||||
var $buttonContainer = $("div.group-button-container");
|
var $buttonContainer = $("div.group-button-container");
|
||||||
|
|
||||||
|
// Append the right group button to the button container.
|
||||||
|
// When user is not a member
|
||||||
if(data == 'none') {
|
if(data == 'none') {
|
||||||
$buttonContainer.append(
|
$buttonContainer.append(
|
||||||
"<button class='green group-button fancy-button' value='request'>" +
|
"<button class='green group-button fancy-button' value='request'>" +
|
||||||
"<span>Treed toe</span><i class='fa fa-plus'></i>" +
|
"<span>Treed toe</span><i class='fa fa-plus'></i>" +
|
||||||
"</button>");
|
"</button>");
|
||||||
|
|
||||||
|
// when user sent a request to become a member.
|
||||||
} else if(data == 'request') {
|
} else if(data == 'request') {
|
||||||
$buttonContainer.append(
|
$buttonContainer.append(
|
||||||
"<button class='red group-button fancy-button' value='none'>" +
|
"<button class='red group-button fancy-button' value='none'>" +
|
||||||
"<span>Trek verzoek in</span><i class='fa fa-times'></i>" +
|
"<span>Trek verzoek in</span><i class='fa fa-times'></i>" +
|
||||||
"</button>");
|
"</button>");
|
||||||
|
// When user is a member of the group.
|
||||||
} else if (data == 'admin') {
|
} else if (data == 'admin') {
|
||||||
$buttonContainer.append(
|
$buttonContainer.append(
|
||||||
"<button class='group-button fancy-button' value='admin'>" +
|
"<button class='group-button fancy-button' value='admin'>" +
|
||||||
"<span>Instellingen</span><i class='fa fa-cogs'></i>" +
|
"<span>Instellingen</span><i class='fa fa-cogs'></i>" +
|
||||||
"</button>"
|
"</button>"
|
||||||
);
|
);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
$buttonContainer.append(
|
$buttonContainer.append(
|
||||||
"<button class='red group-button fancy-button' value='none'>" +
|
"<button class='red group-button fancy-button' value='none'>" +
|
||||||
@@ -26,6 +32,7 @@ function placeGroupButtons() {
|
|||||||
"</button>");
|
"</button>");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Gets triggered when a group button is clicked.
|
||||||
$buttonContainer.children().click(function() {
|
$buttonContainer.children().click(function() {
|
||||||
if (this.value == 'admin') {
|
if (this.value == 'admin') {
|
||||||
window.location.href='groupAdmin.php?groupID=' + groupID;
|
window.location.href='groupAdmin.php?groupID=' + groupID;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ var facebookModal = document.getElementById("fbModal");
|
|||||||
// Get the button that opens the modal
|
// Get the button that opens the modal
|
||||||
var registerBtn = document.getElementById("registerBtn");
|
var registerBtn = document.getElementById("registerBtn");
|
||||||
var btn = document.getElementById("myBtn");
|
var btn = document.getElementById("myBtn");
|
||||||
|
var fbBtn = document.getElementById("fbBtn");
|
||||||
|
|
||||||
// Get the <span> element that closes the modal
|
// Get the <span> element that closes the modal
|
||||||
var span = document.getElementsByClassName("close")[0];
|
var span = document.getElementsByClassName("close")[0];
|
||||||
@@ -24,6 +24,9 @@ btn.onclick = function () {
|
|||||||
registerBtn.onclick = function () {
|
registerBtn.onclick = function () {
|
||||||
registerModal.style.display = "block";
|
registerModal.style.display = "block";
|
||||||
}
|
}
|
||||||
|
fbBtn.onclick = function () {
|
||||||
|
facebookModal.style.display = "block";
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* WHen the user clicks on (X), close the modal
|
* WHen the user clicks on (X), close the modal
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// Vertical margin between two posts.
|
||||||
margin = 20;
|
margin = 20;
|
||||||
|
|
||||||
// scrolling modal taken from http://stackoverflow.com/questions/10476632/how-to-scroll-the-page-when-a-modal-dialog-is-longer-than-the-screen
|
// scrolling modal taken from http://stackoverflow.com/questions/10476632/how-to-scroll-the-page-when-a-modal-dialog-is-longer-than-the-screen
|
||||||
@@ -11,9 +12,12 @@ function scrollbarMargin(width, overflow) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get post from the server.
|
||||||
function requestPost(postID) {
|
function requestPost(postID) {
|
||||||
|
// Make the modal view visible.
|
||||||
$(".modal").show();
|
$(".modal").show();
|
||||||
|
|
||||||
|
// Send get request to the server to load the post.
|
||||||
$.get("API/loadPost.php", { postID : postID }).done(function(data) {
|
$.get("API/loadPost.php", { postID : postID }).done(function(data) {
|
||||||
$('.modal-default').hide();
|
$('.modal-default').hide();
|
||||||
var scrollBarWidth = window.innerWidth - document.body.offsetWidth;
|
var scrollBarWidth = window.innerWidth - document.body.offsetWidth;
|
||||||
@@ -23,11 +27,14 @@ function requestPost(postID) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create a new post.
|
||||||
function postPost() {
|
function postPost() {
|
||||||
title = $("input.newpost[name='title']").val();
|
title = $("input.newpost[name='title']").val();
|
||||||
content = $("textarea.newpost[name='content']").val();
|
content = $("textarea.newpost[name='content']").val();
|
||||||
console.log(masonryMode);
|
|
||||||
|
// Masonrymode 2: when on group page and user is an admin.
|
||||||
if (masonryMode == 2) {
|
if (masonryMode == 2) {
|
||||||
|
// Create the new group post.
|
||||||
$.post("API/postPost.php", { title: title,
|
$.post("API/postPost.php", { title: title,
|
||||||
content : content,
|
content : content,
|
||||||
group : groupID })
|
group : groupID })
|
||||||
@@ -46,6 +53,7 @@ function postPost() {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
// Create the new user post.
|
||||||
$.post("API/postPost.php", { title: title,
|
$.post("API/postPost.php", { title: title,
|
||||||
content : content })
|
content : content })
|
||||||
.done(function(data) {
|
.done(function(data) {
|
||||||
@@ -76,6 +84,7 @@ var postAmount = 0;
|
|||||||
var noposts = false;
|
var noposts = false;
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
|
// Initialise variables for masonry.
|
||||||
windowWidth = $(window).width();
|
windowWidth = $(window).width();
|
||||||
columnCount = Math.floor($(".posts").width() / 250);
|
columnCount = Math.floor($(".posts").width() / 250);
|
||||||
columns = new Array(columnCount);
|
columns = new Array(columnCount);
|
||||||
@@ -86,6 +95,7 @@ $(window).on("load", function() {
|
|||||||
$(".modal-close").click(function (){closeModal()});
|
$(".modal-close").click(function (){closeModal()});
|
||||||
|
|
||||||
// http://stackoverflow.com/questions/9439725/javascript-how-to-detect-if-browser-window-is-scrolled-to-bottom
|
// http://stackoverflow.com/questions/9439725/javascript-how-to-detect-if-browser-window-is-scrolled-to-bottom
|
||||||
|
// Infinite scroll.
|
||||||
window.onscroll = function(ev) {
|
window.onscroll = function(ev) {
|
||||||
if($(window).scrollTop() + $(window).height() == $(document).height() ) {
|
if($(window).scrollTop() + $(window).height() == $(document).height() ) {
|
||||||
loadMorePosts(userID, groupID, postAmount, postLimit);
|
loadMorePosts(userID, groupID, postAmount, postLimit);
|
||||||
@@ -108,6 +118,7 @@ $(window).on("load", function() {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Hide modal view from the screen.
|
||||||
function closeModal() {
|
function closeModal() {
|
||||||
$(".modal").hide();
|
$(".modal").hide();
|
||||||
scrollbarMargin(0, 'auto');
|
scrollbarMargin(0, 'auto');
|
||||||
@@ -115,23 +126,30 @@ function closeModal() {
|
|||||||
$('.modal-default').show();
|
$('.modal-default').show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Will fire when user resizes the window.
|
||||||
$(window).resize(function() {
|
$(window).resize(function() {
|
||||||
clearTimeout(window.resizedFinished);
|
clearTimeout(window.resizedFinished);
|
||||||
window.resizeFinished = setTimeout(function() {
|
window.resizeFinished = setTimeout(function() {
|
||||||
|
// Check if the width of the screen changed.
|
||||||
if ($(window).width() != windowWidth) {
|
if ($(window).width() != windowWidth) {
|
||||||
|
// Save width.
|
||||||
windowWidth = $(window).width();
|
windowWidth = $(window).width();
|
||||||
|
// Check if there fit more or less columns in the new width.
|
||||||
if (columnCount != Math.floor($(".posts").width() / 250)) {
|
if (columnCount != Math.floor($(".posts").width() / 250)) {
|
||||||
columnCount = Math.floor($(".posts").width() / 250);
|
columnCount = Math.floor($(".posts").width() / 250);
|
||||||
|
// Respawn the masonry grid.
|
||||||
masonry(masonryMode);
|
masonry(masonryMode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, 250);
|
}, 250);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Select the container for masonry.
|
||||||
var $container = $(".posts");
|
var $container = $(".posts");
|
||||||
|
|
||||||
|
// Spawn the masonry grid.
|
||||||
function masonry(mode) {
|
function masonry(mode) {
|
||||||
|
// save the masonry mode.
|
||||||
masonryMode = mode;
|
masonryMode = mode;
|
||||||
$container.children().remove();
|
$container.children().remove();
|
||||||
|
|
||||||
@@ -139,10 +157,7 @@ function masonry(mode) {
|
|||||||
noposts = false;
|
noposts = false;
|
||||||
postAmount = 0;
|
postAmount = 0;
|
||||||
|
|
||||||
/*
|
// Initialise columns.
|
||||||
* Initialise columns.
|
|
||||||
*/
|
|
||||||
|
|
||||||
for (i = 0; i < columnCount; i++) {
|
for (i = 0; i < columnCount; i++) {
|
||||||
$column = $("<div class=\"column\">");
|
$column = $("<div class=\"column\">");
|
||||||
$column.width(100/columnCount + "%");
|
$column.width(100/columnCount + "%");
|
||||||
@@ -150,11 +165,13 @@ function masonry(mode) {
|
|||||||
columns[i] = [0, $column];
|
columns[i] = [0, $column];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Place the form for new posts.
|
||||||
if(mode > 0) {
|
if(mode > 0) {
|
||||||
$postInput = $("<div class=\"post platform\">");
|
$postInput = $("<div class=\"post platform\">");
|
||||||
$form = $("<form class=\"newpost\" action=\"API/postPost.php\" method=\"post\" onsubmit=\"postPost(); return false;\">");
|
$form = $("<form class=\"newpost\" action=\"API/postPost.php\" method=\"post\" onsubmit=\"postPost(); return false;\">");
|
||||||
$postInput.append($form);
|
$postInput.append($form);
|
||||||
|
|
||||||
|
//Add extra input for group posts.
|
||||||
if(mode == 2) {
|
if(mode == 2) {
|
||||||
$form.append($("<input class=\"newpost\" type=\"hidden\" name=\"group\" value=\"" + groupID + "\">"));
|
$form.append($("<input class=\"newpost\" type=\"hidden\" name=\"group\" value=\"" + groupID + "\">"));
|
||||||
}
|
}
|
||||||
@@ -167,17 +184,11 @@ function masonry(mode) {
|
|||||||
columns[0][0] = $postInput.height() + margin;
|
columns[0][0] = $postInput.height() + margin;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Get the posts from the server.
|
||||||
* Function will find the column with the shortest height.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get the posts from the server.
|
|
||||||
*/
|
|
||||||
loadMorePosts(userID, groupID, 0, postLimit);
|
loadMorePosts(userID, groupID, 0, postLimit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Find the column with the shortest hight.
|
||||||
function getShortestColumn(columns) {
|
function getShortestColumn(columns) {
|
||||||
column = columns[0];
|
column = columns[0];
|
||||||
|
|
||||||
@@ -189,17 +200,20 @@ function getShortestColumn(columns) {
|
|||||||
return column;
|
return column;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Load certain range of posts.
|
||||||
function loadMorePosts(uID, gID, offset, limit) {
|
function loadMorePosts(uID, gID, offset, limit) {
|
||||||
if (noposts) {
|
if (noposts) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get a list of posts from the server.
|
||||||
$.post("API/getPosts.php", { usr : uID,
|
$.post("API/getPosts.php", { usr : uID,
|
||||||
grp : gID,
|
grp : gID,
|
||||||
offset : offset,
|
offset : offset,
|
||||||
limit : limit})
|
limit : limit})
|
||||||
.done(function(data) {
|
.done(function(data) {
|
||||||
if (!data) {
|
if (!data) {
|
||||||
|
// No posts were found, show noposts bar to user.
|
||||||
$('.noposts').show();
|
$('.noposts').show();
|
||||||
noposts = true;
|
noposts = true;
|
||||||
return;
|
return;
|
||||||
@@ -207,9 +221,7 @@ function loadMorePosts(uID, gID, offset, limit) {
|
|||||||
|
|
||||||
posts = JSON.parse(data);
|
posts = JSON.parse(data);
|
||||||
|
|
||||||
/*
|
// Rearange the objects.
|
||||||
* Rearange the objects.
|
|
||||||
*/
|
|
||||||
$.each(posts, function() {
|
$.each(posts, function() {
|
||||||
$post = $("<div class=\"post platform\" onclick=\"requestPost(\'"+this['postID']+"\')\">");
|
$post = $("<div class=\"post platform\" onclick=\"requestPost(\'"+this['postID']+"\')\">");
|
||||||
$post.append($("<h2>").html(this["title"]));
|
$post.append($("<h2>").html(this["title"]));
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
|
|
||||||
/**
|
|
||||||
* Posts a comment or "Niet slecht." on a post.
|
|
||||||
* Button specifies between comment and "Niet slecht.".
|
|
||||||
* Alerts or redirects if frozen or not logged in.
|
|
||||||
*/
|
|
||||||
function postComment(buttonValue) {
|
function postComment(buttonValue) {
|
||||||
formData = $("#newcommentform").serializeArray();
|
formData = $("#newcommentform").serializeArray();
|
||||||
formData.push({name: "button", value: buttonValue});
|
formData.push({name: "button", value: buttonValue});
|
||||||
@@ -29,10 +24,6 @@ function postComment(buttonValue) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Deletes a post given by postID, closes modal and reloads posts.
|
|
||||||
* @param postID
|
|
||||||
*/
|
|
||||||
function deletePost(postID) {
|
function deletePost(postID) {
|
||||||
var formData = [{name: "postID", value: postID}];
|
var formData = [{name: "postID", value: postID}];
|
||||||
$.post(
|
$.post(
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// Checks if user is logged in and offers to logout.
|
|
||||||
function checkLoggedIn() {
|
function checkLoggedIn() {
|
||||||
if (confirm("U bent al ingelogd!\nWilt u uitloggen?\nKlik ok om uit te loggen.") == true) {
|
if (confirm("U bent al ingelogd!\nWilt u uitloggen?\nKlik ok om uit te loggen.") == true) {
|
||||||
window.location.href = "logout.php";
|
window.location.href = "logout.php";
|
||||||
@@ -7,22 +6,18 @@ function checkLoggedIn() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Alert for validation mail.
|
|
||||||
function emailAlert(){
|
function emailAlert(){
|
||||||
alert("Bevestigingsemail is gestuurd!\n");
|
alert("Bevestigingsemail is gestuurd!\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Alert for banned account.
|
|
||||||
function bannedAlert(){
|
function bannedAlert(){
|
||||||
alert("Uw account is geband!");
|
alert("Uw account is geband!");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Alert for frozen account.
|
|
||||||
function frozenAlert(){
|
function frozenAlert(){
|
||||||
alert("Uw account is bevroren!\n");
|
alert("Uw account is bevroren!\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Alert for unconfirmed email.
|
|
||||||
function emailNotConfirmed(){
|
function emailNotConfirmed(){
|
||||||
alert("Uw account is nog niet bevestigd!\nEr is een nieuwe email gestuurd om uw account te bevestigen");
|
alert("Uw account is nog niet bevestigd!\nEr is een nieuwe email gestuurd om uw account te bevestigen");
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
website/public/large.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
website/public/launcher-icon-0-75x.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
website/public/launcher-icon-1-5x.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
website/public/launcher-icon-1x.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
website/public/launcher-icon-2x.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
BIN
website/public/launcher-icon-3x.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
BIN
website/public/launcher-icon-4x.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
44
website/public/manifest.json
Executable file
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"name": "Web Application Manifest Sample",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "launcher-icon-0-75x.png",
|
||||||
|
"sizes": "36x36",
|
||||||
|
"type": "image/png",
|
||||||
|
"density": "0.75"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "launcher-icon-1x.png",
|
||||||
|
"sizes": "48x48",
|
||||||
|
"type": "image/png",
|
||||||
|
"density": "1.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "launcher-icon-1-5x.png",
|
||||||
|
"sizes": "72x72",
|
||||||
|
"type": "image/png",
|
||||||
|
"density": "1.5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "launcher-icon-2x.png",
|
||||||
|
"sizes": "96x96",
|
||||||
|
"type": "image/png",
|
||||||
|
"density": "2.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "launcher-icon-3x.png",
|
||||||
|
"sizes": "144x144",
|
||||||
|
"type": "image/png",
|
||||||
|
"density": "3.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "launcher-icon-4x.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image/png",
|
||||||
|
"density": "4.0"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start_url": "index.html",
|
||||||
|
"display": "standalone",
|
||||||
|
"orientation": "portrait"
|
||||||
|
}
|
||||||
@@ -25,7 +25,8 @@ if(empty($_GET["username"])) {
|
|||||||
$userID = getUserID($_GET["username"]);
|
$userID = getUserID($_GET["username"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$user = selectUser($_SESSION["userID"], $userID)) {
|
|
||||||
|
if (isset($_SESSION["userID"]) and !$user = selectUser($_SESSION["userID"], $userID)) {
|
||||||
header("HTTP/1.0 404 Not Found");
|
header("HTTP/1.0 404 Not Found");
|
||||||
header("Location: error/404.php");
|
header("Location: error/404.php");
|
||||||
die();
|
die();
|
||||||
|
|||||||
BIN
website/public/square.png
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
@@ -1,11 +1,13 @@
|
|||||||
.admin-panel {
|
|
||||||
min-width: 800px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.admin-panel input[type="radio"], input[type="checkbox"] {
|
.admin-panel input[type="radio"], input[type="checkbox"] {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
height: 28px;
|
height: 14px;
|
||||||
margin: 2px;
|
width: 14px;
|
||||||
|
margin: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-checkbox {
|
||||||
|
width: 28px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.admin-searchform {
|
.admin-searchform {
|
||||||
@@ -42,6 +44,7 @@
|
|||||||
.usertable th, td {
|
.usertable th, td {
|
||||||
border-bottom: 1px solid #ddd;
|
border-bottom: 1px solid #ddd;
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
|
word-wrap: break-word;
|
||||||
}
|
}
|
||||||
|
|
||||||
.usertable th, tr {
|
.usertable th, tr {
|
||||||
|
|||||||
BIN
website/public/tiny.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
website/public/wide.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
@@ -52,7 +52,7 @@ function updateGroupSettings(int $groupID)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if an user is an admin for a page.
|
* Checks if a user is an admin for a page.
|
||||||
* @param int $groupID
|
* @param int $groupID
|
||||||
* @param int $userID
|
* @param int $userID
|
||||||
* @return bool
|
* @return bool
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ function getUserID() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function validateLogin($username, $password, $url){
|
function validateLogin($username, $password, $url){
|
||||||
echo $url;
|
|
||||||
// Empty username or password field
|
// Empty username or password field
|
||||||
if (empty($username) || empty($password)) {
|
if (empty($username) || empty($password)) {
|
||||||
throw new loginException("Inloggegevens zijn niet ingevuld");
|
throw new loginException("Inloggegevens zijn niet ingevuld");
|
||||||
|
|||||||
@@ -1,9 +1,16 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return a relative dutch and readable text when given a datetime.
|
||||||
|
* @param $date
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
function nicetime($date) {
|
function nicetime($date) {
|
||||||
if(empty($date)) {
|
if(empty($date)) {
|
||||||
return "No date provided";
|
return "No date provided";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create dutch arrays so it has dutch words.
|
||||||
$single_periods = array("seconde", "minuut", "uur", "dag", "week", "maand", "jaar", "decennium");
|
$single_periods = array("seconde", "minuut", "uur", "dag", "week", "maand", "jaar", "decennium");
|
||||||
$multiple_periods = array("seconden", "minuten", "uur", "dagen", "weken", "maanden", "jaar", "decennia");
|
$multiple_periods = array("seconden", "minuten", "uur", "dagen", "weken", "maanden", "jaar", "decennia");
|
||||||
$lengths = array("60", "60", "24", "7", "4.35", "12", "10", "0");
|
$lengths = array("60", "60", "24", "7", "4.35", "12", "10", "0");
|
||||||
@@ -15,7 +22,8 @@ function nicetime($date) {
|
|||||||
return "Bad date";
|
return "Bad date";
|
||||||
}
|
}
|
||||||
|
|
||||||
if($now > $unix_date) {
|
// Check if it is in the future or not.
|
||||||
|
if($now >= $unix_date) {
|
||||||
$difference = $now - $unix_date;
|
$difference = $now - $unix_date;
|
||||||
$tense = "geleden";
|
$tense = "geleden";
|
||||||
} else {
|
} else {
|
||||||
@@ -23,6 +31,7 @@ function nicetime($date) {
|
|||||||
$tense = "vanaf nu";
|
$tense = "vanaf nu";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get the nice time.
|
||||||
for($i = 0; $difference >= $lengths[$i] && $i < count($lengths) - 1; $i++) {
|
for($i = 0; $difference >= $lengths[$i] && $i < count($lengths) - 1; $i++) {
|
||||||
$difference /= $lengths[$i];
|
$difference /= $lengths[$i];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,12 @@
|
|||||||
|
|
||||||
require_once("connect.php");
|
require_once("connect.php");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select all posts on a user.
|
||||||
|
* @param $userID
|
||||||
|
* @param $groupID
|
||||||
|
* @return bool|PDOStatement
|
||||||
|
*/
|
||||||
function selectAllPosts($userID, $groupID) {
|
function selectAllPosts($userID, $groupID) {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -46,6 +52,14 @@ function selectAllPosts($userID, $groupID) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select $limit posts from $offset from a user or group.
|
||||||
|
* @param $userID
|
||||||
|
* @param $groupID
|
||||||
|
* @param $offset
|
||||||
|
* @param $limit
|
||||||
|
* @return bool|PDOStatement
|
||||||
|
*/
|
||||||
function selectSomePosts($userID, $groupID, $offset, $limit) {
|
function selectSomePosts($userID, $groupID, $offset, $limit) {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -94,9 +108,13 @@ function selectSomePosts($userID, $groupID, $offset, $limit) {
|
|||||||
return False;
|
return False;
|
||||||
}
|
}
|
||||||
return $stmt;
|
return $stmt;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select all the post information from an postID.
|
||||||
|
* @param $postID
|
||||||
|
* @return PDOStatement
|
||||||
|
*/
|
||||||
function selectPostById($postID) {
|
function selectPostById($postID) {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -122,6 +140,11 @@ function selectPostById($postID) {
|
|||||||
return $stmt;
|
return $stmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all the comments from a post.
|
||||||
|
* @param $postID
|
||||||
|
* @return PDOStatement
|
||||||
|
*/
|
||||||
function selectCommentsByPostId($postID) {
|
function selectCommentsByPostId($postID) {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -148,6 +171,13 @@ function selectCommentsByPostId($postID) {
|
|||||||
return $stmt;
|
return $stmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Insert a post to a group or user
|
||||||
|
* @param $userID
|
||||||
|
* @param $groupID
|
||||||
|
* @param $title
|
||||||
|
* @param $content
|
||||||
|
*/
|
||||||
function makePost($userID, $groupID, $title, $content) {
|
function makePost($userID, $groupID, $title, $content) {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
INSERT INTO
|
INSERT INTO
|
||||||
@@ -172,6 +202,13 @@ function makePost($userID, $groupID, $title, $content) {
|
|||||||
$stmt->execute();
|
$stmt->execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Insert a comment by a post.
|
||||||
|
* @param $postID
|
||||||
|
* @param $userID
|
||||||
|
* @param $content
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
function makeComment($postID, $userID, $content) : int {
|
function makeComment($postID, $userID, $content) : int {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
INSERT INTO
|
INSERT INTO
|
||||||
@@ -194,6 +231,12 @@ function makeComment($postID, $userID, $content) : int {
|
|||||||
return $stmt->rowCount();
|
return $stmt->rowCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If a post already is niet slechted.
|
||||||
|
* @param int $postID
|
||||||
|
* @param int $userID
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
function makeNietSlecht(int $postID, int $userID) : int {
|
function makeNietSlecht(int $postID, int $userID) : int {
|
||||||
if (checkNietSlecht($postID, $userID)) {
|
if (checkNietSlecht($postID, $userID)) {
|
||||||
return deleteNietSlecht($postID, $userID);
|
return deleteNietSlecht($postID, $userID);
|
||||||
@@ -202,6 +245,12 @@ function makeNietSlecht(int $postID, int $userID) : int {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Toggle a niet slecht of a post.
|
||||||
|
* @param int $postID
|
||||||
|
* @param int $userID
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
function checkNietSlecht(int $postID, int $userID) {
|
function checkNietSlecht(int $postID, int $userID) {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -218,6 +267,12 @@ function checkNietSlecht(int $postID, int $userID) {
|
|||||||
return $stmt->rowCount();
|
return $stmt->rowCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a niet slecht to a post.
|
||||||
|
* @param int $postID
|
||||||
|
* @param int $userID
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
function addNietSlecht(int $postID, int $userID) {
|
function addNietSlecht(int $postID, int $userID) {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
INSERT INTO
|
INSERT INTO
|
||||||
@@ -230,6 +285,12 @@ function addNietSlecht(int $postID, int $userID) {
|
|||||||
return $stmt->rowCount();
|
return $stmt->rowCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete a niet slecht.
|
||||||
|
* @param int $postID
|
||||||
|
* @param int $userID
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
function deleteNietSlecht(int $postID, int $userID) {
|
function deleteNietSlecht(int $postID, int $userID) {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
DELETE FROM
|
DELETE FROM
|
||||||
@@ -244,6 +305,11 @@ function deleteNietSlecht(int $postID, int $userID) {
|
|||||||
return $stmt->rowCount();
|
return $stmt->rowCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete a post
|
||||||
|
* @param int $postID
|
||||||
|
* @param int $userID
|
||||||
|
*/
|
||||||
function deletePost(int $postID, int $userID) {
|
function deletePost(int $postID, int $userID) {
|
||||||
if (checkPermissionOnPost($postID, $userID)) {
|
if (checkPermissionOnPost($postID, $userID)) {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
@@ -257,6 +323,12 @@ function deletePost(int $postID, int $userID) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a user has premissions to delete a post.
|
||||||
|
* @param int $postID
|
||||||
|
* @param int $userID
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
function checkPermissionOnPost(int $postID, int $userID) : bool {
|
function checkPermissionOnPost(int $postID, int $userID) : bool {
|
||||||
$getGroupID = prepareQuery("
|
$getGroupID = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -282,10 +354,10 @@ function checkPermissionOnPost(int $postID, int $userID) : bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns role of an user.
|
* Returns role of a user.
|
||||||
* @param int $userID
|
* @param int $userID
|
||||||
* @param int $groupID
|
* @param int $groupID
|
||||||
* @return mixed role of an user.
|
* @return mixed role of a user.
|
||||||
*/
|
*/
|
||||||
function getRoleInGroup(int $userID, int $groupID) {
|
function getRoleInGroup(int $userID, int $groupID) {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the the last 100 chat messages.
|
||||||
|
* @param $user2ID
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
function getOldChatMessages($user2ID) {
|
function getOldChatMessages($user2ID) {
|
||||||
require_once ("friendship.php");
|
require_once ("friendship.php");
|
||||||
$user1ID = $_SESSION["userID"];
|
$user1ID = $_SESSION["userID"];
|
||||||
@@ -36,6 +41,12 @@ function getOldChatMessages($user2ID) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a chat message.
|
||||||
|
* @param $destination
|
||||||
|
* @param $content
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
function sendMessage($destination, $content) {
|
function sendMessage($destination, $content) {
|
||||||
require_once("friendship.php");
|
require_once("friendship.php");
|
||||||
if (getFriendshipStatus($destination) == 1) {
|
if (getFriendshipStatus($destination) == 1) {
|
||||||
@@ -65,6 +76,12 @@ function sendMessage($destination, $content) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all the chat messages after an messageID ($lastID).
|
||||||
|
* @param $lastID
|
||||||
|
* @param $destination
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
function getNewChatMessages($lastID, $destination) {
|
function getNewChatMessages($lastID, $destination) {
|
||||||
require_once("friendship.php");
|
require_once("friendship.php");
|
||||||
if (getFriendshipStatus($destination) == 1) {
|
if (getFriendshipStatus($destination) == 1) {
|
||||||
@@ -96,7 +113,10 @@ function getNewChatMessages($lastID, $destination) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get of every friend the first unread chat message.
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
function selectAllUnreadChat() {
|
function selectAllUnreadChat() {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns 1 if an username exists with the filled in username.
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
function getExistingUsername() {
|
function getExistingUsername() {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -16,6 +20,10 @@ function getExistingUsername() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns 1 if an username exists with facebooklogin
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
function getExistingFBUsername() {
|
function getExistingFBUsername() {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -32,6 +40,10 @@ function getExistingFBUsername() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns 1 if an email exists with the filled in email.
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
function getExistingEmail() {
|
function getExistingEmail() {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -48,6 +60,10 @@ function getExistingEmail() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns 1 if an email exists with facebook register
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
function getExistingFBEmail() {
|
function getExistingFBEmail() {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -65,6 +81,10 @@ function getExistingFBEmail() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns 1 if an email exists with the forgot email input
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
function getResetEmail() {
|
function getResetEmail() {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -81,6 +101,9 @@ function getResetEmail() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a new account in the database
|
||||||
|
*/
|
||||||
function registerAccount() {
|
function registerAccount() {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
INSERT INTO
|
INSERT INTO
|
||||||
@@ -119,6 +142,9 @@ function registerAccount() {
|
|||||||
$stmt->rowCount();
|
$stmt->rowCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a new account with facebook register
|
||||||
|
*/
|
||||||
function fbRegisterAccount() {
|
function fbRegisterAccount() {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
INSERT INTO
|
INSERT INTO
|
||||||
@@ -158,6 +184,11 @@ function fbRegisterAccount() {
|
|||||||
return $stmt->execute();
|
return $stmt->execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks which dates need to be selected when there is an invalid registration.
|
||||||
|
* @param $date
|
||||||
|
* @param $value
|
||||||
|
*/
|
||||||
function submitselect($date, $value){
|
function submitselect($date, $value){
|
||||||
if ($date == $value){
|
if ($date == $value){
|
||||||
echo "selected";
|
echo "selected";
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
include_once "../queries/connect.php";
|
include_once "../queries/connect.php";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends a link to an email to change the password of an account
|
||||||
|
* @param string $email
|
||||||
|
*/
|
||||||
function sendPasswordRecovery(string $email) {
|
function sendPasswordRecovery(string $email) {
|
||||||
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
@@ -24,11 +28,16 @@ function sendPasswordRecovery(string $email) {
|
|||||||
$hashedHash = password_hash($hash, PASSWORD_DEFAULT);
|
$hashedHash = password_hash($hash, PASSWORD_DEFAULT);
|
||||||
setHashToDatabase($userID, $hash);
|
setHashToDatabase($userID, $hash);
|
||||||
doSendPasswordRecovery($userID, $email, $username, $hashedHash);
|
doSendPasswordRecovery($userID, $email, $username, $hashedHash);
|
||||||
} else {
|
|
||||||
// TODO: Be angry!
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the message in the email to reset a password of an account.
|
||||||
|
* @param int $userID
|
||||||
|
* @param string $email
|
||||||
|
* @param string $username
|
||||||
|
* @param string $hash
|
||||||
|
*/
|
||||||
function doSendPasswordRecovery(int $userID, string $email, string $username, string $hash) {
|
function doSendPasswordRecovery(int $userID, string $email, string $username, string $hash) {
|
||||||
$resetLink = "https://myhyvesbookplus.nl/resetpassword.php?u=$userID&h=$hash";
|
$resetLink = "https://myhyvesbookplus.nl/resetpassword.php?u=$userID&h=$hash";
|
||||||
|
|
||||||
@@ -38,6 +47,11 @@ function doSendPasswordRecovery(int $userID, string $email, string $username, st
|
|||||||
mail($email, $subject, $body, $header);
|
mail($email, $subject, $body, $header);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the previous password invalid.
|
||||||
|
* @param int $userID
|
||||||
|
* @param string $hash
|
||||||
|
*/
|
||||||
function setHashToDatabase(int $userID, string $hash) {
|
function setHashToDatabase(int $userID, string $hash) {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
UPDATE
|
UPDATE
|
||||||
|
|||||||
@@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
require_once ("connect.php");
|
require_once ("connect.php");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This sets the last activity of the session user to now.
|
||||||
|
* @return bool, true is it ran correctly
|
||||||
|
*/
|
||||||
function updateLastActivity() {
|
function updateLastActivity() {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
UPDATE
|
UPDATE
|
||||||
@@ -15,6 +19,11 @@ function updateLastActivity() {
|
|||||||
return $stmt->execute();
|
return $stmt->execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This gets the userID from a username
|
||||||
|
* @param $username
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
function getUserID($username) {
|
function getUserID($username) {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -30,6 +39,11 @@ function getUserID($username) {
|
|||||||
return $stmt->fetch()["userID"];
|
return $stmt->fetch()["userID"];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This gets the username from a userID
|
||||||
|
* @param $userID
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
function getUsername($userID) {
|
function getUsername($userID) {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -45,6 +59,12 @@ function getUsername($userID) {
|
|||||||
return $stmt->fetch()["username"];
|
return $stmt->fetch()["username"];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This selects the information about the other user and the connection between the two.
|
||||||
|
* @param $me
|
||||||
|
* @param $other
|
||||||
|
* @return bool|mixed
|
||||||
|
*/
|
||||||
function selectUser($me, $other) {
|
function selectUser($me, $other) {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -107,6 +127,11 @@ function selectUser($me, $other) {
|
|||||||
return $stmt->fetch();
|
return $stmt->fetch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select all the users from a group.
|
||||||
|
* @param $userID
|
||||||
|
* @return PDOStatement
|
||||||
|
*/
|
||||||
function selectAllUserGroups($userID) {
|
function selectAllUserGroups($userID) {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -130,6 +155,11 @@ function selectAllUserGroups($userID) {
|
|||||||
return $stmt;
|
return $stmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Selects 20 users from a given point in the table, ordered by role and name
|
||||||
|
* @param $n
|
||||||
|
* @return PDOStatement
|
||||||
|
*/
|
||||||
function select20UsersFromN($n) {
|
function select20UsersFromN($n) {
|
||||||
$q = prepareQuery("
|
$q = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -155,6 +185,12 @@ function select20UsersFromN($n) {
|
|||||||
return $q;
|
return $q;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search 20 users from a given point in the table, ordered by role and name
|
||||||
|
* @param $n
|
||||||
|
* @param $keyword
|
||||||
|
* @return PDOStatement
|
||||||
|
*/
|
||||||
function search20UsersFromN($n, $keyword) {
|
function search20UsersFromN($n, $keyword) {
|
||||||
$q = prepareQuery("
|
$q = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -183,6 +219,13 @@ function search20UsersFromN($n, $keyword) {
|
|||||||
return $q;
|
return $q;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search 20 users from a given point in the database where the status @param $status
|
||||||
|
* @param $n
|
||||||
|
* @param $keyword
|
||||||
|
* @param $status
|
||||||
|
* @return PDOStatement
|
||||||
|
*/
|
||||||
function search20UsersFromNByStatus($n, $keyword, $status) {
|
function search20UsersFromNByStatus($n, $keyword, $status) {
|
||||||
$q = prepareQuery("
|
$q = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -215,6 +258,14 @@ function search20UsersFromNByStatus($n, $keyword, $status) {
|
|||||||
return $q;
|
return $q;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search users from a given point in the database where the status @param $status
|
||||||
|
* @param $n
|
||||||
|
* @param $m
|
||||||
|
* @param $search
|
||||||
|
* @param $status
|
||||||
|
* @return PDOStatement
|
||||||
|
*/
|
||||||
function searchSomeUsersByStatus($n, $m, $search, $status) {
|
function searchSomeUsersByStatus($n, $m, $search, $status) {
|
||||||
// parentheses not needed in where clause, for clarity as
|
// parentheses not needed in where clause, for clarity as
|
||||||
// role search should override status filter.
|
// role search should override status filter.
|
||||||
@@ -252,6 +303,12 @@ function searchSomeUsersByStatus($n, $m, $search, $status) {
|
|||||||
return $q;
|
return $q;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Count the users with a name like $search and a $status
|
||||||
|
* @param $search
|
||||||
|
* @param $status
|
||||||
|
* @return PDOStatement
|
||||||
|
*/
|
||||||
function countSomeUsersByStatus($search, $status) {
|
function countSomeUsersByStatus($search, $status) {
|
||||||
$q = prepareQuery("
|
$q = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -276,7 +333,12 @@ function countSomeUsersByStatus($search, $status) {
|
|||||||
return $q;
|
return $q;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change the user status
|
||||||
|
* @param $id
|
||||||
|
* @param $status
|
||||||
|
* @return PDOStatement
|
||||||
|
*/
|
||||||
function changeUserStatusByID($id, $status) {
|
function changeUserStatusByID($id, $status) {
|
||||||
$q = prepareQuery("
|
$q = prepareQuery("
|
||||||
UPDATE
|
UPDATE
|
||||||
@@ -293,6 +355,12 @@ function changeUserStatusByID($id, $status) {
|
|||||||
return $q;
|
return $q;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change multiple user statuses by an id array.
|
||||||
|
* @param $ids
|
||||||
|
* @param $status
|
||||||
|
* @return PDOStatement
|
||||||
|
*/
|
||||||
function changeMultipleUserStatusByID($ids, $status) {
|
function changeMultipleUserStatusByID($ids, $status) {
|
||||||
$q = prepareQuery("
|
$q = prepareQuery("
|
||||||
UPDATE
|
UPDATE
|
||||||
@@ -310,6 +378,13 @@ function changeMultipleUserStatusByID($ids, $status) {
|
|||||||
return $q;
|
return $q;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change multiple user statuses by an id array.
|
||||||
|
* This excludes that admins and owners statuses can be changed.
|
||||||
|
* @param $ids
|
||||||
|
* @param $status
|
||||||
|
* @return PDOStatement
|
||||||
|
*/
|
||||||
function changeMultipleUserStatusByIDAdmin($ids, $status) {
|
function changeMultipleUserStatusByIDAdmin($ids, $status) {
|
||||||
$q = prepareQuery("
|
$q = prepareQuery("
|
||||||
UPDATE
|
UPDATE
|
||||||
@@ -329,6 +404,11 @@ function changeMultipleUserStatusByIDAdmin($ids, $status) {
|
|||||||
return $q;
|
return $q;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select a random user that is nog your friend.
|
||||||
|
* @param $userID
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
function selectRandomNotFriendUser($userID) {
|
function selectRandomNotFriendUser($userID) {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -357,6 +437,13 @@ function selectRandomNotFriendUser($userID) {
|
|||||||
return $stmt->fetch();
|
return $stmt->fetch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search users.
|
||||||
|
* @param $n
|
||||||
|
* @param $m
|
||||||
|
* @param $search
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
function searchSomeUsers($n, $m, $search) {
|
function searchSomeUsers($n, $m, $search) {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -397,6 +484,11 @@ function searchSomeUsers($n, $m, $search) {
|
|||||||
return json_encode($stmt->fetchAll());
|
return json_encode($stmt->fetchAll());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Count the users that you get searching for a user with a keyword.
|
||||||
|
* @param $search
|
||||||
|
* @return PDOStatement
|
||||||
|
*/
|
||||||
function countSomeUsers($search) {
|
function countSomeUsers($search) {
|
||||||
$q = prepareQuery("
|
$q = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -420,6 +512,11 @@ function countSomeUsers($search) {
|
|||||||
return $q;
|
return $q;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the role of a user by userID.
|
||||||
|
* @param $userID
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
function getRoleByID($userID) {
|
function getRoleByID($userID) {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
SELECT
|
SELECT
|
||||||
@@ -435,6 +532,11 @@ function getRoleByID($userID) {
|
|||||||
return $stmt->fetch()["role"];
|
return $stmt->fetch()["role"];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Edit the ban comment.
|
||||||
|
* @param $userID
|
||||||
|
* @param $comment
|
||||||
|
*/
|
||||||
function editBanCommentByID($userID, $comment) {
|
function editBanCommentByID($userID, $comment) {
|
||||||
$stmt = prepareQuery("
|
$stmt = prepareQuery("
|
||||||
UPDATE
|
UPDATE
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th><input class="table-checkbox" type="checkbox" id="checkall" name="checkall" onchange="checkAll()"></th>
|
<th class="table-checkbox"><input class="table-checkbox" type="checkbox" id="checkall" name="checkall" onchange="checkAll()"></th>
|
||||||
<th class="table-username">Gebruikersnaam</th>
|
<th class="table-username">Gebruikersnaam</th>
|
||||||
<th class="table-status">Status</th>
|
<th class="table-status">Status</th>
|
||||||
<th class="table-comment">Aantekening</th>
|
<th class="table-comment">Aantekening</th>
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
if(isset($acces_token)) {
|
||||||
|
echo '<button id="fbBtn" class="button">Facebook registreer</button>';
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
||||||
<!-- The Modal -->
|
<!-- The Modal -->
|
||||||
<div id="fbModal" class="modal">
|
<div id="fbModal" class="modal">
|
||||||
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"
|
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"
|
||||||
|
|||||||
@@ -2,6 +2,40 @@
|
|||||||
<meta name="description" content="MyHyvesbook+ is het sociaal medium voor alle coole mensen. Stap nu over van facebook op het gloednieuwe en betere sociaal medium.">
|
<meta name="description" content="MyHyvesbook+ is het sociaal medium voor alle coole mensen. Stap nu over van facebook op het gloednieuwe en betere sociaal medium.">
|
||||||
<meta name="keywords" content="MyHyvesbookPlus,Myhyvesbook+,sociaal,media">
|
<meta name="keywords" content="MyHyvesbookPlus,Myhyvesbook+,sociaal,media">
|
||||||
<meta name="author" content="MyHyvesbookplus corporation">
|
<meta name="author" content="MyHyvesbookplus corporation">
|
||||||
|
<!--Favicon-->
|
||||||
|
<!-- Desktop Browsers -->
|
||||||
|
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
|
||||||
|
|
||||||
|
<!-- Android: Chrome M39 and up-->
|
||||||
|
<link rel="manifest" href="manifest.json">
|
||||||
|
<!-- Android: Chrome M31 and up, ignored if manifest is present-->
|
||||||
|
<meta name="mobile-web-app-capable" content="yes">
|
||||||
|
<link rel="icon" sizes="192x192" href="icon-192x192.png">
|
||||||
|
<!-- iOS -->
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
|
<meta name="apple-mobile-web-app-title" content="My Awesome Web App">
|
||||||
|
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon-180x180-precomposed.png">
|
||||||
|
<link href="apple-touch-icon-152x152-precomposed.png" sizes="152x152" rel="apple-touch-icon">
|
||||||
|
<link href="apple-touch-icon-144x144-precomposed.png" sizes="144x144" rel="apple-touch-icon">
|
||||||
|
<link href="apple-touch-icon-120x120-precomposed.png" sizes="120x120" rel="apple-touch-icon">
|
||||||
|
<link href="apple-touch-icon-114x114-precomposed.png" sizes="114x114" rel="apple-touch-icon">
|
||||||
|
<link href="apple-touch-icon-76x76-precomposed.png" sizes="76x76" rel="apple-touch-icon">
|
||||||
|
<link href="apple-touch-icon-72x72-precomposed.png" sizes="72x72" rel="apple-touch-icon">
|
||||||
|
<link href="apple-touch-icon-60x60-precomposed.png" sizes="60x60" rel="apple-touch-icon">
|
||||||
|
<link href="apple-touch-icon-57x57-precomposed.png" sizes="57x57" rel="apple-touch-icon">
|
||||||
|
<link href="apple-touch-icon-precomposed.png" rel="apple-touch-icon">
|
||||||
|
|
||||||
|
<!-- Windows 8 and IE 11 -->
|
||||||
|
<meta name="msapplication-config" content="browserconfig.xml" />
|
||||||
|
|
||||||
|
<!-- Windows -->
|
||||||
|
<meta name="application-name" content="My Awesome Web App" />
|
||||||
|
<meta name="msapplication-tooltip" content="Get the latest updates!" />
|
||||||
|
<meta name="msapplication-window" content="width=1024;height=768" />
|
||||||
|
<meta name="msapplication-navbutton-color" content="#FF3300" />
|
||||||
|
<meta name="msapplication-starturl" content="./" />
|
||||||
|
|
||||||
<title>MyHyvesbook+</title>
|
<title>MyHyvesbook+</title>
|
||||||
<!-- Add your javascript files here. -->
|
<!-- Add your javascript files here. -->
|
||||||
<script src="js/jquery.js"></script>
|
<script src="js/jquery.js"></script>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
session_start();
|
session_start();
|
||||||
|
|
||||||
// Checks if there's an user already logged in
|
// Checks if there's a user already logged in
|
||||||
if(isset($_SESSION["userID"])){
|
if(isset($_SESSION["userID"])){
|
||||||
echo "<script>
|
echo "<script>
|
||||||
window.onload=checkLoggedIn();
|
window.onload=checkLoggedIn();
|
||||||
|
|||||||
@@ -3,6 +3,40 @@
|
|||||||
<meta name="description" content="MyHyvesbook+ is het sociaal medium voor alle coole mensen. Stap nu over van facebook op het gloednieuwe en betere sociaal medium.">
|
<meta name="description" content="MyHyvesbook+ is het sociaal medium voor alle coole mensen. Stap nu over van facebook op het gloednieuwe en betere sociaal medium.">
|
||||||
<meta name="keywords" content="MyHyvesbookPlus,Myhyvesbook+,sociaal,media">
|
<meta name="keywords" content="MyHyvesbookPlus,Myhyvesbook+,sociaal,media">
|
||||||
<meta name="author" content="MyHyvesbookplus corporation">
|
<meta name="author" content="MyHyvesbookplus corporation">
|
||||||
|
<!-- Favicon-->
|
||||||
|
<!-- Desktop Browsers -->
|
||||||
|
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
|
||||||
|
|
||||||
|
<!-- Android: Chrome M39 and up-->
|
||||||
|
<link rel="manifest" href="manifest.json">
|
||||||
|
<!-- Android: Chrome M31 and up, ignored if manifest is present-->
|
||||||
|
<meta name="mobile-web-app-capable" content="yes">
|
||||||
|
<link rel="icon" sizes="192x192" href="icon-192x192.png">
|
||||||
|
<!-- iOS -->
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
|
<meta name="apple-mobile-web-app-title" content="My Awesome Web App">
|
||||||
|
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon-180x180-precomposed.png">
|
||||||
|
<link href="apple-touch-icon-152x152-precomposed.png" sizes="152x152" rel="apple-touch-icon">
|
||||||
|
<link href="apple-touch-icon-144x144-precomposed.png" sizes="144x144" rel="apple-touch-icon">
|
||||||
|
<link href="apple-touch-icon-120x120-precomposed.png" sizes="120x120" rel="apple-touch-icon">
|
||||||
|
<link href="apple-touch-icon-114x114-precomposed.png" sizes="114x114" rel="apple-touch-icon">
|
||||||
|
<link href="apple-touch-icon-76x76-precomposed.png" sizes="76x76" rel="apple-touch-icon">
|
||||||
|
<link href="apple-touch-icon-72x72-precomposed.png" sizes="72x72" rel="apple-touch-icon">
|
||||||
|
<link href="apple-touch-icon-60x60-precomposed.png" sizes="60x60" rel="apple-touch-icon">
|
||||||
|
<link href="apple-touch-icon-57x57-precomposed.png" sizes="57x57" rel="apple-touch-icon">
|
||||||
|
<link href="apple-touch-icon-precomposed.png" rel="apple-touch-icon">
|
||||||
|
|
||||||
|
<!-- Windows 8 and IE 11 -->
|
||||||
|
<meta name="msapplication-config" content="browserconfig.xml" />
|
||||||
|
|
||||||
|
<!-- Windows -->
|
||||||
|
<meta name="application-name" content="My Awesome Web App" />
|
||||||
|
<meta name="msapplication-tooltip" content="Get the latest updates!" />
|
||||||
|
<meta name="msapplication-window" content="width=1024;height=768" />
|
||||||
|
<meta name="msapplication-navbutton-color" content="#FF3300" />
|
||||||
|
<meta name="msapplication-starturl" content="./" />
|
||||||
|
|
||||||
<title>MyHyvesbook+</title>
|
<title>MyHyvesbook+</title>
|
||||||
<link rel="stylesheet"
|
<link rel="stylesheet"
|
||||||
type="text/css"
|
type="text/css"
|
||||||
|
|||||||