Skip to content

Commit a836d3e

Browse files
author
Alexander Makeev
committed
Merge branch 'develop' of github.corp.magento.com:magento2/magento2ce into MAGETWO-46292
Conflicts: app/code/Magento/Paypal/i18n/en_US.csv
2 parents 1a199b9 + b3f5588 commit a836d3e

File tree

368 files changed

+15102
-2511
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

368 files changed

+15102
-2511
lines changed

app/code/Magento/Backend/Model/Locale/Manager.php

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,30 @@ class Manager
2626
* @var \Magento\Framework\TranslateInterface
2727
*/
2828
protected $_translator;
29+
30+
/**
31+
* @var \Magento\Backend\App\ConfigInterface
32+
*/
33+
protected $_backendConfig;
2934

3035
/**
3136
* Constructor
3237
*
3338
* @param \Magento\Backend\Model\Session $session
3439
* @param \Magento\Backend\Model\Auth\Session $authSession
3540
* @param \Magento\Framework\TranslateInterface $translator
41+
* @param \Magento\Backend\App\ConfigInterface $backendConfig
3642
*/
3743
public function __construct(
3844
\Magento\Backend\Model\Session $session,
3945
\Magento\Backend\Model\Auth\Session $authSession,
40-
\Magento\Framework\TranslateInterface $translator
46+
\Magento\Framework\TranslateInterface $translator,
47+
\Magento\Backend\App\ConfigInterface $backendConfig
4148
) {
4249
$this->_session = $session;
4350
$this->_authSession = $authSession;
4451
$this->_translator = $translator;
52+
$this->_backendConfig = $backendConfig;
4553
}
4654

4755
/**
@@ -53,28 +61,40 @@ public function __construct(
5361
public function switchBackendInterfaceLocale($localeCode)
5462
{
5563
$this->_session->setSessionLocale(null);
56-
64+
5765
$this->_authSession->getUser()->setInterfaceLocale($localeCode);
58-
66+
5967
$this->_translator->setLocale($localeCode)->loadData(null, true);
60-
68+
6169
return $this;
6270
}
6371

72+
/**
73+
* Get general interface locale
74+
*
75+
* @return string
76+
*/
77+
public function getGeneralLocale()
78+
{
79+
return $this->_backendConfig->getValue('general/locale/code');
80+
}
81+
6482
/**
6583
* Get user interface locale stored in session data
6684
*
6785
* @return string
6886
*/
6987
public function getUserInterfaceLocale()
7088
{
71-
$interfaceLocale = \Magento\Framework\Locale\Resolver::DEFAULT_LOCALE;
72-
7389
$userData = $this->_authSession->getUser();
90+
$interfaceLocale = \Magento\Framework\Locale\Resolver::DEFAULT_LOCALE;
91+
7492
if ($userData && $userData->getInterfaceLocale()) {
7593
$interfaceLocale = $userData->getInterfaceLocale();
94+
} elseif ($this->getGeneralLocale()) {
95+
$interfaceLocale = $this->getGeneralLocale();
7696
}
77-
97+
7898
return $interfaceLocale;
7999
}
80100
}

app/code/Magento/Backend/Test/Unit/Model/Locale/ManagerTest.php

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class ManagerTest extends \PHPUnit_Framework_TestCase
1515
protected $_model;
1616

1717
/**
18-
* @var \Magento\Framework\TranslateInterface
18+
* @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\TranslateInterface
1919
*/
2020
protected $_translator;
2121

@@ -25,9 +25,14 @@ class ManagerTest extends \PHPUnit_Framework_TestCase
2525
protected $_session;
2626

2727
/**
28-
* @var \Magento\Backend\Model\Auth\Session
28+
* @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Backend\Model\Auth\Session
2929
*/
3030
protected $_authSession;
31+
32+
/**
33+
* @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Backend\App\ConfigInterface
34+
*/
35+
protected $_backendConfig;
3136

3237
protected function setUp()
3338
{
@@ -40,7 +45,9 @@ protected function setUp()
4045
'',
4146
false
4247
);
43-
48+
49+
$this->_backendConfig = $this->getMockForAbstractClass('Magento\Backend\App\ConfigInterface', [], '', false);
50+
4451
$userMock = new \Magento\Framework\DataObject();
4552

