Skip to content

Commit f6e5c76

Browse files
Daniil TkachevAshrafOxid
Daniil Tkachev
authored andcommitted
OXDEV-7202 Add restriction for updatable fields user register
1 parent 4ff5dd1 commit f6e5c76

File tree

6 files changed

+187
-23
lines changed

6 files changed

+187
-23
lines changed

CHANGELOG-7.0.md

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
### Fixed
66
- Fix skipped backend startup checks [PR-927](https://github.com/OXID-eSales/oxideshop_ce/pull/927)
7+
- Private Sales user registration
78

89
## v7.0.2 - 2023-11-28
910

source/Application/Component/UserComponent.php

+7-7
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
use OxidEsales\Eshop\Core\Form\UpdatableFieldsConstructor;
1616
use Exception;
1717
use OxidEsales\Eshop\Core\Contract\AbstractUpdatableFields;
18-
use OxidEsales\Eshop\Application\Model\User\UserUpdatableFields;
19-
use OxidEsales\Eshop\Application\Model\User\UserShippingAddressUpdatableFields;
18+
use OxidEsales\Eshop\Application\Model\Address\ShippingAddressUpdatableFields;
19+
use OxidEsales\Eshop\Application\Model\User\UserInvoiceAddressUpdatableFields;
2020
use OxidEsales\EshopCommunity\Application\Model\User;
2121

2222
// defining login/logout states
@@ -433,12 +433,11 @@ public function createUser()
433433
$sPassword2 = Registry::getRequest()->getRequestParameter('lgn_pwd2');
434434

435435
$aInvAdress = Registry::getRequest()->getRequestParameter('invadr');
436-
437-
$aInvAdress = $this->cleanAddress($aInvAdress, oxNew(UserUpdatableFields::class));
436+
$aInvAdress = $this->cleanAddress($aInvAdress, oxNew(UserInvoiceAddressUpdatableFields::class));
438437
$aInvAdress = $this->trimAddress($aInvAdress);
439438

440439
$aDelAdress = $this->getDelAddressData();
441-
$aDelAdress = $this->cleanAddress($aDelAdress, oxNew(UserShippingAddressUpdatableFields::class));
440+
$aDelAdress = $this->cleanAddress($aDelAdress, oxNew(ShippingAddressUpdatableFields::class));
442441
$aDelAdress = $this->trimAddress($aDelAdress);
443442

444443
try {
@@ -462,6 +461,7 @@ public function createUser()
462461
$oUser->createUser();
463462
$oUser = $this->configureUserBeforeCreation($oUser);
464463
$oUser->load($oUser->getId());
464+
465465
$oUser->changeUserData(
466466
$oUser->oxuser__oxusername->value,
467467
$sPassword,
@@ -671,12 +671,12 @@ protected function changeUserWithoutRedirect()
671671

672672
// collecting values to check
673673
$aDelAdress = $this->getDelAddressData();
674-
$aDelAdress = $this->cleanAddress($aDelAdress, oxNew(UserShippingAddressUpdatableFields::class));
674+
$aDelAdress = $this->cleanAddress($aDelAdress, oxNew(ShippingAddressUpdatableFields::class));
675675
$aDelAdress = $this->trimAddress($aDelAdress);
676676

677677
// if user company name, user name and additional info has special chars
678678
$aInvAdress = Registry::getRequest()->getRequestParameter('invadr');
679-
$aInvAdress = $this->cleanAddress($aInvAdress, oxNew(UserUpdatableFields::class));
679+
$aInvAdress = $this->cleanAddress($aInvAdress, oxNew(UserInvoiceAddressUpdatableFields::class));
680680
$aInvAdress = $this->trimAddress($aInvAdress);
681681

682682
$sUserName = $oUser->oxuser__oxusername->value;

source/Application/Model/User/UserShippingAddressUpdatableFields.php source/Application/Model/Address/ShippingAddressUpdatableFields.php

+4-16
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,18 @@
55
* See LICENSE file for license details.
66
*/
77

8-
namespace OxidEsales\EshopCommunity\Application\Model\User;
8+
namespace OxidEsales\EshopCommunity\Application\Model\Address;
99

1010
use OxidEsales\Eshop\Application\Model\Address;
1111
use OxidEsales\Eshop\Core\Contract\AbstractUpdatableFields;
1212

13-
/**
14-
* @inheritdoc
15-
*/
16-
class UserShippingAddressUpdatableFields extends AbstractUpdatableFields
13+
class ShippingAddressUpdatableFields extends AbstractUpdatableFields
1714
{
18-
/**
19-
* UserShippingAddressUpdatableFields constructor.
20-
*/
2115
public function __construct()
2216
{
23-
$address = oxNew(Address::class);
24-
$this->tableName = $address->getCoreTableName();
17+
$user = oxNew(Address::class);
18+
$this->tableName = $user->getCoreTableName();
2519
}
26-
27-
/**
28-
* Return list of fields which could be updated by shop customer.
29-
*
30-
* @return array
31-
*/
3220
public function getUpdatableFields()
3321
{
3422
return [
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
3+
/**
4+
* Copyright © OXID eSales AG. All rights reserved.
5+
* See LICENSE file for license details.
6+
*/
7+
8+
namespace OxidEsales\EshopCommunity\Application\Model\User;
9+
10+
/**
11+
* @inheritdoc
12+
*/
13+
class UserInvoiceAddressUpdatableFields extends UserUpdatableFields
14+
{
15+
public function getUpdatableFields()
16+
{
17+
return [
18+
'OXUSERNAME',
19+
'OXCUSTNR',
20+
'OXUSTID',
21+
'OXCOMPANY',
22+
'OXFNAME',
23+
'OXLNAME',
24+
'OXSTREET',
25+
'OXSTREETNR',
26+
'OXADDINFO',
27+
'OXCITY',
28+
'OXCOUNTRYID',
29+
'OXSTATEID',
30+
'OXZIP',
31+
'OXFON',
32+
'OXFAX',
33+
'OXSAL',
34+
'OXCREATE',
35+
'OXREGISTER',
36+
'OXPRIVFON',
37+
'OXMOBFON',
38+
'OXBIRTHDATE',
39+
'OXURL',
40+
'OXUPDATEKEY',
41+
'OXUPDATEEXP',
42+
'OXTIMESTAMP'
43+
];
44+
}
45+
}

source/Core/Autoload/UnifiedNameSpaceClassMap.php

+6
Original file line numberDiff line numberDiff line change
@@ -2079,6 +2079,12 @@
20792079
'isInterface' => false,
20802080
'isDeprecated' => false
20812081
],
2082+
'OxidEsales\Eshop\Application\Model\User\UserInvoiceAddressUpdatableFields' => [
2083+
'editionClassName' => \OxidEsales\EshopCommunity\Application\Model\User\UserInvoiceAddressUpdatableFields::class,
2084+
'isAbstract' => false,
2085+
'isInterface' => false,
2086+
'isDeprecated' => false
2087+
],
20822088
'OxidEsales\Eshop\Application\Model\User\UserUpdatableFields' => [
20832089
'editionClassName' => \OxidEsales\EshopCommunity\Application\Model\User\UserUpdatableFields::class,
20842090
'isAbstract' => false,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
<?php
2+
3+
/**
4+
* Copyright © OXID eSales AG. All rights reserved.
5+
* See LICENSE file for license details.
6+
*/
7+
8+
declare(strict_types=1);
9+
10+
namespace OxidEsales\EshopCommunity\Tests\Integration\Application\Component;
11+
12+
use OxidEsales\Eshop\Application\Component\UserComponent;
13+
use OxidEsales\Eshop\Application\Controller\FrontendController;
14+
use OxidEsales\Eshop\Core\Registry;
15+
use OxidEsales\Eshop\Core\Session;
16+
use OxidEsales\EshopCommunity\Internal\Framework\Database\QueryBuilderFactoryInterface;
17+
use OxidEsales\EshopCommunity\Tests\Integration\IntegrationTestCase;
18+
19+
final class UserComponentTest extends IntegrationTestCase
20+
{
21+
public function testCreateUserFields(): void
22+
{
23+
Registry::getConfig()->setConfigParam('blPsLoginEnabled', true);
24+
25+
$userComponentMock = $this->getUserComponent();
26+
$userComponentMock->createUser();
27+
$user = $this->fetchUserData();
28+
29+
$this->assertEquals('fname', $user['OXFNAME']);
30+
$this->assertEquals('lname', $user['OXLNAME']);
31+
$this->assertEquals('street', $user['OXSTREET']);
32+
$this->assertEquals('zip', $user['OXZIP']);
33+
$this->assertEquals('nr', $user['OXSTREETNR']);
34+
$this->assertEquals('city', $user['OXCITY']);
35+
$this->assertEquals('a7c40f631fc920687.20179984', $user['OXCOUNTRYID']);
36+
}
37+
38+
public function testCreateUserResponse(): void
39+
{
40+
Registry::getConfig()->setConfigParam('blPsLoginEnabled', true);
41+
$userComponentMock = $this->getUserComponent();
42+
$createUserReturn = $userComponentMock->createUser();
43+
44+
$this->assertEquals('payment?new_user=1&success=1', $createUserReturn);
45+
}
46+
47+
public function testCreateUserPrivateSales(): void
48+
{
49+
Registry::getConfig()->setConfigParam('blPsLoginEnabled', true);
50+
51+
$userComponentMock = $this->getUserComponent();
52+
$userComponentMock->createUser();
53+
$user = $this->fetchUserData();
54+
55+
$this->assertEquals(0, $user['OXACTIVE']);
56+
}
57+
58+
public function testCreateUser(): void
59+
{
60+
Registry::getConfig()->setConfigParam('blPsLoginEnabled', false);
61+
62+
$userComponentMock = $this->getUserComponent();
63+
$userComponentMock->createUser();
64+
$user = $this->fetchUserData();
65+
66+
$this->assertEquals(1, $user['OXACTIVE']);
67+
}
68+
69+
private function getUserComponent(): UserComponent
70+
{
71+
$rawVal = [
72+
'oxuser__oxfname' => 'fname',
73+
'oxuser__oxlname' => 'lname',
74+
'oxuser__oxstreetnr' => 'nr',
75+
'oxuser__oxstreet' => 'street',
76+
'oxuser__oxzip' => 'zip',
77+
'oxuser__oxcity' => 'city',
78+
'oxuser__oxcountryid' => 'a7c40f631fc920687.20179984',
79+
'oxuser__oxactive' => 1
80+
];
81+
82+
$_POST = array_merge($_POST,
83+
[
84+
'lgn_usr' => 'test@oxid-esales.com',
85+
'lgn_pwd' => 'Test@oxid-esales.com',
86+
'lgn_pwd2' => 'Test@oxid-esales.com',
87+
'invadr' => $rawVal
88+
]
89+
);
90+
91+
$fronendController = oxNew(FrontendController::class);
92+
$userComponent = oxNew(UserComponent::class);
93+
$userComponent->setParent($fronendController);
94+
$this->setSessionChallenge();
95+
96+
return $userComponent;
97+
}
98+
99+
private function fetchUserData(): array
100+
{
101+
$queryBuilder = $this->get(QueryBuilderFactoryInterface::class)->create();
102+
103+
return $queryBuilder
104+
->select('*')
105+
->from('oxuser')
106+
->where('oxusername = :oxusername')
107+
->setParameters([
108+
'oxusername' => 'test@oxid-esales.com',
109+
])
110+
->execute()
111+
->fetch();
112+
}
113+
114+
private function setSessionChallenge(): void
115+
{
116+
Registry::set(
117+
Session::class,
118+
$this->createConfiguredMock(
119+
Session::class,
120+
['checkSessionChallenge' => true]
121+
)
122+
);
123+
}
124+
}

0 commit comments

Comments
 (0)