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"]); } }
/** * <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> * <? * $FORM_ID = 4; // ID веб-формы * * $arFields = array( * "FORM_ID" => $FORM_ID, // ID веб-формы * "C_SORT" => 100, // порядок сортировки * "ACTIVE" => "Y", // статус активен * "TITLE" => "Опубликовано", // заголовок статуса * "DESCRIPTION" => "Окончательный статус", // описание статуса * "CSS" => "statusgreen", // CSS класс * "HANDLER_OUT" => "", // обработчик * "HANDLER_IN" => "", // обработчик * "DEFAULT_VALUE" => "N", // не по умолчанию * "arPERMISSION_VIEW" => array(2), // право просмотра для всех * "arPERMISSION_MOVE" => array(), // право перевода только админам * "arPERMISSION_EDIT" => array(), // право редактирование для админам * "arPERMISSION_DELETE" => array(), // право удаления только админам * ); * * $NEW_ID = <b>CFormStatus::Set</b>($arFields); * if ($NEW_ID>0) echo "Успешно добавлен ID=".$NEW_ID; * else // ошибка * { * // выводим текст ошибки * global $strError; * echo $strError; * } * ?> * </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; }
/** * <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>" => * "<i>значение ответа 1</i>", "<i>имя HTML поля ответа 2</i>" => "<i>значение * ответа 2</i>", ... "<i>имя HTML поля ответа N</i>" => "<i>значение ответа N</i>" ) * </pre> Правила формирования "<i>имен HTML полей ответов</i>" и "<i>значений * ответов</i>" описаны в разделе "<a * href="http://dev.1c-bitrix.ru/api_help/form/htmlnames.php">Имена HTML полей веб-форм</a>". * <h5>Пример:</h5> <pre> Array ( [form_text_586] => Иванов Иван Иванович [form_date_587] => * 10.03.1992 [form_textarea_588] => г. Мурманск [form_radio_VS_MARRIED] => 589 [form_checkbox_VS_INTEREST] * => Array ( [0] => 592 [1] => 593 [2] => 594 ) [form_dropdown_VS_AGE] => 597 * [form_multiselect_VS_EDUCATION] => Array ( [0] => 603 [1] => 604 ) [form_text_606] => 2345 [form_image_607] * => 1045 ) </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> * <? * // ID веб-формы * $FORM_ID = 4; * * // массив описывающий загруженную на сервер фотографию * $arImage = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/images/photo.gif"); * * // массив значений ответов * $arValues = array ( * "form_text_586" => "Иванов Иван", // "Фамилия, имя, отчество" * "form_date_587" => "01.06.1904", // "Дата рождения" * "form_textarea_588" => "г. Москва", // "Адрес" * "form_radio_VS_MARRIED" => 590, // "Женаты/замужем?" * "form_checkbox_VS_INTEREST" => array(612, 613), // "Увлечения" * "form_dropdown_VS_AGE" => 601, // "Возраст" * "form_multiselect_VS_EDUCATION" => array(602, 603), // "Образование" * "form_text_606" => 300, // "Доход" * "form_image_607" => $arImage // "Фотография" * ) * * // создадим новый результат * if ($RESULT_ID = <b>CFormResult::Add</b>($FORM_ID, $arValues)) * { * echo "Результат #".$RESULT_ID." успешно создан"; * } * else * { * global $strError; * echo $strError; * } * ?> * </pre> * * * * <h4>See Also</h4> * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/form/classes/cformresult/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; }
} 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 {
} $txt = "(" . htmlspecialcharsbx($arForm['SID']) . ") " . 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");
function GetDefaultStatus($WEB_FORM_ID) { return CFormStatus::GetDefault($WEB_FORM_ID); }