Skip to content

Commit ec4b933

Browse files
author
Bohdan Korablov
committed
MAGETWO-58081: [GitHub] Magento2 SSL Installation httpss:// #6262
2 parents 65e8334 + 25ee7e2 commit ec4b933

File tree

17 files changed

+107
-54
lines changed

17 files changed

+107
-54
lines changed

app/code/Magento/Payment/Model/Method/Cc.php

+14-15
Original file line numberDiff line numberDiff line change
@@ -127,28 +127,25 @@ public function validate()
127127
//Solo, Switch or Maestro. International safe
128128
'SO' => '/(^(6334)[5-9](\d{11}$|\d{13,14}$))|(^(6767)(\d{12}$|\d{14,15}$))/',
129129
'SM' => '/(^(5[0678])\d{11,18}$)|(^(6[^05])\d{11,18}$)|(^(601)[^1]\d{9,16}$)|(^(6011)\d{9,11}$)' .
130-
'|(^(6011)\d{13,16}$)|(^(65)\d{11,13}$)|(^(65)\d{15,18}$)' .
131-
'|(^(49030)[2-9](\d{10}$|\d{12,13}$))|(^(49033)[5-9](\d{10}$|\d{12,13}$))' .
132-
'|(^(49110)[1-2](\d{10}$|\d{12,13}$))|(^(49117)[4-9](\d{10}$|\d{12,13}$))' .
133-
'|(^(49118)[0-2](\d{10}$|\d{12,13}$))|(^(4936)(\d{12}$|\d{14,15}$))/',
130+
'|(^(6011)\d{13,16}$)|(^(65)\d{11,13}$)|(^(65)\d{15,18}$)' .
131+
'|(^(49030)[2-9](\d{10}$|\d{12,13}$))|(^(49033)[5-9](\d{10}$|\d{12,13}$))' .
132+
'|(^(49110)[1-2](\d{10}$|\d{12,13}$))|(^(49117)[4-9](\d{10}$|\d{12,13}$))' .
133+
'|(^(49118)[0-2](\d{10}$|\d{12,13}$))|(^(4936)(\d{12}$|\d{14,15}$))/',
134134
// Visa
135135
'VI' => '/^4[0-9]{12}([0-9]{3})?$/',
136136
// Master Card
137-
'MC' => '/^5[1-5][0-9]{14}$/',
137+
'MC' => '/^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$/',
138138
// American Express
139139
'AE' => '/^3[47][0-9]{13}$/',
140140
// Discover
141-
'DI' => '/^(30[0-5][0-9]{13}|3095[0-9]{12}|35(2[8-9][0-9]{12}|[3-8][0-9]{13})' .
142-
'|36[0-9]{12}|3[8-9][0-9]{14}|6011(0[0-9]{11}|[2-4][0-9]{11}|74[0-9]{10}|7[7-9][0-9]{10}' .
143-
'|8[6-9][0-9]{10}|9[0-9]{11})|62(2(12[6-9][0-9]{10}|1[3-9][0-9]{11}|[2-8][0-9]{12}' .
144-
'|9[0-1][0-9]{11}|92[0-5][0-9]{10})|[4-6][0-9]{13}|8[2-8][0-9]{12})|6(4[4-9][0-9]{13}' .
145-
'|5[0-9]{14}))$/',
141+
'DI' => '/^(6011((0|9|[2-4])[0-9]{11,14}|(74|7[7-9]|8[6-9])[0-9]{10,13})|6(4[4-9][0-9]{13,16}|' .
142+
'5[0-9]{14,17}))/',
143+
'DN' => '/^3(0[0-5][0-9]{13,16}|095[0-9]{12,15}|(6|[8-9])[0-9]{14,17})/',
144+
// UnionPay
145+
'UN' => '/^622(1(2[6-9][0-9]{10,13}|[3-9][0-9]{11,14})|[3-8][0-9]{12,15}|9([[0-1][0-9]{11,14}|' .
146+
'2[0-5][0-9]{10,13}))|62[4-6][0-9]{13,16}|628[2-8][0-9]{12,15}/',
146147
// JCB
147-
'JCB' => '/^(30[0-5][0-9]{13}|3095[0-9]{12}|35(2[8-9][0-9]{12}|[3-8][0-9]{13})|36[0-9]{12}' .
148-
'|3[8-9][0-9]{14}|6011(0[0-9]{11}|[2-4][0-9]{11}|74[0-9]{10}|7[7-9][0-9]{10}' .
149-
'|8[6-9][0-9]{10}|9[0-9]{11})|62(2(12[6-9][0-9]{10}|1[3-9][0-9]{11}|[2-8][0-9]{12}' .
150-
'|9[0-1][0-9]{11}|92[0-5][0-9]{10})|[4-6][0-9]{13}|8[2-8][0-9]{12})|6(4[4-9][0-9]{13}' .
151-
'|5[0-9]{14}))$/',
148+
'JCB' => '/^35(2[8-9][0-9]{12,15}|[3-8][0-9]{13,16})/',
152149
'MI' => '/^(5(0|[6-9])|63|67(?!59|6770|6774))\d*$/',
153150
'MD' => '/^(6759(?!24|38|40|6[3-9]|70|76)|676770|676774)\d*$/',
154151
];
@@ -215,6 +212,8 @@ public function getVerificationRegEx()
215212
'MC' => '/^[0-9]{3}$/',
216213
'AE' => '/^[0-9]{4}$/',
217214
'DI' => '/^[0-9]{3}$/',
215+
'DN' => '/^[0-9]{3}$/',
216+
'UN' => '/^[0-9]{3}$/',
218217
'SS' => '/^[0-9]{3,4}$/',
219218
'SM' => '/^[0-9]{3,4}$/',
220219
'SO' => '/^[0-9]{3,4}$/',

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@
2828
<group id="other_paypal_payment_solutions" translate="label" sortOrder="3" showInDefault="1" showInWebsite="1" showInStore="1">
2929
<label>Other PayPal Payment Solutions:</label>
3030
<fieldset_css>paypal-top-section paypal-other-header</fieldset_css>
31-
<frontend_model>Magento\Paypal\Block\Adminhtml\System\Config\Fieldset\Expanded</frontend_model>
31+
<frontend_model>\Magento\Config\Block\System\Config\Form\Fieldset</frontend_model>
3232
</group>
3333
<group id="other_payment_methods" translate="label" sortOrder="4" showInDefault="1" showInWebsite="1" showInStore="1">
3434
<label>Other Payment Methods:</label>
3535
<fieldset_css>paypal-top-section payments-other-header</fieldset_css>
36-
<frontend_model>Magento\Paypal\Block\Adminhtml\System\Config\Fieldset\Expanded</frontend_model>
36+
<frontend_model>\Magento\Config\Block\System\Config\Form\Fieldset</frontend_model>
3737
</group>
3838
</section>
3939
<section id="payment_all_paypal" showInDefault="0" showInWebsite="0" showInStore="0">

