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

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

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

<?php 
//    /bitrix/modules/main/classes/general/usertype.phpCUserFieldEnum::SetEnumValues()
//    3221:

    
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)===&& $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"])<=|| $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)===&& $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"])<=|| $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, или иной формат общения, но проще всего воспользоваться штатным инструментом:

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