1
0
mirror of synced 2024-11-26 15:26:08 +03:00

Добавил удаление из файлов, раздельный показ свойств. Поломал вывод или сохранение значений свойств

This commit is contained in:
a.belikin 2024-11-11 19:36:17 +03:00
parent 832b8f34b7
commit 7c762dff2f
4 changed files with 229 additions and 42 deletions

View File

@ -190,7 +190,7 @@ if ($STEP === 1) {
<tbody> <tbody>
<?php <?php
foreach ($settingsService->actrualPropList as $propertyKey => $property) { foreach ($settingsService->defaultPropList as $propertyKey => $property) {
$productSelected = false; ?> $productSelected = false; ?>
<tr class="adm-list-table-row"> <tr class="adm-list-table-row">
@ -473,6 +473,95 @@ if ($STEP === 1) {
</tr> </tr>
<?php <?php
} ?> } ?>
<?php
$productSelected = false;
$catalogId = $arIBlock['ID'];
$catalogCustomProps = $settingsService->customPropList[$catalogId];
foreach ($catalogCustomProps as $catalogCustomPropCode => $catalogCustomPropValue) { ?>
<tr class="adm-list-table-row custom-property-row">
<td class="adm-list-table-cell custom-property-title">
<?=htmlspecialcharsex($catalogCustomPropValue)?>
</td>
<td class="adm-list-table-cell">
<select
name="iblockPropertyProduct_<?=$catalogCustomPropCode?>[<?= $catalogId ?>]"
id="iblockPropertyProduct_<?=$catalogCustomPropCode . $catalogId ?>"
class="property-export"
data-type="<?= $catalogCustomPropCode ?>"
onchange="propertyChange(this)"
style="width: 200px">
<option value=""></option>
<?php foreach ($arIBlock['PROPERTIES_PRODUCT'] as $prop) {
$productHlTableName = ''; ?>
<option value="<?=$prop['CODE']?>"
<?php
echo $settingsService->getOptionClass($prop, true);
$productSelected = $settingsService->isOptionSelected(
$prop,
$arIBlock['OLD_PROPERTY_PRODUCT_SELECT'],
$catalogCustomPropCode
);
$productHlTableName
= $settingsService->getHlTableName($prop)
?? $productHlTableName;
echo $productSelected ? ' selected' : '';
?>
>
<?=$prop['NAME']?>
</option>
<?php } ?>
</select>
</td>
<?php if ($arIBlock['PROPERTIES_SKU'] !== null) {
$productSelected = false; ?>
<td class="adm-list-table-cell">
<select
name="iblockPropertyProduct_<?=$catalogCustomPropCode?>[<?= $catalogId ?>]"
id="iblockPropertyProduct_<?=$catalogCustomPropCode . $catalogId ?>"
class="property-export"
data-type="<?= $catalogCustomPropCode ?>"
onchange="propertyChange(this)"
style="width: 200px">
<option value=""></option>
<?php foreach ($arIBlock['PROPERTIES_SKU'] as $prop) {
$skuHlTableName = ''; ?>
<option value="<?=$prop['CODE']?>"
<?php
echo $settingsService->getOptionClass($prop, false);
if (!$productSelected) {
$isSelected = $settingsService->isOptionSelected(
$prop,
$arIBlock['OLD_PROPERTY_SKU_SELECT'],
$catalogCustomPropCode
);
$skuHlTableName
= $settingsService->getHlTableName($prop)
?? $skuHlTableName;
echo $isSelected ? ' selected' : '';
}
?>
>
<?=$prop['NAME']?>
</option>
<?php } ?>
</select>
<button id="delete-custom-row" class="adm-btn-save" type="button">Удалить</button>
</td>
<?php } ?>
</tr>
<?php } ?>
</tbody> </tbody>
</table> </table>
<button class="adm-btn-save add-custom-row" type="button">Добавить</button> <button class="adm-btn-save add-custom-row" type="button">Добавить</button>
@ -484,7 +573,7 @@ if ($STEP === 1) {
} ?> } ?>
</div> </div>
<input type="hidden" name="count_checked" id="count_checked" value="<?=$intCountChecked?>"> <input type="hidden" name="count_checked" id="count_checked" value="<?=$intCountChecked?>">
<!-- <br>--> <br>
<template id="custom-property-template-row"> <template id="custom-property-template-row">
<tr class="adm-list-table-row custom-property-row"> <tr class="adm-list-table-row custom-property-row">
<td class="adm-list-table-cell"> <td class="adm-list-table-cell">
@ -495,7 +584,7 @@ if ($STEP === 1) {
</td> </td>
<td class="adm-list-table-cell"> <td class="adm-list-table-cell">
<select name="iblockPropertySku_" id="iiblockPropertySku_" class="property-export" onchange="propertyChange(this)" style="width: 200px"></select> <select name="iblockPropertySku_" id="iiblockPropertySku_" class="property-export" onchange="propertyChange(this)" style="width: 200px"></select>
<button id="delete-custom-row" class="adm-btn-save" type="button">Удалить</button> <button id="delete-new-custom-row" class="adm-btn-save" type="button">Удалить</button>
</td> </td>
</tr> </tr>
</template> </template>
@ -787,14 +876,33 @@ if ($STEP === 1) {
} }
const setupFieldsListElement = $('input[name="SETUP_FIELDS_LIST"]'); const setupFieldsListElement = $('input[name="SETUP_FIELDS_LIST"]');
let customProperties = {}; let customProps = {};
let customPropsToDelete = {};
const setupFieldsParamsToFill = [
'iblockPropertySku_',
'iblockPropertyUnitSku_',
'iblockPropertyProduct_',
'iblockPropertyUnitProduct_',
'highloadblockb_hlsys_marking_code_group_',
'highloadblock_productb_hlsys_marking_code_group_',
'highloadblockeshop_color_reference_',
'highloadblock_producteshop_color_reference_',
'highloadblockeshop_brand_reference_',
'highloadblock_producteshop_brand_reference_'
];
$('.add-custom-row').click(function () { $('.add-custom-row').click(function () {
createCustomPropsRaw($(this)); createCustomPropsRaw($(this));
}); });
$(document).on('click', '#delete-new-custom-row', function () {
deleteCustomPropRow($(this));
});
$(document).on('click', '#delete-custom-row', function () { $(document).on('click', '#delete-custom-row', function () {
deleteCustomPropsRaw($(this)); let buttonElem = $(this);
addCustomPropToDelete(buttonElem);
deleteCustomPropRow(buttonElem);
}); });
$(document).on('blur', 'input[name="custom-property-title"]', function () { $(document).on('blur', 'input[name="custom-property-title"]', function () {
@ -811,26 +919,66 @@ if ($STEP === 1) {
$('#submit-form').submit(function (formEvent) { $('#submit-form').submit(function (formEvent) {
formEvent.preventDefault(); formEvent.preventDefault();
let savePromise = null;
let deletePromise = null;
let formElem = formEvent.currentTarget; let formElem = formEvent.currentTarget;
let profileId = $($('input[name="PROFILE_ID"]')).val(); let profileId = $($('input[name="PROFILE_ID"]')).val();
setCustomProperties(); setCustomProperties();
if (Object.keys(customProperties).length > 0) { if (Object.keys(customProps).length > 0) {
addParamsToSetupFieldsList(); savePromise = BX.ajax.runAction('intaro:retailcrm.api.customexportprops.save', {
BX.ajax.runAction('intaro:retailcrm.api.customexportprops.save', {
json: { json: {
properties: customProperties, properties: customProps,
profileId: profileId profileId: profileId
}, },
}).then(function() { }).then(addParamsToSetupFieldsList);
formElem.submit(); }
});
if (Object.keys(customPropsToDelete).length > 0) {
deletePromise = BX.ajax.runAction('intaro:retailcrm.api.customexportprops.delete', {
json: {
properties: customPropsToDelete,
profileId: profileId
},
}).then(deleteParamsFromSetupFieldsList);
}
const promises = [savePromise, deletePromise].filter(Boolean);
if (promises.length > 0) {
Promise.all(promises)
.finally(() => {
formElem.submit();
});
} else { } else {
formElem.submit(); formElem.submit();
} }
}); });
function deleteCustomPropRow(deleteButton)
{
deleteButton.closest('tr').remove();
}
function addCustomPropToDelete(deleteButton)
{
let deletedPropTitle = deleteButton.closest('td').siblings().filter('.custom-property-title').text().trim();
let deletedPropCode = deleteButton.siblings().filter('select').first().data('type');
let customPropCatalogId = deleteButton.closest('.iblockExportTable').data('type');
let values = {
'title': deletedPropTitle,
'code': deletedPropCode,
};
if (customPropsToDelete.hasOwnProperty(customPropCatalogId)) {
customPropsToDelete[customPropCatalogId].push(values);
} else {
customPropsToDelete[customPropCatalogId] = [values];
}
}
function addCustomPropCodeToSelectAttributes(customPropCode, customPropTitleElem) function addCustomPropCodeToSelectAttributes(customPropCode, customPropTitleElem)
{ {
let selectElements = customPropTitleElem.closest('.custom-property-row').find('td select'); let selectElements = customPropTitleElem.closest('.custom-property-row').find('td select');
@ -851,7 +999,6 @@ if ($STEP === 1) {
function triggerSelectChange(selectElem) function triggerSelectChange(selectElem)
{ {
if (selectElem.val().length > 0) { if (selectElem.val().length > 0) {
console.log('был')
selectElem.trigger('change', [self]); selectElem.trigger('change', [self]);
} }
} }
@ -893,9 +1040,9 @@ if ($STEP === 1) {
}; };
if (catalogIds.indexOf(customPropertyCatalogId) === -1) { if (catalogIds.indexOf(customPropertyCatalogId) === -1) {
customProperties[customPropertyCatalogId] = [values]; customProps[customPropertyCatalogId] = [values];
} else { } else {
customProperties[customPropertyCatalogId].push(values); customProps[customPropertyCatalogId].push(values);
} }
catalogIds.push(customPropertyCatalogId); catalogIds.push(customPropertyCatalogId);
}); });
@ -917,22 +1064,14 @@ if ($STEP === 1) {
function addParamsToSetupFieldsList() function addParamsToSetupFieldsList()
{ {
let newParams = ''; let newParams = '';
let parametersToFill = [
'iblockPropertySku_',
'iblockPropertyUnitSku_',
'iblockPropertyProduct_',
'iblockPropertyUnitProduct_',
'highloadblockb_hlsys_marking_code_group_',
'highloadblock_productb_hlsys_marking_code_group_',
'highloadblockeshop_color_reference_',
'highloadblock_producteshop_color_reference_',
'highloadblockeshop_brand_reference_',
'highloadblock_producteshop_brand_reference_'
];
for (let propertiesByCatalogId of Object.values(customProperties)) { if (Object.keys(customProps).length === 0) {
return;
}
for (let propertiesByCatalogId of Object.values(customProps)) {
propertiesByCatalogId.forEach(function (values) { propertiesByCatalogId.forEach(function (values) {
parametersToFill.forEach(function (param) { setupFieldsParamsToFill.forEach(function (param) {
newParams += ',' + param + values.code; newParams += ',' + param + values.code;
}); });
}); });
@ -940,6 +1079,30 @@ if ($STEP === 1) {
let newValue = setupFieldsListElement.val() + newParams; let newValue = setupFieldsListElement.val() + newParams;
setupFieldsListElement.val(newValue); setupFieldsListElement.val(newValue);
return true;
}
function deleteParamsFromSetupFieldsList()
{
let setupFields = setupFieldsListElement.val();
if (Object.keys(customPropsToDelete).length === 0) {
return;
}
for (let propsByCatalogId of Object.values(customPropsToDelete)) {
propsByCatalogId.forEach(function (propValues) {
setupFieldsParamsToFill.forEach(function (param) {
let paramToDelete = ',' + param + propValues.code;
setupFields = setupFields.replace(paramToDelete, '');
});
});
}
setupFieldsListElement.val(setupFields);
return true;
} }
function createCustomPropsRaw(addRowButton) function createCustomPropsRaw(addRowButton)
@ -958,11 +1121,6 @@ if ($STEP === 1) {
}); });
} }
function deleteCustomPropsRaw(buttonEvent)
{
buttonEvent.closest('tr').remove();
}
function fillTemplateSelect(sourceSelectElement, templateSelectElement) function fillTemplateSelect(sourceSelectElement, templateSelectElement)
{ {
let selectOptions = sourceSelectElement.find('option'); let selectOptions = sourceSelectElement.find('option');

View File

@ -17,7 +17,7 @@ $('#submit-form').submit(function (formEvent) {
addParamsToSetupFieldsList(); addParamsToSetupFieldsList();
BX.ajax.runAction('intaro:retailcrm.api.customexportprops.save', { BX.ajax.runAction('intaro:retailcrm.api.customexportprops.save', {
json: {properties: customProperties}, json: {properties: customProps},
}).then(function() { }).then(function() {
formElem.submit(); formElem.submit();
}); });
@ -75,9 +75,9 @@ function setCustomProperties()
}; };
if (catalogIds.indexOf(customPropertyCatalogId) === -1) { if (catalogIds.indexOf(customPropertyCatalogId) === -1) {
customProperties[customPropertyCatalogId] = [values]; customProps[customPropertyCatalogId] = [values];
} else { } else {
customProperties[customPropertyCatalogId].push(values); customProps[customPropertyCatalogId].push(values);
} }
catalogIds.push(customPropertyCatalogId); catalogIds.push(customPropertyCatalogId);
}); });
@ -112,7 +112,7 @@ function addParamsToSetupFieldsList()
'highloadblock_producteshop_brand_reference_' 'highloadblock_producteshop_brand_reference_'
]; ];
for (let propertiesByCatalogId of Object.values(customProperties)) { for (let propertiesByCatalogId of Object.values(customProps)) {
propertiesByCatalogId.forEach(function (values) { propertiesByCatalogId.forEach(function (values) {
parametersToFill.forEach(function (param) { parametersToFill.forEach(function (param) {
newParams += ',' + param + values.code; newParams += ',' + param + values.code;

View File

@ -24,7 +24,7 @@ class CustomExportProps extends Controller
$response->setStatus(new Error('Ошибка')); $response->setStatus(new Error('Ошибка'));
} }
$requestData = json_decode($this->getRequest()->getInput(), true); $requestData = json_decode($request, true);
$properties = $requestData['properties']; $properties = $requestData['properties'];
$profileId = $requestData['profileId']; $profileId = $requestData['profileId'];
@ -40,6 +40,7 @@ class CustomExportProps extends Controller
$profileId, $profileId,
$catalogId $catalogId
); );
$saveResult = file_put_contents($filePath, $newPropertiesString, FILE_APPEND); $saveResult = file_put_contents($filePath, $newPropertiesString, FILE_APPEND);
} }
@ -52,6 +53,27 @@ class CustomExportProps extends Controller
public function deleteAction() public function deleteAction()
{ {
$request = $this->getRequest()->getInput();
$requestData = json_decode($request, true);
$properties = $requestData['properties'];
$profileId = $requestData['profileId'];
foreach ($properties as $catalogId => $propsArray) {
$filePath = sprintf(
'%s/%s_profileId_%s_catalogId_%s.txt',
$_SERVER['DOCUMENT_ROOT'] . '/local',
'icml_property_retailcrm',
$profileId,
$catalogId
);
$fileContent = file_get_contents($filePath);
foreach ($propsArray as $property) {
$propStringToDelete = PHP_EOL . $property['code'] . ' = ' . $property['title'];
$fileContent = str_replace($propStringToDelete, '', $fileContent);
}
file_put_contents($filePath, $fileContent);
}
} }
} }

View File

@ -167,7 +167,14 @@ class SettingsService
...$this->defaultPropList, ...$this->defaultPropList,
...$customProps ...$customProps
]; ];
}
public function getFrontPropList(): array
{
$result = [...$this->defaultPropList];
$result['customProps'] = $this->customPropList;
return $result;
} }
public function getPriceTypes() public function getPriceTypes()