Skip to content

Commit

Permalink
Merge pull request #2971 from magento-mpi/port-2752
Browse files Browse the repository at this point in the history
[MPI] Forward port #2689 #2722 #2752
  • Loading branch information
viktym authored Aug 7, 2018
2 parents f1154d4 + 574e1e7 commit 0e2bca6
Show file tree
Hide file tree
Showing 53 changed files with 2,650 additions and 343 deletions.
15 changes: 14 additions & 1 deletion app/code/Magento/Catalog/view/adminhtml/requirejs-config.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,18 @@ var config = {
},
deps: [
'Magento_Catalog/catalog/product'
]
],
config: {
mixins: {
'Magento_Catalog/js/components/use-parent-settings/select': {
'Magento_Catalog/js/components/use-parent-settings/toggle-disabled-mixin': true
},
'Magento_Catalog/js/components/use-parent-settings/textarea': {
'Magento_Catalog/js/components/use-parent-settings/toggle-disabled-mixin': true
},
'Magento_Catalog/js/components/use-parent-settings/single-checkbox': {
'Magento_Catalog/js/components/use-parent-settings/toggle-disabled-mixin': true
}
}
}
};
Original file line number Diff line number Diff line change
Expand Up @@ -452,34 +452,34 @@
</checkbox>
</formElements>
</field>
<field name="custom_design" sortOrder="180" formElement="select">
<field name="custom_design" component="Magento_Catalog/js/components/use-parent-settings/select" sortOrder="180" formElement="select">
<settings>
<dataType>string</dataType>
<label translate="true">Theme</label>
<imports>
<link name="disabled">${ $.parentName }.custom_use_parent_settings:checked</link>
<link name="serviceDisabled">${ $.parentName }.custom_use_parent_settings:checked</link>
</imports>
</settings>
</field>
<field name="page_layout" sortOrder="190" formElement="select" class="Magento\Catalog\Ui\Component\Form\Field\Category\PageLayout">
<field name="page_layout" sortOrder="190" formElement="select" component="Magento_Catalog/js/components/use-parent-settings/select" class="Magento\Catalog\Ui\Component\Form\Field\Category\PageLayout">
<settings>
<dataType>string</dataType>
<label translate="true">Layout</label>
<imports>
<link name="disabled">${ $.parentName }.custom_use_parent_settings:checked</link>
<link name="serviceDisabled">${ $.parentName }.custom_use_parent_settings:checked</link>
</imports>
</settings>
</field>
<field name="custom_layout_update" sortOrder="200" formElement="textarea">
<field name="custom_layout_update" component="Magento_Catalog/js/components/use-parent-settings/textarea" sortOrder="200" formElement="textarea">
<settings>
<dataType>string</dataType>
<label translate="true">Layout Update XML</label>
<imports>
<link name="disabled">ns = ${ $.ns }, index = custom_use_parent_settings :checked</link>
<link name="serviceDisabled">${ $.parentName }.custom_use_parent_settings:checked</link>
</imports>
</settings>
</field>
<field name="custom_apply_to_products" component="Magento_Ui/js/form/element/single-checkbox" sortOrder="210" formElement="checkbox">
<field name="custom_apply_to_products" component="Magento_Catalog/js/components/use-parent-settings/single-checkbox" sortOrder="210" formElement="checkbox">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="default" xsi:type="number">0</item>
Expand All @@ -492,7 +492,7 @@
<dataType>boolean</dataType>
<label translate="true">Apply Design to Products</label>
<imports>
<link name="disabled">ns = ${ $.ns }, index = custom_use_parent_settings:checked</link>
<link name="serviceDisabled">${ $.parentName }.custom_use_parent_settings:checked</link>
</imports>
</settings>
<formElements>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/

