• Модуль: form
  • Путь к файлу: ~/bitrix/modules/form/classes/general/form_callformresult.php
  • Класс: CAllFormResult
  • Вызов: CAllFormResult::Add
static function Add($WEB_FORM_ID, $arrVALUES=false, $CHECK_RIGHTS="Y", $USER_ID=false)
{
	$err_mess = (CAllFormResult::err_mess())."
Function: Add
Line: "; global $DB, $USER, $strError, $APPLICATION; if ($arrVALUES===false) $arrVALUES = $_REQUEST; if ($CHECK_RIGHTS != "N") $CHECK_RIGHTS = "Y"; $WEB_FORM_ID = intval($WEB_FORM_ID); if ($WEB_FORM_ID>0) { $WEB_FORM_ID = intval($WEB_FORM_ID); // get form data $arForm = array(); $arQuestions = array(); $arAnswers = array(); $arDropDown = array(); $arMultiSelect = array(); $WEB_FORM_ID = CForm::GetDataByID($WEB_FORM_ID, $arForm, $arQuestions, $arAnswers, $arDropDown, $arMultiSelect); // if new form id is correct if ($WEB_FORM_ID>0) { // check result rights $F_RIGHT = CForm::GetPermission($WEB_FORM_ID); if (intval($F_RIGHT)>=10 || $CHECK_RIGHTS=="N") { if (intval($USER_ID)<=0) { $USER_AUTH = "N"; $USER_ID = intval($_SESSION["SESS_LAST_USER_ID"]); if (intval($USER->GetID())>0) { $USER_AUTH = "Y"; $USER_ID = intval($USER->GetID()); } } else $USER_AUTH = "Y"; // check result status $fname = "status_".$arForm["SID"]; $STATUS_ID = (intval($arrVALUES[$fname])<=0) ? CFormStatus::GetDefault($WEB_FORM_ID) : intval($arrVALUES[$fname]); if ($STATUS_ID <= 0) { $strError .= GetMessage("FORM_STATUS_NOT_DEFINED")."
"; } else { // status found if ($CHECK_RIGHTS != "N") { $arPerm = CFormStatus::GetPermissions($STATUS_ID); } if ($CHECK_RIGHTS == "N" || in_array("MOVE", $arPerm)) // has rights to a new status { // check restrictions if ($arForm["USE_RESTRICTIONS"] == "Y" && intval($USER_ID) > 0) { $arFilter = array("USER_ID" => $USER_ID); if ($arForm["RESTRICT_STATUS"] <> '') { $arStatus = explode(",", $arForm["RESTRICT_STATUS"]); $arFilter = array_merge($arFilter, array("STATUS_ID" => implode(" | ", $arStatus))); } if (intval($arForm["RESTRICT_USER"]) > 0) { $rsFormResult = CFormResult::GetList($WEB_FORM_ID, "s_timestamp", "desc", $arFilter, null, "N", intval($arForm["RESTRICT_USER"])); $num = 0; while ($row = $rsFormResult->Fetch()) { if (++$num >= $arForm["RESTRICT_USER"]) { $strError .= GetMessage("FORM_RESTRICT_USER_ERROR")."
"; break; } } } if ($strError == '' && intval($arForm["RESTRICT_TIME"]) > 0) { $DC2 = time(); $DC1 = $DC2 - intval($arForm["RESTRICT_TIME"]); $arFilter = array_merge($arFilter, array( "TIME_CREATE_1" => ConvertTimeStamp($DC1, "FULL"), "TIME_CREATE_2" => ConvertTimeStamp($DC2, "FULL"), )); CTimeZone::Disable(); $rsFormResult = CFormResult::GetList($WEB_FORM_ID, "s_timestamp", "desc", $arFilter, null, "N", 1); CTimeZone::Enable(); if ($rsFormResult->Fetch()) { $strError .= GetMessage("FORM_RESTRICT_TIME_ERROR")."
"; } } } if ($strError == '') { // save result $arFields = array( "TIMESTAMP_X" => $DB->GetNowFunction(), "DATE_CREATE" => $DB->GetNowFunction(), "STATUS_ID" => $STATUS_ID, "FORM_ID" => $WEB_FORM_ID, "USER_ID" => intval($USER_ID), "USER_AUTH" => "'".$USER_AUTH."'", "STAT_GUEST_ID" => intval($_SESSION["SESS_GUEST_ID"]), "STAT_SESSION_ID" => intval($_SESSION["SESS_SESSION_ID"]), "SENT_TO_CRM" => "'N'", // result can be sent only after adding ); foreach (GetModuleEvents('form', 'onBeforeResultAdd', true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($WEB_FORM_ID, &$arFields, &$arrVALUES)); if ($ex = $APPLICATION->GetException()) { $strError .= $ex->GetString().'
'; $APPLICATION->ResetException(); } } if ($strError == '') $RESULT_ID = $DB->Insert("b_form_result", $arFields, $err_mess.__LINE__); } } else $strError .= GetMessage("FORM_ERROR_ACCESS_DENIED"); } $RESULT_ID = intval($RESULT_ID); // save successful if ($RESULT_ID>0) { $arrANSWER_TEXT = array(); $arrANSWER_VALUE = array(); $arrUSER_TEXT = array(); // process questions foreach ($arQuestions as $arQuestion) { $FIELD_ID = $arQuestion["ID"]; $FIELD_SID = $arQuestion["SID"]; $radio = "N"; $checkbox = "N"; $multiselect = "N"; $dropdown = "N"; if (is_array($arAnswers[$FIELD_SID])) { // process answers foreach ($arAnswers[$FIELD_SID] as $key => $arAnswer) { $ANSWER_ID = 0; $FIELD_TYPE = $arAnswer["FIELD_TYPE"]; $FIELD_PARAM = $arAnswer["FIELD_PARAM"]; switch ($FIELD_TYPE) : case "radio": case "dropdown": if (($radio=="N" && $FIELD_TYPE=="radio") || ($dropdown=="N" && $FIELD_TYPE=="dropdown")) { $fname = "form_".$FIELD_TYPE."_".$FIELD_SID; $ANSWER_ID = intval($arrVALUES[$fname]); if ($ANSWER_ID>0) { $z = CFormAnswer::GetByID($ANSWER_ID); if ($zr = $z->Fetch()) { $arFields = array( "RESULT_ID" => $RESULT_ID, "FORM_ID" => $WEB_FORM_ID, "FIELD_ID" => $FIELD_ID, "ANSWER_ID" => $ANSWER_ID, "ANSWER_TEXT" => trim($zr["MESSAGE"]), "ANSWER_VALUE" => $zr["VALUE"] ); $arrANSWER_TEXT[$FIELD_ID][] = ToUpper($arFields["ANSWER_TEXT"]); $arrANSWER_VALUE[$FIELD_ID][] = ToUpper($arFields["ANSWER_VALUE"]); CFormResult::AddAnswer($arFields); } if ($FIELD_TYPE=="radio") $radio = "Y"; if ($FIELD_TYPE=="dropdown") $dropdown = "Y"; } } break; case "checkbox": case "multiselect": if (($checkbox=="N" && $FIELD_TYPE=="checkbox") || ($multiselect=="N" && $FIELD_TYPE=="multiselect")) { $fname = "form_".$FIELD_TYPE."_".$FIELD_SID; if (is_array($arrVALUES[$fname]) && count($arrVALUES[$fname])>0) { foreach($arrVALUES[$fname] as $ANSWER_ID) { $ANSWER_ID = intval($ANSWER_ID); if ($ANSWER_ID>0) { $z = CFormAnswer::GetByID($ANSWER_ID); if ($zr = $z->Fetch()) { $arFields = array( "RESULT_ID" => $RESULT_ID, "FORM_ID" => $WEB_FORM_ID, "FIELD_ID" => $FIELD_ID, "ANSWER_ID" => $ANSWER_ID, "ANSWER_TEXT" => trim($zr["MESSAGE"]), "ANSWER_VALUE" => $zr["VALUE"] ); $arrANSWER_TEXT[$FIELD_ID][] = ToUpper($arFields["ANSWER_TEXT"]); $arrANSWER_VALUE[$FIELD_ID][] = ToUpper($arFields["ANSWER_VALUE"]); CFormResult::AddAnswer($arFields); } } } if ($FIELD_TYPE=="checkbox") $checkbox = "Y"; if ($FIELD_TYPE=="multiselect") $multiselect = "Y"; } } break; case "text": case "hidden": case "textarea": case "password": case "email": case "url": $fname = "form_".$FIELD_TYPE."_".$arAnswer["ID"]; $ANSWER_ID = intval($arAnswer["ID"]); $z = CFormAnswer::GetByID($ANSWER_ID); if ($zr = $z->Fetch()) { $arFields = array( "RESULT_ID" => $RESULT_ID, "FORM_ID" => $WEB_FORM_ID, "FIELD_ID" => $FIELD_ID, "ANSWER_ID" => $ANSWER_ID, "ANSWER_TEXT" => trim($zr["MESSAGE"]), "ANSWER_VALUE" => $zr["VALUE"], "USER_TEXT" => $arrVALUES[$fname] ); $arrANSWER_TEXT[$FIELD_ID][] = ToUpper($arFields["ANSWER_TEXT"]); $arrANSWER_VALUE[$FIELD_ID][] = ToUpper($arFields["ANSWER_VALUE"]); $arrUSER_TEXT[$FIELD_ID][] = ToUpper($arFields["USER_TEXT"]); CFormResult::AddAnswer($arFields); } break; case "date": $fname = "form_".$FIELD_TYPE."_".$arAnswer["ID"]; $ANSWER_ID = intval($arAnswer["ID"]); $USER_DATE = $arrVALUES[$fname]; if (CheckDateTime($USER_DATE)) { $z = CFormAnswer::GetByID($ANSWER_ID); if ($zr = $z->Fetch()) { $arFields = array( "RESULT_ID" => $RESULT_ID, "FORM_ID" => $WEB_FORM_ID, "FIELD_ID" => $FIELD_ID, "ANSWER_ID" => $ANSWER_ID, "ANSWER_TEXT" => trim($zr["MESSAGE"]), "ANSWER_VALUE" => $zr["VALUE"], "USER_DATE" => $USER_DATE, "USER_TEXT" => $USER_DATE ); $arrANSWER_TEXT[$FIELD_ID][] = ToUpper($arFields["ANSWER_TEXT"]); $arrANSWER_VALUE[$FIELD_ID][] = ToUpper($arFields["ANSWER_VALUE"]); $arrUSER_TEXT[$FIELD_ID][] = ToUpper($arFields["USER_TEXT"]); CFormResult::AddAnswer($arFields); } } break; case "image": $fname = "form_".$FIELD_TYPE."_".$arAnswer["ID"]; $ANSWER_ID = intval($arAnswer["ID"]); $arIMAGE = isset($arrVALUES[$fname]) ? $arrVALUES[$fname] : $_FILES[$fname]; $arIMAGE["MODULE_ID"] = "form"; $fid = 0; if (CFile::CheckImageFile($arIMAGE) == '') { if ($arIMAGE["name"] <> '') { $fid = CFile::SaveFile($arIMAGE, "form"); $fid = intval($fid); if ($fid>0) { $md5 = md5(uniqid(mt_rand(), true).time()); $z = CFormAnswer::GetByID($ANSWER_ID); if ($zr = $z->Fetch()) { $arFields = array( "RESULT_ID" => $RESULT_ID, "FORM_ID" => $WEB_FORM_ID, "FIELD_ID" => $FIELD_ID, "ANSWER_ID" => $ANSWER_ID, "ANSWER_TEXT" => trim($zr["MESSAGE"]), "ANSWER_VALUE" => $zr["VALUE"], "USER_TEXT" => $arIMAGE["name"], "USER_FILE_ID" => $fid, "USER_FILE_IS_IMAGE" => "Y", "USER_FILE_HASH" => $md5, "USER_FILE_NAME" => $arIMAGE["name"], "USER_FILE_SIZE" => $arIMAGE["size"], ); $arrANSWER_TEXT[$FIELD_ID][] = ToUpper($arFields["ANSWER_TEXT"]); $arrANSWER_VALUE[$FIELD_ID][] = ToUpper($arFields["ANSWER_VALUE"]); $arrUSER_TEXT[$FIELD_ID][] = ToUpper($arFields["USER_TEXT"]); CFormResult::AddAnswer($arFields); } } } } break; case "file": $fname = "form_".$FIELD_TYPE."_".$arAnswer["ID"]; $ANSWER_ID = intval($arAnswer["ID"]); $arFILE = isset($arrVALUES[$fname]) ? $arrVALUES[$fname] : $_FILES[$fname]; $arFILE["MODULE_ID"] = "form"; if ($arFILE["name"] <> '') { $original_name = $arFILE["name"]; $fid = 0; $max_size = COption::GetOptionString("form", "MAX_FILESIZE"); $upload_dir = COption::GetOptionString("form", "NOT_IMAGE_UPLOAD_DIR"); $fid = CFile::SaveFile($arFILE, $upload_dir); $fid = intval($fid); if ($fid>0) { $md5 = md5(uniqid(mt_rand(), true).time()); $z = CFormAnswer::GetByID($ANSWER_ID); if ($zr = $z->Fetch()) { $arFields = array( "RESULT_ID" => $RESULT_ID, "FORM_ID" => $WEB_FORM_ID, "FIELD_ID" => $FIELD_ID, "ANSWER_ID" => $ANSWER_ID, "ANSWER_TEXT" => trim($zr["MESSAGE"]), "ANSWER_VALUE" => $zr["VALUE"], "USER_TEXT" => $original_name, "USER_FILE_ID" => $fid, "USER_FILE_NAME" => $original_name, "USER_FILE_IS_IMAGE" => "N", "USER_FILE_HASH" => $md5, "USER_FILE_SUFFIX" => $fes, "USER_FILE_SIZE" => $arFILE["size"], ); $arrANSWER_TEXT[$FIELD_ID][] = ToUpper($arFields["ANSWER_TEXT"]); $arrANSWER_VALUE[$FIELD_ID][] = ToUpper($arFields["ANSWER_VALUE"]); $arrUSER_TEXT[$FIELD_ID][] = ToUpper($arFields["USER_TEXT"]); CFormResult::AddAnswer($arFields); } } } break; endswitch; } // update search fields $arrANSWER_TEXT_upd = $arrANSWER_TEXT[$FIELD_ID]; $arrANSWER_VALUE_upd = $arrANSWER_VALUE[$FIELD_ID]; $arrUSER_TEXT_upd = $arrUSER_TEXT[$FIELD_ID]; TrimArr($arrANSWER_TEXT_upd); TrimArr($arrANSWER_VALUE_upd); TrimArr($arrUSER_TEXT_upd); if (is_array($arrANSWER_TEXT_upd)) $vl_ANSWER_TEXT = trim(implode(" ",$arrANSWER_TEXT_upd)); if (is_array($arrANSWER_VALUE_upd)) $vl_ANSWER_VALUE = trim(implode(" ",$arrANSWER_VALUE_upd)); if (is_array($arrUSER_TEXT_upd)) $vl_USER_TEXT = trim(implode(" ",$arrUSER_TEXT_upd)); if ($vl_ANSWER_TEXT == '') $vl_ANSWER_TEXT = false; if ($vl_ANSWER_VALUE == '') $vl_ANSWER_VALUE = false; if ($vl_USER_TEXT == '') $vl_USER_TEXT = false; $arFields = array( "ANSWER_TEXT_SEARCH" => $vl_ANSWER_TEXT, "ANSWER_VALUE_SEARCH" => $vl_ANSWER_VALUE, "USER_TEXT_SEARCH" => $vl_USER_TEXT ); CFormResult::UpdateField($arFields, $RESULT_ID, $FIELD_ID); } } foreach (GetModuleEvents('form', 'onAfterResultAdd', true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($WEB_FORM_ID, $RESULT_ID)); } // call change status handler CForm::ExecHandlerAfterChangeStatus($RESULT_ID, "ADD"); } } } } return intval($RESULT_ID)>0 ? intval($RESULT_ID) : false; }