function sendOnAfterResultStatusChange($WEB_FORM_ID, $RESULT_ID, $NEW_STATUS_ID = false, $CHECK_RIGHTS = 'Y') { $NEW_STATUS_ID = intval($NEW_STATUS_ID); $dbRes = CForm::GetByID($WEB_FORM_ID); if (!($arForm = $dbRes->Fetch())) { return; } CTimeZone::Disable(); $dbRes = CFormResult::GetByID($RESULT_ID); CTimeZone::Enable(); if (!($arResult = $dbRes->Fetch()) || !$arResult['USER_ID']) { return; } $dbRes = CUser::GetByID($arResult['USER_ID']); if (!($arUser = $dbRes->Fetch())) { return; } if (!$NEW_STATUS_ID) { $NEW_STATUS_ID = CFormStatus::GetDefault($WEB_FORM_ID); } $dbRes = CFormStatus::GetByID($NEW_STATUS_ID); if (!($arStatus = $dbRes->Fetch()) || strlen($arStatus['MAIL_EVENT_TYPE']) <= 0) { return; } $arTemplates = CFormStatus::GetMailTemplateArray($NEW_STATUS_ID); if (!is_array($arTemplates) || count($arTemplates) <= 0) { return; } $arEventFields = array("EMAIL_TO" => $arUser['EMAIL'], "RS_FORM_ID" => $arForm["ID"], "RS_FORM_NAME" => $arForm["NAME"], "RS_FORM_VARNAME" => $arForm["SID"], "RS_FORM_SID" => $arForm["SID"], "RS_RESULT_ID" => $arResult["ID"], "RS_DATE_CREATE" => $arResult["DATE_CREATE"], "RS_USER_ID" => $arResult['USER_ID'], "RS_USER_EMAIL" => $arUser['EMAIL'], "RS_USER_NAME" => $arUser["NAME"] . " " . $arUser["LAST_NAME"], "RS_STATUS_ID" => $arStatus["ID"], "RS_STATUS_NAME" => $arStatus["TITLE"]); $dbRes = CEventMessage::GetList($by = "id", $order = "asc", array('ID' => implode('|', $arTemplates), "ACTIVE" => "Y", "EVENT_NAME" => $arStatus["MAIL_EVENT_TYPE"])); while ($arTemplate = $dbRes->Fetch()) { CEvent::Send($arTemplate["EVENT_NAME"], $arTemplate["SITE_ID"], $arEventFields, "Y", $arTemplate["ID"]); } }
/** * Form initializing and checking. If form's wrong, returns false * Use ShowErrorMsg() to output error code * * @param array $arParams * @return bool */ function Init($arParams, $admin = false) { global $APPLICATION, $USER; $this->bSimple = COption::GetOptionString("form", "SIMPLE", "Y") == "Y" ? true : false; $this->comp2 = !empty($arParams["COMPONENT"]); $this->SHOW_INCLUDE_AREAS = $APPLICATION->GetShowIncludeAreas(); if ($admin) { $FORM_RIGHT = $APPLICATION->GetGroupRight("form"); if ($FORM_RIGHT <= "D") { $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); } $this->__admin = true; } $this->arParams = $arParams; $this->RESULT_ID = intval($arParams["RESULT_ID"]); if (intval($this->RESULT_ID) <= 0) { $this->RESULT_ID = intval($_REQUEST["RESULT_ID"]); } // if there's result ID try to get form ID if (intval($this->RESULT_ID) > 0) { $DBRes = CFormResult::GetByID($this->RESULT_ID); if ($arrResult = $DBRes->Fetch()) { $this->WEB_FORM_ID = intval($arrResult["FORM_ID"]); } } if (intval($this->WEB_FORM_ID) <= 0) { $this->WEB_FORM_ID = intval($arParams["WEB_FORM_ID"]); } // if there's no WEB_FORM_ID, try to get it from $_REQUEST; if (intval($this->WEB_FORM_ID) <= 0) { $this->WEB_FORM_ID = intval($_REQUEST["WEB_FORM_ID"]); } // check WEB_FORM_ID and get web form data $this->WEB_FORM_ID = CForm::GetDataByID($this->WEB_FORM_ID, $this->arForm, $this->arQuestions, $this->arAnswers, $this->arDropDown, $this->arMultiSelect, $this->__admin || $this->arParams["SHOW_ADDITIONAL"] == "Y" || $this->arParams["EDIT_ADDITIONAL"] == "Y" ? "ALL" : "N", $this->__admin ? 'Y' : 'N'); $this->WEB_FORM_NAME = $this->arForm["SID"]; // if wrong WEB_FORM_ID return error; if ($this->WEB_FORM_ID > 0) { // insert chain item if (strlen($this->arParams["CHAIN_ITEM_TEXT"]) > 0) { $APPLICATION->AddChainItem($this->arParams["CHAIN_ITEM_TEXT"], $this->arParams["CHAIN_ITEM_LINK"]); } // check web form rights; $this->F_RIGHT = intval(CForm::GetPermission($this->WEB_FORM_ID)); // in no form access - return error if ($this->isAccessForm()) { if (!empty($_REQUEST["strFormNote"])) { $this->strFormNote = $_REQUEST["strFormNote"]; } if (!$this->comp2 || $this->arParams["COMPONENT"]["componentName"] != "bitrix:form.result.list" || $this->isAccessFormResultList()) { if ($this->RESULT_ID) { if ($this->isAccessFormResult($arrResult)) { $this->arrRESULT_PERMISSION = CFormResult::GetPermissions($this->RESULT_ID, $v); // check result rights if (!$this->comp2 && !$this->isAccessFormResultEdit() || $this->comp2 && ($this->arParams["COMPONENT"]["componentName"] == "bitrix:form.result.edit" && !$this->isAccessFormResultEdit() || $this->arParams["COMPONENT"]["componentName"] == "bitrix:form.result.view" && !$this->isAccessFormResultView())) { $this->__error_msg = "FORM_RESULT_ACCESS_DENIED"; } else { if (!$arrResult) { $z = CFormResult::GetByID($this->RESULT_ID); $this->arResult = $z->Fetch(); } else { $this->arResult = $arrResult; } if ($this->arResult) { if ($this->comp2 && $this->arParams["COMPONENT"]["componentName"] == "bitrix:form.result.view") { CForm::GetResultAnswerArray($this->WEB_FORM_ID, $this->arrResultColumns, $this->arrVALUES, $this->arrResultAnswersSID, array("RESULT_ID" => $this->RESULT_ID)); $this->arrVALUES = $this->arrVALUES[$this->RESULT_ID]; } else { $this->arrVALUES = CFormResult::GetDataByIDForHTML($this->RESULT_ID, $this->arParams["EDIT_ADDITIONAL"]); } } else { $this->__error_msg = "FORM_RECORD_NOT_FOUND"; } } } else { $this->__error_msg = "FORM_ACCESS_DENIED"; } $this->arForm["USE_CAPTCHA"] = "N"; } else { // if form uses CAPCHA initialize it if ($this->arForm["USE_CAPTCHA"] == "Y") { $this->CaptchaInitialize(); } } } else { $this->__error_msg = "FORM_ACCESS_DENIED"; } } else { $this->__error_msg = "FORM_ACCESS_DENIED"; } // endif ($F_RIGHT>=10); } else { $this->__error_msg = "FORM_NOT_FOUND"; } // endif ($WEB_FORM_ID>0); return empty($this->__error_msg); }
function Show($RESULT_ID, $TEMPLATE = "", $TEMPLATE_TYPE = "show", $SHOW_ADDITIONAL = "N", $SHOW_ANSWER_VALUE = "Y", $SHOW_STATUS = "N") { global $DB, $MESS, $APPLICATION, $USER, $HTTP_POST_VARS, $HTTP_GET_VARS, $arrRESULT_PERMISSION, $arrFIELDS; $err_mess = CAllFormResult::err_mess() . "<br>Function: Show<br>Line: "; $z = CFormResult::GetByID($RESULT_ID); if ($zr = $z->Fetch()) { $arrResult = $zr; InitBVar($SHOW_ADDITIONAL); $additional = $SHOW_ADDITIONAL == "Y" ? "ALL" : "N"; $WEB_FORM_ID = $FORM_ID = CForm::GetDataByID($arrResult["FORM_ID"], $arForm, $arQuestions, $arAnswers, $arDropDown, $arMultiSelect, $additional); CForm::GetResultAnswerArray($WEB_FORM_ID, $arrResultColumns, $arrResultAnswers, $arrResultAnswersVarname, array("RESULT_ID" => $RESULT_ID)); $arrResultAnswers = $arrResultAnswers[$RESULT_ID]; // проверим общие права на результат $F_RIGHT = CForm::GetPermission($WEB_FORM_ID); if (intval($F_RIGHT) >= 20 || $F_RIGHT >= 15 && $zr["USER_ID"] == $USER->GetID()) { // проверим права в зависимости от статуса результата $arrRESULT_PERMISSION = CFormResult::GetPermissions($RESULT_ID, $v); if (in_array("VIEW", $arrRESULT_PERMISSION)) { if (strlen(trim($TEMPLATE)) > 0) { $template = $TEMPLATE; } else { if ($TEMPLATE_TYPE == "show") { if (strlen($arrResult["SHOW_RESULT_TEMPLATE"]) <= 0) { $template = "default.php"; } else { $template = $arrResult["SHOW_RESULT_TEMPLATE"]; } } elseif ($TEMPLATE_TYPE == "print") { if (strlen($arrResult["PRINT_RESULT_TEMPLATE"]) <= 0) { $template = "default.php"; } else { $template = $arrResult["PRINT_RESULT_TEMPLATE"]; } } } require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/form/include.php"; if ($TEMPLATE_TYPE == "show") { $path = COption::GetOptionString("form", "SHOW_RESULT_TEMPLATE_PATH"); } elseif ($TEMPLATE_TYPE == "print") { $path = COption::GetOptionString("form", "PRINT_RESULT_TEMPLATE_PATH"); } IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/form/include.php"); include GetLangFileName($_SERVER["DOCUMENT_ROOT"] . $path . "lang/", "/" . $template); if ($APPLICATION->GetShowIncludeAreas()) { $arIcons = array(); if (CModule::IncludeModule("fileman")) { $arIcons[] = array("URL" => "/bitrix/admin/fileman_file_edit.php?lang=" . LANGUAGE_ID . "&site=" . SITE_ID . "&full_src=Y&path=" . urlencode($path . $template), "SRC" => "/bitrix/images/form/panel/edit_template.gif", "ALT" => GetMessage("FORM_PUBLIC_ICON_TEMPLATE")); $arrUrl = parse_url($_SERVER["REQUEST_URI"]); $arIcons[] = array("URL" => "/bitrix/admin/fileman_file_edit.php?lang=" . LANGUAGE_ID . "&site=" . SITE_ID . "&full_src=Y&path=" . urlencode($arrUrl["path"]), "SRC" => "/bitrix/images/form/panel/edit_file.gif", "ALT" => GetMessage("FORM_PUBLIC_ICON_HANDLER")); } $arIcons[] = array("URL" => "/bitrix/admin/form_edit.php?lang=" . LANGUAGE_ID . "&ID=" . $WEB_FORM_ID, "SRC" => "/bitrix/images/form/panel/edit_form.gif", "ALT" => GetMessage("FORM_PUBLIC_ICON_SETTINGS")); echo $APPLICATION->IncludeStringBefore($arIcons); } include $_SERVER["DOCUMENT_ROOT"] . $path . $template; if ($APPLICATION->GetShowIncludeAreas()) { echo $APPLICATION->IncludeStringAfter(); } } } } }
} if ($arResult["F_RIGHT"]>=20 || ($arResult["F_RIGHT"]>=15 && $USER->GetID()==$arResultData["USER_ID"])) { $arResult["arrRESULT_PERMISSION"] = CFormResult::GetPermissions($arParams["RESULT_ID"], $v); // check result rights if (!in_array("EDIT", $arResult["arrRESULT_PERMISSION"])) { $arResult["ERROR"] = "FORM_RESULT_ACCESS_DENIED"; } else { if (!$arResultData) { $z = CFormResult::GetByID($arParams["RESULT_ID"]); $arResult["arResultData"] = $z->Fetch(); } else { $arResult["arResultData"] = $arResultData; } if ($arResult["arResultData"]) { $arResult["arrVALUES"] = CFormResult::GetDataByIDForHTML($arParams["RESULT_ID"], $arParams["EDIT_ADDITIONAL"]); } else { $arResult["ERROR"] = "FORM_RECORD_NOT_FOUND"; }
/** * <p>Обновляет все значения <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#answer">ответов</a> и <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">полей</a> <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#result">результата</a> веб-формы. В случае успеха возвращает "true", в противном случае - "false".</p> * * * * * @param int $result_id ID <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#result">результата</a>. * * * * @param array $values = false Массив со значениями <a * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#answer">ответов</a> и <a * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">полей</a> веб-формы. Массив имеет * следующую структуру: <pre>array( "<i>имя HTML поля 1</i>" => "<i>значение 1</i>", * "<i>имя HTML поля 2</i>" => "<i>значение 2</i>", ... "<i>имя HTML поля N</i>" => * "<i>значение N</i>" )</pre> Правила формирования "<i>имен HTML полей</i>" и * "<i>значений</i>" можно посмотреть <a * href="http://dev.1c-bitrix.ru/api_help/form/htmlnames.php">здесь</a>. <h5>Пример:</h5> <pre * style="height:450px">Array ( [form_text_586] => Иванов Иван Иванович [form_date_587] => * 10.03.1992 [form_textarea_588] => г. Мурманск [form_radio_VS_MARRIED] => 589 [form_checkbox_VS_INTEREST] * => Array ( [0] => 592 [1] => 593 [2] => 594 ) [form_dropdown_VS_AGE] => 597 * [form_multiselect_VS_EDUCATION] => Array ( [0] => 603 [1] => 604 ) [form_text_606] => 2345 [form_image_607] * => 1045 [form_textarea_ADDITIONAL_149] => 155 ) </pre> Параметр необязательный. По * умолчанию - "false" (будет взят стандартный массив $_REQUEST). * * * * @param string $update_fields = "N" Флаг необходимости обновления <a * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">полей</a> веб-формы. Возможны * следующие значения: <ul> <li> <b>Y</b> - необходимо обновить; </li> <li> <b>N</b> - * не нужно обновлять. </li> </ul> Параметр необязательный. По умолчанию - * "N" (не нужно обновлять). * * * * @param string $check_rights = "Y" Флаг необходимости проверки прав текущего пользователя. * Возможны следующие значения: <ul> <li> <b>Y</b> - права необходимо * проверить; </li> <li> <b>N</b> - права не нужно проверять. </li> </ul> Для * успешного обновления <a * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#result">результата</a> необходимо * обладать следующими <a * href="http://dev.1c-bitrix.ru/api_help/form/permissions.php">правами</a>: <ol> <li>На веб-форму, к * которой принадлежит редактируемый результат: <br><br><b>[20] Работа со * всеми результатами в соответствии с их статусами</b> <br><br>или, в * случае, если вы являетесь создателем редактируемого результата, * достаточно права: <br><br><b>[15] Работа со своим результатом в * соответствии с его статусом</b> <br> </li> <li>На статус, в котором * находится редактируемый результат, необходимо иметь право: * <br><br><b>[EDIT] редактирование</b> </li> </ol> Параметр необязательный. По * умолчанию - "Y" (права необходимо проверить). * * * * @return bool * * * <h4>Example</h4> * <pre> * <? * // ID результата * $RESULT_ID = 186; * * // массив описывающий загруженную на сервер фотографию * $arImage = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/images/photo.gif"); * * // массив значений ответов и полей веб-формы * $arValues = array ( * "form_text_586" => "Иванов Иван", // "Фамилия, имя, отчество" * "form_date_587" => "01.06.1904", // "Дата рождения" * "form_textarea_588" => "г. Москва", // "Адрес" * "form_radio_VS_MARRIED" => 590, // "Женаты/замужем?" * "form_checkbox_VS_INTEREST" => array(612, 613), // "Увлечения" * "form_dropdown_VS_AGE" => 601, // "Возраст" * "form_multiselect_VS_EDUCATION" => array(602, 603), // "Образование" * "form_text_606" => 300, // "Доход" * "form_image_607" => $arImage, // "Фотография" * "form_textarea_ADDITIONAL_149" => "155 рублей" // "Рассчитанная сумма" * ) * * //обновим результат * if (<b>CFormResult::Update</b>($RESULT_ID, $arValues, "Y")) * { * echo "Результат #".$RESULT_ID." успешно обновлен."; * } * else * { * global $strError; * echo $strError; * } * ?> * </pre> * * * * <h4>See Also</h4> * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/form/classes/cformresult/setfield.php">CFormResult::SetField</a> * </li> <li> <a * href="http://dev.1c-bitrix.ru/api_help/form/classes/cformresult/getdatabyidforhtml.php">CFormResult::GetDataByIDForHTML</a> * </li> <li> <a href="http://dev.1c-bitrix.ru/api_help/form/classes/cformresult/add.php">CFormResult::Add</a> </li> * </ul><a name="examples"></a> * * * @static * @link http://dev.1c-bitrix.ru/api_help/form/classes/cformresult/update.php * @author Bitrix */ public static function Update($RESULT_ID, $arrVALUES=false, $UPDATE_ADDITIONAL="N", $CHECK_RIGHTS="Y") { $err_mess = (CAllFormResult::err_mess())."<br>Function: Update<br>Line: "; global $DB, $USER, $_REQUEST, $HTTP_POST_VARS, $HTTP_GET_VARS, $HTTP_POST_FILES, $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, $v); // 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) { $dbEvents = GetModuleEvents('form', 'onBeforeResultStatusChange'); while ($arEvent = $dbEvents->Fetch()) { ExecuteModuleEventEx($arEvent, array($WEB_FORM_ID, $RESULT_ID, &$arFields["STATUS_ID"], $CHECK_RIGHTS)); if ($ex = $APPLICATION->GetException()) $strError .= $ex->GetString().'<br />'; } } if (strlen($strError) <= 0) { // call status change handler CForm::ExecHandlerBeforeChangeStatus($RESULT_ID, "UPDATE", $arFields["STATUS_ID"]); $dbEvents = GetModuleEvents('form', 'onBeforeResultUpdate'); while ($arEvent = $dbEvents->Fetch()) { ExecuteModuleEventEx($arEvent, array($WEB_FORM_ID, $RESULT_ID, &$arFields, &$arrVALUES, $CHECK_RIGHTS)); if ($ex = $APPLICATION->GetException()) $strError .= $ex->GetString().'<br />'; } } $rows = 0; if (strlen($strError) <= 0) $rows = $DB->Update("b_form_result", $arFields,"WHERE ID='".$RESULT_ID."'",$err_mess.__LINE__); if ($bUpdateStatus) { $dbEvents = GetModuleEvents('form', 'onAfterResultStatusChange'); while ($arEvent = $dbEvents->Fetch()) { 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] : $HTTP_POST_FILES[$fname]; $arIMAGE["old_file"] = $arrFILES[$ANSWER_ID]["USER_FILE_ID"]; $arIMAGE["del"] = $arrVALUES[$fname."_del"]; $arIMAGE["MODULE_ID"] = "form"; $fid = 0; if (strlen($arIMAGE["name"])>0 || strlen($arIMAGE["del"])>0) { $new_file="Y"; if (strlen($arIMAGE["del"])>0 || strlen(CFile::CheckImageFile($arIMAGE))<=0) { $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] : $HTTP_POST_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 (strlen(trim($arFILE["name"]))>0 || strlen(trim($arFILE["del"]))>0) { $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 (strlen($vl_ANSWER_TEXT)<=0) $vl_ANSWER_TEXT = false; if (strlen($vl_ANSWER_VALUE)<=0) $vl_ANSWER_VALUE = false; if (strlen($vl_USER_TEXT)<=0) $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; } } $dbEvents = GetModuleEvents('form', 'onAfterResultUpdate'); while ($arEvent = $dbEvents->Fetch()) { ExecuteModuleEventEx($arEvent, array($WEB_FORM_ID, $RESULT_ID, $CHECK_RIGHTS)); } // call "after status update" handler CForm::ExecHandlerAfterChangeStatus($RESULT_ID, "UPDATE"); return true; } } } } } return false; }
$strError = ''; $strNote = ''; $aMenu = array(); IncludeModuleLangFile(__FILE__); $err_mess = "File: " . __FILE__ . "<br>Line: "; $old_module_version = CForm::IsOldVersion(); $bSimple = COption::GetOptionString("form", "SIMPLE", "Y") == "Y" ? true : false; /*************************************************************************** GET | POST processing ****************************************************************************/ // Wow.... It was funny.... // if (intval($WEB_FORM_ID)>0 && intval($WEB_FORM_ID)<=0) $WEB_FORM_ID = intval($WEB_FORM_ID); $WEB_FORM_ID = intval($WEB_FORM_ID); $RESULT_ID = intval($RESULT_ID); if ($RESULT_ID > 0) { $q = CFormResult::GetByID($RESULT_ID); if (!($arrResult = $q->Fetch())) { // result not found $title = str_replace("#FORM_ID#", "{$WEB_FORM_ID}", GetMessage("FORM_RESULT_LIST")); require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; echo "<p><a href='/bitrix/admin/form_result_list.php?lang=" . LANGUAGE_ID . "&WEB_FORM_ID=" . $WEB_FORM_ID . "'>" . $title . "</a></p>"; echo ShowError(GetMessage("FORM_RESULT_NOT_FOUND")); require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php"; die; } $WEB_FORM_ID = intval($arrResult["FORM_ID"]); } else { $arrResult = array(); } $F_RIGHT = intval(CForm::GetPermission($WEB_FORM_ID)); // form rights
function GetResultByID($RESULT_ID) { return CFormResult::GetByID($RESULT_ID); }
function Update($RESULT_ID, $arrVALUES = false, $UPDATE_ADDITIONAL = "N", $CHECK_RIGHTS = "Y") { $err_mess = CAllFormResult::err_mess() . "<br>Function: Update<br>Line: "; global $DB, $USER, $_REQUEST, $HTTP_POST_VARS, $HTTP_GET_VARS, $HTTP_POST_FILES, $strError; if ($arrVALUES === false) { $arrVALUES = $_REQUEST; } InitBvar($UPDATE_ADDITIONAL); // проверяем есть ли в базе такой результат $RESULT_ID = intval($RESULT_ID); $z = CFormResult::GetByID($RESULT_ID); if ($zr = $z->Fetch()) { $arrResult = $zr; $additional = $UPDATE_ADDITIONAL == "Y" ? "ALL" : "N"; // получаем данные по форме $WEB_FORM_ID = CForm::GetDataByID($arrResult["FORM_ID"], $arForm, $arQuestions, $arAnswers, $arDropDown, $arMultiSelect, $additional); if ($WEB_FORM_ID > 0) { // проверим права на форму $F_RIGHT = $CHECK_RIGHTS != "Y" ? 30 : intval(CForm::GetPermission($WEB_FORM_ID)); if ($F_RIGHT >= 20 || ($F_RIGHT >= 15 && $arrResult["USER_ID"]) == $USER->GetID()) { // проверим права на результат (на его статус) $arrRESULT_PERMISSION = $CHECK_RIGHTS != "Y" ? CFormStatus::GetMaxPermissions() : CFormResult::GetPermissions($RESULT_ID, $v); // если право есть то if (in_array("EDIT", $arrRESULT_PERMISSION)) { // обновляем результат $arFields = array("TIMESTAMP_X" => $DB->GetNowFunction()); $fname = "status_" . $arForm["SID"]; $STATUS_ID = intval($arrVALUES[$fname]); // если статус определен то if (intval($STATUS_ID) > 0) { // проверим права на статус результата $arrNEW_STATUS_PERMISSION = $CHECK_RIGHTS != "Y" ? CFormStatus::GetMaxPermissions() : CFormStatus::GetPermissions($STATUS_ID); // если право есть то if (in_array("MOVE", $arrNEW_STATUS_PERMISSION)) { // присваиваем его $arFields["STATUS_ID"] = intval($arrVALUES[$fname]); } } // вызываем обработчик на смену статуса перед обновлением CForm::ExecHandlerBeforeChangeStatus($RESULT_ID, "UPDATE", $arFields["STATUS_ID"]); $rows = $DB->Update("b_form_result", $arFields, "WHERE ID='" . $RESULT_ID . "'", $err_mess . __LINE__); // если результат обновился успешно то if (intval($rows) > 0) { $arrException = array(); // собираем информацию по файлам $arrFILES = array(); $strSql = "\r\n\t\t\t\t\t\t\t\tSELECT\r\n\t\t\t\t\t\t\t\t\tANSWER_ID,\r\n\t\t\t\t\t\t\t\t\tUSER_FILE_ID,\r\n\t\t\t\t\t\t\t\t\tUSER_FILE_NAME,\r\n\t\t\t\t\t\t\t\t\tUSER_FILE_IS_IMAGE,\r\n\t\t\t\t\t\t\t\t\tUSER_FILE_HASH,\r\n\t\t\t\t\t\t\t\t\tUSER_FILE_SUFFIX,\r\n\t\t\t\t\t\t\t\t\tUSER_FILE_SIZE\r\n\t\t\t\t\t\t\t\tFROM\r\n\t\t\t\t\t\t\t\t\tb_form_result_answer\r\n\t\t\t\t\t\t\t\tWHERE\r\n\t\t\t\t\t\t\t\t\tRESULT_ID = {$RESULT_ID}\r\n\t\t\t\t\t\t\t\tand USER_FILE_ID>0\r\n\t\t\t\t\t\t\t\t"; $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"]); } // удаляем все вопросы и ответы на них для данного результата CFormResult::Reset($RESULT_ID, false, $UPDATE_ADDITIONAL, $arrException); // проходим по вопросам и полям while (list($key, $arQuestion) = each($arQuestions)) { $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") { // обновляем вопросы формы $arrANSWER_TEXT = array(); $arrANSWER_VALUE = array(); $arrUSER_TEXT = array(); $radio = "N"; $checkbox = "N"; $multiselect = "N"; $dropdown = "N"; // проходим по ответам if (is_array($arAnswers[$FIELD_SID])) { reset($arAnswers[$FIELD_SID]); while (list($key, $arAnswer) = each($arAnswers[$FIELD_SID])) { $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) { reset($arrVALUES[$fname]); 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": $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 = is_set($fname, $arrVALUES) ? $arrVALUES[$fname] : $HTTP_POST_FILES[$fname]; $arIMAGE["old_file"] = $arrFILES[$ANSWER_ID]["USER_FILE_ID"]; $arIMAGE["del"] = $arrVALUES[$fname . "_del"]; $arIMAGE["MODULE_ID"] = "form"; $fid = 0; if (strlen($arIMAGE["name"]) > 0 || strlen($arIMAGE["del"]) > 0) { $new_file = "Y"; if (strlen($arIMAGE["del"]) > 0 || strlen(CFile::CheckImageFile($arIMAGE)) <= 0) { $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"]; } else { $arFields["USER_FILE_NAME"] = $arrFILES[$ANSWER_ID]["USER_FILE_NAME"]; $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; case "file": $fname = "form_" . $FIELD_TYPE . "_" . $arAnswer["ID"]; $ANSWER_ID = intval($arAnswer["ID"]); $arFILE = is_set($fname, $arrVALUES) ? $arrVALUES[$fname] : $HTTP_POST_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 (strlen(trim($arFILE["name"])) > 0 || strlen(trim($arFILE["del"])) > 0) { $new_file = "Y"; $original_name = $arFILE["name"]; $max_size = COption::GetOptionString("form", "MAX_FILESIZE"); $suffix = COption::GetOptionString("form", "NOT_IMAGE_EXTENSION_SUFFIX"); $arFILE["name"] .= $suffix; $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; } } } // обновляем поля для поиска $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 (strlen($vl_ANSWER_TEXT) <= 0) { $vl_ANSWER_TEXT = false; } if (strlen($vl_ANSWER_VALUE) <= 0) { $vl_ANSWER_VALUE = false; } if (strlen($vl_USER_TEXT) <= 0) { $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 { $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; } } } // вызываем обработчик на смену статуса после обновления CForm::ExecHandlerAfterChangeStatus($RESULT_ID, "UPDATE"); return true; } } } } } return false; }