Exemplo n.º 1
0
 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"]);
     }
 }
Exemplo n.º 2
0
	/**
	 * <p>Добавляет новый <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#status">статус</a> или обновляет существующий. Возвращает ID обновленного или добавленного <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#status">статуса</a> в случае положительного результата, в противном случае - "false".</p>
	 *
	 *
	 *
	 *
	 * @param array $fields  Массив значений, в качестве ключей массива допустимы: <ul> <li>
	 * <b>FORM_ID</b><font color="red">*</font> - ID <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#form">веб-формы</a>; </li> <li> <b>TITLE</b><font
	 * color="red">*</font> - заголовок <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#status">статуса</a>; </li> <li> <b>C_SORT</b> -
	 * порядок сортировки; </li> <li> <b>ACTIVE</b> - флаг активности; допустимы
	 * следующие значения: <ul> <li> <b>Y</b> - ответ активен; </li> <li> <b>N</b> - ответ
	 * не активен (по умолчанию). </li> </ul> </li> <li> <b>DESCRIPTION</b> - описание <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#status">статуса</a>; </li> <li> <b>CSS</b> - имя CSS
	 * класса для вывода заголовка <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#status">статуса</a>; </li> <li> <b>HANDLER_OUT</b> -
	 * путь относительно корня к <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/status_processing.php">обработчику</a>, вызываемому
	 * при смене у <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#result">результата</a>
	 * данного <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#status">статуса</a> на какой
	 * либо другой; </li> <li> <b>HANDLER_IN</b> - путь относительно корня к <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/status_processing.php">обработчику</a>, вызываемому
	 * при смене у <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#result">результата</a>
	 * какого либо <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#status">статуса</a> на
	 * данный; </li> <li> <b>DEFAULT_VALUE</b> - флаг установки <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#status">статуса</a> по умолчанию,
	 * допустимы следующие значения: <ul> <li> <b>Y</b> - статус будет
	 * устанавливаться; </li> <li> <b>N</b> - статус не будет устанавливаться (по
	 * умолчанию). </li> </ul> </li> <li> <b>arPERMISSION_VIEW</b>* - массив ID групп
	 * пользователей, имеющих <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/permissions.php#result">право</a> "Просмотр
	 * результатов в данном статусе"; </li> <li> <b>arPERMISSION_MOVE</b>* - массив ID
	 * групп пользователей, имеющих <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/permissions.php#result">право</a> "Перевод
	 * результатов в данный статус"; </li> <li> <b>arPERMISSION_EDIT</b>* - массив ID групп
	 * пользователей, имеющих <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/permissions.php#result">право</a> "Редактирование
	 * результатов в данном статусе"; </li> <li> <b>arPERMISSION_DELETE</b>* - массив ID
	 * групп пользователей, имеющих <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/permissions.php#result">право</a> "Удаление
	 * результатов в данном статусе". </li> </ul> <br><font color="red">*</font> -
	 * обязательно к заполнению. <br>* - в данных массивах может быть
	 * элемент со значением "0", означающий создателя <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#result">результата</a>.
	 *
	 *
	 *
	 * @param mixed $status_id = false ID обновляемого <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#status">статуса</a>.<br>
	 * Параметр необязательный. По умолчанию - "false" (добавление нового <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#status">статуса</a>).
	 *
	 *
	 *
	 * @param string $check_rights = "Y" Флаг необходимости проверки прав текущего пользователя.
	 * Возможны следующие значения: <ul> <li> <b>Y</b> - права необходимо
	 * проверить; </li> <li> <b>N</b> - право не нужно проверять. </li> </ul> Для
	 * обновления статуса, либо создания нового статуса необходимо
	 * иметь право <b>[30] Полный доступ</b> на форму указанную в
	 * <i>fields</i>["FORM_ID"].<br><br>Параметр необязательный. По умолчанию - "Y"
	 * (права необходимо проверить).
	 *
	 *
	 *
	 * @return mixed 
	 *
	 *
	 * <h4>Example</h4> 
	 * <pre>
	 * &lt;?
	 * $FORM_ID = 4; // ID веб-формы
	 * 
	 * $arFields = array(
	 *     "FORM_ID"             =&gt; $FORM_ID,               // ID веб-формы
	 *     "C_SORT"              =&gt; 100,                    // порядок сортировки
	 *     "ACTIVE"              =&gt; "Y",                    // статус активен
	 *     "TITLE"               =&gt; "Опубликовано",         // заголовок статуса
	 *     "DESCRIPTION"         =&gt; "Окончательный статус", // описание статуса
	 *     "CSS"                 =&gt; "statusgreen",          // CSS класс
	 *     "HANDLER_OUT"         =&gt; "",                     // обработчик
	 *     "HANDLER_IN"          =&gt; "",                     // обработчик
	 *     "DEFAULT_VALUE"       =&gt; "N",                    // не по умолчанию
	 *     "arPERMISSION_VIEW"   =&gt; array(2),               // право просмотра для всех
	 *     "arPERMISSION_MOVE"   =&gt; array(),                // право перевода только админам
	 *     "arPERMISSION_EDIT"   =&gt; array(),                // право редактирование для админам
	 *     "arPERMISSION_DELETE" =&gt; array(),                // право удаления только админам
	 * );
	 * 
	 * $NEW_ID = <b>CFormStatus::Set</b>($arFields);
	 * if ($NEW_ID&gt;0) echo "Успешно добавлен ID=".$NEW_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/cformstatus/index.php">Поля CFormStatus</a>
	 * </li></ul><a name="examples"></a>
	 *
	 *
	 * @static
	 * @link http://dev.1c-bitrix.ru/api_help/form/classes/cformstatus/set.php
	 * @author Bitrix
	 */
	public static function Set($arFields, $STATUS_ID=false, $CHECK_RIGHTS="Y")
	{
		$err_mess = (CAllFormStatus::err_mess())."<br>Function: Set<br>Line: ";
		global $DB, $USER, $strError, $APPLICATION;
		$STATUS_ID = intval($STATUS_ID);
		if (CFormStatus::CheckFields($arFields, $STATUS_ID, $CHECK_RIGHTS))
		{
			$arFields_i = array();

			$arFields_i["TIMESTAMP_X"] = $DB->GetNowFunction();

			if (is_set($arFields, "C_SORT"))
				$arFields_i["C_SORT"] = "'".intval($arFields["C_SORT"])."'";

			if (is_set($arFields, "ACTIVE"))
				$arFields_i["ACTIVE"] = ($arFields["ACTIVE"]=="Y") ? "'Y'" : "'N'";

			if (is_set($arFields, "TITLE"))
				$arFields_i["TITLE"] = "'".$DB->ForSql($arFields["TITLE"],255)."'";

			if (is_set($arFields, "DESCRIPTION"))
				$arFields_i["DESCRIPTION"] = "'".$DB->ForSql($arFields["DESCRIPTION"],2000)."'";

			if (is_set($arFields, "CSS"))
				$arFields_i["CSS"] = "'".$DB->ForSql($arFields["CSS"],255)."'";

			if (is_set($arFields, "HANDLER_OUT"))
				$arFields_i["HANDLER_OUT"] = "'".$DB->ForSql($arFields["HANDLER_OUT"],255)."'";

			if (is_set($arFields, "HANDLER_IN"))
				$arFields_i["HANDLER_IN"] = "'".$DB->ForSql($arFields["HANDLER_IN"],255)."'";

			if (is_set($arFields, "MAIL_EVENT_TYPE"))
				$arFields_i["MAIL_EVENT_TYPE"] = "'".$DB->ForSql($arFields["MAIL_EVENT_TYPE"],255)."'";

			$DEFAULT_STATUS_ID = intval(CFormStatus::GetDefault($arFields["FORM_ID"]));
			if ($DEFAULT_STATUS_ID<=0 || $DEFAULT_STATUS_ID==$STATUS_ID)
			{
				if (is_set($arFields, "DEFAULT_VALUE"))
					$arFields_i["DEFAULT_VALUE"] = ($arFields["DEFAULT_VALUE"]=="Y") ? "'Y'" : "'N'";
			}

			//echo '<pre>'; print_r($arFields); echo '</pre>';
			//die();

			if ($STATUS_ID>0)
			{
				$DB->Update("b_form_status", $arFields_i, "WHERE ID='".$STATUS_ID."'", $err_mess.__LINE__);
			}
			else
			{
				$arFields_i["FORM_ID"] = "'".intval($arFields["FORM_ID"])."'";
				$STATUS_ID = $DB->Insert("b_form_status", $arFields_i, $err_mess.__LINE__);
			}

			$STATUS_ID = intval($STATUS_ID);

			if ($STATUS_ID>0)
			{
				// право на просмотр
				if (is_set($arFields, "arPERMISSION_VIEW"))
				{
					$DB->Query("DELETE FROM b_form_status_2_group WHERE STATUS_ID='".$STATUS_ID."' and PERMISSION='VIEW'", false, $err_mess.__LINE__);
					if (is_array($arFields["arPERMISSION_VIEW"]))
					{
						reset($arFields["arPERMISSION_VIEW"]);
						foreach($arFields["arPERMISSION_VIEW"] as $gid)
						{
							$arFields_i = array(
								"STATUS_ID"		=> "'".intval($STATUS_ID)."'",
								"GROUP_ID"		=> "'".intval($gid)."'",
								"PERMISSION"	=> "'VIEW'"
							);
							$DB->Insert("b_form_status_2_group",$arFields_i, $err_mess.__LINE__);
						}
					}
				}

				// право на перевод
				if (is_set($arFields, "arPERMISSION_MOVE"))
				{
					$DB->Query("DELETE FROM b_form_status_2_group WHERE STATUS_ID='".$STATUS_ID."' and PERMISSION='MOVE'", false, $err_mess.__LINE__);
					if (is_array($arFields["arPERMISSION_MOVE"]))
					{
						reset($arFields["arPERMISSION_MOVE"]);
						foreach($arFields["arPERMISSION_MOVE"] as $gid)
						{
							$arFields_i = array(
								"STATUS_ID"		=> "'".intval($STATUS_ID)."'",
								"GROUP_ID"		=> "'".intval($gid)."'",
								"PERMISSION"	=> "'MOVE'"
							);
							$DB->Insert("b_form_status_2_group",$arFields_i, $err_mess.__LINE__);
						}
					}
				}

				// право на редактирование
				if (is_set($arFields, "arPERMISSION_EDIT"))
				{
					$DB->Query("DELETE FROM b_form_status_2_group WHERE STATUS_ID='".$STATUS_ID."' and PERMISSION='EDIT'", false, $err_mess.__LINE__);
					if (is_array($arFields["arPERMISSION_EDIT"]))
					{
						reset($arFields["arPERMISSION_EDIT"]);
						foreach($arFields["arPERMISSION_EDIT"] as $gid)
						{
							$arFields_i = array(
								"STATUS_ID"		=> "'".intval($STATUS_ID)."'",
								"GROUP_ID"		=> "'".intval($gid)."'",
								"PERMISSION"	=> "'EDIT'"
							);
							$DB->Insert("b_form_status_2_group",$arFields_i, $err_mess.__LINE__);
						}
					}
				}

				// право на удаление
				if (is_set($arFields, "arPERMISSION_DELETE"))
				{
					$DB->Query("DELETE FROM b_form_status_2_group WHERE STATUS_ID='".$STATUS_ID."' and PERMISSION='DELETE'", false, $err_mess.__LINE__);
					if (is_array($arFields["arPERMISSION_DELETE"]))
					{
						reset($arFields["arPERMISSION_DELETE"]);
						foreach($arFields["arPERMISSION_DELETE"] as $gid)
						{
							$arFields_i = array(
								"STATUS_ID"		=> "'".intval($STATUS_ID)."'",
								"GROUP_ID"		=> "'".intval($gid)."'",
								"PERMISSION"	=> "'DELETE'"
							);
							$DB->Insert("b_form_status_2_group",$arFields_i, $err_mess.__LINE__);
						}
					}
				}

				if (is_set($arFields, "arMAIL_TEMPLATE"))
				{
					$DB->Query("DELETE FROM b_form_status_2_mail_template WHERE STATUS_ID='".$STATUS_ID."'", false, $err_mess.__LINE__);
					if (is_array($arFields["arMAIL_TEMPLATE"]))
					{
						reset($arFields["arMAIL_TEMPLATE"]);
						foreach($arFields["arMAIL_TEMPLATE"] as $mid)
						{
							$strSql = "
								INSERT INTO b_form_status_2_mail_template (STATUS_ID, MAIL_TEMPLATE_ID) VALUES (
									'".$STATUS_ID."',
									'".intval($mid)."'
								)
								";
							$DB->Query($strSql, false, $err_mess.__LINE__);
						}
					}
				}
			}
			return $STATUS_ID;
		}
		return false;
	}