/**
* @api
*/
define([
'Magento_Ui/js/form/element/select'
], function (Component) {
'use strict';

return Component;
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/

/**
* @api
*/
define([
'Magento_Ui/js/form/element/single-checkbox'
], function (Component) {
'use strict';

return Component;
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/

/**
* @api
*/
define([
'Magento_Ui/js/form/element/textarea'
], function (Component) {
'use strict';

return Component;
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/

define([
'underscore'
], function (_) {
'use strict';

var mixin = {
defaults: {
imports: {
toggleDisabled: '${ $.parentName }.custom_use_parent_settings:checked'
},
useParent: false,
useDefaults: false
},

/**
* Disable form input if settings for parent section is used
* or default value is applied.
*
* @param {Boolean} isUseParent
*/
toggleDisabled: function (isUseParent) {
var disabled = this.useParent = isUseParent;

if (!disabled && !_.isUndefined(this.service)) {
disabled = !!this.isUseDefault();
}

this.saveUseDefaults();
this.disabled(disabled);
},

/**
* Stores original state of the field.
*/
saveUseDefaults: function () {
this.useDefaults = this.disabled();
},

/** @inheritdoc */
setInitialValue: function () {
this._super();
this.isUseDefault(this.useDefaults);

return this;
},

/** @inheritdoc */
toggleUseDefault: function (state) {
this._super();
this.disabled(state || this.useParent);
}
};

return function (target) {
return target.extend(mixin);
};
});
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ define([
* @param {*} data
*/
add: function (data) {
if (!utils.compare(data, this.data()).equal) {
if (!_.isEmpty(data) && !utils.compare(data, this.data()).equal) {
this.data(_.extend(utils.copy(this.data()), data));
}
},
Expand Down
161 changes: 161 additions & 0 deletions app/code/Magento/Checkout/Controller/Cart/UpdateItemQty.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\Checkout\Controller\Cart;

use Magento\Checkout\Model\Cart\RequestQuantityProcessor;
use Magento\Framework\App\Action\Context;
use Magento\Framework\Exception\LocalizedException;
use Magento\Checkout\Model\Session as CheckoutSession;
use Magento\Framework\Serialize\Serializer\Json;
use Magento\Framework\Data\Form\FormKey\Validator as FormKeyValidator;
use Magento\Quote\Model\Quote\Item;
use Psr\Log\LoggerInterface;

class UpdateItemQty extends \Magento\Framework\App\Action\Action
{
/**
* @var RequestQuantityProcessor
*/
private $quantityProcessor;

/**
* @var FormKeyValidator
*/
private $formKeyValidator;

/**
* @var CheckoutSession
*/
private $checkoutSession;

/**
* @var Json
*/
private $json;

/**
* @var LoggerInterface
*/
private $logger;

/**
* @param Context $context,
* @param RequestQuantityProcessor $quantityProcessor
* @param FormKeyValidator $formKeyValidator
* @param CheckoutSession $checkoutSession
* @param Json $json
* @param LoggerInterface $logger
*/
public function __construct(
Context $context,
RequestQuantityProcessor $quantityProcessor,
FormKeyValidator $formKeyValidator,
CheckoutSession $checkoutSession,
Json $json,
LoggerInterface $logger
) {
$this->quantityProcessor = $quantityProcessor;
$this->formKeyValidator = $formKeyValidator;
$this->checkoutSession = $checkoutSession;
$this->json = $json;
$this->logger = $logger;
parent::__construct($context);
}

/**
* @return void
*/
public function execute()
{
try {
if (!$this->formKeyValidator->validate($this->getRequest())) {
throw new LocalizedException(
__('Something went wrong while saving the page. Please refresh the page and try again.')
);
}

$cartData = $this->getRequest()->getParam('cart');
if (!is_array($cartData)) {
throw new LocalizedException(
__('Something went wrong while saving the page. Please refresh the page and try again.')
);
}

$cartData = $this->quantityProcessor->process($cartData);
$quote = $this->checkoutSession->getQuote();

foreach ($cartData as $itemId => $itemInfo) {
$item = $quote->getItemById($itemId);
$qty = isset($itemInfo['qty']) ? (double)$itemInfo['qty'] : 0;
if ($item) {
$this->updateItemQuantity($item, $qty);
}
}

$this->jsonResponse();
} catch (LocalizedException $e) {
$this->jsonResponse($e->getMessage());
} catch (\Exception $e) {
$this->logger->critical($e->getMessage());
$this->jsonResponse('Something went wrong while saving the page. Please refresh the page and try again.');
}
}

/**
* Updates quote item quantity.
*
* @param Item $item
* @param float $qty
* @throws LocalizedException
*/
private function updateItemQuantity(Item $item, float $qty)
{
if ($qty > 0) {
$item->setQty($qty);

if ($item->getHasError()) {
throw new LocalizedException(__($item->getMessage()));
}
}
}

/**
* JSON response builder.
*
* @param string $error
* @return void
*/
private function jsonResponse(string $error = '')
{
$this->getResponse()->representJson(
$this->json->serialize($this->getResponseData($error))
);
}

/**
* Returns response data.
*
* @param string $error
* @return array
*/
private function getResponseData(string $error = ''): array
{
$response = [
'success' => true,
];

if (!empty($error)) {
$response = [
'success' => false,
'error_message' => $error,
];
}

return $response;
}
}
Loading

0 comments on commit 0e2bca6

Please sign in to comment.