• Модуль: form
  • Путь к файлу: ~/bitrix/modules/form/classes/general/form_callformresult.php
  • Класс: CAllFormResult
  • Вызов: CAllFormResult::Update
static function Update($RESULT_ID, $arrVALUES=false, $UPDATE_ADDITIONAL="N", $CHECK_RIGHTS="Y")
{
	$err_mess = (CAllFormResult::err_mess())."
Function: Update
Line: "; global $DB, $USER, $strError, $APPLICATION; if ($arrVALUES===false) $arrVALUES = $_REQUEST; InitBvar($UPDATE_ADDITIONAL); // check whether such result exists in db $RESULT_ID = intval($RESULT_ID); $z = CFormResult::GetByID($RESULT_ID); if ($zr=$z->Fetch()) { $arrResult = $zr; $additional = ($UPDATE_ADDITIONAL=="Y") ? "ALL" : "N"; // get form data $WEB_FORM_ID = CForm::GetDataByID($arrResult["FORM_ID"], $arForm, $arQuestions, $arAnswers, $arDropDown, $arMultiSelect, $additional); if ($WEB_FORM_ID>0) { // check form rights $F_RIGHT = ($CHECK_RIGHTS!="Y") ? 30 : intval(CForm::GetPermission($WEB_FORM_ID)); if ($F_RIGHT>=20 || ($F_RIGHT>=15 && $arrResult["USER_ID"]==$USER->GetID())) { // check result rights (its status rights) $arrRESULT_PERMISSION = ($CHECK_RIGHTS!="Y") ? CFormStatus::GetMaxPermissions() : CFormResult::GetPermissions($RESULT_ID); // if rights're correct if (in_array("EDIT", $arrRESULT_PERMISSION)) { // update result $arFields = array("TIMESTAMP_X" => $DB->GetNowFunction()); $fname = "status_".$arForm["SID"]; $STATUS_ID = intval($arrVALUES[$fname]); $bUpdateStatus = false; // if there's new status defined if (intval($STATUS_ID)>0) { // check new status rights $arrNEW_STATUS_PERMISSION = ($CHECK_RIGHTS!="Y") ? CFormStatus::GetMaxPermissions() : CFormStatus::GetPermissions($STATUS_ID); // if rights're correct if (in_array("MOVE",$arrNEW_STATUS_PERMISSION)) { // update it $bUpdateStatus = true; $arFields["STATUS_ID"] = intval($arrVALUES[$fname]); } } if ($bUpdateStatus) { foreach (GetModuleEvents('form', 'onBeforeResultStatusChange', true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($WEB_FORM_ID, $RESULT_ID, &$arFields["STATUS_ID"], $CHECK_RIGHTS)); if ($ex = $APPLICATION->GetException()) $strError .= $ex->GetString().'
'; } } if ($strError == '') { // call status change handler CForm::ExecHandlerBeforeChangeStatus($RESULT_ID, "UPDATE", $arFields["STATUS_ID"]); foreach (GetModuleEvents('form', 'onBeforeResultUpdate', true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($WEB_FORM_ID, $RESULT_ID, &$arFields, &$arrVALUES, $CHECK_RIGHTS)); if ($ex = $APPLICATION->GetException()) $strError .= $ex->GetString().'
'; } } $rows = 0; if ($strError == '') $rows = $DB->Update("b_form_result", $arFields,"WHERE ID='".$RESULT_ID."'",$err_mess.__LINE__); if ($bUpdateStatus) { foreach (GetModuleEvents('form', 'onAfterResultStatusChange', true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($WEB_FORM_ID, $RESULT_ID, &$arFields["STATUS_ID"], $CHECK_RIGHTS)); } } // if update was successful if (intval($rows)>0) { $arrException = array(); // gather files info $arrFILES = array(); $strSql = " SELECT ANSWER_ID, USER_FILE_ID, USER_FILE_NAME, USER_FILE_IS_IMAGE, USER_FILE_HASH, USER_FILE_SUFFIX, USER_FILE_SIZE FROM b_form_result_answer WHERE RESULT_ID = $RESULT_ID and USER_FILE_ID>0 "; $q = $DB->Query($strSql,false,$err_mess.__LINE__); while ($qr = $q->Fetch()) $arrFILES[$qr["ANSWER_ID"]] = $qr; if (is_array($arrVALUES["ARR_CLS"])) $arrException = array_merge($arrException, $arrVALUES["ARR_CLS"]); // clear all questions and answers for current result CFormResult::Reset($RESULT_ID, false, $UPDATE_ADDITIONAL, $arrException); // trace questions and additional fields foreach ($arQuestions as $arQuestion) { $FIELD_ID = $arQuestion["ID"]; if (is_array($arrException) && count($arrException)>0) { if (in_array($FIELD_ID, $arrException)) continue; } $FIELD_SID = $arQuestion["SID"]; if ($arQuestion["ADDITIONAL"]!="Y") { // update form questions $arrANSWER_TEXT = array(); $arrANSWER_VALUE = array(); $arrUSER_TEXT = array(); $radio = "N"; $checkbox = "N"; $multiselect = "N"; $dropdown = "N"; // trace answers if (is_array($arAnswers[$FIELD_SID])) { 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 "textarea": case "password": case "email": case "url": case "hidden": $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["old_file"] = $arrFILES[$ANSWER_ID]["USER_FILE_ID"]; $arIMAGE["del"] = $arrVALUES[$fname."_del"]; $arIMAGE["MODULE_ID"] = "form"; $fid = 0; if ($arIMAGE["name"] <> '' || $arIMAGE["del"] <> '') { $new_file="Y"; if ($arIMAGE["del"] <> '' || CFile::CheckImageFile($arIMAGE) == '') { $fid = CFile::SaveFile($arIMAGE, "form"); } } else $fid = $arrFILES[$ANSWER_ID]["USER_FILE_ID"]; $fid = intval($fid); if ($fid>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"], "USER_FILE_ID" => $fid, "USER_FILE_IS_IMAGE" => "Y" ); if ($new_file=="Y") { $arFields["USER_FILE_NAME"] = $arIMAGE["name"]; $arFields["USER_FILE_SIZE"] = $arIMAGE["size"]; $arFields["USER_FILE_HASH"] = md5(uniqid(mt_rand(), true).time()); } else { $arFields["USER_FILE_NAME"] = $arrFILES[$ANSWER_ID]["USER_FILE_NAME"]; $arFields["USER_FILE_SIZE"] = $arrFILES[$ANSWER_ID]["USER_FILE_SIZE"]; $arFields["USER_FILE_HASH"] = $arrFILES[$ANSWER_ID]["USER_FILE_HASH"]; } $arFields["USER_TEXT"] = $arFields["USER_FILE_NAME"]; $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["old_file"] = $arrFILES[$ANSWER_ID]["USER_FILE_ID"]; $arFILE["del"] = $arrVALUES[$fname."_del"]; $arFILE["MODULE_ID"] = "form"; $new_file="N"; $fid = 0; if (trim($arFILE["name"]) <> '' || trim($arFILE["del"]) <> '') { $new_file="Y"; $original_name = $arFILE["name"]; $max_size = COption::GetOptionString("form", "MAX_FILESIZE"); $upload_dir = COption::GetOptionString("form", "NOT_IMAGE_UPLOAD_DIR"); $fid = CFile::SaveFile($arFILE, $upload_dir, $max_size); } else $fid = $arrFILES[$ANSWER_ID]["USER_FILE_ID"]; $fid = intval($fid); if ($fid>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"], "USER_FILE_ID" => $fid, ); if ($new_file=="Y") { $arFields["USER_FILE_NAME"] = $original_name; $arFields["USER_FILE_IS_IMAGE"] = "N"; $arFields["USER_FILE_HASH"] = md5(uniqid(mt_rand(), true).time()); $arFields["USER_FILE_SUFFIX"] = $suffix; $arFields["USER_FILE_SIZE"] = $arFILE["size"]; } else { $arFields["USER_FILE_NAME"] = $arrFILES[$ANSWER_ID]["USER_FILE_NAME"]; $arFields["USER_FILE_IS_IMAGE"] = $arrFILES[$ANSWER_ID]["USER_FILE_IS_IMAGE"]; $arFields["USER_FILE_HASH"] = $arrFILES[$ANSWER_ID]["USER_FILE_HASH"]; $arFields["USER_FILE_SUFFIX"] = $arrFILES[$ANSWER_ID]["USER_FILE_SUFFIX"]; $arFields["USER_FILE_SIZE"] = $arrFILES[$ANSWER_ID]["USER_FILE_SIZE"]; } $arFields["USER_TEXT"] = $arFields["USER_FILE_NAME"]; $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 fields for searching $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); } else // update additional fields { $FIELD_TYPE = $arQuestion["FIELD_TYPE"]; switch ($FIELD_TYPE) : case "text": $fname = "form_textarea_ADDITIONAL_".$arQuestion["ID"]; $arFields = array( "RESULT_ID" => $RESULT_ID, "FORM_ID" => $WEB_FORM_ID, "FIELD_ID" => $FIELD_ID, "USER_TEXT" => $arrVALUES[$fname], "USER_TEXT_SEARCH" => ToUpper($arrVALUES[$fname]) ); CFormResult::AddAnswer($arFields); break; case "integer": $fname = "form_text_ADDITIONAL_".$arQuestion["ID"]; $arFields = array( "RESULT_ID" => $RESULT_ID, "FORM_ID" => $WEB_FORM_ID, "FIELD_ID" => $FIELD_ID, "USER_TEXT" => $arrVALUES[$fname], "USER_TEXT_SEARCH" => ToUpper($arrVALUES[$fname]) ); CFormResult::AddAnswer($arFields); break; case "date": $fname = "form_date_ADDITIONAL_".$arQuestion["ID"]; $USER_DATE = $arrVALUES[$fname]; if (CheckDateTime($USER_DATE)) { $arFields = array( "RESULT_ID" => $RESULT_ID, "FORM_ID" => $WEB_FORM_ID, "FIELD_ID" => $FIELD_ID, "USER_DATE" => $USER_DATE, "USER_TEXT" => $USER_DATE, "USER_TEXT_SEARCH" => ToUpper($USER_DATE) ); CFormResult::AddAnswer($arFields); } break; endswitch; } } foreach (GetModuleEvents('form', 'onAfterResultUpdate', true) as $arEvent) { ExecuteModuleEventEx($arEvent, array($WEB_FORM_ID, $RESULT_ID, $CHECK_RIGHTS)); } // call "after status update" handler CForm::ExecHandlerAfterChangeStatus($RESULT_ID, "UPDATE"); return true; } } } } } return false; }