Final Friendasy
This commit is contained in:
parent
4070774a96
commit
8a6ba4c499
8 changed files with 188 additions and 33 deletions
|
@ -20,7 +20,8 @@
|
||||||
"20150530",
|
"20150530",
|
||||||
"20150602",
|
"20150602",
|
||||||
"20150604",
|
"20150604",
|
||||||
"20150619"
|
"20150619",
|
||||||
|
"20150620"
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -1261,6 +1262,15 @@
|
||||||
"change": "Added notification history section contents to settings panel."
|
"change": "Added notification history section contents to settings panel."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
|
"20150620": [
|
||||||
|
|
||||||
|
{
|
||||||
|
"type": "ADD",
|
||||||
|
"change": "Added friends system."
|
||||||
|
}
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1122,7 +1122,7 @@ class Users {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if a friend is mutual
|
// Check if a friend is mutual
|
||||||
public static function checkMutualFriend($fid, $uid = null) {
|
public static function checkFriend($fid, $uid = null) {
|
||||||
|
|
||||||
// Assign $uid
|
// Assign $uid
|
||||||
if(!$uid)
|
if(!$uid)
|
||||||
|
@ -1133,17 +1133,17 @@ class Users {
|
||||||
|
|
||||||
// Check if the friend is actually in the user's array
|
// Check if the friend is actually in the user's array
|
||||||
if(!in_array($fid, $self))
|
if(!in_array($fid, $self))
|
||||||
return false;
|
return 0;
|
||||||
|
|
||||||
// Get the friend's friends
|
// Get the friend's friends
|
||||||
$friend = self::getFriends($fid);
|
$friend = self::getFriends($fid);
|
||||||
|
|
||||||
// Check if the friend is actually in the user's array
|
// Check if the friend is actually in the user's array
|
||||||
if(!in_array($uid, $friend))
|
if(in_array($uid, $friend))
|
||||||
return false;
|
return 2;
|
||||||
|
|
||||||
// Return true if all went through
|
// Return true if all went through
|
||||||
return true;
|
return 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1166,7 +1166,7 @@ class Users {
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Return true because yay
|
// Return true because yay
|
||||||
return [1, Users::checkMutualFriend($uid) ? 'FRIENDS' : 'NOT_MUTUAL'];
|
return [1, Users::checkFriend($uid) == 2 ? 'FRIENDS' : 'NOT_MUTUAL'];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1179,8 +1179,8 @@ class Users {
|
||||||
|
|
||||||
// Remove friend
|
// Remove friend
|
||||||
Database::delete('friends', [
|
Database::delete('friends', [
|
||||||
'uid' => Session::$userId,
|
'uid' => [Session::$userId, '='],
|
||||||
'fid' => $uid
|
'fid' => [$uid, '=']
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Return true because yay
|
// Return true because yay
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
namespace Sakura;
|
namespace Sakura;
|
||||||
|
|
||||||
// Define Sakura version
|
// Define Sakura version
|
||||||
define('SAKURA_VERSION', '20150619');
|
define('SAKURA_VERSION', '20150620');
|
||||||
define('SAKURA_VLABEL', 'Eminence');
|
define('SAKURA_VLABEL', 'Eminence');
|
||||||
define('SAKURA_VTYPE', 'Development');
|
define('SAKURA_VTYPE', 'Development');
|
||||||
define('SAKURA_COLOUR', '#6C3082');
|
define('SAKURA_COLOUR', '#6C3082');
|
||||||
|
|
|
@ -108,6 +108,42 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if php.self == '/profile.php' and user.checklogin and user.data.id != profile.user.id %}
|
||||||
|
|
||||||
|
// Prepare friend toggle
|
||||||
|
function initFriendToggle() {
|
||||||
|
|
||||||
|
var profileFriendToggle = document.getElementById('profileFriendToggle');
|
||||||
|
|
||||||
|
profileFriendToggle.setAttribute('href', 'javascript:void(0);');
|
||||||
|
profileFriendToggle.setAttribute('onclick', 'doFriendToggle();');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function doFriendToggle() {
|
||||||
|
|
||||||
|
generateForm("doFriendToggle", {
|
||||||
|
"class": "hidden",
|
||||||
|
"method": "post",
|
||||||
|
"action": "//{{ sakura.urls.main }}/friends"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"{% if profile.friend == 0 %}add{% else %}remove{% endif %}": "{{ profile.user.id }}",
|
||||||
|
"ajax": "true",
|
||||||
|
"time": "{{ php.time }}",
|
||||||
|
"session": "{{ php.sessionid }}",
|
||||||
|
"redirect": "{{ sakura.currentpage }}"
|
||||||
|
}, "contentwrapper");
|
||||||
|
|
||||||
|
setTimeout(function(){
|
||||||
|
submitPost("doFriendToggle", true, "{% if profile.friend == 0 %}Adding{% else %}Removing{% endif %} friend...")
|
||||||
|
}, 10);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
// Space for things that need to happen onload
|
// Space for things that need to happen onload
|
||||||
window.onload = function() {
|
window.onload = function() {
|
||||||
|
|
||||||
|
@ -125,6 +161,10 @@
|
||||||
setInterval(function(){notifyRequest('{{ php.sessionid }}');}, 60000);
|
setInterval(function(){notifyRequest('{{ php.sessionid }}');}, 60000);
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if php.self == '/profile.php' and user.checklogin and user.data.id != profile.user.id %}
|
||||||
|
initFriendToggle();
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if php.self == '/authenticate.php' and not sakura.lockauth %}
|
{% if php.self == '/authenticate.php' and not sakura.lockauth %}
|
||||||
// AJAX Form Submission
|
// AJAX Form Submission
|
||||||
var forms = {
|
var forms = {
|
||||||
|
|
|
@ -25,7 +25,8 @@
|
||||||
{% if user.data.id == profile.user.id %}
|
{% if user.data.id == profile.user.id %}
|
||||||
<a class="fa fa-pencil-square" title="Edit your profile" href="//{{ sakura.urls.main }}/settings/profile"></a>
|
<a class="fa fa-pencil-square" title="Edit your profile" href="//{{ sakura.urls.main }}/settings/profile"></a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<a class="fa fa-user-plus" title="Add {{ profile.user.username }} as a friend" href="//{{ sakura.urls.main }}/friends?add={{ profile.user.id }}&session={{ php.sessionid }}&time={{ php.time }}&return={{ sakura.currentpage }}"></a>
|
{% if profile.friend != 0 %}<a class="fa fa-{% if profile.friend == 2 %}heart{% else %}star{% endif %}" title="You are friends"></a>{% endif %}
|
||||||
|
<a class="fa fa-user-{% if profile.friend == 0 %}plus{% else %}times{% endif %}" title="{% if profile.friend == 0 %}Add {{ profile.user.username }} as a friend{% else %}Remove friend{% endif %}" href="//{{ sakura.urls.main }}/friends?{% if profile.friend == 0 %}add{% else %}remove{% endif %}={{ profile.user.id }}&session={{ php.sessionid }}&time={{ php.time }}&redirect={{ sakura.currentpage }}" id="profileFriendToggle"></a>
|
||||||
<a class="fa fa-flag" title="Report {{ profile.user.username }}" href="//{{ sakura.urls.main }}/report/{{ profile.user.id }}"></a>
|
<a class="fa fa-flag" title="Report {{ profile.user.username }}" href="//{{ sakura.urls.main }}/report/{{ profile.user.id }}"></a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -39,7 +39,7 @@ if(isset($_REQUEST['mode'])) {
|
||||||
$renderData['page'] = [
|
$renderData['page'] = [
|
||||||
'title' => 'Action failed',
|
'title' => 'Action failed',
|
||||||
'redirect' => '/authenticate',
|
'redirect' => '/authenticate',
|
||||||
'message' => 'Session IDs do not match.',
|
'message' => 'Invalid session, please try again.',
|
||||||
'success' => 0
|
'success' => 0
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,8 @@ if(isset($_GET['u'])) {
|
||||||
'online' => Users::checkUserOnline($_PROFILE_USER_DATA['id']),
|
'online' => Users::checkUserOnline($_PROFILE_USER_DATA['id']),
|
||||||
'profilePage' => Users::getProfilePage($_PROFILE_PROFILE_DATA, true),
|
'profilePage' => Users::getProfilePage($_PROFILE_PROFILE_DATA, true),
|
||||||
'fields' => Users::getUserProfileFields($_PROFILE_PROFILE_DATA, true),
|
'fields' => Users::getUserProfileFields($_PROFILE_PROFILE_DATA, true),
|
||||||
'warnings' => Users::getWarnings($_PROFILE_USER_DATA['id'])
|
'warnings' => Users::getWarnings($_PROFILE_USER_DATA['id']),
|
||||||
|
'friend' => Users::checkFriend($_PROFILE_USER_DATA['id'])
|
||||||
];
|
];
|
||||||
|
|
||||||
$renderData['page'] = [
|
$renderData['page'] = [
|
||||||
|
|
|
@ -49,32 +49,135 @@ if(isset($_REQUEST['request-notifications']) && $_REQUEST['request-notifications
|
||||||
// Friends
|
// Friends
|
||||||
} elseif(isset($_REQUEST['friend-action']) && $_REQUEST['friend-action']) {
|
} elseif(isset($_REQUEST['friend-action']) && $_REQUEST['friend-action']) {
|
||||||
|
|
||||||
if(!isset($_REQUEST['session']) || $_REQUEST['session'] !== session_id()) {
|
// Continue
|
||||||
print Templates::render('errors/information.tpl', array_merge($renderData, ['page' => ['redirect' => $_SERVER['PHP_SELF'], 'message' => 'Invalid session ID, please try again.', 'title' => 'Information']]));
|
$continue = true;
|
||||||
exit;
|
|
||||||
|
// Referrer
|
||||||
|
$redirect = isset($_REQUEST['redirect']) ? $_REQUEST['redirect'] : (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/');
|
||||||
|
|
||||||
|
// Compare time and session so we know the link isn't forged
|
||||||
|
if(!isset($_REQUEST['add']) && !isset($_REQUEST['remove'])) {
|
||||||
|
|
||||||
|
$renderData['page'] = [
|
||||||
|
'title' => 'Action failed',
|
||||||
|
'redirect' => $redirect,
|
||||||
|
'message' => 'One of the required operators isn\'t set.',
|
||||||
|
'success' => 0
|
||||||
|
];
|
||||||
|
|
||||||
|
// Prevent
|
||||||
|
$continue = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if((!isset($_REQUEST['add']) && !isset($_REQUEST['remove'])) || !isset($_REQUEST['time'])) {
|
// Compare time and session so we know the link isn't forged
|
||||||
print Templates::render('errors/information.tpl', array_merge($renderData, ['page' => ['redirect' => $_SERVER['PHP_SELF'], 'message' => 'One or more required parameter is not set.', 'title' => 'Information']]));
|
if($_REQUEST[(isset($_REQUEST['add']) ? 'add' : 'remove')] == Session::$userId) {
|
||||||
exit;
|
|
||||||
|
$renderData['page'] = [
|
||||||
|
'title' => 'Action failed',
|
||||||
|
'redirect' => $redirect,
|
||||||
|
'message' => 'You can\'t be friends with yourself, stop trying to bend reality.',
|
||||||
|
'success' => 0
|
||||||
|
];
|
||||||
|
|
||||||
|
// Prevent
|
||||||
|
$continue = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if((isset($_REQUEST['add']) && $_REQUEST['add'] == Session::$userId) || (isset($_REQUEST['remove']) && $_REQUEST['remove'] == Session::$userId)) {
|
// Compare time and session so we know the link isn't forged
|
||||||
print Templates::render('errors/information.tpl', array_merge($renderData, ['page' => ['redirect' => $_SERVER['PHP_SELF'], 'message' => 'Can\'t add yourself as a friend.', 'title' => 'Information']]));
|
if(!isset($_REQUEST['time']) || $_REQUEST['time'] < time() - 1000) {
|
||||||
exit;
|
|
||||||
|
$renderData['page'] = [
|
||||||
|
'title' => 'Action failed',
|
||||||
|
'redirect' => $redirect,
|
||||||
|
'message' => 'Timestamps differ too much, refresh the page and try again.',
|
||||||
|
'success' => 0
|
||||||
|
];
|
||||||
|
|
||||||
|
// Prevent
|
||||||
|
$continue = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$add = Users::addFriend($_REQUEST['add']);
|
// Match session ids for the same reason
|
||||||
print $add[1];
|
if(!isset($_REQUEST['session']) || $_REQUEST['session'] != session_id()) {
|
||||||
if($add[0]) {
|
|
||||||
|
$renderData['page'] = [
|
||||||
|
'title' => 'Action failed',
|
||||||
|
'redirect' => $redirect,
|
||||||
|
'message' => 'Invalid session, please try again.',
|
||||||
|
'success' => 0
|
||||||
|
];
|
||||||
|
|
||||||
|
// Prevent
|
||||||
|
$continue = false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Continue if nothing fucked up
|
||||||
|
if($continue) {
|
||||||
|
|
||||||
|
// Execute the action
|
||||||
|
$action = (isset($_REQUEST['add']) ? Users::addFriend($_REQUEST['add']) : Users::removeFriend($_REQUEST['remove']));
|
||||||
|
|
||||||
|
// Set the messages
|
||||||
|
$messages = [
|
||||||
|
'USER_NOT_EXIST' => 'The user you tried to add doesn\'t exist.',
|
||||||
|
'ALREADY_FRIENDS' => 'You are already friends with this person!',
|
||||||
|
'FRIENDS' => 'You are now mutual friends!',
|
||||||
|
'NOT_MUTUAL' => 'A friend request has been sent to this person.',
|
||||||
|
'ALREADY_REMOVED' => 'You aren\'t friends with this person.',
|
||||||
|
'REMOVED' => 'Removed this person from your friends list.'
|
||||||
|
];
|
||||||
|
|
||||||
|
// Notification strings
|
||||||
|
$notifStrings = [
|
||||||
|
'FRIENDS' => ['%s accepted your friend request!', 'You can now do mutual friend things!'],
|
||||||
|
'NOT_MUTUAL' => ['%s added you as a friend!', 'Click here to add them as well.'],
|
||||||
|
'REMOVED' => ['%s removed you from their friends.', 'You can no longer do friend things now ;_;']
|
||||||
|
];
|
||||||
|
|
||||||
|
// Add page specific things
|
||||||
|
$renderData['page'] = [
|
||||||
|
'title' => 'Managing Friends',
|
||||||
|
'redirect' => $redirect,
|
||||||
|
'message' => $messages[$action[1]],
|
||||||
|
'success' => $action[0]
|
||||||
|
];
|
||||||
|
|
||||||
|
// Create a notification
|
||||||
|
if(array_key_exists($action[1], $notifStrings)) {
|
||||||
|
|
||||||
|
// Get the current user's profile data
|
||||||
$user = Users::getUser(Session::$userId);
|
$user = Users::getUser(Session::$userId);
|
||||||
Users::createNotification($_REQUEST['add'], $user['username'] .' added you as a friend!', 'If you aren\'t mutual friends yet click here to add them as well.', 60000, '//'. Configuration::getLocalConfig('urls', 'main') .'/a/'. $user['id'], '//'. Configuration::getLocalConfig('urls', 'main') .'/u/'. $user['id'], '1');
|
|
||||||
print Templates::render('errors/information.tpl', array_merge($renderData, ['page' => ['redirect' => $_SERVER['PHP_SELF'], 'message' => 'You are now friends!', 'title' => 'Information']]));
|
Users::createNotification(
|
||||||
exit;
|
$_REQUEST[(isset($_REQUEST['add']) ? 'add' : 'remove')],
|
||||||
} else {
|
sprintf($notifStrings[$action[1]][0], $user['username']),
|
||||||
print Templates::render('errors/information.tpl', array_merge($renderData, ['page' => ['redirect' => $_SERVER['PHP_SELF'], 'message' => 'Something went wrong.', 'title' => 'Information']]));
|
$notifStrings[$action[1]][1],
|
||||||
exit;
|
60000,
|
||||||
|
'//'. Configuration::getLocalConfig('urls', 'main') .'/a/'. $user['id'],
|
||||||
|
'//'. Configuration::getLocalConfig('urls', 'main') .'/u/'. $user['id'],
|
||||||
|
'1'
|
||||||
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print page contents or if the AJAX request is set only display the render data
|
||||||
|
print isset($_REQUEST['ajax']) ?
|
||||||
|
(
|
||||||
|
$renderData['page']['title']
|
||||||
|
. '|'
|
||||||
|
. $renderData['page']['message']
|
||||||
|
. '|'
|
||||||
|
. $renderData['page']['success']
|
||||||
|
. '|'
|
||||||
|
. $renderData['page']['redirect']
|
||||||
|
) :
|
||||||
|
Templates::render('errors/information.tpl', $renderData);
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue