Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/yandex.market/lib/export/setup/ |
Upload File : |
<?php namespace Yandex\Market\Export\Setup; use Bitrix\Main; use Yandex\Market; Main\Localization\Loc::loadMessages(__FILE__); class Table extends Market\Reference\Storage\Table { public static function getTableName() { return 'yamarket_export_setup'; } public static function getUfId() { return 'YAMARKET_EXPORT_SETUP'; } /** @noinspection ClassConstantCanBeUsedInspection */ public static function getMap() { return array_merge([ new Main\Entity\IntegerField('ID', [ 'autocomplete' => true, 'primary' => true ]), new Main\Entity\StringField('NAME', [ 'required' => true ]), new Main\Entity\StringField('DOMAIN', [ 'required' => true, 'validation' => [__CLASS__, 'getValidationForDomain'], ]), new Main\Entity\BooleanField('HTTPS', [ 'values' => ['0', '1'] ]), new Main\Entity\BooleanField('ENABLE_AUTO_DISCOUNTS', [ 'values' => ['0', '1'], 'default_value' => '1' ]), new Main\Entity\BooleanField('ENABLE_CPA', [ 'values' => ['0', '1'], 'default_value' => '0', ]), ], Market\Watcher\Setup\StorageSchedule::getFields(false, Market\Watcher\Setup\StorageSchedule::DAY), [ new Main\Entity\StringField('EXPORT_SERVICE', [ 'required' => true, 'size' => 20 ]), new Main\Entity\StringField('EXPORT_FORMAT', [ 'required' => true, 'size' => 20 ]), new Main\Entity\StringField('FILE_NAME', [ 'required' => true, 'format' => '/^[0-9A-Za-z-_.\\/]+$/', 'size' => 20 ]), new Main\Entity\StringField('SALES_NOTES', [ 'size' => 50 ]), new Main\Entity\ReferenceField('IBLOCK_LINK', Market\Export\IblockLink\Table::class, [ '=this.ID' => 'ref.SETUP_ID' ]), new Main\Entity\ReferenceField('IBLOCK', 'Bitrix\Iblock\Iblock', [ '=this.IBLOCK_LINK.IBLOCK_ID' => 'ref.ID', ]), new Main\Entity\ReferenceField('DELIVERY', Market\Export\Delivery\Table::class, [ '=this.ID' => 'ref.ENTITY_ID', '=ref.ENTITY_TYPE' => ['?', Market\Export\Delivery\Table::ENTITY_TYPE_SETUP], ]), new Main\Entity\TextField( 'SHOP_DATA', Market\Reference\Storage\Field\Serializer::getParameters() ), new Main\Entity\ReferenceField('PROMO_LINK', Market\Export\Promo\Internals\SetupLinkTable::class, [ '=this.ID' => 'ref.SETUP_ID' ]), new Main\Entity\ReferenceField('COLLECTION_LINK', Market\Export\Collection\Internals\SetupLinkTable::class, [ '=this.ID' => 'ref.SETUP_ID' ]), new Main\Entity\ReferenceField('GROUP_LINK', Internals\GroupLinkTable::class, [ '=this.ID' => 'ref.SETUP_ID', ]), new Main\Entity\ReferenceField('GROUP', Internals\GroupTable::class, [ '=this.GROUP_LINK.GROUP_ID' => 'ref.ID', ]), ]); } public static function migrate(Main\DB\Connection $connection) { $tableName = static::getTableName(); $sqlHelper = $connection->getSqlHelper(); $tableFields = $connection->getTableFields($tableName); parent::migrate($connection); if (!isset($tableFields['ENABLE_CPA'])) { $connection->queryExecute(sprintf( 'UPDATE %s SET %s=\'%s\'', $sqlHelper->quote($tableName), $sqlHelper->quote('ENABLE_CPA'), $sqlHelper->forSql('0') )); } } public static function getValidationForDomain() { return [ [ __CLASS__, 'validateDomain' ], ]; } public static function validateDomain($value) { $result = true; $value = trim($value); if (preg_match('#^(https?:)?//#i', $value)) { $result = Market\Config::getLang('EXPORT_SETUP_VALIDATE_DOMAIN_WITHOUT_PROTOCOL'); } return $result; } public static function getMapDescription() { $result = parent::getMapDescription(); $result['NAME']['USER_TYPE'] = Market\Ui\UserField\Manager::getUserType('name'); $result['IBLOCK']['MANDATORY'] = 'Y'; $result['IBLOCK']['MULTIPLE'] = 'Y'; $result['IBLOCK']['USER_TYPE'] = Market\Ui\UserField\Manager::getUserType('iblock'); $result['IBLOCK']['USER_TYPE']['USE_FIELD_COMPONENT'] = false; $result['FILE_NAME']['USER_TYPE'] = Market\Ui\UserField\Manager::getUserType('exportFile'); $result = Market\Watcher\Setup\StorageSchedule::extendMapDescription($result); $result['EXPORT_SERVICE']['USER_TYPE'] = Market\Ui\UserField\Manager::getUserType('enumeration'); $result['EXPORT_SERVICE']['VALUES'] = []; $result['EXPORT_FORMAT']['USER_TYPE'] = Market\Ui\UserField\Manager::getUserType('enumeration'); $result['EXPORT_FORMAT']['VALUES'] = []; $usedTypeList = []; foreach (Market\Export\Xml\Format\Manager::getServiceList() as $service) { $result['EXPORT_SERVICE']['VALUES'][] = [ 'ID' => $service, 'VALUE' => Market\Export\Xml\Format\Manager::getServiceTitle($service) ]; foreach (Market\Export\Xml\Format\Manager::getTypeList($service) as $type) { if (isset($usedTypeList[$type])) { continue; } $usedTypeList[$type] = true; $result['EXPORT_FORMAT']['VALUES'][] = [ 'ID' => $type, 'VALUE' => Market\Export\Xml\Format\Manager::getTypeTitle($type), ]; } } $result['ENABLE_CPA']['DEPRECATED'] = 'Y'; $result['ENABLE_AUTO_DISCOUNTS']['DEPRECATED'] = 'Y'; return $result; } /** * @param int|int[]|null $primary * * @return array */ public static function getReference($primary = null) { return [ 'IBLOCK_LINK' => [ 'TABLE' => Market\Export\IblockLink\Table::class, 'LINK_FIELD' => 'SETUP_ID', 'LINK' => [ 'SETUP_ID' => $primary, ], ], 'DELIVERY' => [ 'TABLE' => Market\Export\Delivery\Table::class, 'LINK_FIELD' => 'ENTITY_ID', 'LINK' => [ 'ENTITY_TYPE' => Market\Export\Delivery\Table::ENTITY_TYPE_SETUP, 'ENTITY_ID' => $primary, ], ] ]; } public static function loadExternalReference($primaryList, $select = null, $isCopy = false) { $result = parent::loadExternalReference($primaryList, $select, $isCopy); if (!empty($primaryList)) { $referenceMap = [ 'IBLOCK' => 'loadExternalReferenceIblock', 'GROUP' => 'loadExternalReferenceGroup', ]; foreach ($referenceMap as $field => $method) { if (empty($select) || in_array($field, $select, true)) { $referenceDataList = static::$method($primaryList); foreach ($referenceDataList as $setupId => $referenceValue) { if (!isset($result[$setupId])) { $result[$setupId] = []; } $result[$setupId][$field] = $referenceValue; } } } } return $result; } /** @noinspection PhpUnused */ protected static function loadExternalReferenceIblock($setupIds) { $result = []; // load row data $query = Market\Export\IblockLink\Table::getList([ 'filter' => [ '=SETUP_ID' => $setupIds, ], 'select' => [ 'ID', 'IBLOCK_ID', 'SETUP_ID', ], ]); while ($row = $query->fetch()) { if (!isset($result[$row['SETUP_ID']])) { $result[$row['SETUP_ID']] = []; } $result[$row['SETUP_ID']][$row['ID']] = $row['IBLOCK_ID']; } return $result; } /** @noinspection PhpUnused */ protected static function loadExternalReferenceGroup($setupIds) { $result = []; $query = Internals\GroupLinkTable::getList([ 'filter' => [ '=SETUP_ID' => $setupIds, ], 'select' => [ 'SETUP_ID', 'GROUP_ID' ], ]); while ($row = $query->fetch()) { if (!isset($result[$row['SETUP_ID']])) { $result[$row['SETUP_ID']] = []; } $result[$row['SETUP_ID']][] = (int)$row['GROUP_ID']; } return $result; } public static function saveExtractReference(array &$data) { $result = parent::saveExtractReference($data); if (array_key_exists('IBLOCK', $data)) { unset($data['IBLOCK']); } if (array_key_exists('GROUP', $data)) { $result['GROUP'] = $data['GROUP']; unset($data['GROUP']); } return $result; } protected static function saveApplyReference($primary, $fields) { parent::saveApplyReference($primary, $fields); if (array_key_exists('GROUP', $fields)) { static::saveGroupReference($primary, (array)$fields['GROUP']); } } protected static function saveGroupReference($primary, $groups) { $queryExistsLinks = Internals\GroupLinkTable::getList([ 'filter' => [ '=SETUP_ID' => $primary ], 'select' => [ 'GROUP_ID' ] ]); $existsLinks = $queryExistsLinks->fetchAll(); $existsGroups = array_column($existsLinks, 'GROUP_ID'); $existsGroupsMap = array_flip($existsGroups); $groupsMap = array_flip($groups); $deleteGroups = array_diff_key($existsGroupsMap, $groupsMap); $addGroups = array_diff_key($groupsMap, $existsGroupsMap); foreach ($deleteGroups as $groupId => $dummy) { Internals\GroupLinkTable::delete([ 'SETUP_ID' => $primary, 'GROUP_ID' => $groupId, ]); } foreach ($addGroups as $groupId => $dummy) { Internals\GroupLinkTable::add([ 'SETUP_ID' => $primary, 'GROUP_ID' => $groupId, ]); } } public static function deleteReference($primary) { parent::deleteReference($primary); static::deleteReferenceTables($primary); static::deleteReferenceWriterIndex($primary); static::deleteReferenceChanges($primary); } protected static function deleteReferenceTables($primary) { /** @var \Yandex\Market\Reference\Storage\Table[] $runDataClassList */ $runDataClassList = [ Market\Export\Run\Storage\CategoryTable::class, Market\Export\Run\Storage\CurrencyTable::class, Market\Export\Run\Storage\OfferTable::class, Market\Export\Run\Storage\CollectionOfferTable::class, Market\Export\Run\Storage\CollectionTable::class, Market\Export\Run\Storage\PromoProductTable::class, Market\Export\Run\Storage\PromoGiftTable::class, Market\Export\Run\Storage\GiftTable::class, Market\Export\Run\Storage\PromoTable::class, Market\Logger\Table::class => 'ENTITY_PARENT', Internals\GroupLinkTable::class, Market\Export\Promo\Internals\SetupLinkTable::class, Market\Export\Collection\Internals\SetupLinkTable::class, ]; foreach ($runDataClassList as $key => $runDataClass) { if (!is_numeric($key)) { $field = $runDataClass; $runDataClass = $key; } else { $field = 'SETUP_ID'; } $runDataClass::deleteBatch([ 'filter' => [ '=' . $field => $primary ] ]); } } protected static function deleteReferenceWriterIndex($primary) { Market\Export\Run\Writer\IndexFacade::remove($primary); } protected static function deleteReferenceChanges($primary) { Market\Watcher\Track\StampTable::deleteBatch([ 'filter' => [ '=SERVICE' => Market\Glossary::SERVICE_EXPORT, '=SETUP_ID' => $primary, ] ]); } protected static function onBeforeRemove($primary) { $model = Model::loadById($primary); $model->onBeforeRemove(); } protected static function onAfterSave($primary) { $model = Model::loadById($primary); $model->onAfterSave(); } }