Skip to content

Commit 6c4bcaa

Browse files
committed
Merge remote-tracking branch 'upstream/2.4-develop' into 2.4-develop-pr
2 parents 9e6731b + 47a87d2 commit 6c4bcaa

File tree

11 files changed

+482
-130
lines changed

11 files changed

+482
-130
lines changed

app/code/Magento/CatalogGraphQl/Model/Resolver/Product/PriceRange.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,13 @@ public function resolve(
6363
$product = $value['model'];
6464
$product->unsetData('minimal_price');
6565

66+
if ($context) {
67+
$customerGroupId = $context->getExtensionAttributes()->getCustomerGroupId();
68+
if ($customerGroupId !== null) {
69+
$product->setCustomerGroupId($customerGroupId);
70+
}
71+
}
72+
6673
$requestedFields = $info->getFieldSelection(10);
6774
$returnArray = [];
6875

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Customer\Model\Group;
9+
10+
use Magento\Customer\Model\ResourceModel\Group\Resolver as ResolverResource;
11+
12+
/**
13+
* Lightweight service for getting current customer group based on customer id
14+
*/
15+
class Resolver
16+
{
17+
/**
18+
* @var ResolverResource
19+
*/
20+
private $resolverResource;
21+
22+
/**
23+
* @param ResolverResource $resolverResource
24+
*/
25+
public function __construct(ResolverResource $resolverResource)
26+
{
27+
$this->resolverResource = $resolverResource;
28+
}
29+
30+
/**
31+
* Return customer group id
32+
*
33+
* @param int $customerId
34+
* @return int|null
35+
*/
36+
public function resolve(int $customerId) : ?int
37+
{
38+
return $this->resolverResource->resolve($customerId);
39+
}
40+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\Customer\Model\ResourceModel\Group;
9+
10+
use Magento\Framework\App\ResourceConnection;
11+
12+
/**
13+
* Resource model for customer group resolver service
14+
*/
15+
class Resolver
16+
{
17+
/**
18+
* @var ResourceConnection
19+
*/
20+
private $resourceConnection;
21+
22+
/**
23+
* @param ResourceConnection $resourceConnection
24+
*/
25+
public function __construct(
26+
ResourceConnection $resourceConnection
27+
) {
28+
$this->resourceConnection = $resourceConnection;
29+
}
30+
31+
/**
32+
* Resolve customer group from db
33+
*
34+
* @param int $customerId
35+
* @return int|null
36+
*/
37+
public function resolve(int $customerId) : ?int
38+
{
39+
$result = null;
40+
41+
$connection = $this->resourceConnection->getConnection();
42+
$tableName = $this->resourceConnection->getTableName('customer_entity');
43+
44+
$query = $connection
45+
->select()
46+
->from(
47+
['main_table' => $tableName],
48+
['main_table.group_id']
49+
)
50+
->where('main_table.entity_id = ?', $customerId);
51+
$groupId = $connection->fetchOne($query);
52+
if ($groupId) {
53+
$result = (int) $groupId;
54+
}
55+
56+
return $result;
57+
}
58+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\CustomerGraphQl\Model\Context;
9+
10+
use Magento\Authorization\Model\UserContextInterface;
11+
use Magento\GraphQl\Model\Query\ContextParametersInterface;
12+
use Magento\GraphQl\Model\Query\ContextParametersProcessorInterface;
13+
use Magento\Customer\Model\Group;
14+
use Magento\Customer\Model\Group\Resolver as CustomerGroupResolver;
15+
16+
/**
17+
* @inheritdoc
18+
*/
19+
class AddCustomerGroupToContext implements ContextParametersProcessorInterface
20+
{
21+
/**
22+
* @var CustomerGroupResolver
23+
*/
24+
private $customerGroupResolver;
25+
26+
/**
27+
* @param CustomerGroupResolver $customerGroupResolver
28+
*/
29+
public function __construct(
30+
CustomerGroupResolver $customerGroupResolver
31+
) {
32+
$this->customerGroupResolver = $customerGroupResolver;
33+
}
34+
35+
/**
36+
* @inheritdoc
37+
*/
38+
public function execute(ContextParametersInterface $contextParameters): ContextParametersInterface
39+
{
40+
$customerGroupId = null;
41+
$extensionAttributes = $contextParameters->getExtensionAttributesData();
42+
if ($contextParameters->getUserType() === UserContextInterface::USER_TYPE_GUEST) {
43+
$customerGroupId = Group::NOT_LOGGED_IN_ID;
44+
} elseif (!empty($extensionAttributes) && $extensionAttributes['is_customer'] === true) {
45+
$customerGroupId = $this->customerGroupResolver->resolve((int) $contextParameters->getUserId());
46+
}
47+
if ($customerGroupId !== null) {
48+
$contextParameters->addExtensionAttribute('customer_group_id', (int) $customerGroupId);
49+
}
50+
return $contextParameters;
51+
}
52+
}

app/code/Magento/CustomerGraphQl/etc/graphql/di.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
<arguments>
1818
<argument name="contextParametersProcessors" xsi:type="array">
1919
<item name="add_user_info_to_context" xsi:type="object">Magento\CustomerGraphQl\Model\Context\AddUserInfoToContext</item>
20+
<item name="add_customer_group_to_context" xsi:type="object">Magento\CustomerGraphQl\Model\Context\AddCustomerGroupToContext</item>
2021
</argument>
2122
</arguments>
2223
</type>

app/code/Magento/User/etc/adminhtml/system.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@
1414
<comment>Email template chosen based on theme fallback when "Default" option is selected.</comment>
1515
<source_model>Magento\Config\Model\Config\Source\Email\Template</source_model>
1616
</field>
17+
<field id="new_user_notification_template" translate="label comment" type="select" sortOrder="50" showInDefault="1" canRestore="1">
18+
<label>New User Notification Template</label>
19+
<comment>Email template chosen based on theme fallback when "Default" option is selected.</comment>
20+
<source_model>Magento\Config\Model\Config\Source\Email\Template</source_model>
21+
</field>
1722
</group>
1823
<group id="security">
1924
<field id="lockout_failures" translate="label comment" sortOrder="100" showInDefault="1" canRestore="1">

app/code/Magento/User/view/adminhtml/email/new_user_notification.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,20 @@
44
* See COPYING.txt for license details.
55
*/
66
-->
7-
<!--@subject {{trans "New admin user '%user_name' created" user_name=$user.name}} @-->
7+
<!--@subject {{trans "New admin user '%user_name' created" user_name=$user.username}} @-->
88
<!--@vars {
99
"var store.frontend_name":"Store Name",
10-
"var user.name":"User Name",
11-
"var user.first_name":"User First Name",
12-
"var user.last_name":"User Last Name",
10+
"var user.username":"User Name",
11+
"var user.firstname":"User First Name",
12+
"var user.lastname":"User Last Name",
1313
"var user.email":"User Email",
1414
"var store_email":"Store Email",
1515
"var store_phone":"Store Phone"
1616
} @-->
1717

1818
{{trans "Hello,"}}
1919

20-
{{trans "A new admin account was created for %first_name, %last_name using %email." first_name=$user.first_name last_name=$user.last_name email=$user.email}}
20+
{{trans "A new admin account was created for %first_name, %last_name using %email." first_name=$user.firstname last_name=$user.lastname email=$user.email}}
2121
{{trans "If you have not authorized this action, please contact us immediately at %store_email" store_email=$store_email |escape}}{{depend store_phone}} {{trans "or call us at %store_phone" store_phone=$store_phone |escape}}{{/depend}}.
2222

2323
{{trans "Thanks,"}}

0 commit comments

Comments
 (0)