Exemplo n.º 3
0
	/**
	 * <p>Создает новый <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#result">результат</a> веб-формы. В случае успеха - возвращает ID нового <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#result">результата</a>, в противном случае - "false".</p> <p><b>Примечание: </b>в случае неактивных вопросов данные из формы в них не сохраняются и сообщения об ошибках не выводятся.</p>
	 *
	 *
	 *
	 *
	 * @param int $form_id  ID веб-формы.
	 *
	 *
	 *
	 * @param array $values = false Массив со значениями <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#answer">ответов</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">Имена HTML полей веб-форм</a>".
	 * <h5>Пример:</h5> <pre> 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 ) </pre> Параметр необязательный. По умолчанию - "false" (будет
	 * взят стандартный массив $_REQUEST).
	 *
	 *
	 *
	 * @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>
	 * необходимо иметь право <b>[10] Заполнение веб-формы</b> на веб-форму
	 * <i>form_id</i>.<br><br>Параметр необязательный. По умолчанию - "Y" (права
	 * необходимо проверить).
	 *
	 *
	 *
	 * @param int $user_id = false ID пользователя, который будет записан как создатель данного <a
	 * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#result">результата</a>.<br><br> Параметр
	 * необязательный. По умолчанию - "false" (будет взят ID текущего
	 * пользователя).
	 *
	 *
	 *
	 * @return mixed 
	 *
	 *
	 * <h4>Example</h4> 
	 * <pre>
	 * &lt;?
	 * // ID веб-формы
	 * $FORM_ID = 4;
	 * 
	 * // массив описывающий загруженную на сервер фотографию
	 * $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          // "Фотография"
	 * )
	 * 
	 * // создадим новый результат
	 * if ($RESULT_ID = <b>CFormResult::Add</b>($FORM_ID, $arValues))
	 * {
	 *     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/update.php">CFormResult::Update</a> </li>
	 * <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> </ul><a name="examples"></a>
	 *
	 *
	 * @static
	 * @link http://dev.1c-bitrix.ru/api_help/form/classes/cformresult/add.php
	 * @author Bitrix
	 */
	public static function Add($WEB_FORM_ID, $arrVALUES=false, $CHECK_RIGHTS="Y", $USER_ID=false)
	{
		$err_mess = (CAllFormResult::err_mess())."<br>Function: Add<br>Line: ";
		global $DB, $USER, $_REQUEST, $HTTP_POST_VARS, $HTTP_GET_VARS, $HTTP_POST_FILES, $strError, $APPLICATION;
		if ($arrVALUES===false) $arrVALUES = $_REQUEST;

		if ($CHECK_RIGHTS != "N") $CHECK_RIGHTS = "Y";

		$WEB_FORM_ID = intval($WEB_FORM_ID);

		if ($WEB_FORM_ID>0)
		{
			$WEB_FORM_ID = intval($WEB_FORM_ID);

			// get form data
			$arForm = array();
			$arQuestions = array();
			$arAnswers = array();
			$arDropDown = array();
			$arMultiSelect = array();

			$WEB_FORM_ID = CForm::GetDataByID($WEB_FORM_ID, $arForm, $arQuestions, $arAnswers, $arDropDown, $arMultiSelect);

			// if new form id is correct
			if ($WEB_FORM_ID>0)
			{
				// check result rights
				$F_RIGHT = CForm::GetPermission($WEB_FORM_ID);

				if (intval($F_RIGHT)>=10 || $CHECK_RIGHTS=="N")
				{
					if (intval($USER_ID)<=0)
					{
						$USER_AUTH = "N";
						$USER_ID = intval($_SESSION["SESS_LAST_USER_ID"]);
						if (intval($USER->GetID())>0)
						{
							$USER_AUTH = "Y";
							$USER_ID = intval($USER->GetID());
						}
					}
					else $USER_AUTH = "Y";

					// check result status
					$fname = "status_".$arForm["SID"];
					$STATUS_ID = (intval($arrVALUES[$fname])<=0) ? CFormStatus::GetDefault($WEB_FORM_ID) : intval($arrVALUES[$fname]);

					if ($STATUS_ID <= 0)
					{
						$strError .= GetMessage("FORM_STATUS_NOT_DEFINED")."<br>";
					}
					else
					{
						// status found
						if ($CHECK_RIGHTS != "N")
						{
							$arPerm = CFormStatus::GetPermissions($STATUS_ID);
						}

						if ($CHECK_RIGHTS == "N" || in_array("MOVE", $arPerm)) // has rights to a new status
						{
							// check restrictions

							if ($arForm["USE_RESTRICTIONS"] == "Y" && intval($USER_ID) > 0)
							{
								$arFilter = array("USER_ID" => $USER_ID);
								if (strlen($arForm["RESTRICT_STATUS"]) > 0)
								{
									$arStatus = explode(",", $arForm["RESTRICT_STATUS"]);
									$arFilter = array_merge($arFilter, array("STATUS_ID" => implode(" | ", $arStatus)));
								}

								if (intval($arForm["RESTRICT_USER"]) > 0)
								{
									$rsFormResult = CFormResult::GetList($WEB_FORM_ID, $by="s_timestamp", $order="desc", $arFilter, $is_filtered, "N", intval($arForm["RESTRICT_USER"]));
									$num = 0;
									while ($row = $rsFormResult->Fetch())
									{
										if (++$num >= $arForm["RESTRICT_USER"])
										{
											$strError .= GetMessage("FORM_RESTRICT_USER_ERROR")."<br />";
											break;
										}
									}
								}

								if (strlen($strError) <= 0 && intval($arForm["RESTRICT_TIME"]) > 0)
								{
									$DC2 = time();
									$DC1 = $DC2 - intval($arForm["RESTRICT_TIME"]);
									$arFilter = array_merge($arFilter, array(
										"TIME_CREATE_1" => ConvertTimeStamp($DC1, "FULL"),
										"TIME_CREATE_2" => ConvertTimeStamp($DC2, "FULL"),
									));

									CTimeZone::Disable();
									$rsFormResult = CFormResult::GetList($WEB_FORM_ID, $by="s_timestamp", $order="desc", $arFilter, $is_filtered, "N", 1);
									CTimeZone::Enable();

									if ($rsFormResult->Fetch())
									{
										$strError .= GetMessage("FORM_RESTRICT_TIME_ERROR")."<br>";
									}
								}
							}

							if (strlen($strError) <= 0)
							{
								// save result
								$arFields = array(
									"TIMESTAMP_X"		=> $DB->GetNowFunction(),
									"DATE_CREATE"		=> $DB->GetNowFunction(),
									"STATUS_ID"			=> $STATUS_ID,
									"FORM_ID"			=> $WEB_FORM_ID,
									"USER_ID"			=> intval($USER_ID),
									"USER_AUTH"			=> "'".$USER_AUTH."'",
									"STAT_GUEST_ID"		=> intval($_SESSION["SESS_GUEST_ID"]),
									"STAT_SESSION_ID"	=> intval($_SESSION["SESS_SESSION_ID"]),
									"SENT_TO_CRM"		=> "'N'", // result can be sent only after adding
									);

								$dbEvents = GetModuleEvents('form', 'onBeforeResultAdd');
								while ($arEvent = $dbEvents->Fetch())
								{
									ExecuteModuleEventEx($arEvent, array($WEB_FORM_ID, &$arFields, &$arrVALUES));

									if ($ex = $APPLICATION->GetException())
										$strError .= $ex->GetString().'<br />';
								}

								if (strlen($strError) <= 0)
									$RESULT_ID = $DB->Insert("b_form_result", $arFields, $err_mess.__LINE__);
							}
						}
						else
							$strError .= GetMessage("FORM_ERROR_ACCESS_DENIED");
					}

					$RESULT_ID = intval($RESULT_ID);
					// save successful
					if ($RESULT_ID>0)
					{
						$arrANSWER_TEXT = array();
						$arrANSWER_VALUE = array();
						$arrUSER_TEXT = array();

						// process questions
						foreach ($arQuestions as $arQuestion)
						{
							$FIELD_ID = $arQuestion["ID"];
							$FIELD_SID = $arQuestion["SID"];
							$radio = "N";
							$checkbox = "N";
							$multiselect = "N";
							$dropdown = "N";
							if (is_array($arAnswers[$FIELD_SID]))
							{
								// process answers
								foreach ($arAnswers[$FIELD_SID] as $key => $arAnswer)
								{
									$ANSWER_ID = 0;
									$FIELD_TYPE = $arAnswer["FIELD_TYPE"];
									$FIELD_PARAM = $arAnswer["FIELD_PARAM"];
									switch ($FIELD_TYPE) :

										case "radio":
										case "dropdown":

											if (($radio=="N" && $FIELD_TYPE=="radio") ||
												($dropdown=="N" && $FIELD_TYPE=="dropdown"))
											{
												$fname = "form_".$FIELD_TYPE."_".$FIELD_SID;
												$ANSWER_ID = intval($arrVALUES[$fname]);
												if ($ANSWER_ID>0)
												{
													$z = CFormAnswer::GetByID($ANSWER_ID);
													if ($zr = $z->Fetch())
													{
														$arFields = array(
															"RESULT_ID"			=> $RESULT_ID,
															"FORM_ID"			=> $WEB_FORM_ID,
															"FIELD_ID"			=> $FIELD_ID,
															"ANSWER_ID"			=> $ANSWER_ID,
															"ANSWER_TEXT"		=> trim($zr["MESSAGE"]),
															"ANSWER_VALUE"		=> $zr["VALUE"]
															);
														$arrANSWER_TEXT[$FIELD_ID][] = ToUpper($arFields["ANSWER_TEXT"]);
														$arrANSWER_VALUE[$FIELD_ID][] = ToUpper($arFields["ANSWER_VALUE"]);
														CFormResult::AddAnswer($arFields);
													}
													if ($FIELD_TYPE=="radio") $radio = "Y";
													if ($FIELD_TYPE=="dropdown") $dropdown = "Y";
												}
											}

										break;

										case "checkbox":
										case "multiselect":

											if (($checkbox=="N" && $FIELD_TYPE=="checkbox") ||
												($multiselect=="N" && $FIELD_TYPE=="multiselect"))
											{
												$fname = "form_".$FIELD_TYPE."_".$FIELD_SID;
												if (is_array($arrVALUES[$fname]) && count($arrVALUES[$fname])>0)
												{
													foreach($arrVALUES[$fname] as $ANSWER_ID)
													{
														$ANSWER_ID = intval($ANSWER_ID);
														if ($ANSWER_ID>0)
														{
															$z = CFormAnswer::GetByID($ANSWER_ID);
															if ($zr = $z->Fetch())
															{
																$arFields = array(
																	"RESULT_ID"			=> $RESULT_ID,
																	"FORM_ID"			=> $WEB_FORM_ID,
																	"FIELD_ID"			=> $FIELD_ID,
																	"ANSWER_ID"			=> $ANSWER_ID,
																	"ANSWER_TEXT"		=> trim($zr["MESSAGE"]),
																	"ANSWER_VALUE"		=> $zr["VALUE"]
																	);
																$arrANSWER_TEXT[$FIELD_ID][] = ToUpper($arFields["ANSWER_TEXT"]);
																$arrANSWER_VALUE[$FIELD_ID][] = ToUpper($arFields["ANSWER_VALUE"]);
																CFormResult::AddAnswer($arFields);
															}
														}
													}
													if ($FIELD_TYPE=="checkbox") $checkbox = "Y";
													if ($FIELD_TYPE=="multiselect") $multiselect = "Y";
												}
											}

										break;

										case "text":
										case "hidden":
										case "textarea":
										case "password":
										case "email":
										case "url":

											$fname = "form_".$FIELD_TYPE."_".$arAnswer["ID"];
											$ANSWER_ID = intval($arAnswer["ID"]);
											$z = CFormAnswer::GetByID($ANSWER_ID);
											if ($zr = $z->Fetch())
											{
												$arFields = array(
													"RESULT_ID"			=> $RESULT_ID,
													"FORM_ID"			=> $WEB_FORM_ID,
													"FIELD_ID"			=> $FIELD_ID,
													"ANSWER_ID"			=> $ANSWER_ID,
													"ANSWER_TEXT"		=> trim($zr["MESSAGE"]),
													"ANSWER_VALUE"		=> $zr["VALUE"],
													"USER_TEXT"			=> $arrVALUES[$fname]
												);

												$arrANSWER_TEXT[$FIELD_ID][] = ToUpper($arFields["ANSWER_TEXT"]);
												$arrANSWER_VALUE[$FIELD_ID][] = ToUpper($arFields["ANSWER_VALUE"]);
												$arrUSER_TEXT[$FIELD_ID][] = ToUpper($arFields["USER_TEXT"]);
												CFormResult::AddAnswer($arFields);
											}

										break;

										case "date":

											$fname = "form_".$FIELD_TYPE."_".$arAnswer["ID"];
											$ANSWER_ID = intval($arAnswer["ID"]);
											$USER_DATE = $arrVALUES[$fname];
											if (CheckDateTime($USER_DATE))
											{
												$z = CFormAnswer::GetByID($ANSWER_ID);
												if ($zr = $z->Fetch())
												{
													$arFields = array(
														"RESULT_ID"			=> $RESULT_ID,
														"FORM_ID"			=> $WEB_FORM_ID,
														"FIELD_ID"			=> $FIELD_ID,
														"ANSWER_ID"			=> $ANSWER_ID,
														"ANSWER_TEXT"		=> trim($zr["MESSAGE"]),
														"ANSWER_VALUE"		=> $zr["VALUE"],
														"USER_DATE"			=> $USER_DATE,
														"USER_TEXT"			=> $USER_DATE
													);
													$arrANSWER_TEXT[$FIELD_ID][] = ToUpper($arFields["ANSWER_TEXT"]);
													$arrANSWER_VALUE[$FIELD_ID][] = ToUpper($arFields["ANSWER_VALUE"]);
													$arrUSER_TEXT[$FIELD_ID][] = ToUpper($arFields["USER_TEXT"]);
													CFormResult::AddAnswer($arFields);
												}
											}
											break;

										case "image":

											$fname = "form_".$FIELD_TYPE."_".$arAnswer["ID"];
											$ANSWER_ID = intval($arAnswer["ID"]);
											$arIMAGE = isset($arrVALUES[$fname]) ? $arrVALUES[$fname] : $HTTP_POST_FILES[$fname];
											$arIMAGE["MODULE_ID"] = "form";
											$fid = 0;
											if (strlen(CFile::CheckImageFile($arIMAGE))<=0)
											{
												if (strlen($arIMAGE["name"])>0)
												{
													$fid = CFile::SaveFile($arIMAGE, "form");
													$fid = intval($fid);
													if ($fid>0)
													{
														$md5 = md5(uniqid(mt_rand(), true).time());
														$z = CFormAnswer::GetByID($ANSWER_ID);
														if ($zr = $z->Fetch())
														{
															$arFields = array(
																"RESULT_ID"				=> $RESULT_ID,
																"FORM_ID"				=> $WEB_FORM_ID,
																"FIELD_ID"				=> $FIELD_ID,
																"ANSWER_ID"				=> $ANSWER_ID,
																"ANSWER_TEXT"			=> trim($zr["MESSAGE"]),
																"ANSWER_VALUE"			=> $zr["VALUE"],
																"USER_TEXT"				=> $arIMAGE["name"],
																"USER_FILE_ID"			=> $fid,
																"USER_FILE_IS_IMAGE"	=> "Y",
																"USER_FILE_HASH"		=> $md5,
																"USER_FILE_NAME"		=> $arIMAGE["name"],
																"USER_FILE_SIZE"		=> $arIMAGE["size"],
															);
															$arrANSWER_TEXT[$FIELD_ID][] = ToUpper($arFields["ANSWER_TEXT"]);
															$arrANSWER_VALUE[$FIELD_ID][] = ToUpper($arFields["ANSWER_VALUE"]);
															$arrUSER_TEXT[$FIELD_ID][] = ToUpper($arFields["USER_TEXT"]);
															CFormResult::AddAnswer($arFields);
														}
													}
												}
											}

										break;

										case "file":

											$fname = "form_".$FIELD_TYPE."_".$arAnswer["ID"];
											$ANSWER_ID = intval($arAnswer["ID"]);
											$arFILE = isset($arrVALUES[$fname]) ? $arrVALUES[$fname] : $HTTP_POST_FILES[$fname];
											$arFILE["MODULE_ID"] = "form";

											if (strlen($arFILE["name"])>0)
											{
												$original_name = $arFILE["name"];
												$fid = 0;
												$max_size = COption::GetOptionString("form", "MAX_FILESIZE");
												$upload_dir = COption::GetOptionString("form", "NOT_IMAGE_UPLOAD_DIR");

												$fid = CFile::SaveFile($arFILE, $upload_dir);
												$fid = intval($fid);
												if ($fid>0)
												{
													$md5 = md5(uniqid(mt_rand(), true).time());
													$z = CFormAnswer::GetByID($ANSWER_ID);
													if ($zr = $z->Fetch())
													{
														$arFields = array(
															"RESULT_ID"				=> $RESULT_ID,
															"FORM_ID"				=> $WEB_FORM_ID,
															"FIELD_ID"				=> $FIELD_ID,
															"ANSWER_ID"				=> $ANSWER_ID,
															"ANSWER_TEXT"			=> trim($zr["MESSAGE"]),
															"ANSWER_VALUE"			=> $zr["VALUE"],
															"USER_TEXT"				=> $original_name,
															"USER_FILE_ID"			=> $fid,
															"USER_FILE_NAME"		=> $original_name,
															"USER_FILE_IS_IMAGE"	=> "N",
															"USER_FILE_HASH"		=> $md5,
															"USER_FILE_SUFFIX"		=> $fes,
															"USER_FILE_SIZE"		=> $arFILE["size"],
														);
														$arrANSWER_TEXT[$FIELD_ID][] = ToUpper($arFields["ANSWER_TEXT"]);
														$arrANSWER_VALUE[$FIELD_ID][] = ToUpper($arFields["ANSWER_VALUE"]);
														$arrUSER_TEXT[$FIELD_ID][] = ToUpper($arFields["USER_TEXT"]);
														CFormResult::AddAnswer($arFields);
													}
												}
											}

										break;

									endswitch;
								}
								// update search fields
								$arrANSWER_TEXT_upd = $arrANSWER_TEXT[$FIELD_ID];
								$arrANSWER_VALUE_upd = $arrANSWER_VALUE[$FIELD_ID];
								$arrUSER_TEXT_upd = $arrUSER_TEXT[$FIELD_ID];
								TrimArr($arrANSWER_TEXT_upd);
								TrimArr($arrANSWER_VALUE_upd);
								TrimArr($arrUSER_TEXT_upd);
								if (is_array($arrANSWER_TEXT_upd)) $vl_ANSWER_TEXT = trim(implode(" ",$arrANSWER_TEXT_upd));
								if (is_array($arrANSWER_VALUE_upd)) $vl_ANSWER_VALUE = trim(implode(" ",$arrANSWER_VALUE_upd));
								if (is_array($arrUSER_TEXT_upd)) $vl_USER_TEXT = trim(implode(" ",$arrUSER_TEXT_upd));
								if (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);
							}
						}

						$dbEvents = GetModuleEvents('form', 'onAfterResultAdd');
						while ($arEvent = $dbEvents->Fetch())
						{
							ExecuteModuleEventEx($arEvent, array($WEB_FORM_ID, $RESULT_ID));
						}

						// call change status handler
						CForm::ExecHandlerAfterChangeStatus($RESULT_ID, "ADD");
					}
				}
			}
		}
		return intval($RESULT_ID)>0 ? intval($RESULT_ID) : false;
	}
