- Модуль: catalog
- Путь к файлу: ~/bitrix/modules/catalog/lib/component/usestore.php
- Класс: BitrixCatalogComponentUseStore
- Вызов: UseStore::showEntityProductGridColumns
static function showEntityProductGridColumns(): void
{
if (!Loader::includeModule('crm'))
{
return;
}
$headers = [
'STORE_INFO',
'STORE_AVAILABLE',
'RESERVE_INFO',
'ROW_RESERVED',
'DEDUCTED_INFO',
];
$allHeaderMap = ProductList::getHeaderDefaultMap();
$allHeaders = array_keys($allHeaderMap);
$gridId = ProductList::DEFAULT_GRID_ID;
$connection = Application::getConnection();
$sqlHelper = $connection->getSqlHelper();
$queryResult = $connection->query(/** @lang MySQL */
"SELECT ID, VALUE FROM b_user_option WHERE CATEGORY = 'main.interface.grid' AND NAME = '{$sqlHelper->forSql($gridId)}'"
);
$resetCache = false;
while ($gridSettings = $queryResult->fetch())
{
$optionID = (int)$gridSettings['ID'];
$value = $gridSettings['VALUE'];
if (!$value)
{
continue;
}
$options = unserialize($value, ['allowed_classes' => false]);
if (
!is_array($options)
|| empty($options)
|| !isset($options['views'])
|| !is_array($options['views'])
)
{
continue;
}
$changed = false;
foreach ($options['views'] as &$view)
{
if (!isset($view['columns']) || $view['columns'] === '')
{
continue;
}
$allUsedColumns = explode(',', $view['columns']);
$currentHeadersInDefaultPosition = array_values(
array_intersect($allHeaders, array_merge($allUsedColumns, $headers))
);
$headers = array_values(array_intersect($allHeaders, $headers));
foreach ($headers as $header)
{
if (in_array($header, $allUsedColumns, true))
{
continue;
}
$insertPosition = array_search($header, $currentHeadersInDefaultPosition, true);
array_splice($allUsedColumns, $insertPosition, 0, $header);
$changed = true;
}
if ($changed)
{
$view['columns'] = implode(',', $allUsedColumns);
}
}
unset($view);
if ($changed)
{
$sqlValue = $sqlHelper->forSql(serialize($options));
$connection->queryExecute(/** @lang MySQL */
"UPDATE b_user_option SET VALUE = '{$sqlValue}' WHERE ID ='{$optionID}'"
);
$resetCache = true;
}
}
if ($resetCache)
{
Application::getInstance()->getManagedCache()->cleanDir('user_option');
}
if (Loader::includeModule('pull'))
{
CPullWatch::AddToStack(
'CATALOG_INVENTORY_MANAGEMENT_CHANGED',
[
'module_id' => 'crm',
'command' => 'onCatalogInventoryManagementEnabled',
],
);
}
}