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

CUserTypeEnum::GetEditFormHTML: метод Битрикс

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

//    CUserTypeEnum::GetEditFormHTML()
//    /bitrix/modules/main/classes/general/usertypeenum.php:129

    function GetEditFormHTML($arUserField, $arHtmlControl)
    {
        if(($arUserField["ENTITY_VALUE_ID"]<1) && strlen($arUserField["SETTINGS"]["DEFAULT_VALUE"])>0)
            $arHtmlControl["VALUE"] = intval($arUserField["SETTINGS"]["DEFAULT_VALUE"]);

        $result = '';
        $rsEnum = call_user_func_array(
            array($arUserField["USER_TYPE"]["CLASS_NAME"], "getlist"),
            array(
                $arUserField,
            )
        );
        if(!$rsEnum)
            return '';

        if($arUserField["SETTINGS"]["DISPLAY"]=="UI")
        {
            CJSCore::Init('ui');

            $startValue = array(
                'NAME' => self::getEmptyCaption($arUserField),
                'VALUE' => '',
            );

            $itemList = array();
            if($arUserField["MANDATORY"] != "Y")
            {
                $itemList[] = $startValue;
            }

            while($arEnum = $rsEnum->GetNext())
            {
                $item = array(
                    'NAME' => $arEnum["VALUE"],
                    'VALUE' => $arEnum["ID"],
                );

                if(
                    $arHtmlControl["VALUE"] == $arEnum["ID"]
                    || $arUserField["ENTITY_VALUE_ID"] <= 0 && $arEnum["DEF"] == "Y"
                )
                {
                    $startValue = $item;
                }

                $itemList[] = $item;
            }

            $params = \Bitrix\Main\Web\Json::encode(array(
                'isMulti' => false,
                'fieldName' => $arUserField['FIELD_NAME']
            ));
            $items = \Bitrix\Main\Web\Json::encode($itemList);
            $value = \Bitrix\Main\Web\Json::encode($startValue);

            $controlNodeId = $arUserField['FIELD_NAME'].'_control';
            $valueContainerId = $arUserField['FIELD_NAME'].'_value';

            $fieldNameJS = \CUtil::JSEscape($arUserField['FIELD_NAME']);
            $htmlFieldNameJS = \CUtil::JSEscape($arHtmlControl["NAME"]);
            $controlNodeIdJS = \CUtil::JSEscape($controlNodeId);
            $valueContainerIdJS = \CUtil::JSEscape($valueContainerId);

            $result .= '<input type="hidden" name="'.$arHtmlControl["NAME"].'" value="'.\Bitrix\Main\Text\HtmlFilter::encode($startValue['VALUE']).'" id="'.$valueContainerId.'">';

            $result .= <<<EOT
<span id="{$controlNodeId}"></span>
<script>
function changeHandler_{$fieldNameJS}(controlObject, value)
{
    if(controlObject.params.fieldName === '{$fieldNameJS}')
    {
        var currentValue = JSON.parse(controlObject.node.getAttribute('data-value'));

        if(BX.type.isPlainObject(currentValue))
        {
            BX('{$valueContainerIdJS}').value = currentValue['VALUE'];
        }
    }
}

BX.ready(function(){

    var params = {$params};

    BX('{$controlNodeIdJS}').appendChild(BX.decl({
        block: 'main-ui-select',
        name: '{$fieldNameJS}',
        items: {$items},
        value: {$value},
        params: params,
        valueDelete: false
    }));

    BX.addCustomEvent(
        window,
        'UI::Select::change',
        changeHandler_{$fieldNameJS}
    );

    BX.bind(BX('{$controlNodeIdJS}'), 'click', BX.defer(function(){
        changeHandler_{$fieldNameJS}(
        {
            params: params,
            node: BX('{$controlNodeIdJS}').firstChild
        });
    }));
});
</script>
EOT;
        }
        elseif($arUserField["SETTINGS"]["DISPLAY"]=="CHECKBOX")
        {
            $bWasSelect = false;
            $result2 = '';
            while($arEnum = $rsEnum->GetNext())
            {
                $bSelected = (
                    ($arHtmlControl["VALUE"]==$arEnum["ID"]) ||
                    ($arUserField["ENTITY_VALUE_ID"]<=0 && $arEnum["DEF"]=="Y")
                );
                $bWasSelect = $bWasSelect || $bSelected;
                $result2 .= '<label><input type="radio" value="'.$arEnum["ID"].'" name="'.$arHtmlControl["NAME"].'"'.($bSelected? ' checked': '').($arUserField["EDIT_IN_LIST"]!="Y"? ' disabled="disabled" ': '').'>'.$arEnum["VALUE"].'</label><br>';
            }
            if($arUserField["MANDATORY"]!="Y")
                $result .= '<label><input type="radio" value="" name="'.$arHtmlControl["NAME"].'"'.(!$bWasSelect? ' checked': '').($arUserField["EDIT_IN_LIST"]!="Y"? ' disabled="disabled" ': '').'>'.htmlspecialcharsbx(self::getEmptyCaption($arUserField)).'</label><br>';
            $result .= $result2;
        }
        else
        {
            $bWasSelect = false;
            $result2 = '';
            while($arEnum = $rsEnum->GetNext())
            {
                $bSelected = (
                    ($arHtmlControl["VALUE"]==$arEnum["ID"]) ||
                    ($arUserField["ENTITY_VALUE_ID"]<=0 && $arEnum["DEF"]=="Y")
                );
                $bWasSelect = $bWasSelect || $bSelected;
                $result2 .= '<option value="'.$arEnum["ID"].'"'.($bSelected? ' selected': '').'>'.$arEnum["VALUE"].'</option>';
            }

            if($arUserField["SETTINGS"]["LIST_HEIGHT"] > 1)
            {
                $size = ' size="'.$arUserField["SETTINGS"]["LIST_HEIGHT"].'"';
            }
            else
            {
                $arHtmlControl["VALIGN"] = "middle";
                $size = '';
            }

            $result = '<select name="'.$arHtmlControl["NAME"].'"'.$size.($arUserField["EDIT_IN_LIST"]!="Y"? ' disabled="disabled" ': '').' style="max-width: 300px;">';
            if($arUserField["MANDATORY"]!="Y")
            {
                $result .= '<option value=""'.(!$bWasSelect? ' selected': '').'>'.htmlspecialcharsbx(self::getEmptyCaption($arUserField)).'</option>';
            }
            $result .= $result2;
            $result .= '</select>';
        }
        return $result;
    }
';

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

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

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

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

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

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

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

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