27 return Loc::getMessage(
'CATALOG_PRODUCT_SYSTEMFIELD_PRODUCTMAPPING_SET_DEFAULT_VALUE_STEPPER_TITLE');
37 if (!ProductMapping::isAllowed())
39 return self::FINISH_EXECUTION;
41 $fieldDescription = ProductMapping::getUserFieldBaseParam();
44 if (!isset(
$option[
'is_started']))
46 return $this->firstRun(
$option);
51 return self::FINISH_EXECUTION;
58 return self::FINISH_EXECUTION;
62 $products = $this->getProductsWithEmptyValue(
$lastId);
66 $db = Application::getConnection();
69 $db->startTransaction();
72 $fieldId = $fieldDescription[
'FIELD_NAME'];
73 foreach ($products as $row)
75 $productId = (int)$row[
'id'];
76 $userFieldManager->Update(
87 $db->commitTransaction();
91 $db->rollbackTransaction();
98 return self::FINISH_EXECUTION;
101 $option[
'steps'] += $stepCount;
104 return self::CONTINUE_EXECUTION;
119 $existUfTable =
$connection->query(
"SHOW TABLES LIKE 'b_uts_product'")->getSelectedRowsCount() > 0;
122 return self::FINISH_EXECUTION;
126 "SHOW COLUMNS FROM " . $helper->quote(
'b_uts_product') .
" LIKE 'UF_PRODUCT_MAPPING'"
127 )->getSelectedRowsCount() > 0;
130 return self::FINISH_EXECUTION;
133 if (!$this->isNotEmptyProducts())
135 return self::FINISH_EXECUTION;
138 $count = $this->getProductsToBeProcessedTotalCount();
141 return self::FINISH_EXECUTION;
149 return self::CONTINUE_EXECUTION;
160 private function getProductsQuery(
bool $isCountSelect =
false,
int $lastId = 0): string
165 $typeIds = join(
',', [
171 $select =
'b_catalog_product.id as ' . $helper->quote(
'id');
174 $select =
'COUNT(b_catalog_product.id)';
180 $where =
new SqlExpression(
"AND b_catalog_product.id > ?i",
$lastId);
185 FROM b_catalog_product
186 LEFT JOIN b_uts_product ON b_catalog_product.id = b_uts_product.value_id
187 WHERE b_catalog_product.TYPE in ({$typeIds})
188 AND b_uts_product.UF_PRODUCT_MAPPING IS NULL {$where}
189 " . ($isCountSelect ?
"" :
"ORDER BY b_catalog_product.id ASC") .
"
199 private function getProductsWithEmptyValue(
int $lastId): Result
202 $sql = $this->getProductsQuery(
false,
$lastId);
204 return Application::getConnection()->query($sql, $limit);
212 private function getProductsToBeProcessedTotalCount(): int
214 $sql = $this->getProductsQuery(
true);
216 return (
int)Application::getConnection()->queryScalar($sql);
219 private function isNotEmptyProducts(): bool
233 private function getDefaultValues(): ?
array
235 $config = ProductMapping::getConfig();
236 $tableName =
$config[
'HIGHLOADBLOCK'][
'TABLE_NAME'] ??
null;
243 $values[] = Application::getConnection()->queryScalar(
244 new SqlExpression(
"SELECT ID FROM ?# WHERE UF_XML_ID = 'LANDING'", $tableName)
253 'main.stepper.catalog',
289 'main.stepper.catalog',
static delete($moduleId, array $filter=array())
static get($moduleId, $name, $default="", $siteId=false)
static getRow(array $parameters)