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

CUserFieldEnum::SetEnumValues: метод Битрикс

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

//    CUserFieldEnum::SetEnumValues()
//    /bitrix/modules/main/classes/general/usertype.php:3371

    function SetEnumValues($FIELD_ID, $values)
    {
        global $DB, $CACHE_MANAGER, $APPLICATION;
        $aMsg = array();
        $originalValues = $values;

        foreach($values as $i=>$row)
        {
            foreach($row as $key=>$val)
            {
                if(strncmp($key, "~", 1)===0)
                {
                    unset($values[$i][$key]);
                }
            }
        }

        /*check unique XML_ID*/
        $arAdded = array();
        $salt = RandString(8);
        foreach($values as $key=>$value)
        {
            if(strncmp($key, "n", 1)===0 && $value["DEL"]!="Y" && strlen($value["VALUE"])>0)
            {
                if(strlen($value["XML_ID"])<=0)
                {
                    $values[$key]["XML_ID"] = $value["XML_ID"] = md5($salt . $value["VALUE"]);
                }

                if(array_key_exists($value["XML_ID"], $arAdded))
                {
                    $aMsg[] = array("text"=>GetMessage("USER_TYPE_XML_ID_UNIQ", array("#XML_ID#"=>$value["XML_ID"])));
                }
                else
                {
                    $rsEnum = $this->GetList(array(), array("USER_FIELD_ID"=>$FIELD_ID, "XML_ID"=>$value["XML_ID"]));
                    if($arEnum = $rsEnum->Fetch())
                    {
                        $aMsg[] = array("text"=>GetMessage("USER_TYPE_XML_ID_UNIQ", array("#XML_ID#"=>$value["XML_ID"])));
                    }
                    else
                    {
                        $arAdded[$value["XML_ID"]]++;
                    }
                }
            }
        }

        $previousValues = array();

        $rsEnum = $this->GetList(array(), array("USER_FIELD_ID"=>$FIELD_ID));
        while($arEnum = $rsEnum->Fetch())
        {
            $previousValues[$arEnum["ID"]] = $arEnum;

            if(array_key_exists($arEnum["ID"], $values))
            {
                $value = $values[$arEnum["ID"]];
                if(strlen($value["VALUE"])<=0 || $value["DEL"]=="Y")
                {
                }
                elseif(
                    $arEnum["VALUE"] != $value["VALUE"] ||
                    $arEnum["DEF"] != $value["DEF"] ||
                    $arEnum["SORT"] != $value["SORT"] ||
                    $arEnum["XML_ID"] != $value["XML_ID"]
                )
                {
                    if(strlen($value["XML_ID"])<=0)
                        $value["XML_ID"] = md5($value["VALUE"]);

                    $bUnique = true;
                    if($arEnum["XML_ID"] != $value["XML_ID"])
                    {
                        if(array_key_exists($value["XML_ID"], $arAdded))
                        {
                            $aMsg[] = array("text"=>GetMessage("USER_TYPE_XML_ID_UNIQ", array("#XML_ID#"=>$value["XML_ID"])));
                            $bUnique = false;
                        }
                        else
                        {
                            $rsEnumXmlId = $this->GetList(array(), array("USER_FIELD_ID"=>$FIELD_ID, "XML_ID"=>$value["XML_ID"]));
                            if($arEnumXmlId = $rsEnumXmlId->Fetch())
                            {
                                $aMsg[] = array("text"=>GetMessage("USER_TYPE_XML_ID_UNIQ", array("#XML_ID#"=>$value["XML_ID"])));
                                $bUnique = false;
                            }
                        }
                    }
                    if($bUnique)
                    {
                        $arAdded[$value["XML_ID"]]++;
                    }
                }
            }
        }

        if(!empty($aMsg))
        {
            $e = new CAdminException($aMsg);
            $APPLICATION->ThrowException($e);
            return false;
        }

        if(CACHED_b_user_field_enum!==false)
            $CACHE_MANAGER->CleanDir("b_user_field_enum");

        foreach($values as $key=>$value)
        {
            if(strncmp($key, "n", 1)===0 && $value["DEL"]!="Y" && strlen($value["VALUE"])>0)
            {
                if(strlen($value["XML_ID"])<=0)
                    $value["XML_ID"] = md5($value["VALUE"]);

                if($value["DEF"]!="Y")
                    $value["DEF"]="N";

                $value["USER_FIELD_ID"] = $FIELD_ID;
                $id = $DB->Add("b_user_field_enum", $value);

                $originalValues[$id] = $originalValues[$key];
                unset($originalValues[$key], $values[$key]);
            }
        }
        $rsEnum = $this->GetList(array(), array("USER_FIELD_ID"=>$FIELD_ID));
        while($arEnum = $rsEnum->Fetch())
        {
            if(array_key_exists($arEnum["ID"], $values))
            {
                $value = $values[$arEnum["ID"]];
                if(strlen($value["VALUE"])<=0 || $value["DEL"]=="Y")
                {
                    $DB->Query("DELETE FROM b_user_field_enum WHERE ID = ".$arEnum["ID"], false, "FILE: ".__FILE__."<br>LINE: ".__LINE__);
                }
                elseif($arEnum["VALUE"] != $value["VALUE"] ||
                    $arEnum["DEF"] != $value["DEF"] ||
                    $arEnum["SORT"] != $value["SORT"] ||
                    $arEnum["XML_ID"] != $value["XML_ID"])
                {
                    if(strlen($value["XML_ID"])<=0)
                        $value["XML_ID"] = md5($value["VALUE"]);

                    unset($value["ID"]);
                    $strUpdate = $DB->PrepareUpdate("b_user_field_enum", $value);
                    if(strlen($strUpdate)>0)
                        $DB->Query("UPDATE b_user_field_enum SET ".$strUpdate." WHERE ID = ".$arEnum["ID"], false, "FILE: ".__FILE__."<br>LINE: ".__LINE__);
                }
            }
        }
        if(CACHED_b_user_field_enum!==false)
            $CACHE_MANAGER->CleanDir("b_user_field_enum");

        $event = new \Bitrix\Main\Event('main', 'onAfterSetEnumValues', [$FIELD_ID, $originalValues, $previousValues]);
        $event->send();

        return true;
    }
';

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

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

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

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

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

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

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

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