4653
$this->_authSession->expects($this->any())->method('getUser')->will($this->returnValue($userMock));
@@ -54,7 +61,8 @@ protected function setUp()
5461
$this->_model = new \Magento\Backend\Model\Locale\Manager(
5562
$this->_session,
5663
$this->_authSession,
57-
$this->_translator
64+
$this->_translator,
65+
$this->_backendConfig
5866
);
5967
}
6068

@@ -102,4 +110,17 @@ public function testGetUserInterfaceLocale()
102110

103111
$this->assertEquals($locale, 'de_DE');
104112
}
113+
114+
/**
115+
* @covers \Magento\Backend\Model\Locale\Manager::getUserInterfaceLocale
116+
*/
117+
public function testGetUserInterfaceGeneralLocale()
118+
{
119+
$this->_backendConfig->expects($this->any())
120+
->method('getValue')
121+
->with('general/locale/code')
122+
->willReturn('test_locale');
123+
$locale = $this->_model->getUserInterfaceLocale();
124+
$this->assertEquals($locale, 'test_locale');
125+
}
105126
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -414,16 +414,16 @@
414414
</group>
415415
<group id="security" translate="label" type="text" sortOrder="35" showInDefault="1" showInWebsite="0" showInStore="0">
416416
<label>Security</label>
417-
<field id="use_form_key" translate="label" type="select" sortOrder="1" showInDefault="1" showInWebsite="0" showInStore="0">
417+
<field id="use_form_key" translate="label" type="select" sortOrder="10" showInDefault="1" showInWebsite="0" showInStore="0">
418418
<label>Add Secret Key to URLs</label>
419419
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
420420
<backend_model>Magento\Config\Model\Config\Backend\Admin\Usesecretkey</backend_model>
421421
</field>
422-
<field id="use_case_sensitive_login" translate="label" type="select" sortOrder="1" showInDefault="1" showInWebsite="0" showInStore="0">
422+
<field id="use_case_sensitive_login" translate="label" type="select" sortOrder="20" showInDefault="1" showInWebsite="0" showInStore="0">
423423
<label>Login is Case Sensitive</label>
424424
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
425425
</field>
426-
<field id="session_lifetime" translate="label comment" sortOrder="3" showInDefault="1" showInWebsite="0" showInStore="0">
426+
<field id="session_lifetime" translate="label comment" sortOrder="30" showInDefault="1" showInWebsite="0" showInStore="0">
427427
<label>Admin Session Lifetime (seconds)</label>
428428
<comment>Values less than 60 are ignored.</comment>
429429
<validate>validate-digits</validate>

app/code/Magento/Bundle/Model/LinkManagement.php

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66
*/
77
namespace Magento\Bundle\Model;
88

9+
use Magento\Catalog\Api\Data\ProductInterface;
910
use Magento\Catalog\Api\ProductRepositoryInterface;
1011
use Magento\Framework\Exception\CouldNotSaveException;
1112
use Magento\Framework\Exception\InputException;
13+
use Magento\Framework\Model\Entity\MetadataPool;
1214

1315
/**
1416
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -45,14 +47,20 @@ class LinkManagement implements \Magento\Bundle\Api\ProductLinkManagementInterfa
4547
*/
4648
protected $dataObjectHelper;
4749

