function Check($WEB_FORM_ID, $arrVALUES = false, $RESULT_ID = false, $CHECK_RIGHTS = "Y", $RETURN_ARRAY = "N") { $err_mess = CAllForm::err_mess() . "<br>Function: Check<br>Line: "; global $DB, $APPLICATION, $USER, $_REQUEST, $HTTP_POST_VARS, $HTTP_GET_VARS, $HTTP_POST_FILES; if ($arrVALUES === false) { $arrVALUES = $_REQUEST; } $RESULT_ID = intval($RESULT_ID); $errors = $RETURN_ARRAY == "Y" ? array() : ""; $WEB_FORM_ID = intval($WEB_FORM_ID); if ($WEB_FORM_ID > 0) { // получаем данные по форме $WEB_FORM_ID = CForm::GetDataByID($WEB_FORM_ID, $arForm, $arQuestions, $arAnswers, $arDropDown, $arMultiSelect, "ALL"); $WEB_FORM_ID = intval($WEB_FORM_ID); if ($WEB_FORM_ID > 0) { // провер¤ем права $F_RIGHT = $CHECK_RIGHTS == "Y" ? CForm::GetPermission($WEB_FORM_ID) : 30; if ($F_RIGHT < 10) { CForm::__check_PushError($errors, GetMessage("FORM_ACCESS_DENIED_FOR_FORM_WRITE")); } else { $NOT_ANSWER = "NOT_ANSWER"; // проходим по вопросам foreach ($arQuestions as $key => $arQuestion) { $arAnswerValues = array(); $FIELD_ID = $arQuestion["ID"]; if ($arQuestion["TITLE_TYPE"] == "html") { $FIELD_TITLE = strip_tags($arQuestion["TITLE"]); } else { $FIELD_TITLE = $arQuestion["TITLE"]; } if ($arQuestion["ADDITIONAL"] != "Y") { // провер¤ем вопросы формы $FIELD_SID = $arQuestion["SID"]; $FIELD_REQUIRED = $arQuestion["REQUIRED"]; // массив полей: N - поле не отвечено; Y - поле отвечено; if ($FIELD_REQUIRED == "Y") { $REQUIRED_FIELDS[$FIELD_SID] = "N"; } $startType = ""; $bCheckValidators = true; // проходим по ответам 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"]; if ($startType == "") { $startType = $FIELD_TYPE; } else { $bCheckValidators &= $startType == $FIELD_TYPE; } switch ($FIELD_TYPE) { case "radio": case "dropdown": $fname = "form_" . $FIELD_TYPE . "_" . $FIELD_SID; $arAnswerValues[] = $arrVALUES[$fname]; $ANSWER_ID = intval($arrVALUES[$fname]); if ($ANSWER_ID > 0 && $ANSWER_ID == $arAnswer["ID"]) { if ($FIELD_REQUIRED == "Y" && !preg_match("/" . $NOT_ANSWER . "/i", $FIELD_PARAM)) { $REQUIRED_FIELDS[$FIELD_SID] = "Y"; } } break; case "checkbox": case "multiselect": $fname = "form_" . $FIELD_TYPE . "_" . $FIELD_SID; if (is_array($arrVALUES[$fname]) && count($arrVALUES[$fname]) > 0) { $arAnswerValues = $arrVALUES[$fname]; reset($arrVALUES[$fname]); foreach ($arrVALUES[$fname] as $ANSWER_ID) { $ANSWER_ID = intval($ANSWER_ID); if ($ANSWER_ID > 0 && $ANSWER_ID == $arAnswer["ID"]) { if ($FIELD_REQUIRED == "Y" && !preg_match("/" . $NOT_ANSWER . "/i", $FIELD_PARAM)) { $REQUIRED_FIELDS[$FIELD_SID] = "Y"; break; } } } } break; case "text": case "textarea": case "password": case "hidden": $fname = "form_" . $FIELD_TYPE . "_" . $arAnswer["ID"]; $ANSWER_ID = intval($arAnswer["ID"]); $USER_TEXT = $arrVALUES[$fname]; $arAnswerValues[] = $arrVALUES[$fname]; if (strlen(trim($USER_TEXT)) > 0) { if ($FIELD_REQUIRED == "Y") { $REQUIRED_FIELDS[$FIELD_SID] = "Y"; break; } } break; case "url": $fname = "form_" . $FIELD_TYPE . "_" . $arAnswer["ID"]; $arAnswerValues[] = $arrVALUES[$fname]; $ANSWER_ID = intval($arAnswer["ID"]); $USER_TEXT = $arrVALUES[$fname]; if (strlen($USER_TEXT) > 0) { if (!preg_match("/^(http|https|ftp):\\/\\//i", $USER_TEXT)) { CForm::__check_PushError($errors, GetMessage('FORM_ERROR_BAD_URL'), $FIELD_SID); } if ($FIELD_REQUIRED == "Y") { $REQUIRED_FIELDS[$FIELD_SID] = "Y"; break; } } break; case "email": $fname = "form_" . $FIELD_TYPE . "_" . $arAnswer["ID"]; $arAnswerValues[] = $arrVALUES[$fname]; $ANSWER_ID = intval($arAnswer["ID"]); $USER_TEXT = $arrVALUES[$fname]; if (strlen($USER_TEXT) > 0) { if (!check_email($USER_TEXT)) { CForm::__check_PushError($errors, GetMessage('FORM_ERROR_BAD_EMAIL'), $FIELD_SID); } if ($FIELD_REQUIRED == "Y") { $REQUIRED_FIELDS[$FIELD_SID] = "Y"; break; } } break; case "date": $fname = "form_" . $FIELD_TYPE . "_" . $arAnswer["ID"]; $arAnswerValues[] = $arrVALUES[$fname]; $USER_DATE = $arrVALUES[$fname]; if (strlen($USER_DATE) > 0) { if (!CheckDateTime($USER_DATE)) { CForm::__check_PushError($errors, str_replace("#FIELD_NAME#", $FIELD_TITLE, GetMessage("FORM_INCORRECT_DATE_FORMAT")), $FIELD_SID); } if ($FIELD_REQUIRED == "Y") { $REQUIRED_FIELDS[$FIELD_SID] = "Y"; break; } } break; case "image": $fname = "form_" . $FIELD_TYPE . "_" . $arAnswer["ID"]; $fname_del = $arrVALUES["form_" . $FIELD_TYPE . "_" . $arAnswer["ID"] . "_del"]; $ANSWER_ID = intval($arAnswer["ID"]); $arIMAGE = isset($arrVALUES[$fname]) ? $arrVALUES[$fname] : $HTTP_POST_FILES[$fname]; if (is_array($arIMAGE) && strlen($arIMAGE["tmp_name"]) > 0) { $arIMAGE["MODULE_ID"] = "form"; if (strlen(CFile::CheckImageFile($arIMAGE)) > 0) { CForm::__check_PushError($errors, str_replace("#FIELD_NAME#", $FIELD_TITLE, GetMessage("FORM_INCORRECT_FILE_TYPE")), $FIELD_SID); } else { $arAnswerValues[] = $arIMAGE; } if ($FIELD_REQUIRED == "Y") { $REQUIRED_FIELDS[$FIELD_SID] = "Y"; break; } } elseif ($RESULT_ID > 0 && $fname_del != "Y") { $REQUIRED_FIELDS[$FIELD_SID] = "Y"; break; } break; case "file": $fname = "form_" . $FIELD_TYPE . "_" . $arAnswer["ID"]; $fname_del = $arrVALUES["form_" . $FIELD_TYPE . "_" . $arAnswer["ID"] . "_del"]; $arFILE = isset($arrVALUES[$fname]) ? $arrVALUES[$fname] : $HTTP_POST_FILES[$fname]; if (is_array($arFILE) && strlen($arFILE["tmp_name"]) > 0) { $arAnswerValues[] = $arFILE; if ($FIELD_REQUIRED == "Y") { $REQUIRED_FIELDS[$FIELD_SID] = "Y"; break; } } elseif ($RESULT_ID > 0 && $fname_del != "Y") { $REQUIRED_FIELDS[$FIELD_SID] = "Y"; break; } break; } } } } else { $FIELD_TYPE = $arQuestion["FIELD_TYPE"]; $fname = "form_date_ADDITIONAL_" . $arQuestion["ID"]; $arAnswerValues = array($arrVALUES[$fname]); $bCheckValidators = true; switch ($FIELD_TYPE) { case "date": $USER_DATE = $arrVALUES[$fname]; if (strlen($USER_DATE) > 0) { if (!CheckDateTime($USER_DATE)) { CForm::__check_PushError($errors, str_replace("#FIELD_NAME#", $FIELD_TITLE, GetMessage("FORM_INCORRECT_DATE_FORMAT")), $FIELD_SID); } } break; } } // check custom validators if ($bCheckValidators) { if ($arQuestion["ADDITIONAL"] == "Y" || is_array($arAnswers[$FIELD_SID])) { $rsValidatorList = CFormValidator::GetList($FIELD_ID, array("TYPE" => $FIELD_TYPE), $by = "C_SORT", $order = "ASC"); while ($arValidator = $rsValidatorList->Fetch()) { if (!CFormValidator::Execute($arValidator, $arQuestion, $arAnswers[$FIELD_SID], $arAnswerValues)) { if ($e = $APPLICATION->GetException()) { CForm::__check_PushError($errors, str_replace("#FIELD_NAME#", $FIELD_TITLE, $e->GetString()), $FIELD_SID); } } } } } } if ($arForm["USE_CAPTCHA"] == "Y" && !$RESULT_ID && !defined('ADMIN_SECTION')) { if (!$GLOBALS["APPLICATION"]->CaptchaCheckCode($arrVALUES["captcha_word"], $arrVALUES["captcha_sid"])) { CForm::__check_PushError($errors, GetMessage("FORM_WRONG_CAPTCHA")); } } //echo "<pre>"; print_r($REQUIRED_FIELDS); echo "</pre>"; if (is_array($REQUIRED_FIELDS) && count($REQUIRED_FIELDS) > 0) { foreach ($REQUIRED_FIELDS as $key => $value) { if ($value == "N") { if (strlen($arQuestions[$key]["RESULTS_TABLE_TITLE"]) > 0) { $title = $arQuestions[$key]["RESULTS_TABLE_TITLE"]; } else { $title = $arQuestions[$key]["TITLE_TYPE"] == "html" ? strip_tags($arQuestions[$key]["TITLE"]) : $arQuestions[$key]["TITLE"]; } if ($RETURN_ARRAY == 'N') { $EMPTY_REQUIRED_NAMES[] = $title; } else { CForm::__check_PushError($errors, GetMessage("FORM_EMPTY_REQUIRED_FIELDS") . ' ' . $title, $key); } } } } if ($RETURN_ARRAY == 'N') { if (is_array($EMPTY_REQUIRED_NAMES) && count($EMPTY_REQUIRED_NAMES) > 0) { $errMsg = ""; $errMsg .= GetMessage("FORM_EMPTY_REQUIRED_FIELDS") . "<br />"; foreach ($EMPTY_REQUIRED_NAMES as $key => $name) { $errMsg .= ($key != 0 ? "<br />" : "") . " » \"" . $name . "\""; } CForm::__check_PushError($errors, $errMsg); } } } } else { CForm::__check_PushError($errors, GetMessage("FORM_INCORRECT_FORM_ID")); } } return $errors; }
} } $rsField = CFormField::GetByID($ID); if (!$rsField || !$rsField->ExtractFields()) { $ID = 0; $str_ACTIVE = "Y"; $str_C_SORT = CFormField::GetNextSort($WEB_FORM_ID); $str_TITLE_TYPE = "text"; $str_IN_RESULTS_TABLE = "Y"; $str_IN_EXCEL_TABLE = "Y"; } else { ####### get validators list $arCurrentValidators = array(); if ($additional != "Y") { if ($ID > 0) { $rsCurrentValidators = CFormValidator::GetList($ID, array(), $by = "C_SORT", $order = "ASC"); while ($arValidator = $rsCurrentValidators->Fetch()) { $arCurrentValidators[] = $arValidator; } } } ############################# } if (strlen($strError) > 0) { $DB->InitTableVarsForEdit("b_form_field", "", "str_"); } if ($additional == "Y") { if ($ID > 0) { $sDocTitle = str_replace("#ID#", $ID, GetMessage("FORM_EDIT_ADDITIONAL_RECORD")); } else { $sDocTitle = GetMessage("FORM_NEW_ADDITIONAL_RECORD");
/** * <p>Копирует <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопрос</a> или <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поле</a> веб-формы. Возвращает ID нового <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопроса</a>/<a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поля</a> в случае положительного результата, в противном случае - "false".</p> * * * @param int $field_id ID <a href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопроса</a>/<a * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поля</a>, который необходимо * скопировать. * * @param string $check_rights = "Y" Флаг необходимости проверки <a * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#permissions">прав</a> текущего * пользователя. Возможны следующие значения: <ul> <li> <b>Y</b> - права * необходимо проверить; </li> <li> <b>N</b> - право не нужно проверять. </li> * </ul> Для копирования <a * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопроса</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#permissions#module">правами</a>: <ol> <li> <b>[25] * просмотр параметров веб-формы</b> на веб-форму, из которой идет * копирование; </li> <li> <b>[30] полный доступ</b> на веб-форму, в которую * копируется </li> </ol> Параметр необязательный. По умолчанию - "Y" * (права необходимо проверить). * * @param mixed $form_id = false ID веб-формы, в которую необходимо скопировать <a * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#question">вопрос</a>/<a * href="http://dev.1c-bitrix.ru/api_help/form/terms.php#field">поле</a>.<br><br> Необязательный * параметр. По умолчанию - "false" (текущая веб-форма). * * @return mixed * * <h4>Example</h4> * <pre> * <? * $FIELD_ID = 140; // ID вопроса * // скопируем вопрос * if ($NEW_FIELD_ID=<b>CFormField::Copy</b>($FIELD_ID)) * { * echo "Вопрос #140 успешно скопирован в новый вопрос #".$NEW_FIELD_ID; * } * else * { * // выведем текст ошибки * global $strError; * echo $strError; * } * ?> * </pre> * * * <h4>See Also</h4> * <ul> <li> <a href="http://dev.1c-bitrix.ru/api_help/form/classes/cform/copy.php">CForm::Copy</a> </li> <li> <a * href="http://dev.1c-bitrix.ru/api_help/form/classes/cformanswer/copy.php">CFormAnswer::Copy</a> </li> <li> <a * href="http://dev.1c-bitrix.ru/api_help/form/classes/cformstatus/copy.php">CFormStatus::Copy</a> </li> </ul><a * name="examples"></a> * * * @static * @link http://dev.1c-bitrix.ru/api_help/form/classes/cformfield/copy.php * @author Bitrix */ public static function Copy($ID, $CHECK_RIGHTS = "Y", $NEW_FORM_ID = false) { global $DB, $strError; $err_mess = CAllFormField::err_mess() . "<br>Function: Copy<br>Line: "; $ID = intval($ID); $NEW_FORM_ID = intval($NEW_FORM_ID); $rsField = CFormField::GetByID($ID); if ($arField = $rsField->Fetch()) { $RIGHT_OK = "N"; if ($CHECK_RIGHTS != "Y" || CForm::IsAdmin()) { $RIGHT_OK = "Y"; } else { $F_RIGHT = CForm::GetPermission($arField["FORM_ID"]); // если имеем право на просмотр параметров формы if ($F_RIGHT >= 25) { // если задана новая форма if ($NEW_FORM_ID > 0) { $NEW_F_RIGHT = CForm::GetPermission($NEW_FORM_ID); // если имеем полный доступ на новую форму if ($NEW_F_RIGHT >= 30) { $RIGHT_OK = "Y"; } } elseif ($F_RIGHT >= 30) { $RIGHT_OK = "Y"; } } } // если права проверили то if ($RIGHT_OK == "Y") { // символьный код поля if (!$NEW_FORM_ID) { while (true) { // change: SID изменяем только если для старой формы. Требование уникальности снято. $SID = $arField["SID"]; if (strlen($SID) > 44) { $SID = substr($SID, 0, 44); } $SID .= "_" . RandString(5); $strSql = "SELECT 'x' FROM b_form WHERE SID='" . $DB->ForSql($SID, 50) . "'"; $z = $DB->Query($strSql, false, $err_mess . __LINE__); if (!($zr = $z->Fetch())) { $strSql = "SELECT 'x' FROM b_form_field WHERE SID='" . $DB->ForSql($SID, 50) . "' AND FORM_ID='" . $arField["FORM_ID"] . "'"; $t = $DB->Query($strSql, false, $err_mess . __LINE__); if (!($tr = $t->Fetch())) { break; } } } } else { $SID = $arField["SID"]; } // копируем $arFields = array("FORM_ID" => $NEW_FORM_ID > 0 ? $NEW_FORM_ID : $arField["FORM_ID"], "ACTIVE" => $arField["ACTIVE"], "TITLE" => $arField["TITLE"], "TITLE_TYPE" => $arField["TITLE_TYPE"], "SID" => $SID, "C_SORT" => $arField["C_SORT"], "ADDITIONAL" => $arField["ADDITIONAL"], "REQUIRED" => $arField["REQUIRED"], "IN_FILTER" => $arField["IN_FILTER"], "IN_RESULTS_TABLE" => $arField["IN_RESULTS_TABLE"], "IN_EXCEL_TABLE" => $arField["IN_EXCEL_TABLE"], "FIELD_TYPE" => $arField["FIELD_TYPE"], "COMMENTS" => $arField["COMMENTS"], "FILTER_TITLE" => $arField["FILTER_TITLE"], "RESULTS_TABLE_TITLE" => $arField["RESULTS_TABLE_TITLE"]); // картинка if (intval($arField["IMAGE_ID"]) > 0) { $arIMAGE = CFile::MakeFileArray(CFile::CopyFile($arField["IMAGE_ID"])); $arIMAGE["MODULE_ID"] = "form"; $arFields["arIMAGE"] = $arIMAGE; } // фильтр $z = CFormField::GetFilterList($arField["FORM_ID"], array("FIELD_ID" => $ID, "FIELD_ID_EXACT_MATCH" => "Y")); while ($zr = $z->Fetch()) { if ($arField["ADDITIONAL"] != "Y") { $arFields["arFILTER_" . $zr["PARAMETER_NAME"]][] = $zr["FILTER_TYPE"]; } elseif ($zr["PARAMETER_NAME"] == "USER") { $arFields["arFILTER_FIELD"][] = $zr["FILTER_TYPE"]; } } //echo "<pre>"; print_r($arFields); echo "</pre>"; $NEW_ID = CFormField::Set($arFields); if (intval($NEW_ID) > 0) { if ($arField["ADDITIONAL"] != "Y") { // ответы $rsAnswer = CFormAnswer::GetList($ID, $by = 'ID', $order = 'ASC', array(), $is_filtered); while ($arAnswer = $rsAnswer->Fetch()) { CFormAnswer::Copy($arAnswer["ID"], $NEW_ID); } // валидаторы $dbValidators = CFormValidator::GetList($ID); while ($arVal = $dbValidators->Fetch()) { CFormValidator::Set($arField['FORM_ID'], $NEW_ID, $arVal['NAME'], $arVal['PARAMS'], $arVal['C_SORT']); } } } return $NEW_ID; } else { $strError .= GetMessage("FORM_ERROR_ACCESS_DENIED") . "<br>"; } } else { $strError .= GetMessage("FORM_ERROR_FIELD_NOT_FOUND") . "<br>"; } return false; }