Skip to content

Commit

Permalink
GH-224 Move ignore user checks to an util
Browse files Browse the repository at this point in the history
  • Loading branch information
mdziekon committed Jun 14, 2022
1 parent 989f352 commit 1f4ace5
Show file tree
Hide file tree
Showing 4 changed files with 149 additions and 56 deletions.
2 changes: 2 additions & 0 deletions modules/settings/_includes.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@
include($includePath . './utils/content/prepareChangeProcessEmails.content.php');

include($includePath . './utils/errorMappers/tryEnableVacation.errorMapper.php');
include($includePath . './utils/errorMappers/tryIgnoreUser.errorMapper.php');
include($includePath . './utils/errorMappers/validatePasswordChange.errorMapper.php');
include($includePath . './utils/errorMappers/validateEmailChange.errorMapper.php');

include($includePath . './utils/helpers/tryEnableVacation.helper.php');
include($includePath . './utils/helpers/tryIgnoreUser.helper.php');

include($includePath . './utils/queries/createEmailChangeProcessEntry.query.php');
include($includePath . './utils/queries/getMovingFleetsCount.query.php');
Expand Down
28 changes: 28 additions & 0 deletions modules/settings/utils/errorMappers/tryIgnoreUser.errorMapper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace UniEngine\Engine\Modules\Settings\Utils\ErrorMappers;

/**
* @param object $error As returned by Settings\Utils\Helpers\tryIgnoreUser
*/
function mapTryIgnoreUserErrorToReadableMessage($error) {
global $_Lang;

$errorCode = $error['code'];

$knownErrorsByCode = [
'CANT_IGNORE_YOURSELF' => $_Lang['Ignore_CannotIgnoreYourself'],
'INVALID_USER_SELECTOR' => $_Lang['Ignore_BadSignsOrShort'],
'USER_NOT_FOUND' => $_Lang['Ignore_UserNoExists'],
'CANT_IGNORE_GAMETEAM_MEMBER' => $_Lang['Ignore_CannotIgnoreGameTeam'],
'USER_ALREADY_IGNORED' => $_Lang['Ignore_ThisUserAlreadyIgnored'],
];

if (!isset($knownErrorsByCode[$errorCode])) {
return $_Lang['fleet_generic_errors_unknown'];
}

return $knownErrorsByCode[$errorCode];
}

?>
93 changes: 93 additions & 0 deletions modules/settings/utils/helpers/tryIgnoreUser.helper.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
<?php

namespace UniEngine\Engine\Modules\Settings\Utils\Helpers;

/**
* @param array $params
* @param array $params['userToIgnore']
* @param stringEnum $params['userToIgnore']['selectorType'] ('username' | 'id')
* @param string $params['userToIgnore']['selectorValue']
* @param arrayRef $params['currentUser']
*/
function tryIgnoreUser($params) {
$executor = function ($input, $resultHelpers) {
$currentUser = &$input['currentUser'];
$userToIgnore = $input['userToIgnore'];

if ($userToIgnore['selectorType'] === 'username') {
if (strtolower($userToIgnore['selectorValue']) == strtolower($currentUser['username'])) {
return $resultHelpers['createFailure']([
'code' => 'CANT_IGNORE_YOURSELF',
]);
}
if (!preg_match(REGEXP_USERNAME_ABSOLUTE, $userToIgnore['selectorValue'])) {
return $resultHelpers['createFailure']([
'code' => 'INVALID_USER_SELECTOR',
]);
}
}
if ($userToIgnore['selectorType'] === 'id') {
if ($userToIgnore['selectorValue'] == $currentUser['id']) {
return $resultHelpers['createFailure']([
'code' => 'CANT_IGNORE_YOURSELF',
]);
}
if ($userToIgnore['selectorValue'] <= 0) {
return $resultHelpers['createFailure']([
'code' => 'INVALID_USER_SELECTOR',
]);
}
}

$ignoreUserSelector = (
$userToIgnore['selectorType'] === 'username' ?
[
'column' => 'username',
'value' => "'{$userToIgnore['selectorValue']}'",
] :
[
'column' => 'id',
'value' => "{$userToIgnore['selectorValue']}",
]
);

$fetchUserQuery = (
"SELECT " .
"`id`, `username`, `authlevel` " .
"FROM {{table}} " .
"WHERE " .
"`{$ignoreUserSelector['column']}` = {$ignoreUserSelector['value']} " .
"LIMIT 1 " .
"; -- UniEngine\Engine\Modules\Settings\Utils\Helpers\tryIgnoreUser::fetchUserQuery"
);

$fetchUserResult = doquery($fetchUserQuery, 'users', true);

if (!$fetchUserResult) {
return $resultHelpers['createFailure']([
'code' => 'USER_NOT_FOUND',
]);
}
if (CheckAuth('user', AUTHCHECK_HIGHER, $fetchUserResult)) {
return $resultHelpers['createFailure']([
'code' => 'CANT_IGNORE_GAMETEAM_MEMBER',
]);
}

$ignoreUserId = $fetchUserResult['id'];

if (!empty($currentUser['IgnoredUsers'][$ignoreUserId])) {
return $resultHelpers['createFailure']([
'code' => 'USER_ALREADY_IGNORED',
]);
}

return $resultHelpers['createSuccess']([
'ignoreUser' => $fetchUserResult,
]);
};

return createFuncWithResultHelpers($executor)($params);
}

