Exemplo n.º 1
0
 /**
  * @param $key
  *
  * @return null|string
  */
 public function parseField($key)
 {
     $output = null;
     $locationPropInfo = \CSaleOrder::getLocationPropertyInfo();
     $propIDTmp = false;
     if (strpos($key, "PROPERTY_ID_") === 0) {
         $propIDTmp = intval(substr($key, strlen("PROPERTY_ID_")));
         $this->query->addFilter('=PROPERTY.ORDER_PROPS_ID', $propIDTmp);
         if (isset($locationPropInfo['ID'][$propIDTmp])) {
             $this->addQueryAlias('PROPERTY_ID_' . $propIDTmp, 'LOCATION.ID');
         } else {
             $this->addQueryAlias('PROPERTY_ID_' . $propIDTmp, 'PROPERTY.ID');
         }
         $output = 'PROPERTY_ID_' . $propIDTmp;
     } elseif (strpos($key, "PROPERTY_ORDER_PROPS_ID_") === 0) {
         $propIDTmp = intval(substr($key, strlen("PROPERTY_ORDER_PROPS_ID_")));
         $this->query->addFilter('=PROPERTY.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, 'PROPERTY.ORDER_PROPS_ID');
         }
         $output = 'PROPERTY_ORDER_PROPS_ID_' . $propIDTmp;
     } elseif (strpos($key, "PROPERTY_NAME_") === 0) {
         $propIDTmp = intval(substr($key, strlen("PROPERTY_NAME_")));
         $this->addQueryAlias('PROPERTY_NAME_' . $propIDTmp, 'PROPERTY.NAME');
         $this->query->addFilter('=PROPERTY.ORDER_PROPS_ID', $propIDTmp);
         $output = 'PROPERTY_NAME_' . $propIDTmp;
     } elseif (strpos($key, "PROPERTY_VALUE_") === 0) {
         $propIDTmp = intval(substr($key, strlen("PROPERTY_VALUE_")));
         if (isset($locationPropInfo['ID'][$propIDTmp])) {
             $this->addQueryAlias('PROPERTY_ID_' . $propIDTmp, 'LOCATION.ID');
         } else {
             $this->addQueryAlias('PROPERTY_ID_' . $propIDTmp, 'PROPERTY.VALUE');
         }
         $output = 'PROPERTY_ID_' . $propIDTmp;
     } elseif (strpos($key, "PROPERTY_CODE_") === 0) {
         $propIDTmp = intval(substr($key, strlen("PROPERTY_CODE_")));
         $this->addQueryAlias('PROPERTY_CODE_' . $propIDTmp, 'PROPERTY.CODE');
         $this->query->addFilter('=PROPERTY.ORDER_PROPS_ID', $propIDTmp);
         $output = 'PROPERTY_CODE_' . $propIDTmp;
     } elseif (strpos($key, "PROPERTY_VAL_BY_CODE_") === 0) {
         $propIDTmp = preg_replace("/[^a-zA-Z0-9_-]/is", "", trim(substr($key, strlen("PROPERTY_VAL_BY_CODE_"))));
         $this->addQueryAlias('PROPERTY_VAL_BY_CODE_' . $propIDTmp, 'PROPERTY.VALUE');
         if (isset($locationPropInfo['CODE'][$propIDTmp])) {
             $this->addQueryAlias('PROPERTY_VAL_BY_CODE_' . $propIDTmp, 'LOCATION.ID');
         } else {
             $this->addQueryAlias('PROPERTY_VAL_BY_CODE_' . $propIDTmp, 'PROPERTY.VALUE');
         }
         $this->query->addFilter('=PROPERTY.CODE', $propIDTmp);
         $output = 'PROPERTY_VAL_BY_CODE_' . $propIDTmp;
     }
     if (isset($locationPropInfo['ID'][$propIDTmp])) {
         $this->query->registerRuntimeField('LOCATION', array('data_type' => '\\Bitrix\\Sale\\Location\\LocationTable', 'reference' => array('=this.PROPERTY.VALUE' => 'ref.CODE'), 'join_type' => 'inner'));
     }
     return $output;
 }