50+
/**
51+
* @var MetadataPool
52+
*/
53+
protected $metadataPool;
54+
4855
/**
4956
* @param ProductRepositoryInterface $productRepository
5057
* @param \Magento\Bundle\Api\Data\LinkInterfaceFactory $linkFactory
51-
* @param \Magento\Bundle\Model\ResourceModel\BundleFactory $bundleFactory
5258
* @param \Magento\Bundle\Model\SelectionFactory $bundleSelection
59+
* @param \Magento\Bundle\Model\ResourceModel\BundleFactory $bundleFactory
5360
* @param \Magento\Bundle\Model\ResourceModel\Option\CollectionFactory $optionCollection
5461
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
5562
* @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
63+
* @param MetadataPool $metadataPool
5664
*/
5765
public function __construct(
5866
ProductRepositoryInterface $productRepository,
@@ -61,7 +69,8 @@ public function __construct(
6169
\Magento\Bundle\Model\ResourceModel\BundleFactory $bundleFactory,
6270
\Magento\Bundle\Model\ResourceModel\Option\CollectionFactory $optionCollection,
6371
\Magento\Store\Model\StoreManagerInterface $storeManager,
64-
\Magento\Framework\Api\DataObjectHelper $dataObjectHelper
72+
\Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
73+
MetadataPool $metadataPool
6574
) {
6675
$this->productRepository = $productRepository;
6776
$this->linkFactory = $linkFactory;
@@ -70,6 +79,7 @@ public function __construct(
7079
$this->optionCollection = $optionCollection;
7180
$this->storeManager = $storeManager;
7281
$this->dataObjectHelper = $dataObjectHelper;
82+
$this->metadataPool = $metadataPool;
7383
}
7484

7585
/**
@@ -137,12 +147,12 @@ public function saveChild(
137147
if (!$selectionModel->getId()) {
138148
throw new InputException(__('Can not find product link with id "%1"', [$linkedProduct->getId()]));
139149
}
140-
150+
$linkField = $this->metadataPool->getMetadata(ProductInterface::class)->getLinkField();
141151
$selectionModel = $this->mapProductLinkToSelectionModel(
142152
$selectionModel,
143153
$linkedProduct,
144154
$linkProductModel->getId(),
145-
$product->getId()
155+
$product->getData($linkField)
146156
);
147157

148158
try {
@@ -221,9 +231,10 @@ public function addChild(
221231
);
222232
}
223233

234+
$linkField = $this->metadataPool->getMetadata(ProductInterface::class)->getLinkField();
224235
/* @var $resource \Magento\Bundle\Model\ResourceModel\Bundle */
225236
$resource = $this->bundleFactory->create();
226-
$selections = $resource->getSelectionsData($product->getId());
237+
$selections = $resource->getSelectionsData($product->getData($linkField));
227238
/** @var \Magento\Catalog\Model\Product $linkProductModel */
228239
$linkProductModel = $this->productRepository->get($linkedProduct->getSku());
229240
if ($linkProductModel->isComposite()) {
@@ -232,7 +243,7 @@ public function addChild(
232243
if ($selections) {
233244
foreach ($selections as $selection) {
234245
if ($selection['option_id'] == $optionId &&
235-
$selection['product_id'] == $linkProductModel->getId()) {
246+
$selection['product_id'] == $linkProductModel->getEntityId()) {
236247
throw new CouldNotSaveException(
237248
__(
238249
'Child with specified sku: "%1" already assigned to product: "%2"',
@@ -242,19 +253,18 @@ public function addChild(
242253
}
243254
}
244255
}
245-
246256
$selectionModel = $this->bundleSelection->create();
247257
$selectionModel = $this->mapProductLinkToSelectionModel(
248258
$selectionModel,
249259
$linkedProduct,
250-
$linkProductModel->getId(),
251-
$product->getId()
260+
$linkProductModel->getEntityId(),
261+
$product->getData($linkField)
252262
);
253263
$selectionModel->setOptionId($optionId);
254264

255265
try {
256266
$selectionModel->save();
257-
$resource->addProductRelation($product->getId(), $linkProductModel->getId());
267+
$resource->addProductRelation($product->getData($linkField), $linkProductModel->getEntityId());
258268
} catch (\Exception $e) {
259269
throw new CouldNotSaveException(__('Could not save child: "%1"', $e->getMessage()), $e);
260270
}
@@ -293,10 +303,11 @@ public function removeChild($sku, $optionId, $childSku)
293303
__('Requested bundle option product doesn\'t exist')
294304
);
295305
}
306+
$linkField = $this->metadataPool->getMetadata(ProductInterface::class)->getLinkField();
296307
/* @var $resource \Magento\Bundle\Model\ResourceModel\Bundle */
297308
$resource = $this->bundleFactory->create();
298-
$resource->dropAllUnneededSelections($product->getId(), $excludeSelectionIds);
299-
$resource->removeProductRelations($product->getId(), array_unique($usedProductIds));
309+
$resource->dropAllUnneededSelections($product->getData($linkField), $excludeSelectionIds);
310+
$resource->removeProductRelations($product->getData($linkField), array_unique($usedProductIds));
300311

301312
return true;
302313
}

app/code/Magento/Bundle/Model/Plugin/Product.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public function afterGetIdentities(
3232
CatalogProduct $product,
3333
array $identities
3434
) {
35-
foreach ($this->type->getParentIdsByChild($product->getId()) as $parentId) {
35+
foreach ($this->type->getParentIdsByChild($product->getEntityId()) as $parentId) {
3636
$identities[] = CatalogProduct::CACHE_TAG . '_' . $parentId;
3737
}
3838
return $identities;

app/code/Magento/Bundle/Model/Product/CopyConstructor/Bundle.php

Lines changed: 12 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -5,58 +5,30 @@
55
*/
66
namespace Magento\Bundle\Model\Product\CopyConstructor;
77

8+
use Magento\Catalog\Model\Product;
9+
use Magento\Catalog\Model\Product\Type;
10+
811
class Bundle implements \Magento\Catalog\Model\Product\CopyConstructorInterface
912
{
1013
/**
1114
* Duplicating bundle options and selections
1215
*
13-
* @param \Magento\Catalog\Model\Product $product
14-
* @param \Magento\Catalog\Model\Product $duplicate
16+
* @param Product $product
17+
* @param Product $duplicate
1518
* @return void
1619
*/
17-
public function build(\Magento\Catalog\Model\Product $product, \Magento\Catalog\Model\Product $duplicate)
20+
public function build(Product $product, Product $duplicate)
1821
{
19-
if ($product->getTypeId() != \Magento\Catalog\Model\Product\Type::TYPE_BUNDLE) {
22+
if ($product->getTypeId() != Type::TYPE_BUNDLE) {
2023
//do nothing if not bundle
2124
return;
2225
}
2326

24-
$product->getTypeInstance()->setStoreFilter($product->getStoreId(), $product);
25-
$optionCollection = $product->getTypeInstance()->getOptionsCollection($product);
26-
$selectionCollection = $product->getTypeInstance()->getSelectionsCollection(
27-
$product->getTypeInstance()->getOptionsIds($product),
28-
$product
29-
);
30-
$optionCollection->appendSelections($selectionCollection);
31-
32-
$optionRawData = [];
33-
$selectionRawData = [];
34-
35-
$i = 0;
36-
foreach ($optionCollection as $option) {
37-
$optionRawData[$i] = [
38-
'required' => $option->getData('required'),
39-
'position' => $option->getData('position'),
40-
'type' => $option->getData('type'),
41-
'title' => $option->getData('title') ? $option->getData('title') : $option->getData('default_title'),
42-
'delete' => '',
43-
];
44-
foreach ($option->getSelections() as $selection) {
45-
$selectionRawData[$i][] = [
46-
'product_id' => $selection->getProductId(),
47-
'position' => $selection->getPosition(),
48-
'is_default' => $selection->getIsDefault(),
49-
'selection_price_type' => $selection->getSelectionPriceType(),
50-
'selection_price_value' => $selection->getSelectionPriceValue(),
51-
'selection_qty' => $selection->getSelectionQty(),
52-
'selection_can_change_qty' => $selection->getSelectionCanChangeQty(),
53-
'delete' => '',
54-
];
55-
}
56-
$i++;
27+
$bundleOptions = $product->getExtensionAttributes()->getBundleProductOptions();
28+
$duplicatedBundleOptions = [];
29+
foreach ($bundleOptions as $key => $bundleOption) {
30+
$duplicatedBundleOptions[$key] = clone $bundleOption;
5731
}
58-
59-
$duplicate->setBundleOptionsData($optionRawData);
60-
$duplicate->setBundleSelectionsData($selectionRawData);
32+
$duplicate->getExtensionAttributes()->setBundleProductOptions($duplicatedBundleOptions);
6133
}
6234
}

app/code/Magento/Bundle/Model/Product/Type.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,7 @@ public function getOptionsCollection($product)
425425
/** @var \Magento\Bundle\Model\ResourceModel\Option\Collection $optionsCollection */
426426
$optionsCollection = $this->_bundleOption->create()
427427
->getResourceCollection();
428-
$optionsCollection->setProductIdFilter($product->getId());
428+
$optionsCollection->setProductIdFilter($product->getEntityId());
429429
$this->setStoreFilter($product->getStoreId(), $product);
430430
$optionsCollection->setPositionOrder();
431431
$storeId = $this->getStoreFilter($product);

0 commit comments

Comments
 (0)