- Модуль: form
- Путь к файлу: ~/bitrix/modules/form/classes/general/form_callformfield.php
- Класс: CAllFormField
- Вызов: CAllFormField::Copy
static 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)
{
$SID = $arField["SID"];
if (mb_strlen($SID) > 44) $SID = mb_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"];
}
$NEW_ID = CFormField::Set($arFields);
if (intval($NEW_ID)>0)
{
if ($arField["ADDITIONAL"]!="Y")
{
$rsAnswer = CFormAnswer::GetList($ID, 'ID', 'ASC');
while ($arAnswer = $rsAnswer->Fetch())
CFormAnswer::Copy($arAnswer["ID"], $NEW_ID);
$dbValidators = CFormValidator::GetList($ID);
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;
}