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);
}