Skip to content

Commit ccf1db0

Browse files
authored
Merge pull request #233 from mdziekon/gh-230-planet-name-change-refactor
GH-230 | Overview - Planet name change screen refactor
2 parents 35cfd8a + 41cbccf commit ccf1db0

File tree

19 files changed

+336
-97
lines changed

19 files changed

+336
-97
lines changed

common/_includes.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
include($includePath . './exceptions.php');
66

7+
include($includePath . './components/GalaxyPlanetLink/GalaxyPlanetLink.component.php');
8+
79
include($includePath . './modules/uni/utils/isEmailDomainBanned.util.php');
810

11+
include($includePath . './utils/routing/galaxy.routing.php');
12+
913
?>
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace UniEngine\Engine\Common\Components\GalaxyPlanetLink;
4+
5+
use UniEngine\Engine\Common\Utils\Routing;
6+
7+
/**
8+
* @param array $props
9+
* @param array $props['coords']
10+
* @param number $props['coords']['galaxy']
11+
* @param number $props['coords']['system']
12+
* @param number $props['coords']['planet']
13+
*/
14+
function render($props) {
15+
$linkText = "[{$props['coords']['galaxy']}:{$props['coords']['system']}:{$props['coords']['planet']}]";
16+
17+
return buildDOMElementHTML([
18+
'tagName' => 'a',
19+
'contentHTML' => $linkText,
20+
'attrs' => [
21+
'href' => Routing\getGalaxyTargetUrl($props['coords']),
22+
],
23+
]);
24+
}
25+
26+
?>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php
2+
3+
header("Location: ../index.php");
4+
5+
?>

common/components/index.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php
2+
3+
header("Location: ../index.php");
4+
5+
?>

common/utils/index.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php
2+
3+
header("Location: ../index.php");
4+
5+
?>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace UniEngine\Engine\Common\Utils\Routing;
4+
5+
/**
6+
* @param array $params
7+
* @param number $params['galaxy']
8+
* @param number $params['system']
9+
* @param number $params['planet']
10+
*/
11+
function getGalaxyTargetUrl($params) {
12+
return buildHref([
13+
'path' => 'galaxy.php',
14+
'query' => [
15+
'mode' => '3',
16+
'galaxy' => $params['galaxy'],
17+
'system' => $params['system'],
18+
'planet' => $params['planet'],
19+
],
20+
]);
21+
}
22+
23+
?>

common/utils/routing/index.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php
2+
3+
header("Location: ../index.php");
4+
5+
?>

modules/overview/_includes.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@
1616
include($includePath . './screens/FirstLogin/utils/effects/updateUserOnFirstLogin.effect.php');
1717
include($includePath . './screens/FirstLogin/utils/helpers/getReferrerTasksData.helper.php');
1818

19+
include($includePath . './screens/PlanetNameChange/PlanetNameChange.screen.php');
20+
include($includePath . './screens/PlanetNameChange/PlanetNameChange.utils.php');
21+
include($includePath . './screens/PlanetNameChange/utils/errorMappers/validateNewName.errorMapper.php');
22+
include($includePath . './screens/PlanetNameChange/utils/validators/validateNewName.validator.php');
23+
1924
});
2025

