- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/compatible/ordercompatibility.php
- Класс: BitrixSaleCompatibleOrderCompatibility
- Вызов: OrderCompatibility::parseField
public function parseField($key)
{
$output = null;
$locationPropInfo = CSaleOrder::getLocationPropertyInfo();
static $propIndex = 0;
$propIDTmp = false;
if (mb_strpos($key, "PROPERTY_ID_") === 0)
{
$propIndex++;
$this->addPropertyRuntime($propIndex);
if (!($propRuntimeName = $this->getPropertyRuntimeName($propIndex)))
{
return null;
}
$propIDTmp = intval(mb_substr($key, mb_strlen("PROPERTY_ID_")));
$this->query->addFilter('='.$propRuntimeName.'.ORDER_PROPS_ID', $propIDTmp);
if(isset($locationPropInfo['ID'][$propIDTmp]))
{
$this->addQueryAlias('PROPERTY_ID_'.$propIDTmp, 'LOCATION.ID');
}
else
{
$this->addQueryAlias('PROPERTY_ID_'.$propIDTmp, $propRuntimeName.'.ID');
}
$output = 'PROPERTY_ID_'.$propIDTmp;
}
elseif (mb_strpos($key, "PROPERTY_ORDER_PROPS_ID_") === 0)
{
$propIndex++;
$this->addPropertyRuntime($propIndex);
if (!($propRuntimeName = $this->getPropertyRuntimeName($propIndex)))
{
return null;
}
$propIDTmp = intval(mb_substr($key, mb_strlen("PROPERTY_ORDER_PROPS_ID_")));
$this->query->addFilter('='.$propRuntimeName.'.ORDER_PROPS_ID', $propIDTmp);
if(isset($locationPropInfo['ID'][$propIDTmp]))
{
$this->addQueryAlias('PROPERTY_ORDER_PROPS_ID_'.$propIDTmp, 'LOCATION.ID');
}
else
{
$this->addQueryAlias('PROPERTY_ORDER_PROPS_ID_'.$propIDTmp, $propRuntimeName.'.ORDER_PROPS_ID');
}
$output = 'PROPERTY_ORDER_PROPS_ID_'.$propIDTmp;
}
elseif (mb_strpos($key, "PROPERTY_NAME_") === 0)
{
$propIndex++;
$this->addPropertyRuntime($propIndex);
if (!($propRuntimeName = $this->getPropertyRuntimeName($propIndex)))
{
return null;
}
$propIDTmp = intval(mb_substr($key, mb_strlen("PROPERTY_NAME_")));
$this->addQueryAlias('PROPERTY_NAME_'.$propIDTmp, $propRuntimeName.'.NAME');
$this->query->addFilter('='.$propRuntimeName.'.ORDER_PROPS_ID', $propIDTmp);
$output = 'PROPERTY_NAME_'.$propIDTmp;
}
elseif (mb_strpos($key, "PROPERTY_VALUE_") === 0)
{
$propIndex++;
$this->addPropertyRuntime($propIndex);
if (!($propRuntimeName = $this->getPropertyRuntimeName($propIndex)))
{
return null;
}
$propIDTmp = intval(mb_substr($key, mb_strlen("PROPERTY_VALUE_")));
if(isset($locationPropInfo['ID'][$propIDTmp]))
{
$this->addQueryAlias('PROPERTY_ID_'.$propIDTmp, 'LOCATION.ID');
}
else
{
$this->addQueryAlias('PROPERTY_ID_'.$propIDTmp, $propRuntimeName.'.VALUE');
}
$output = 'PROPERTY_ID_'.$propIDTmp;
}
elseif (mb_strpos($key, "PROPERTY_CODE_") === 0)
{
$propIndex++;
$this->addPropertyRuntime($propIndex);
if (!($propRuntimeName = $this->getPropertyRuntimeName($propIndex)))
{
return null;
}
$propIDTmp = intval(mb_substr($key, mb_strlen("PROPERTY_CODE_")));
$this->addQueryAlias('PROPERTY_CODE_'.$propIDTmp, $propRuntimeName.'.CODE');
$this->query->addFilter('='.$propRuntimeName.'.ORDER_PROPS_ID', $propIDTmp);
$output = 'PROPERTY_CODE_'.$propIDTmp;
}
elseif (mb_strpos($key, "PROPERTY_VAL_BY_CODE_") === 0)
{
$propIndex++;
$this->addPropertyRuntime($propIndex);
if (!($propRuntimeName = $this->getPropertyRuntimeName($propIndex)))
{
return null;
}
$propIDTmp = preg_replace("/[^a-zA-Z0-9_-]/is", "", trim(mb_substr($key, mb_strlen("PROPERTY_VAL_BY_CODE_"))));
$this->addQueryAlias('PROPERTY_VAL_BY_CODE_'.$propIDTmp, $propRuntimeName.'.VALUE');
if(isset($locationPropInfo['CODE'][$propIDTmp]))
{
$this->addQueryAlias('PROPERTY_VAL_BY_CODE_'.$propIDTmp, 'LOCATION.ID');
}
else
{
$this->addQueryAlias('PROPERTY_VAL_BY_CODE_'.$propIDTmp, $propRuntimeName.'.VALUE');
}
$this->query->addFilter('='.$propRuntimeName.'.CODE', $propIDTmp);
$output = 'PROPERTY_VAL_BY_CODE_'.$propIDTmp;
}
elseif (mb_strpos($key, "BASKET_") === 0)
{
$output = static::addBasketRuntime($key);
}
if(isset($locationPropInfo['ID'][$propIDTmp]))
{
$this->query->registerRuntimeField(
'LOCATION',
array(
'data_type' => 'BitrixSaleLocationLocationTable',
'reference' => array(
'=this.PROPERTY.VALUE' => 'ref.CODE'
),
'join_type' => 'inner'
)
);
}
return $output;
}