• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/update/filteroption.php
  • Класс: BitrixCatalogUpdateis
  • Вызов: is::convertOldFieldsToNewFields
protected function convertOldFieldsToNewFields(array $oldFields, array $ratioFields)
{
	$newFields = [];
	$newRows = [];
	foreach ($oldFields as $fieldId => $field)
	{
		if ($field["hidden"] !== "false" || (array_key_exists($fieldId, $ratioFields) &&
				array_key_exists($ratioFields[$fieldId], $newFields)))
			continue;

		if (preg_match("/_FILTER_PERIOD/", $fieldId, $matches,  PREG_OFFSET_CAPTURE))
		{
			$searchResult = current($matches);
			$oldDateType = $field["value"];
			$dateFieldId = substr($fieldId, 0, $searchResult[1]);
			$dateValue = array_key_exists($dateFieldId."_FILTER_DIRECTION", $oldFields) ?
				$oldFields[$dateFieldId."_FILTER_DIRECTION"]["value"] : "";
			$newDateType = $this->getNewDateType($oldDateType, $dateValue);

			$custom = false;
			if (substr($dateFieldId, -2) == "_1")
			{
				$custom = true;
				$fieldId = substr($dateFieldId, 0, strlen($dateFieldId)-2);
			}
			else
			{
				$fieldId = $dateFieldId;
			}

			if (!$custom)
			{
				if ((substr($fieldId, -5) == "_from"))
				{
					$fieldId = substr($fieldId, 0, strlen($fieldId)-5);
				}
				elseif ((substr($fieldId, -3) == "_to"))
				{
					$fieldId = substr($fieldId, 0, strlen($fieldId)-3);
				}
			}

			$from = "";
			$to = "";
			if ($newDateType == DateType::EXACT || $newDateType == DateType::RANGE)
			{
				if (array_key_exists($fieldId."_1", $oldFields))
				{
					$from = $oldFields[$fieldId."_1"]["value"];
					$to = $oldFields[$fieldId."_2"]["value"];
				}
				elseif (array_key_exists($fieldId."_from", $oldFields))
				{
					$from = $oldFields[$fieldId."_from"]["value"];
					$to = $oldFields[$fieldId."_to"]["value"];
				}
			}

			$newFields[$ratioFields[$fieldId]."_datesel"] = $newDateType;
			$newFields[$ratioFields[$fieldId]."_from"] = $from;
			$newFields[$ratioFields[$fieldId]."_to"] = $to;
			$newFields[$ratioFields[$fieldId]."_days"] = "";
			$newFields[$ratioFields[$fieldId]."_month"] = "";
			$newFields[$ratioFields[$fieldId]."_quarter"] = "";
			$newFields[$ratioFields[$fieldId]."_year"] = "";
		}
		elseif (substr($fieldId, -2) === "_1")
		{
			$fieldId = substr($fieldId, 0, strlen($fieldId)-2);
			if (array_key_exists($fieldId, $ratioFields) && array_key_exists($fieldId."_2", $oldFields) &&
				!array_key_exists($fieldId."_FILTER_PERIOD", $oldFields))
			{
				$newFields[$ratioFields[$fieldId]."_numsel"] = "range";
				$newFields[$ratioFields[$fieldId]."_from"] = $field["value"];
				$newFields[$ratioFields[$fieldId]."_to"] = $oldFields[$fieldId."_2"]["value"];
			}
		}
		elseif (substr($fieldId, -6) === "_start")
		{
			$fieldId = substr($fieldId, 0, strlen($fieldId)-6);
			if (array_key_exists($fieldId, $ratioFields) && array_key_exists($fieldId."_end", $oldFields) &&
				!array_key_exists($fieldId."_FILTER_PERIOD", $oldFields))
			{
				$newFields[$ratioFields[$fieldId]."_numsel"] = "range";
				$newFields[$ratioFields[$fieldId]."_start"] = $field["value"];
				$newFields[$ratioFields[$fieldId]."_end"] = $oldFields[$fieldId."_end"]["value"];
			}
		}
		elseif ((bool)strtotime($field["value"]) && !array_key_exists($fieldId."_FILTER_DIRECTION", $oldFields))
		{
			if ((substr($fieldId, -5) == "_from"))
			{
				$fieldId = substr($fieldId, 0, strlen($fieldId)-5);
			}
			elseif ((substr($fieldId, -3) == "_to"))
			{
				$fieldId = substr($fieldId, 0, strlen($fieldId)-3);
			}
			$from = "";
			$to = "";
			if (array_key_exists($fieldId."_from", $oldFields))
			{
				$from = $oldFields[$fieldId."_from"]["value"];
				$to = $oldFields[$fieldId."_to"]["value"];
			}
			$newFields[$ratioFields[$fieldId]."_datesel"] = DateType::RANGE;
			$newFields[$ratioFields[$fieldId]."_from"] = $from;
			$newFields[$ratioFields[$fieldId]."_to"] = $to;
			$newFields[$ratioFields[$fieldId]."_days"] = "";
			$newFields[$ratioFields[$fieldId]."_month"] = "";
			$newFields[$ratioFields[$fieldId]."_quarter"] = "";
			$newFields[$ratioFields[$fieldId]."_year"] = "";
		}
		elseif (substr($fieldId, -5) == "_from" && !array_key_exists($fieldId."_FILTER_DIRECTION", $oldFields))
		{
			$fieldId = substr($fieldId, 0, strlen($fieldId)-5);
			$rangeType = (($oldFields[$fieldId."_from"] === $oldFields[$fieldId."_to"]) ? "exact" : "range");
			$newFields[$ratioFields[$fieldId]."_numsel"] = $rangeType;
			$newFields[$ratioFields[$fieldId]."_from"] = $field["value"];
		}
		elseif (substr($fieldId, -3) == "_to")
		{
			$fieldId = substr($fieldId, 0, strlen($fieldId)-3);
			if (!array_key_exists($fieldId."_from"."_FILTER_DIRECTION", $oldFields))
			{
				$rangeType = (($oldFields[$fieldId."_from"] === $oldFields[$fieldId."_to"]) ? "exact" : "range");
				$newFields[$ratioFields[$fieldId]."_numsel"] = $rangeType;
				$newFields[$ratioFields[$fieldId]."_to"] = $field["value"];
			}
		}
		elseif (array_key_exists($fieldId, $ratioFields))
		{
			$newFields[$ratioFields[$fieldId]] = $field["value"];
		}

		if (!in_array($ratioFields[$fieldId], $newRows) && $ratioFields[$fieldId])
		{
			$newRows[] = $ratioFields[$fieldId];
		}
	}

	return array($newFields, $newRows);
}