?>
82 changes: 26 additions & 56 deletions settings.php
Original file line number Diff line number Diff line change
Expand Up @@ -852,66 +852,36 @@
}
else if(!empty($_POST['ignore_username']) OR !empty($_GET['ignoreadd']))
{
if(!empty($_GET['ignoreadd']) AND empty($_POST['ignore_username']))
{
if (
!empty($_GET['ignoreadd']) &&
empty($_POST['ignore_username'])
) {
$IgnoreUser = intval($_GET['ignoreadd']);
$InputType = 'id';
}
else
{
} else {
$IgnoreUser = (isset($_POST['ignore_username']) ? trim($_POST['ignore_username']) : null);
$InputType = 'un';
$InputType = 'username';
}
if((strtolower($IgnoreUser) != strtolower($_User['username']) AND $InputType == 'un') OR ($IgnoreUser != $_User['id'] AND $InputType == 'id'))
{
if((preg_match(REGEXP_USERNAME_ABSOLUTE, $IgnoreUser) AND $InputType == 'un') OR ($IgnoreUser > 0 AND $InputType == 'id'))
{
$Query_CheckUser = '';
$Query_CheckUser .= "SELECT `id`, `username`, `authlevel` FROM {{table}} ";
$Query_CheckUser .= "WHERE ";
if($InputType == 'un')
{
$Query_CheckUser .= "`username` = '{$IgnoreUser}'";
}
else
{
$Query_CheckUser .= "`id` = {$IgnoreUser}";
}
$Query_CheckUser .= " LIMIT 1; -- settings.php|IgnoreSystem|CheckUser";
$Result_CheckUser = doquery($Query_CheckUser, 'users', true);
if($Result_CheckUser['id'] > 0)
{
if(!CheckAuth('user', AUTHCHECK_HIGHER, $Result_CheckUser))
{
if(empty($_User['IgnoredUsers'][$Result_CheckUser['id']]))
{
$_User['IgnoredUsers'][$Result_CheckUser['id']] = $Result_CheckUser['username'];
doquery("INSERT INTO {{table}} (`OwnerID`, `IgnoredID`) VALUES ({$_User['id']}, {$Result_CheckUser['id']}); -- settings.php|IgnoreSystem|Insert", 'ignoresystem');
$InfoMsgs[] = $_Lang['Ignore_UserAdded'];
}
else
{
$NoticeMsgs[] = $_Lang['Ignore_ThisUserAlreadyIgnored'];
}
}
else
{
$WarningMsgs[] = $_Lang['Ignore_CannotIgnoreGameTeam'];
}
}
else
{
$WarningMsgs[] = $_Lang['Ignore_UserNoExists'];
}
}
else
{
$WarningMsgs[] = $_Lang['Ignore_BadSignsOrShort'];
}
}
else
{
$WarningMsgs[] = $_Lang['Ignore_CannotIgnoreYourself'];

$tryIgnoreUserResult = Settings\Utils\Helpers\tryIgnoreUser([
'currentUser' => &$_User,
'userToIgnore' => [
'selectorType' => $InputType,
'selectorValue' => $IgnoreUser,
],
]);

if (!$tryIgnoreUserResult['isSuccess']) {
$WarningMsgs[] = Settings\Utils\ErrorMappers\mapTryIgnoreUserErrorToReadableMessage(
$tryIgnoreUserResult['error']
);
} else {
$ignoreUser = $tryIgnoreUserResult['payload']['ignoreUser'];

$_User['IgnoredUsers'][$ignoreUser['id']] = $ignoreUser['username'];
doquery("INSERT INTO {{table}} (`OwnerID`, `IgnoredID`) VALUES ({$_User['id']}, {$ignoreUser['id']}); -- settings.php|IgnoreSystem|Insert", 'ignoresystem');

$InfoMsgs[] = $_Lang['Ignore_UserAdded'];
}
}
}
Expand Down

0 comments on commit 1f4ace5

Please sign in to comment.