static function DoProcessOrder(&$arOrder, $arOrderPropsValues, &$arErrors, &$arWarnings, $paysystemId = 0, $deliveryId = "", $arOptions = array()) { if (!is_array($arOrderPropsValues)) $arOrderPropsValues = array(); $arUser = null; $arFilter = array( "PERSON_TYPE_ID" => $arOrder["PERSON_TYPE_ID"], "ACTIVE" => "Y" ); if ($paysystemId != 0) { $arFilter["RELATED"]["PAYSYSTEM_ID"] = $paysystemId; $arFilter["RELATED"]["TYPE"] = "WITH_NOT_RELATED"; } if (strlen($deliveryId) > 0) { $arFilter["RELATED"]["DELIVERY_ID"] = $deliveryId; $arFilter["RELATED"]["TYPE"] = "WITH_NOT_RELATED"; } $dbOrderProps = CSaleOrderProps::GetList( array("SORT" => "ASC"), $arFilter, false, false, array("ID", "NAME", "TYPE", "IS_LOCATION", "IS_LOCATION4TAX", "IS_PROFILE_NAME", "IS_PAYER", "IS_EMAIL", "REQUIED", "SORT", "IS_ZIP", "CODE", "DEFAULT_VALUE") ); while ($arOrderProp = $dbOrderProps->Fetch()) { if (!array_key_exists($arOrderProp["ID"], $arOrderPropsValues)) { $curVal = $arOrderProp["DEFAULT_VALUE"]; if (strlen($curVal) <= 0) { if ($arOrderProp["IS_EMAIL"] == "Y" || $arOrderProp["IS_PAYER"] == "Y") { if ($arUser == null) { $dbUser = CUser::GetList($by = "ID", $order = "desc", array("ID_EQUAL_EXACT" => $arOrder["USER_ID"])); $arUser = $dbUser->Fetch(); } if ($arOrderProp["IS_EMAIL"] == "Y") $curVal = is_array($arUser) ? $arUser["EMAIL"] : ""; elseif ($arOrderProp["IS_PAYER"] == "Y") $curVal = is_array($arUser) ? $arUser["NAME"].(strlen($arUser["NAME"]) <= 0 || strlen($arUser["LAST_NAME"]) <= 0 ? "" : " ").$arUser["LAST_NAME"] : ""; } } } else { $curVal = $arOrderPropsValues[$arOrderProp["ID"]]; } if ((!is_array($curVal) && strlen($curVal) > 0) || (is_array($curVal) && count($curVal) > 0)) { //if ($arOrderProp["TYPE"] == "SELECT" || $arOrderProp["TYPE"] == "MULTISELECT" || $arOrderProp["TYPE"] == "RADIO") if ($arOrderProp["TYPE"] == "SELECT" || $arOrderProp["TYPE"] == "RADIO") { $arVariants = array(); $dbVariants = CSaleOrderPropsVariant::GetList( array("SORT" => "ASC", "NAME" => "ASC"), array("ORDER_PROPS_ID" => $arOrderProp["ID"]), false, false, array("*") ); while ($arVariant = $dbVariants->Fetch()) $arVariants[] = $arVariant["VALUE"]; if (!is_array($curVal)) $curVal = array($curVal); $arKeys = array_keys($curVal); foreach ($arKeys as $k) { if (!in_array($curVal[$k], $arVariants)) unset($curVal[$k]); } if ($arOrderProp["TYPE"] == "SELECT" || $arOrderProp["TYPE"] == "RADIO") $curVal = array_shift($curVal); } elseif ($arOrderProp["TYPE"] == "LOCATION") { if (is_array($curVal)) $curVal = array_shift($curVal); if(CSaleLocation::isLocationProMigrated()) { // if we came from places like CRM, we got location in CODEs, because CRM knows nothing about location IDs. // so, CRM sends LOCATION_IN_CODES in options array. In the other case, we assume we got locations as IDs if($arOptions['LOCATION_IN_CODES']) { if(!($locId = CSaleLocation::checkLocationCodeExists($curVal))) $curVal = null; } else { if(!($locId = CSaleLocation::checkLocationIdExists($curVal))) $curVal = null; } //self::TranslateLocationPropertyValues($personTypeId, $arOrderPropsValues, false); } else { $dbVariants = CSaleLocation::GetList( array(), array("ID" => $curVal), false, false, array("ID") ); if ($arVariant = $dbVariants->Fetch()) $curVal = intval($arVariant["ID"]); else $curVal = null; } } } if ($arOrderProp["TYPE"] == "LOCATION" && ($arOrderProp["IS_LOCATION"] == "Y" || $arOrderProp["IS_LOCATION4TAX"] == "Y")) { if(!$arOptions['LOCATION_IN_CODES']) $locId = intval($curVal); if ($arOrderProp["IS_LOCATION"] == "Y") $arOrder["DELIVERY_LOCATION"] = $locId; if ($arOrderProp["IS_LOCATION4TAX"] == "Y") $arOrder["TAX_LOCATION"] = $locId; if (!$locId) $bErrorField = true; } elseif ($arOrderProp["IS_PROFILE_NAME"] == "Y" || $arOrderProp["IS_PAYER"] == "Y" || $arOrderProp["IS_EMAIL"] == "Y" || $arOrderProp["IS_ZIP"] == "Y") { $curVal = trim($curVal); if ($arOrderProp["IS_PROFILE_NAME"] == "Y") $arOrder["PROFILE_NAME"] = $curVal; if ($arOrderProp["IS_PAYER"] == "Y") $arOrder["PAYER_NAME"] = $curVal; if ($arOrderProp["IS_ZIP"] == "Y") $arOrder["DELIVERY_LOCATION_ZIP"] = $curVal; if ($arOrderProp["IS_EMAIL"] == "Y") { $arOrder["USER_EMAIL"] = $curVal; if (!check_email($curVal)) $arWarnings[] = array("CODE" => "PARAM", "TEXT" => str_replace(array("#EMAIL#", "#NAME#"), array(htmlspecialcharsbx($curVal), htmlspecialcharsbx($arOrderProp["NAME"])), GetMessage("SALE_GOPE_WRONG_EMAIL"))); } if (strlen($curVal) <= 0) $bErrorField = true; } elseif ($arOrderProp["REQUIED"] == "Y") { if ($arOrderProp["TYPE"] == "TEXT" || $arOrderProp["TYPE"] == "TEXTAREA" || $arOrderProp["TYPE"] == "RADIO" || $arOrderProp["TYPE"] == "SELECT" || $arOrderProp["TYPE"] == "CHECKBOX") { if (strlen($curVal) <= 0) $bErrorField = true; } elseif ($arOrderProp["TYPE"] == "LOCATION") { if (intval($curVal) <= 0) $bErrorField = true; } elseif ($arOrderProp["TYPE"] == "MULTISELECT") { //if (!is_array($curVal) || count($curVal) <= 0) if (strlen($curVal) <= 0) $bErrorField = true; } elseif ($arOrderProp["TYPE"] == "FILE") { if (is_array($curVal)) { foreach ($curVal as $index => $arFileData) { if (!array_key_exists("name", $arFileData) && !array_key_exists("file_id", $arFileData)) $bErrorField = true; } } else { $bErrorField = true; } } } if ($bErrorField) { $arWarnings[] = array("CODE" => "PARAM", "TEXT" => str_replace("#NAME#", htmlspecialcharsbx($arOrderProp["NAME"]), GetMessage("SALE_GOPE_FIELD_EMPTY"))); $bErrorField = false; } $arOrder["ORDER_PROP"][$arOrderProp["ID"]] = $curVal; } }