-
Notifications
You must be signed in to change notification settings - Fork 9.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2971 from magento-mpi/port-2752
- Loading branch information
Showing
53 changed files
with
2,650 additions
and
343 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
15 changes: 15 additions & 0 deletions
15
app/code/Magento/Catalog/view/adminhtml/web/js/components/use-parent-settings/select.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
}); |
15 changes: 15 additions & 0 deletions
15
...e/Magento/Catalog/view/adminhtml/web/js/components/use-parent-settings/single-checkbox.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
}); |
15 changes: 15 additions & 0 deletions
15
app/code/Magento/Catalog/view/adminhtml/web/js/components/use-parent-settings/textarea.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
}); |
62 changes: 62 additions & 0 deletions
62
...nto/Catalog/view/adminhtml/web/js/components/use-parent-settings/toggle-disabled-mixin.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
}; | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
161 changes: 161 additions & 0 deletions
161
app/code/Magento/Checkout/Controller/Cart/UpdateItemQty.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} | ||
} |
Oops, something went wrong.