app/code/Magento/Paypal/view/adminhtml/web/styles.css

+6-4
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
.payflow-settings-notice ul.options-list {list-style:disc;padding:0 2em;}
1717
.paypal-express-section .heading {display: inline-block; background: url("images/pp-logo-200px.png") no-repeat 0 50% / 18rem auto; padding-left: 20rem;}
1818
.paypal-express-section .button-container {display: inline-block; float: right;}
19-
.paypal-express-section .config-alt {background: url("images/pp-alt.png") no-repeat; height: 26px; margin: 0.5rem 0 0; width: 158px;}
19+
.paypal-express-section .config-alt {background: url("images/pp-alt.png") no-repeat; height: 26px; margin: .5rem 0 0; width: 158px;}
2020
.paypal-express-section .link-more {margin-left: 5px;}
2121
.paypal-other-section .heading {display: inline-block;}
2222
.paypal-other-section .button-container {display: inline-block; float: right; margin: 1rem 0 0 !important;}
@@ -27,7 +27,9 @@
2727
.paypal-top-section.active > .entry-edit-head.admin__collapsible-block {border-bottom: 1px solid #ccc;}
2828
.paypal-top-section > .admin__collapsible-block > a {font-size: 1.4rem; font-weight: normal; text-transform: uppercase;}
2929
.paypal-recommended-header > .admin__collapsible-block > a::before {content: "" !important;}
30-
.paypal-other-header > .admin__collapsible-block > a.open::before {content: "\25B2" !important;}
31-
.paypal-other-header > .admin__collapsible-block > a::before {color: #000; content: "\25BC" !important; font-size: 1rem; top: 2.2rem;}
30+
.paypal-other-header > .admin__collapsible-block > a::before {content: '' !important; width: 0; height: 0; border-color: transparent; border-top-color: #000; border-style: solid; border-width: .8rem .5rem 0 .5rem; margin-top:1px; transition: all .2s linear;}
31+
.paypal-other-header > .admin__collapsible-block > a.open::before {border-color: transparent; border-bottom-color: #000; border-width: 0 .5rem .8rem .5rem;}
3232
.paypal-other-header > .admin__collapsible-block > a {color: #007bdb !important; text-align: right;}
33-
.payments-other-header > .admin__collapsible-block > a::before {content: "" !important;}
33+
.payments-other-header > .admin__collapsible-block > a {display: inline-block;}
34+
.payments-other-header > .admin__collapsible-block > a::before {content: '' !important; width: 0; height: 0; border-color: transparent; border-top-color: #000; border-style: solid; border-width: .8rem .5rem 0 .5rem; margin-top:1px; transition: all .2s linear;}
35+
.payments-other-header > .admin__collapsible-block > a.open::before {border-color: transparent; border-bottom-color: #000; border-width: 0 .5rem .8rem .5rem;}

app/code/Magento/Shipping/i18n/en_US.csv

+1
Original file line numberDiff line numberDiff line change
@@ -179,3 +179,4 @@ City,City
179179
"Apply custom Shipping Policy","Apply custom Shipping Policy"
180180
"Shipping Policy","Shipping Policy"
181181
"Shipping Methods","Shipping Methods"
182+
"Track your order","Track your order"

app/code/Magento/Shipping/view/frontend/layout/sales_guest_reorder.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<referenceBlock name="sales.order.view">
1111
<block class="Magento\Shipping\Block\Tracking\Link" name="tracking-info-link" template="tracking/link.phtml">
1212
<arguments>
13-
<argument name="label" xsi:type="string">Track your order</argument>
13+
<argument name="label" xsi:type="string" translate="true">Track your order</argument>
1414
</arguments>
1515
</block>
1616
</referenceBlock>

app/code/Magento/Shipping/view/frontend/layout/sales_guest_view.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<referenceBlock name="sales.order.view">
1111
<block class="Magento\Shipping\Block\Tracking\Link" name="tracking-info-link" template="tracking/link.phtml">
1212
<arguments>
13-
<argument name="label" xsi:type="string">Track your order</argument>
13+
<argument name="label" xsi:type="string" translate="true">Track your order</argument>
1414
</arguments>
1515
</block>
1616
</referenceBlock>

app/code/Magento/Shipping/view/frontend/layout/sales_order_reorder.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<referenceBlock name="sales.order.view">
1111
<block class="Magento\Shipping\Block\Tracking\Link" name="tracking-info-link" template="tracking/link.phtml">
1212
<arguments>
13-
<argument name="label" xsi:type="string">Track your order</argument>
13+
<argument name="label" xsi:type="string" translate="true">Track your order</argument>
1414
</arguments>
1515
</block>
1616
</referenceBlock>

app/code/Magento/Shipping/view/frontend/layout/sales_order_view.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<referenceBlock name="sales.order.view">
1111
<block class="Magento\Shipping\Block\Tracking\Link" name="tracking-info-link" template="tracking/link.phtml">
1212
<arguments>
13-
<argument name="label" xsi:type="string">Track your order</argument>
13+
<argument name="label" xsi:type="string" translate="true">Track your order</argument>
1414
</arguments>
1515
</block>
1616
</referenceBlock>

app/code/Magento/Theme/view/frontend/web/js/view/messages.js

+13-1
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,23 @@ define([
1515
cookieMessages: [],
1616
messages: []
1717
},
18+
19+
/**
20+
* Extends Component object by storage observable messages.
21+
*/
1822
initialize: function () {
1923
this._super();
2024

2125
this.cookieMessages = $.cookieStorage.get('mage-messages');
22-
this.messages = customerData.get('messages').extend({disposableCustomerData: 'messages'});
26+
this.messages = customerData.get('messages').extend({
27+
disposableCustomerData: 'messages'
28+
});
29+
30+
// Force to clean obsolete messages
31+
if (!_.isEmpty(this.messages().messages)) {
32+
customerData.set('messages', {});
33+
}
34+
2335
$.cookieStorage.setConf({path: '/', expires: -1}).set('mage-messages', null);
2436
}
2537
});

app/code/Magento/Vault/Model/Method/Vault.php

+11-9
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@
3131
*/
3232
final class Vault implements VaultPaymentInterface
3333
{
34+
/**
35+
* @deprecated
36+
*/
3437
const TOKEN_METADATA_KEY = 'token_metadata';
3538

3639
/**
@@ -111,6 +114,8 @@ final class Vault implements VaultPaymentInterface
111114
* @param PaymentTokenManagementInterface $tokenManagement
112115
* @param OrderPaymentExtensionInterfaceFactory $paymentExtensionFactory
113116
* @param string $code
117+
*
118+
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
114119
*/
115120
public function __construct(
116121
ConfigInterface $config,
@@ -452,17 +457,14 @@ public function capture(\Magento\Payment\Model\InfoInterface $payment, $amount)
452457
private function attachTokenExtensionAttribute(OrderPaymentInterface $orderPayment)
453458
{
454459
$additionalInformation = $orderPayment->getAdditionalInformation();
455-
456-
$tokenData = isset($additionalInformation[self::TOKEN_METADATA_KEY])
457-
? $additionalInformation[self::TOKEN_METADATA_KEY]
458-
: null;
459-
460-
if ($tokenData === null) {
461-
throw new \LogicException("Token metadata should be defined");
460+
if (empty($additionalInformation[PaymentTokenInterface::CUSTOMER_ID]) ||
461+
empty($additionalInformation[PaymentTokenInterface::PUBLIC_HASH])
462+
) {
463+
throw new \LogicException('Customer id and public hash should be defined');
462464
}
463465

464-
$customerId = $tokenData[PaymentTokenInterface::CUSTOMER_ID];
465-
$publicHash = $tokenData[PaymentTokenInterface::PUBLIC_HASH];
466+
$customerId = $additionalInformation[PaymentTokenInterface::CUSTOMER_ID];
467+
$publicHash = $additionalInformation[PaymentTokenInterface::PUBLIC_HASH];
466468

467469
$paymentToken = $this->tokenManagement->getByPublicHash($publicHash, $customerId);
468470

app/code/Magento/Vault/Observer/PaymentTokenAssigner.php

-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ public function execute(Observer $observer)
6565
}
6666

6767
$paymentModel->setAdditionalInformation(
68-
Vault::TOKEN_METADATA_KEY,
6968
[
7069
PaymentTokenInterface::CUSTOMER_ID => $customerId,
7170
PaymentTokenInterface::PUBLIC_HASH => $tokenPublicHash

app/code/Magento/Vault/Setup/UpgradeData.php

+29-1
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,41 @@ class UpgradeData implements UpgradeDataInterface
2222
public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
2323
{
2424
$setup->startSetup();
25+
$connection = $setup->getConnection();
2526

27+
// data update for Vault module < 2.0.1
2628
if (version_compare($context->getVersion(), '2.0.1', '<')) {
27-
$connection = $setup->getConnection();
29+
// update sets credit card as default token type
2830
$connection->update($setup->getTable(InstallSchema::PAYMENT_TOKEN_TABLE), [
2931
PaymentTokenInterface::TYPE => CreditCardTokenFactory::TOKEN_TYPE_CREDIT_CARD
3032
], PaymentTokenInterface::TYPE . ' = ""');
3133
}
34+
35+
// data update for Vault module < 2.0.2
36+
if (version_compare($context->getVersion(), '2.0.2', '<')) {
37+
// update converts additional info with token metadata to single dimensional array
38+
$select = $connection->select()
39+
->from($setup->getTable('sales_order_payment'), 'entity_id')
40+
->columns(['additional_information'])
41+
->where('additional_information LIKE ?', '%token_metadata%');
42+
43+
$items = $connection->fetchAll($select);
44+
foreach ($items as $item) {
45+
$additionalInfo = unserialize($item['additional_information']);
46+
$additionalInfo[PaymentTokenInterface::CUSTOMER_ID] =
47+
$additionalInfo['token_metadata'][PaymentTokenInterface::CUSTOMER_ID];
48+
$additionalInfo[PaymentTokenInterface::PUBLIC_HASH] =
49+
$additionalInfo['token_metadata'][PaymentTokenInterface::PUBLIC_HASH];
50+
unset($additionalInfo['token_metadata']);
51+
52+
$connection->update(
53+
$setup->getTable('sales_order_payment'),
54+
['additional_information' => serialize($additionalInfo)],
55+
['entity_id = ?' => $item['entity_id']]
56+
);
57+
}
58+
}
59+
3260
$setup->endSetup();
3361
}
3462
}

app/code/Magento/Vault/Test/Unit/Model/Method/VaultTest.php

+22-11
Original file line numberDiff line numberDiff line change
@@ -50,24 +50,39 @@ public function testAuthorizeNotOrderPayment()
5050
}
5151

5252
/**
53+
* @param array $additionalInfo
5354
* @expectedException \LogicException
54-
* @expectedExceptionMessage Token metadata should be defined
55+
* @expectedExceptionMessage Customer id and public hash should be defined
56+
* @dataProvider additionalInfoDataProvider
5557
*/
56-
public function testAuthorizeNoTokenMetadata()
58+
public function testAuthorizeNoTokenMetadata(array $additionalInfo)
5759
{
5860
$paymentModel = $this->getMockBuilder(Payment::class)
5961
->disableOriginalConstructor()
6062
->getMock();
6163

6264
$paymentModel->expects(static::once())
6365
->method('getAdditionalInformation')
64-
->willReturn([]);
66+
->willReturn($additionalInfo);
6567

6668
/** @var Vault $model */
6769
$model = $this->objectManager->getObject(Vault::class);
6870
$model->authorize($paymentModel, 0);
6971
}
7072

73+
/**
74+
* Get list of additional information variations
75+
* @return array
76+
*/
77+
public function additionalInfoDataProvider()
78+
{
79+
return [
80+
['additionalInfo' => []],
81+
['additionalInfo' => ['customer_id' => 1]],
82+
['additionalInfo' => ['public_hash' => 'df768aak12uf']],
83+
];
84+
}
85+
7186
/**
7287
* @expectedException \LogicException
7388
* @expectedExceptionMessage No token found
@@ -86,10 +101,8 @@ public function testAuthorizeNoToken()
86101
->method('getAdditionalInformation')
87102
->willReturn(
88103
[
89-
Vault::TOKEN_METADATA_KEY => [
90-
PaymentTokenInterface::CUSTOMER_ID => $customerId,
91-
PaymentTokenInterface::PUBLIC_HASH => $publicHash
92-
]
104+
PaymentTokenInterface::CUSTOMER_ID => $customerId,
105+
PaymentTokenInterface::PUBLIC_HASH => $publicHash
93106
]
94107
);
95108
$tokenManagement->expects(static::once())
@@ -133,10 +146,8 @@ public function testAuthorize()
133146
->method('getAdditionalInformation')
134147
->willReturn(
135148
[
136-
Vault::TOKEN_METADATA_KEY => [
137-
PaymentTokenInterface::CUSTOMER_ID => $customerId,
138-
PaymentTokenInterface::PUBLIC_HASH => $publicHash
139-
]
149+
PaymentTokenInterface::CUSTOMER_ID => $customerId,
150+
PaymentTokenInterface::PUBLIC_HASH => $publicHash
140151
]
141152
);
142153
$tokenManagement->expects(static::once())

app/code/Magento/Vault/Test/Unit/Observer/PaymentTokenAssignerTest.php

-1
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,6 @@ public function testExecuteSaveMetadata()
161161
$paymentModel->expects(static::once())
162162
->method('setAdditionalInformation')
163163
->with(
164-
Vault::TOKEN_METADATA_KEY,
165164
[
166165
PaymentTokenInterface::CUSTOMER_ID => $customerId,
167166
PaymentTokenInterface::PUBLIC_HASH => $publicHash

app/code/Magento/Vault/etc/module.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77
-->
88
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
9-
<module name="Magento_Vault" setup_version="2.0.1">
9+
<module name="Magento_Vault" setup_version="2.0.2">
1010
<sequence>
1111
<module name="Magento_Sales"/>
1212
<module name="Magento_Store"/>

dev/tests/integration/testsuite/Magento/Paypal/Model/Config/Structure/Reader/_files/actual/config.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@
2828
<group id="other_paypal_payment_solutions" translate="label" sortOrder="3" showInDefault="1" showInWebsite="1" showInStore="1">
2929
<label>Other PayPal Payment Solutions:</label>
3030
<fieldset_css>paypal-top-section paypal-other-header</fieldset_css>
31-
<frontend_model>Magento\Paypal\Block\Adminhtml\System\Config\Fieldset\Expanded</frontend_model>
31+
<frontend_model>\Magento\Config\Block\System\Config\Form\Fieldset</frontend_model>
3232
</group>
3333
<group id="other_payment_methods" translate="label" sortOrder="4" showInDefault="1" showInWebsite="1" showInStore="1">
3434
<label>Other Payment Methods:</label>
3535
<fieldset_css>paypal-top-section payments-other-header</fieldset_css>
36-
<frontend_model>Magento\Paypal\Block\Adminhtml\System\Config\Fieldset\Expanded</frontend_model>
36+
<frontend_model>\Magento\Config\Block\System\Config\Form\Fieldset</frontend_model>
3737
</group>
3838
</section>
3939
<section id="payment_all_paypal" showInDefault="0" showInWebsite="0" showInStore="0">

dev/tests/integration/testsuite/Magento/Paypal/Model/Config/Structure/Reader/_files/expected/config.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@
2828
<group id="other_paypal_payment_solutions" translate="label" sortOrder="3" showInDefault="1" showInWebsite="1" showInStore="1">
2929
<label>Other PayPal Payment Solutions:</label>
3030
<fieldset_css>paypal-top-section paypal-other-header</fieldset_css>
31-
<frontend_model>Magento\Paypal\Block\Adminhtml\System\Config\Fieldset\Expanded</frontend_model>
31+
<frontend_model>\Magento\Config\Block\System\Config\Form\Fieldset</frontend_model>
3232
</group>
3333
<group id="other_payment_methods" translate="label" sortOrder="4" showInDefault="1" showInWebsite="1" showInStore="1">
3434
<label>Other Payment Methods:</label>
3535
<fieldset_css>paypal-top-section payments-other-header</fieldset_css>
36-
<frontend_model>Magento\Paypal\Block\Adminhtml\System\Config\Fieldset\Expanded</frontend_model>
36+
<frontend_model>\Magento\Config\Block\System\Config\Form\Fieldset</frontend_model>
3737
</group>
3838
</section>
3939
<section id="payment_all_paypal" showInDefault="0" showInWebsite="0" showInStore="0">

0 commit comments

Comments
 (0)