2126
?>
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?php
2+
3+
namespace UniEngine\Engine\Modules\Overview\Screens\PlanetNameChange;
4+
5+
use UniEngine\Engine\Common;
6+
use UniEngine\Engine\Modules\Overview\Screens\PlanetNameChange;
7+
8+
/**
9+
* @param array $params
10+
* @param arrayRef $params['input']
11+
* @param arrayRef $params['user']
12+
* @param arrayRef $params['planet']
13+
*/
14+
function render($props) {
15+
global $_Lang;
16+
17+
$input = &$props['input'];
18+
$user = &$props['user'];
19+
$planet = &$props['planet'];
20+
21+
$effectsResult = PlanetNameChange\runEffects([
22+
'input' => &$input,
23+
'user' => &$user,
24+
'planet' => &$planet,
25+
]);
26+
27+
$screenTitle = $_Lang['Rename_TitleMain'];
28+
$localTemplateLoader = createLocalTemplateLoader(__DIR__);
29+
30+
$isOnPlanet = $planet['planet_type'] == 1;
31+
$galaxyPlanetLink = Common\Components\GalaxyPlanetLink\render([
32+
'coords' => $planet,
33+
]);
34+
35+
$tplBodyParams = [
36+
'Rename_CurrentName' => sprintf(
37+
$_Lang['Rename_CurrentName'],
38+
(
39+
$isOnPlanet ?
40+
$_Lang['Rename_Planet'] :
41+
$_Lang['Rename_Moon']
42+
)
43+
),
44+
'Rename_Ins_CurrentName' => "{$planet['name']} {$galaxyPlanetLink}",
45+
46+
'Rename_Ins_MsgHide' => (
47+
$effectsResult['isSuccess'] === null ?
48+
'style="display: none;"' :
49+
''
50+
),
51+
'Rename_Ins_MsgColor' => (
52+
$effectsResult['isSuccess'] !== null ?
53+
$effectsResult['payload']['color'] :
54+
''
55+
),
56+
'Rename_Ins_MsgTxt' => (
57+
$effectsResult['isSuccess'] !== null ?
58+
$effectsResult['payload']['message'] :
59+
''
60+
),
61+
];
62+
$tplBodyParams = array_merge($_Lang, $tplBodyParams);
63+
64+
$componentHTML = parsetemplate(
65+
$localTemplateLoader('body'),
66+
$tplBodyParams
67+
);
68+
69+
display($componentHTML, $screenTitle);
70+
}
71+
72+
?>
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<?php
2+
3+
namespace UniEngine\Engine\Modules\Overview\Screens\PlanetNameChange;
4+
5+
use UniEngine\Engine\Modules\Overview\Screens\PlanetNameChange;
6+
7+
/**
8+
* @param array $params
9+
* @param arrayRef $params['input']
10+
* @param arrayRef $params['user']
11+
* @param arrayRef $params['planet']
12+
*/
13+
function runEffects($props) {
14+
global $_Lang;
15+
16+
$input = &$props['input'];
17+
$user = &$props['user'];
18+
$planet = &$props['planet'];
19+
20+
if (
21+
!isset($input['action']) ||
22+
$input['action'] != 'do'
23+
) {
24+
return [
25+
'isSuccess' => null,
26+
];
27+
}
28+
29+
$newName = (
30+
isset($input['set_newname']) ?
31+
trim($input['set_newname']) :
32+
''
33+
);
34+
35+
$nameChangeValidationResult = PlanetNameChange\Utils\Validators\validateNewName([
36+
'input' => [
37+
'newName' => $newName,
38+
],
39+
'planet' => &$planet,
40+
]);
41+
42+
if (!$nameChangeValidationResult['isSuccess']) {
43+
$errorMessage = PlanetNameChange\Utils\ErrorMappers\mapValidateNewNameErrorToReadableMessage(
44+
$nameChangeValidationResult['error']
45+
);
46+
47+
return [
48+
'isSuccess' => false,
49+
'payload' => [
50+
'message' => $errorMessage,
51+
'color' => 'red',
52+
],
53+
];
54+
}
55+
56+
$planet['name'] = $newName;
57+
58+
doquery("UPDATE {{table}} SET `name` = '{$newName}' WHERE `id` = {$user['current_planet']} LIMIT 1;", 'planets');
59+
60+
return [
61+
'isSuccess' => true,
62+
'payload' => [
63+
'message' => $_Lang['RenamePlanet_NameSaved'],
64+
'color' => 'lime',
65+
],
66+
];
67+
}
68+
69+
?>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php
2+
3+
header("Location: ../index.php");
4+
5+
?>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php
2+
3+
header("Location: ../index.php");
4+
5+
?>
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace UniEngine\Engine\Modules\Overview\Screens\PlanetNameChange\Utils\ErrorMappers;
4+
5+
/**
6+
* @param object $error As returned by Overview\Screens\PlanetNameChange\Utils\Validators\validateNewName
7+
*/
8+
function mapValidateNewNameErrorToReadableMessage($error) {
9+
global $_Lang;
10+
11+
$errorCode = $error['code'];
12+
13+
$knownErrorsByCode = [
14+
'NEW_NAME_EMPTY' => $_Lang['RenamePlanet_0Lenght'],
15+
'NEW_NAME_SAME_AS_OLD' => $_Lang['RenamePlanet_SameName'],
16+
'NEW_NAME_TOO_SHORT' => $_Lang['RenamePlanet_TooShort'],
17+
'NEW_NAME_TOO_LONG' => $_Lang['RenamePlanet_TooLong'],
18+
'NEW_NAME_INVALID' => $_Lang['RenamePlanet_BadSigns'],
19+
];
20+
21+
if (!isset($knownErrorsByCode[$errorCode])) {
22+
return $_Lang['sys_unknownError'];
23+
}
24+
25+
return $knownErrorsByCode[$errorCode];
26+
}
27+
28+
?>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php
2+
3+
header("Location: ../index.php");
4+
5+
?>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php
2+
3+
header("Location: ../index.php");
4+
5+
?>
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
3+
namespace UniEngine\Engine\Modules\Overview\Screens\PlanetNameChange\Utils\Validators;
4+
5+
/**
6+
* @param array $params
7+
* @param array $params['input']
8+
* @param string $params['input']['newName']
9+
* @param arrayRef $params['planet']
10+
*/
11+
function validateNewName($params) {
12+
$planet = &$params['planet'];
13+
14+
$executor = function ($input, $resultHelpers) use (&$planet) {
15+
$newName = $input['newName'];
16+
17+
$currentName = $planet['name'];
18+
19+
$MIN_LENGTH = 3;
20+
$MAX_LENGTH = 20;
21+
22+
if (empty($newName)) {
23+
return $resultHelpers['createFailure']([
24+
'code' => 'NEW_NAME_EMPTY',
25+
]);
26+
}
27+
if ($newName == $currentName) {
28+
return $resultHelpers['createFailure']([
29+
'code' => 'NEW_NAME_SAME_AS_OLD',
30+
]);
31+
}
32+
33+
$newNameLength = strlen($newName);
34+
35+
if ($newNameLength < $MIN_LENGTH) {
36+
return $resultHelpers['createFailure']([
37+
'code' => 'NEW_NAME_TOO_SHORT',
38+
'params' => [
39+
'minLength' => $MIN_LENGTH
40+
],
41+
]);
42+
}
43+
if ($newNameLength > $MAX_LENGTH) {
44+
return $resultHelpers['createFailure']([
45+
'code' => 'NEW_NAME_TOO_LONG',
46+
'params' => [
47+
'maxLength' => $MAX_LENGTH
48+
],
49+
]);
50+
}
51+
if (!preg_match(REGEXP_PLANETNAME_ABSOLUTE, $newName)) {
52+
return $resultHelpers['createFailure']([
53+
'code' => 'NEW_NAME_INVALID',
54+
]);
55+
}
56+
57+
return $resultHelpers['createSuccess']([]);
58+
};
59+
60+
return createFuncWithResultHelpers($executor)($params['input']);
61+
}
62+
63+
?>

0 commit comments

Comments
 (0)