1
0
mirror of synced 2024-11-22 05:16:09 +03:00

Сделал сохранение е и обновление id каталогов в таблице. Изменил получение экземпляра и конструктор сервиса настроек

This commit is contained in:
a.belikin 2024-11-15 20:07:12 +03:00
parent b7c54305bc
commit c65cf25393
5 changed files with 93 additions and 51 deletions

View File

@ -38,7 +38,8 @@ if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/bitrix/php_interface/retailcrm/exp
} }
} }
$settingService = SettingsService::getInstance([], ''); global $PROFILE_ID;
$settingService = SettingsService::getInstance([], '', $PROFILE_ID);
$iblockPropertySku = []; $iblockPropertySku = [];
$iblockPropertySkuHl = []; $iblockPropertySkuHl = [];
$iblockPropertyUnitSku = []; $iblockPropertyUnitSku = [];

View File

@ -26,7 +26,8 @@ CModule::IncludeModule('intaro.retailcrm');
//TODO заменить вызов на сервис-локатор, когда он приедет //TODO заменить вызов на сервис-локатор, когда он приедет
$settingsService = SettingsService::getInstance( $settingsService = SettingsService::getInstance(
$arOldSetupVars ?? [], $arOldSetupVars ?? [],
$ACTION $ACTION,
$PROFILE_ID
); );
$isSetupModulePage = $settingsService->isSetupModulePage(); $isSetupModulePage = $settingsService->isSetupModulePage();
@ -473,10 +474,10 @@ if ($STEP === 1) {
} ?> } ?>
<?php <?php
if (!empty($catalogCustomProps)) {
$catalogId = $arIBlock['ID']; $catalogId = $arIBlock['ID'];
$catalogCustomProps = $settingsService->customPropList[$catalogId]; $catalogCustomProps = $settingsService->customPropList[$catalogId];
if (!empty($catalogCustomProps)) {
foreach ($catalogCustomProps as $catalogCustomPropCode => $catalogCustomPropValue) { ?> foreach ($catalogCustomProps as $catalogCustomPropCode => $catalogCustomPropValue) { ?>
<tr class="adm-list-table-row custom-property-row"> <tr class="adm-list-table-row custom-property-row">
<td class="adm-list-table-cell custom-property-title"> <td class="adm-list-table-cell custom-property-title">

View File

@ -31,15 +31,16 @@ class CustomExportProps extends Controller
public function saveAction() public function saveAction()
{ {
$settingsService = SettingsService::getInstance(
[],
null
);
$requestData = $this->getRequestData(); $requestData = $this->getRequestData();
$props = $requestData['properties']; $props = $requestData['properties'];
$profileId = $requestData['profileId']; $profileId = $requestData['profileId'];
$settingsService = SettingsService::getInstance(
[],
null,
$profileId
);
foreach ($props as $catalogId => $propsArray) { foreach ($props as $catalogId => $propsArray) {
$catalogCustomProps = []; $catalogCustomProps = [];
foreach ($propsArray as $property) { foreach ($propsArray as $property) {
@ -49,22 +50,23 @@ class CustomExportProps extends Controller
]; ];
} }
$settingsService $settingsService
->setCatalogCustomPropsOptionName($profileId) ->setCatalogCustomPropsOptionName($catalogId)
->saveCustomProps($catalogId, $catalogCustomProps); ->saveCustomProps($catalogId, $catalogCustomProps);
} }
} }
public function deleteAction() public function deleteAction()
{ {
$settingsService = SettingsService::getInstance(
[],
null
);
$requestData = $this->getRequestData(); $requestData = $this->getRequestData();
$props = $requestData['properties']; $props = $requestData['properties'];
$profileId = $requestData['profileId']; $profileId = $requestData['profileId'];
$settingsService = SettingsService::getInstance(
[],
null,
$profileId
);
foreach ($props as $catalogId => $propsArray) { foreach ($props as $catalogId => $propsArray) {
$catalogCustomProps = []; $catalogCustomProps = [];
foreach ($propsArray as $property) { foreach ($propsArray as $property) {

View File

@ -131,7 +131,7 @@ class SettingsService
* @param array $arOldSetupVars * @param array $arOldSetupVars
* @param string|null $action * @param string|null $action
*/ */
private function __construct(array $arOldSetupVars, ?string $action) private function __construct(array $arOldSetupVars, ?string $action, string $profileId)
{ {
$this->arOldSetupVars = $arOldSetupVars; $this->arOldSetupVars = $arOldSetupVars;
$this->action = $action; $this->action = $action;
@ -147,8 +147,9 @@ class SettingsService
$this->getPriceTypes(); $this->getPriceTypes();
$this->getVatRates(); $this->getVatRates();
$this->exportProfileId = $this->getExportProfileId(); $this->exportProfileId = $profileId;
$this->profileCatalogsOptionName = $this->getProfileCatalogsOptionName(); $this->setProfileCatalogsOptionName();
$this->deleteEmptyProfileCatalogs();
$this->customPropList = $this->getNewProps(); $this->customPropList = $this->getNewProps();
$this->defaultPropList = $this->getIblockPropsPreset(); $this->defaultPropList = $this->getIblockPropsPreset();
@ -161,10 +162,10 @@ class SettingsService
* *
* @return \Intaro\RetailCrm\Icml\SettingsService|null * @return \Intaro\RetailCrm\Icml\SettingsService|null
*/ */
public static function getInstance(array $arOldSetupVars, ?string $action): ?SettingsService public static function getInstance(array $arOldSetupVars, ?string $action, ?string $profileId): ?SettingsService
{ {
if (is_null(self::$instance)) { if (is_null(self::$instance)) {
self::$instance = new self($arOldSetupVars, $action); self::$instance = new self($arOldSetupVars, $action, $profileId);
} }
return self::$instance; return self::$instance;
@ -792,7 +793,7 @@ class SettingsService
public function setCatalogCustomPropsOptionName(string $catalogId): self public function setCatalogCustomPropsOptionName(string $catalogId): self
{ {
$this->catalogCustomPropsOptionName = sprintf( $this->catalogCustomPropsOptionName = sprintf(
'customProps_exportProfileId_%s_catalogId_%s', 'exportCustomProps_ProfileId_%s_catalogId_%s',
$this->exportProfileId, $this->exportProfileId,
$catalogId $catalogId
); );
@ -800,19 +801,12 @@ class SettingsService
return $this; return $this;
} }
private function getExportProfileId(): string private function setProfileCatalogsOptionName(): void
{ {
global $PROFILE_ID; $this->profileCatalogsOptionName = sprintf('exportProfileId_%s_catalogs', $this->exportProfileId);
return $PROFILE_ID;
} }
private function getProfileCatalogsOptionName(): string private function getCustomProps(): ?array
{
return sprintf('exportProfile_%s_catalogs', $this->exportProfileId);
}
public function getCustomProps(): ?array
{ {
$props = unserialize(COption::GetOptionString(self::MODULE_ID, $this->catalogCustomPropsOptionName)); $props = unserialize(COption::GetOptionString(self::MODULE_ID, $this->catalogCustomPropsOptionName));
@ -832,24 +826,23 @@ class SettingsService
)); ));
if (empty($updatedCatalogProps)) { if (empty($updatedCatalogProps)) {
COption::RemoveOption(self::MODULE_ID, $this->catalogCustomPropsOptionName); $this->deleteOptionEntry($this->catalogCustomPropsOptionName);
COption::RemoveOption(self::MODULE_ID, $this->profileCatalogsOptionName); $this->deleteProfileCatalog($catalogId);
} else { } else {
$this->updateProfileCatalogs($catalogId); $this->updateCustomProps($updatedCatalogProps);
$this->updateCustomPropsOptionEntry($updatedCatalogProps);
} }
} }
public function updateCustomPropsOptionEntry(array $updatedProps) private function updateCustomProps(array $updatedProps)
{ {
COption::SetOptionString(self::MODULE_ID, $this->catalogCustomPropsOptionName, ''); $serializedProps = serialize($updatedProps);
$this->setCustomPropsOptionEntry($updatedProps); $this->updateOptionEntry($this->catalogCustomPropsOptionName, $serializedProps);
} }
private function setCustomPropsOptionEntry(array $props) private function setCustomProps(array $props)
{ {
$propsString = serialize($props); $propsString = serialize($props);
COption::SetOptionString(self::MODULE_ID, $this->catalogCustomPropsOptionName, $propsString); $this->setOptionEntry($this->catalogCustomPropsOptionName, $propsString);
} }
public function saveCustomProps(string $catalogId, array $newProps): void public function saveCustomProps(string $catalogId, array $newProps): void
@ -857,12 +850,12 @@ class SettingsService
$currentProps = $this->getCustomProps(); $currentProps = $this->getCustomProps();
if (is_null($currentProps)) { if (is_null($currentProps)) {
$this->setCustomPropsOptionEntry($newProps); $this->setProfileCatalog($catalogId);
$this->setProfileCatalogs($catalogId); $this->setCustomProps($newProps);
} else { } else {
$updatedProps = array_merge($currentProps, $newProps); $updatedProps = array_merge($currentProps, $newProps);
$this->updateCustomPropsOptionEntry($updatedProps);
$this->updateProfileCatalogs($catalogId); $this->updateProfileCatalogs($catalogId);
$this->updateCustomProps($updatedProps);
} }
} }
@ -877,18 +870,57 @@ class SettingsService
return $catalogs; return $catalogs;
} }
private function setProfileCatalogs(string $catalogId): void private function setProfileCatalog(string $catalogId): void
{ {
$catalogs = serialize([$catalogId]); $catalogs = serialize([$catalogId]);
COption::SetOptionString(self::MODULE_ID, $this->profileCatalogsOptionName, $catalogs); $this->setOptionEntry($this->profileCatalogsOptionName, $catalogs);
} }
private function updateProfileCatalogs(string $catalogId): void private function updateProfileCatalogs(string $catalogId): void
{ {
$currentCatalogs = unserialize(COption::GetOptionString(self::MODULE_ID, $this->profileCatalogsOptionName)); $currentCatalogs = $this->getProfileCatalogs();
$updatedCatalogs = serialize([...$currentCatalogs, $catalogId]);
COption::SetOptionString(self::MODULE_ID, $this->profileCatalogsOptionName, ''); if (!in_array($catalogId, $currentCatalogs)) {
COption::SetOptionString(self::MODULE_ID, $this->profileCatalogsOptionName, $updatedCatalogs); $updatedCatalogs = serialize(array_merge($currentCatalogs, [$catalogId]));
$this->updateOptionEntry($this->profileCatalogsOptionName, $updatedCatalogs);
}
}
private function deleteProfileCatalog(string $catalogId): void
{
$currentCatalogs = $this->getProfileCatalogs();
$catalogIdIndex = array_search($catalogId, $currentCatalogs);
if ($catalogIdIndex !== false) {
unset($currentCatalogs[$catalogIdIndex]);
}
$updatedCatalogs = serialize($currentCatalogs);
$this->updateOptionEntry($this->profileCatalogsOptionName, $updatedCatalogs);
}
private function deleteEmptyProfileCatalogs(): void
{
$currentCatalogs = $this->getProfileCatalogs();
if (is_null($currentCatalogs)) {
$this->deleteOptionEntry($this->profileCatalogsOptionName);
}
}
private function setOptionEntry(string $name, string $value)
{
$setResult = COption::SetOptionString(self::MODULE_ID, $name, $value);
}
private function updateOptionEntry(string $name, string $value)
{
COption::SetOptionString(self::MODULE_ID, $name, '');
COption::SetOptionString(self::MODULE_ID, $name, $value);
}
private function deleteOptionEntry(string $name)
{
COption::RemoveOption(self::MODULE_ID, $name);
} }
} }

View File

@ -115,8 +115,8 @@ class XmlOfferBuilder
public function __construct(XmlSetup $setup, array $measure, ?string $serverName) public function __construct(XmlSetup $setup, array $measure, ?string $serverName)
{ {
$this->setup = $setup; $this->setup = $setup;
$this->setSettingsService();
$this->purchasePriceNull = RetailcrmConfigProvider::getCrmPurchasePrice(); $this->purchasePriceNull = RetailcrmConfigProvider::getCrmPurchasePrice();
$this->settingsService = SettingsService::getInstance([], '');
$this->vatRates = $this->settingsService->vatRates; $this->vatRates = $this->settingsService->vatRates;
$this->measures = $this->prepareMeasures($measure); $this->measures = $this->prepareMeasures($measure);
$this->serverName = $serverName; $this->serverName = $serverName;
@ -141,6 +141,12 @@ class XmlOfferBuilder
return $this->xmlOffer; return $this->xmlOffer;
} }
private function setSettingsService(): void
{
global $PROFILE_ID;
$this->settingsService = SettingsService::getInstance([], '', $PROFILE_ID);
}
/** /**
* @param array $categories * @param array $categories
*/ */