Exemplo n.º 4
0
        } else {
            $arrVALUES = CFormResult::GetDataByIDForHTML($RESULT_ID, $EDIT_ADDITIONAL);
        }
    }
}
// ============================ oldies finish ========================
$WEB_FORM_ID = intval($WEB_FORM_ID);
$arForm = CForm::GetByID_admin($WEB_FORM_ID);
// result changes saving
if ($old_module_version != 'Y' && $_SERVER['REQUEST_METHOD'] == "POST" && intval($WEB_FORM_ID) > 0 && (strlen($save) > 0 || strlen($apply) > 0) && check_bitrix_sessid()) {
    $arrVALUES = $_REQUEST;
    $error = CForm::Check($WEB_FORM_ID, $arrVALUES, $RESULT_ID);
    if (strlen($error) <= 0) {
        $bUpdate = true;
        if (!$RESULT_ID) {
            $default_status = CFormStatus::GetDefault($WEB_FORM_ID);
            $status_tmp = $arrVALUES['status_' . $arForm['SID']];
            $arrVALUES['status_' . $arForm['SID']] = $default_status;
            $RESULT_ID = CFormResult::Add($WEB_FORM_ID, $arrVALUES, 'Y', intval($arrVALUES['USER_ID']) > 0 ? intval($arrVALUES['USER_ID']) : false);
            $arrVALUES['status_' . $arForm['SID']] = $status_tmp == $default_status ? 'NOT_REF' : $status_tmp;
            $bUpdate = $RESULT_ID > 0 && $EDIT_ADDITIONAL == 'Y';
            // little hack to prevent doubling of status notification message
        }
        // second update needed to set additional fields
        if ($bUpdate && strlen($strError) <= 0) {
            CFormResult::Update($RESULT_ID, $arrVALUES, $EDIT_ADDITIONAL);
        }
        if (strlen($strError) <= 0) {
            if (strlen($apply) > 0) {
                LocalRedirect("/bitrix/admin/form_result_edit.php?lang=" . LANGUAGE_ID . "&WEB_FORM_ID=" . $WEB_FORM_ID . "&RESULT_ID=" . $RESULT_ID);
            } else {
Exemplo n.º 5
0
}
$txt = "(" . htmlspecialcharsbx($arForm['SID']) . ")&nbsp;" . htmlspecialcharsbx($arForm['NAME']);
$link = "form_edit.php?lang=" . LANGUAGE_ID . "&ID=" . $WEB_FORM_ID;
$adminChain->AddItem(array("TEXT" => $txt, "LINK" => $link));
$F_RIGHT = CForm::GetPermission($WEB_FORM_ID);
if ($F_RIGHT < 25) {
    $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
}
// copying
if (intval($copy_id) > 0 && check_bitrix_sessid() && $F_RIGHT >= 30) {
    $new_id = CFormStatus::Copy($copy_id);
    if (strlen($strError) <= 0 && intval($new_id) > 0) {
        LocalRedirect("form_status_edit.php?ID=" . $new_id . "&WEB_FORM_ID=" . $WEB_FORM_ID . "&lang=" . LANGUAGE_ID . "&strError=" . urlencode($strError));
    }
}
$DEFAULT_STATUS_ID = intval(CFormStatus::GetDefault($WEB_FORM_ID));
if ((strlen($save) > 0 || strlen($apply) > 0) && $REQUEST_METHOD == "POST" && $F_RIGHT >= 30 && check_bitrix_sessid()) {
    $arFields = array("FORM_ID" => $WEB_FORM_ID, "C_SORT" => $C_SORT, "ACTIVE" => $ACTIVE, "TITLE" => $TITLE, "DESCRIPTION" => $DESCRIPTION, "CSS" => $CSS, "HANDLER_OUT" => $HANDLER_OUT, "HANDLER_IN" => $HANDLER_IN, "DEFAULT_VALUE" => $DEFAULT_VALUE, "arPERMISSION_VIEW" => $arPERMISSION_VIEW, "arPERMISSION_MOVE" => $arPERMISSION_MOVE, "arPERMISSION_EDIT" => $arPERMISSION_EDIT, "arPERMISSION_DELETE" => $arPERMISSION_DELETE, "arMAIL_TEMPLATE" => $arMAIL_TEMPLATE);
    //echo "<pre>"; print_r($arFields); echo "</pre>"; die();
    $res = intval(CFormStatus::Set($arFields, $ID));
    if ($res > 0) {
        $ID = $res;
        if (strlen($strError) <= 0) {
            if (strlen($save) > 0) {
                LocalRedirect("form_status_list.php?WEB_FORM_ID=" . $WEB_FORM_ID . "&lang=" . LANGUAGE_ID);
            } else {
                LocalRedirect("form_status_edit.php?ID=" . $ID . "&WEB_FORM_ID=" . $WEB_FORM_ID . "&lang=" . LANGUAGE_ID . "&" . $tabControl->ActiveTabParam());
            }
        }
    }
    $DB->PrepareFields("b_form_status");
Exemplo n.º 6
0
 function GetDefaultStatus($WEB_FORM_ID)
 {
     return CFormStatus::GetDefault($WEB_FORM_ID);
 }