Skip to content

Commit 8dde59b

Browse files
committed
Merge remote-tracking branch 'origin/imported-magento-magento2-31055' into 2.4-develop-pr113
2 parents e4fef91 + 01451f5 commit 8dde59b

File tree

5 files changed

+40
-10
lines changed

5 files changed

+40
-10
lines changed

app/code/Magento/Catalog/Model/Product/Option/Type/File.php

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@
66

77
namespace Magento\Catalog\Model\Product\Option\Type;
88

9+
use Magento\Catalog\Model\Product\Exception as ProductException;
10+
use Magento\Catalog\Helper\Product as ProductHelper;
911
use Magento\Framework\App\Filesystem\DirectoryList;
1012
use Magento\Framework\Filesystem;
1113
use Magento\Framework\Exception\LocalizedException;
12-
use Magento\Catalog\Model\Product\Exception as ProductException;
1314
use Magento\Framework\Serialize\Serializer\Json;
1415
use Magento\Framework\App\ObjectManager;
1516

@@ -91,6 +92,11 @@ class File extends \Magento\Catalog\Model\Product\Option\Type\DefaultType
9192
*/
9293
private $filesystem;
9394

95+
/**
96+
* @var ProductHelper
97+
*/
98+
private $productHelper;
99+
94100
/**
95101
* @param \Magento\Checkout\Model\Session $checkoutSession
96102
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
@@ -103,6 +109,7 @@ class File extends \Magento\Catalog\Model\Product\Option\Type\DefaultType
103109
* @param array $data
104110
* @param Filesystem $filesystem
105111
* @param Json|null $serializer
112+
* @param ProductHelper|null $productHelper
106113
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
107114
*/
108115
public function __construct(
@@ -116,7 +123,8 @@ public function __construct(
116123
\Magento\Framework\Escaper $escaper,
117124
array $data = [],
118125
Filesystem $filesystem = null,
119-
Json $serializer = null
126+
Json $serializer = null,
127+
ProductHelper $productHelper = null
120128
) {
121129
$this->_itemOptionFactory = $itemOptionFactory;
122130
$this->_urlBuilder = $urlBuilder;
@@ -129,6 +137,7 @@ public function __construct(
129137
$this->validatorInfo = $validatorInfo;
130138
$this->validatorFile = $validatorFile;
131139
$this->serializer = $serializer ?: ObjectManager::getInstance()->get(Json::class);
140+
$this->productHelper = $productHelper ?: ObjectManager::getInstance()->get(ProductHelper::class);
132141
parent::__construct($checkoutSession, $scopeConfig, $data);
133142
}
134143

@@ -223,6 +232,12 @@ public function validateUserValue($values)
223232
$this->setIsValid(true);
224233
$option = $this->getOption();
225234

235+
if (isset($values['files_prefix'])) {
236+
$processingParams = ['files_prefix' => $values['files_prefix']];
237+
$processingParams = array_merge($this->_getProcessingParams()->getData(), $processingParams);
238+
$this->productHelper->addParamsToBuyRequest($this->getRequest(), $processingParams);
239+
}
240+
226241
/*
227242
* Check whether we receive uploaded file or restore file by: reorder/edit configuration or
228243
* previous configuration with no newly uploaded file

app/code/Magento/Catalog/Test/Mftf/Data/ProductData.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,10 @@
586586
<var key="sku" entityType="product" entityKey="sku" />
587587
<requiredEntity type="product_option">ProductOptionValueDropdown</requiredEntity>
588588
</entity>
589+
<entity name="productWithFileOption" type="product">
590+
<var key="sku" entityType="product" entityKey="sku" />
591+
<requiredEntity type="product_option">ProductOptionFile</requiredEntity>
592+
</entity>
589593
<entity name="productWithDropdownAndFieldOptions" type="product">
590594
<var key="sku" entityType="product" entityKey="sku" />
591595
<requiredEntity type="product_option">ProductOptionValueDropdown</requiredEntity>

app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,7 @@ define([
607607
* @param method can be 'item_confirm', 'item_restore', 'current_confirmed_to_form', 'form_confirmed_to_confirmed'
608608
*/
609609
_processFieldsData: function (method) {
610+
var self = this;
610611

611612
/**
612613
* Internal function for rename fields names of some list type
@@ -616,12 +617,14 @@ define([
616617
* @param blockItem
617618
*/
618619
var _renameFields = function (method, blockItem, listType) {
619-
var pattern = null;
620-
var patternFlat = null;
621-
var replacement = null;
622-
var replacementFlat = null;
623-
var scopeArr = blockItem.id.match(/.*\[\w+\]\[([^\]]+)\]$/);
624-
var itemId = scopeArr[1];
620+
var pattern = null;
621+
var patternFlat = null;
622+
var patternPrefix = RegExp('\\s', 'g');
623+
var replacement = null;
624+
var replacementFlat = null;
625+
var replacementPrefix = '_';
626+
var scopeArr = blockItem.id.match(/.*\[\w+\]\[([^\]]+)\]$/);
627+
var itemId = scopeArr[1];
625628

626629
if (method == 'current_confirmed_to_form') {
627630
pattern = RegExp('(\\w+)(\\[?)');
@@ -651,6 +654,14 @@ define([
651654
var rename = function (elms) {
652655
for (var i = 0; i < elms.length; i++) {
653656
if (elms[i].name && elms[i].type == 'file') {
657+
var prefixName = 'options[files_prefix]',
658+
prefixValue = 'item_' + itemId + '_';
659+
660+
self.blockFormFields.insert(new Element('input', {
661+
type: 'hidden',
662+
name: prefixName.replace(pattern, replacement),
663+
value: prefixValue.replace(patternPrefix, replacementPrefix)
664+
}));
654665
elms[i].name = elms[i].name.replace(patternFlat, replacementFlat);
655666
} else if (elms[i].name) {
656667
elms[i].name = elms[i].name.replace(pattern, replacement);

app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormCustomOptionsSection.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<section name="AdminOrderFormCustomOptionsSection">
1111
<element name="quantity" type="input" selector="//input[@id='product_composite_configure_input_qty']"/>
1212
<element name="file" type="file" selector="//input[@type='file'][contains(@class, 'product-custom-option')]" />
13-
<element name="buttonOk" type="button" selector="//button[contains(@class, 'action-primary')][@data-role='action']"/>
13+
<element name="buttonOk" type="button" selector="//button[contains(@class, 'action-primary')][@data-role='action']" timeout="30"/>
1414
<element name="linkChange" type="text" selector="//div[contains(@class, 'entry-edit')]//a[contains(text(),'Change')]"/>
1515
</section>
1616
</sections>

app/code/Magento/Sales/Test/Mftf/Section/AdminOrderFormItemsOrderedSection.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<element name="configureButtonBySku" type="button" selector="//div[@class='sku-configure-button']//span[contains(text(),'Configure')]"/>
1414
<element name="configureProductOk" type="button" selector="//div[@class='page-main-actions']//span[contains(text(),'OK')]"/>
1515
<element name="configureProductQtyField" type="input" selector="//*[@id='super-product-table']/tbody/tr[{{arg}}]/td[5]/input[1]" parameterized="true"/>
16-
<element name="addProductToOrder" type="input" selector="//*[@title='Add Products to Order']"/>
16+
<element name="addProductToOrder" type="input" selector="//*[@title='Add Products to Order']" timeout="30"/>
1717
<element name="itemsOrderedSummaryText" type="textarea" selector="//table[@class='data-table admin__table-primary order-tables']/tfoot/tr"/>
1818
<element name="configureSelectAttribute" type="select" selector="select[id*=attribute]"/>
1919
<element name="itemsSKU" type="text" selector="(//div[contains(@class, 'product-sku-block')])[{{productNumber}}]" parameterized="true"/>

0 commit comments

Comments
 (0)