• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/update/admingridoption.php
  • Класс: BitrixMainUpdateAdminGridOption
  • Вызов: AdminGridOption::execute
public function execute(array &$option)
{
	$listGrid = Option::get(self::$moduleId, "listGridToConvert", "");
	if ($listGrid !== "" )
	{
		$listGrid = unserialize($listGrid, ['allowed_classes' => false]);
	}
	$listGrid = is_array($listGrid) ? $listGrid : [];
	if (empty($listGrid))
	{
		Option::delete(self::$moduleId, ["name" => "listGridToConvert"]);
		$GLOBALS["CACHE_MANAGER"]->cleanDir("user_option");
		return false;
	}

	$connection = Application::getInstance()->getConnection();
	$sqlHelper = $connection->getSqlHelper();

	foreach ($listGrid as $tableId => $table)
	{
		$queryObject = $connection->query("SELECT * FROM b_user_option WHERE CATEGORY = 'list' AND NAME = '".
			$sqlHelper->forSql($table["tableId"])."' ORDER BY ID ASC LIMIT ".$this->limit." OFFSET ".$table["offset"]);
		$selectedRowsCount = $queryObject->getSelectedRowsCount();
		while ($optionOldGrid = $queryObject->fetch())
		{
			$oldGridData = (!empty($optionOldGrid["VALUE"]) ? unserialize($optionOldGrid["VALUE"], ['allowed_classes' => false]) : []);

			if (!$oldGridData)
			{
				continue;
			}

			$queryResultObject = $connection->query(
				"SELECT ID FROM b_user_option WHERE CATEGORY = 'main.interface.grid' AND NAME = '".
				$sqlHelper->forSql($table["tableId"])."' AND USER_ID = '".$optionOldGrid["USER_ID"]."'");
			if (!$queryResultObject->fetch())
			{
				if (!array_diff_key(array_flip(["page_size", "by", "order", "columns"]), $oldGridData))
				{
					$gridOptions = new CGridOptions($tableId);
					$gridOptions->setSorting($oldGridData["by"], $oldGridData["order"]);
					$gridOptions->setColumns($oldGridData["columns"]);
					$options = $gridOptions->getOptions();
					$options["views"]["default"]["page_size"] = intval($oldGridData["page_size"]);
					CUserOptions::setOption(
						"main.interface.grid", $tableId, $options, false, $optionOldGrid["USER_ID"]);
				}
			}
		}

		if ($selectedRowsCount < $this->limit)
		{
			unset($listGrid[$tableId]);
		}
		else
		{
			$listGrid[$tableId]["offset"] = $listGrid[$tableId]["offset"] + $selectedRowsCount;
		}
	}

	$GLOBALS["CACHE_MANAGER"]->cleanDir("user_option");

	if (!empty($listGrid))
	{
		Option::set(self::$moduleId, "listGridToConvert", serialize($listGrid));
		return true;
	}
	else
	{
		Option::delete(self::$moduleId, ["name" => "listGridToConvert"]);
		return false;
	}
}