コード例 #1
0
 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 />" : "") . "&nbsp;&nbsp;&raquo;&nbsp;\"" . $name . "\"";
                         }
                         CForm::__check_PushError($errors, $errMsg);
                     }
                 }
             }
         } else {
             CForm::__check_PushError($errors, GetMessage("FORM_INCORRECT_FORM_ID"));
         }
     }
     return $errors;
 }
コード例 #2
0
    }
}
$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");
コード例 #3
0
 /**
  * <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>
  * &lt;?
  * $FIELD_ID = 140; // ID вопроса
  * // скопируем вопрос
  * if ($NEW_FIELD_ID=<b>CFormField::Copy</b>($FIELD_ID))
  * {
  *     echo "Вопрос #140 успешно скопирован в новый вопрос #".$NEW_FIELD_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/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;
 }