コード例 #1
0
ファイル: events.php プロジェクト: DarneoStudio/bitrix
 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"]);
     }
 }
コード例 #2
0
 /**
  * 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);
 }
コード例 #3
0
 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();
                 }
             }
         }
     }
 }
コード例 #4
0
ファイル: component.php プロジェクト: ASDAFF/open_bx
				}

				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";
						}
コード例 #5
0
	/**
	 * <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>" =&gt; "<i>значение 1</i>",
	 * "<i>имя HTML поля 2</i>" =&gt; "<i>значение 2</i>", ... "<i>имя HTML поля N</i>" =&gt;
	 * "<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] =&gt; Иванов Иван Иванович [form_date_587] =&gt;
	 * 10.03.1992 [form_textarea_588] =&gt; г. Мурманск [form_radio_VS_MARRIED] =&gt; 589 [form_checkbox_VS_INTEREST]
	 * =&gt; Array ( [0] =&gt; 592 [1] =&gt; 593 [2] =&gt; 594 ) [form_dropdown_VS_AGE] =&gt; 597
	 * [form_multiselect_VS_EDUCATION] =&gt; Array ( [0] =&gt; 603 [1] =&gt; 604 ) [form_text_606] =&gt; 2345 [form_image_607]
	 * =&gt; 1045 [form_textarea_ADDITIONAL_149] =&gt; 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>
	 * &lt;?
	 * // ID результата
	 * $RESULT_ID = 186;
	 * 
	 * // массив описывающий загруженную на сервер фотографию
	 * $arImage = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/images/photo.gif");
	 * 
	 * // массив значений ответов и полей веб-формы
	 * $arValues = array (
	 *     "form_text_586"                 =&gt; "Иванов Иван",    // "Фамилия, имя, отчество"
	 *     "form_date_587"                 =&gt; "01.06.1904",     // "Дата рождения"
	 *     "form_textarea_588"             =&gt; "г. Москва",      // "Адрес"
	 *     "form_radio_VS_MARRIED"         =&gt; 590,              // "Женаты/замужем?"
	 *     "form_checkbox_VS_INTEREST"     =&gt; array(612, 613),  // "Увлечения"
	 *     "form_dropdown_VS_AGE"          =&gt; 601,              // "Возраст"
	 *     "form_multiselect_VS_EDUCATION" =&gt; array(602, 603),  // "Образование"
	 *     "form_text_606"                 =&gt; 300,              // "Доход"
	 *     "form_image_607"                =&gt; $arImage,         // "Фотография"
	 *     "form_textarea_ADDITIONAL_149"  =&gt; "155 рублей"      // "Рассчитанная сумма"
	 * )
	 * 
	 * //обновим результат
	 * if (<b>CFormResult::Update</b>($RESULT_ID, $arValues, "Y"))
	 * {
	 *     echo "Результат #".$RESULT_ID." успешно обновлен.";
	 * }
	 * else
	 * {
	 *     global $strError;
	 *     echo $strError;
	 * }
	 * ?&gt;
	 * </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;
	}
コード例 #6
0
$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
コード例 #7
0
 function GetResultByID($RESULT_ID)
 {
     return CFormResult::GetByID($RESULT_ID);
 }
コード例 #8
0
 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;
 }