Поддержка серверов

CSaleOrderProps::DoSaveOrderProps: метод Битрикс

Постоянная ссылка: http://bxapi.ru/src/?id=173667

//    CSaleOrderProps::DoSaveOrderProps()
//    /bitrix/modules/sale/general/order_props.php:269

    static function DoSaveOrderProps($orderId, $personTypeId, $arOrderProps, &$arErrors, $paysystemId = 0, $deliveryId = "")
    {
        $arIDs = array();
        $dbResult = CSaleOrderPropsValue::GetList(
            array(),
            //array("ORDER_ID" => $orderId, "PROP_UTIL" => "N"),
            array("ORDER_ID" => $orderId),
            false,
            false,
            array("ID", "ORDER_PROPS_ID")
        );
        while ($arResult = $dbResult->Fetch())
            $arIDs[$arResult["ORDER_PROPS_ID"]] = $arResult["ID"];

        $arFilter = array(
            "PERSON_TYPE_ID" => $personTypeId,
            "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";
        }

        $dbOrderProperties = CSaleOrderProps::GetList(
            array("SORT" => "ASC"),
            $arFilter,
            false,
            false,
            array("ID", "TYPE", "NAME", "CODE", "USER_PROPS", "SORT")
        );
        while ($arOrderProperty = $dbOrderProperties->Fetch())
        {
            $curVal = $arOrderProps[$arOrderProperty["ID"]];

            if (($arOrderProperty["TYPE"] == "MULTISELECT") && is_array($curVal))
                $curVal = implode(",", $curVal);

            if ($arOrderProperty["TYPE"] == "FILE" && is_array($curVal))
            {
                $tmpVal = "";
                foreach ($curVal as $index => $fileData)
                {
                    $bModify = true;
                    if (isset($fileData["file_id"])) // existing file
                    {
                        if (isset($fileData["del"]))
                        {
                            $arFile = CFile::MakeFileArray($fileData["file_id"]);
                            $arFile["del"] = $fileData["del"];
                            $arFile["old_file"] = $fileData["file_id"];
                        }
                        else
                        {
                            $bModify = false;
                            if (strlen($tmpVal) > 0)
                                $tmpVal .= ", ".$fileData["file_id"];
                            else
                                $tmpVal = $fileData["file_id"];
                        }
                    }
                    else // new file array
                        $arFile = $fileData;

                    if (isset($arFile["name"]) && strlen($arFile["name"]) > 0 && $bModify)
                    {
                        $arFile["MODULE_ID"] = "sale";
                        $fid = CFile::SaveFile($arFile, "sale");
                        if (intval($fid) > 0)
                        {
                            if (strlen($tmpVal) > 0)
                                $tmpVal .= ", ".$fid;
                            else
                                $tmpVal = $fid;
                        }
                    }
                }

                $curVal = $tmpVal;
            }

            if (strlen($curVal) > 0)
            {
                $arFields = array(
                    "ORDER_ID" => $orderId,
                    "ORDER_PROPS_ID" => $arOrderProperty["ID"],
                    "NAME" => $arOrderProperty["NAME"],
                    "CODE" => $arOrderProperty["CODE"],
                    "VALUE" => $curVal
                );

                if (array_key_exists($arOrderProperty["ID"], $arIDs))
                {
                    CSaleOrderPropsValue::Update($arIDs[$arOrderProperty["ID"]], $arFields);
                    unset($arIDs[$arOrderProperty["ID"]]);
                }
                else
                {
                    CSaleOrderPropsValue::Add($arFields);
                }
            }
        }

        foreach ($arIDs as $id)
            CSaleOrderPropsValue::Delete($id);
    }

Блог разработчика

9 августа 2016 ResizeImageGet и простой водяной знак налету

Сегодня поговорим о том как проще всего воткнуть водяной знак на картинки в Битрикс. Например, на все изображения каталога.

21 июля 2016 Добавление вкладки в CRM коробки Битрикс24

В этом посте я покажу, как легко и просто добавить вкладку в сущность CRM. И не просто добавить, а вывести там свой контент.

21 июля 2016 Как просто обращаться из коробки Битрикс24 на сайт на базе Битрикс

К примеру вам хочется внутренним скриптом дернуть с сайта-магазина информацию, которая там, в свою очередь, закрыта некоторыми правами. Например, админскими. Можно конечно мутить свой REST, или иной формат общения, но проще всего воспользоваться штатным инструментом:

Текст сообщения*
Загрузить изображение