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

CFormField::Copy: метод Битрикс

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

//    CFormField::Copy()
//    /bitrix/modules/form/classes/general/form_callformfield.php:171

    function Copy($ID, $CHECK_RIGHTS="Y", $NEW_FORM_ID=false)
    {
        global $DB, $strError;
        $err_mess = (CAllFormField::err_mess())."
Function: Copy
Line: ";
        $ID = intval($ID);
        $NEW_FORM_ID = intval($NEW_FORM_ID);
        $rsField = CFormField::GetByID($ID);
        if ($arField = $rsField->Fetch())
        {
            $RIGHT_OK = "N";
            if ($CHECK_RIGHTS!="Y" || CForm::IsAdmin()) $RIGHT_OK="Y";
            else
            {
                $F_RIGHT = CForm::GetPermission($arField["FORM_ID"]);
                // если имеем право на просмотр параметров формы
                if ($F_RIGHT>=25)
                {
                    // если задана новая форма
                    if ($NEW_FORM_ID>0)
                    {
                        $NEW_F_RIGHT = CForm::GetPermission($NEW_FORM_ID);
                        // если имеем полный доступ на новую форму
                        if ($NEW_F_RIGHT>=30) $RIGHT_OK = "Y";
                    }
                    elseif ($F_RIGHT>=30) // иначе если имеем полный доступ на исходную форму
                    {
                        $RIGHT_OK = "Y";
                    }
                }
            }

            // если права проверили то
            if ($RIGHT_OK=="Y")
            {
                // символьный код поля
                if (!$NEW_FORM_ID)
                {
                    while(true)
                    {
                        // change: SID изменяем только если для старой формы. Требование уникальности снято.
                        $SID = $arField["SID"];
                        if (strlen($SID) > 44) $SID = substr($SID, 0, 44);
                        $SID .= "_".RandString(5);


                        $strSql = "SELECT 'x' FROM b_form WHERE SID='".$DB->ForSql($SID,50)."'";
                        $z = $DB->Query($strSql, false, $err_mess.__LINE__);
                        if (!($zr = $z->Fetch()))
                        {
                            $strSql = "SELECT 'x' FROM b_form_field WHERE SID='".$DB->ForSql($SID,50)."' AND FORM_ID='".$arField["FORM_ID"]."'";
                            $t = $DB->Query($strSql, false, $err_mess.__LINE__);
                            if (!($tr = $t->Fetch())) break;
                        }
                    }
                }
                else
                {
                    $SID = $arField["SID"];
                }


                // копируем
                $arFields = array(
                    "FORM_ID"                => ($NEW_FORM_ID>0) ? $NEW_FORM_ID : $arField["FORM_ID"],
                    "ACTIVE"                => $arField["ACTIVE"],
                    "TITLE"                    => $arField["TITLE"],
                    "TITLE_TYPE"            => $arField["TITLE_TYPE"],
                    "SID"                    => $SID,
                    "C_SORT"                => $arField["C_SORT"],
                    "ADDITIONAL"            => $arField["ADDITIONAL"],
                    "REQUIRED"                => $arField["REQUIRED"],
                    "IN_FILTER"                => $arField["IN_FILTER"],
                    "IN_RESULTS_TABLE"        => $arField["IN_RESULTS_TABLE"],
                    "IN_EXCEL_TABLE"        => $arField["IN_EXCEL_TABLE"],
                    "FIELD_TYPE"            => $arField["FIELD_TYPE"],
                    "COMMENTS"                => $arField["COMMENTS"],
                    "FILTER_TITLE"            => $arField["FILTER_TITLE"],
                    "RESULTS_TABLE_TITLE"    => $arField["RESULTS_TABLE_TITLE"],
                    );

                // картинка
                if (intval($arField["IMAGE_ID"])>0)
                {
                    $arIMAGE = CFile::MakeFileArray(CFile::CopyFile($arField["IMAGE_ID"]));
                    $arIMAGE["MODULE_ID"] = "form";
                    $arFields["arIMAGE"] = $arIMAGE;
                }

                // фильтр
                $z = CFormField::GetFilterList($arField["FORM_ID"], Array("FIELD_ID" => $ID, "FIELD_ID_EXACT_MATCH" => "Y"));
                while ($zr = $z->Fetch())
                {
                    if ($arField["ADDITIONAL"]!="Y") $arFields["arFILTER_".$zr["PARAMETER_NAME"]][] = $zr["FILTER_TYPE"];
                    elseif ($zr["PARAMETER_NAME"]=="USER") $arFields["arFILTER_FIELD"][] = $zr["FILTER_TYPE"];
                }
                //echo "
"; print_r($arFields); echo "
";
                $NEW_ID = CFormField::Set($arFields);
                if (intval($NEW_ID)>0)
                {
                    if ($arField["ADDITIONAL"]!="Y")
                    {
                        // ответы
                        $rsAnswer = CFormAnswer::GetList($ID, $by='ID', $order='ASC', array(), $is_filtered);
                        while ($arAnswer = $rsAnswer->Fetch())
                            CFormAnswer::Copy($arAnswer["ID"], $NEW_ID);

                        // валидаторы
                        $dbValidators = CFormValidator::GetList($ID, array(), $by='C_SORT', $order='ASC');
                        while ($arVal = $dbValidators->Fetch())
                        {
                            CFormValidator::Set($arField['FORM_ID'], $NEW_ID, $arVal['NAME'], $arVal['PARAMS'], $arVal['C_SORT']);
                        }
                    }
                }
                return $NEW_ID;
            }
            else $strError .= GetMessage("FORM_ERROR_ACCESS_DENIED")."
";
        }
        else $strError .= GetMessage("FORM_ERROR_FIELD_NOT_FOUND")."
";
        return false;
    }

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

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

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

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

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

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

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

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