private static function _addField($FORM_ID, $CRM_ID, $crm_field)
 {
     if (!self::$_ob) {
         self::$_ob = new CFormCrmSender($CRM_ID);
     }
     $arFields = self::$_ob->GetFields();
     foreach ($arFields as $arFld) {
         if ($arFld['ID'] == $crm_field) {
             $arAnswer = array();
             switch ($arFld['TYPE']) {
                 case 'enum':
                     if (is_array($arFld['VALUES'])) {
                         foreach ($arFld['VALUES'] as $arValue) {
                             $arAnswer[] = array('MESSAGE' => $arValue['NAME'], 'VALUE' => $arValue['ID'], 'FIELD_TYPE' => 'dropdown', 'ACTIVE' => 'Y');
                         }
                     }
                     break;
                 case 'boolean':
                     $arAnswer[] = array('MESSAGE' => ' ', 'FIELD_TYPE' => 'checkbox', 'ACTIVE' => 'Y');
                     break;
                 default:
                     $arAnswer[] = array('MESSAGE' => ' ', 'FIELD_TYPE' => 'text', 'ACTIVE' => 'Y');
             }
             return CFormField::Set(array('SID' => $crm_field, 'FORM_ID' => $FORM_ID, 'ACTIVE' => 'Y', 'TITLE' => $arFld['NAME'], 'REQUIRED' => $arFld['REQUIRED'] == 'true' ? 'Y' : 'N', 'arANSWER' => $arAnswer));
         }
     }
 }
Beispiel #2
0
function __form_CreateForm($SID, $__current_dir)
{
    // check collisions
    $dbTmpForm = CForm::GetBySID($SID);
    if ($arTmpForm = $dbTmpForm->Fetch()) {
        return false;
    }
    //$dirName = ToLower($SID);
    $formConfigFile = $__current_dir . '/form.php';
    $fieldsConfigFile = $__current_dir . '/fields.php';
    // check config existence
    if (!file_exists($formConfigFile) || !file_exists($fieldsConfigFile)) {
        return false;
    }
    // load form config
    $arForm = array();
    require $formConfigFile;
    // setup form
    if ($FORM_ID = CForm::Set($arForm, false, 'N')) {
        // load fields config
        $arFormFields = array();
        require $fieldsConfigFile;
        // setup form fields
        foreach ($arFormFields as $key => $arField) {
            CFormField::Set($arField, false, 'N');
        }
        $arStatus = array('FORM_ID' => $FORM_ID, 'TITLE' => 'DEFAULT', 'CSORT' => 100, 'ACTIVE' => 'Y', 'DEFAULT_VALUE' => 'Y', 'arPERMISSION_MOVE' => array(0));
        CFormStatus::Set($arStatus, false, 'N');
    }
    return $FORM_ID;
}
Beispiel #3
0
function CreateForm($arForm, $arFormFields, $langFile)
{
    if (!CModule::IncludeModule("form")) {
        return false;
    }
    // set defaults
    $arFieldDefaults = array("ACTIVE" => "Y", "C_SORT" => 0, "ADDITIONAL" => "N", "TITLE_TYPE" => "text", "IN_RESULTS_TABLE" => "Y", "IN_EXCEL_TABLE" => "Y");
    foreach ($arFormFields as $key => $arField) {
        if ($arFormFields['ADDITIONAL'] == 'Y' && !is_set($arFormFields['C_SORT'])) {
            $arFormFields['C_SORT'] = 5000;
        }
        $arFieldDefaults["C_SORT"] += 100;
        $arFormFields[$key] = array_merge($arFieldDefaults, $arField);
        $arFormFields[$key]["TITLE"] = GetMessage($arField["SID"] . "_QUESTION");
    }
    $rsLanguage = CLanguage::GetList($by, $order, array());
    while ($arLanguage = $rsLanguage->Fetch()) {
        WizardServices::IncludeServiceLang($langFile, $arLanguage["LID"]);
        $arForm["arMENU"][$arLanguage["LID"]] = GetMessage(substr($arForm["SID"], 0, -3) . "_MENU_NAME");
    }
    $dbForm = CForm::GetBySID($arForm["SID"]);
    if ($dbForm->Fetch()) {
        return;
    }
    WizardServices::IncludeServiceLang("status.php");
    if ($formID = CForm::Set($arForm, false, "N")) {
        // setup form fields
        foreach ($arFormFields as $key => $arField) {
            $arField["FORM_ID"] = $formID;
            $fieldID = CFormField::Set($arField, false, "N");
        }
        if ($arTemplates = CForm::SetMailTemplate($formID)) {
            CForm::Set(array('SID' => $arForm['SID'], 'arMAIL_TEMPLATE' => $arTemplates), $formID, 'N');
        }
        $arStatuses = array(array("FORM_ID" => $formID, "TITLE" => GetMessage("STATUS_NEW"), "C_SORT" => 100, "ACTIVE" => "Y", "DEFAULT_VALUE" => "Y", "CSS" => "statusgray", "arPERMISSION_VIEW" => array(0), "arPERMISSION_MOVE" => array(0), "arPERMISSION_EDIT" => array(0), "arPERMISSION_DELETE" => array(0)), array("FORM_ID" => $formID, "TITLE" => GetMessage("STATUS_RECEIVED"), "C_SORT" => 200, "ACTIVE" => "Y", "DEFAULT_VALUE" => "N", "CSS" => "statusblue", "arPERMISSION_VIEW" => array(0)), array("FORM_ID" => $formID, "TITLE" => GetMessage("STATUS_DONE"), "C_SORT" => 300, "ACTIVE" => "Y", "DEFAULT_VALUE" => "N", "CSS" => "statusgreen", "arPERMISSION_VIEW" => array(0)), array("FORM_ID" => $formID, "TITLE" => GetMessage("STATUS_REFUSE"), "C_SORT" => 400, "ACTIVE" => "Y", "DEFAULT_VALUE" => "N", "CSS" => "statusred", "arPERMISSION_VIEW" => array(0)));
        foreach ($arStatuses as $key => $arStatus) {
            if ($STATUS_ID = CFormStatus::Set($arStatus, false, "N")) {
                if ($arStatus['DEFAULT_VALUE'] == 'N' && ($arTemplates = CFormStatus::SetMailTemplate($formID, $STATUS_ID))) {
                    foreach ($arTemplates as $TEMPLATE_ID) {
                        if (null == $em) {
                            $em = new CEventMessage();
                        }
                        $em->Update($TEMPLATE_ID, array('MESSAGE' => GetMessage('STATUS_MESSAGE')));
                    }
                    CFormStatus::Set(array('FORM_ID' => $formID, 'arMAIL_TEMPLATE' => $arTemplates), $STATUS_ID, 'N');
                }
            }
        }
    }
    return $formID;
}
Beispiel #4
0
 }
 if ($additional != "Y") {
     $arFields["arFILTER_USER"] = $_REQUEST['arFILTER_USER'];
     $arFields["arFILTER_ANSWER_TEXT"] = $_REQUEST['arFILTER_ANSWER_TEXT'];
     $arFields["arFILTER_ANSWER_VALUE"] = $_REQUEST['arFILTER_ANSWER_VALUE'];
 } else {
     $arFields["arFILTER_FIELD"] = $_REQUEST['arFILTER_FIELD'];
 }
 /*
 print "<pre>";
 print_r($arFields);
 print "</pre>";
 die();
 */
 if (strlen($strError) <= 0) {
     $res = intval(CFormField::Set($arFields, $ID));
     if ($res > 0) {
         if (intval($ID) > 0) {
             CFormValidator::Clear($ID);
         }
         $ID = $res;
         // process field validators
         if ($additional != "Y") {
             $sValStructSerialized = $_REQUEST["VAL_STRUCTURE"];
             if (CheckSerializedData($sValStructSerialized)) {
                 $arValStructure = unserialize($sValStructSerialized);
                 if (count($arValStructure) > 0) {
                     CFormValidator::SetBatch($WEB_FORM_ID, $ID, $arValStructure);
                 }
             }
         }
Beispiel #5
0
 $arFields["arGROUP"] = array();
 foreach ($arGroups as $arrG) {
     $arFields["arGROUP"][$arrG["ID"]] = $_REQUEST["PERMISSION_" . $arrG["ID"]];
 }
 $res = intval(CForm::Set($arFields, $ID));
 if ($res > 0) {
     if ($bEditTemplate && $USE_DEFAULT_TEMPLATE == "N") {
         // structure
         $FORM_STRUCTURE = $_REQUEST["FORM_STRUCTURE"];
         $arrFS = CheckSerializedData($FORM_STRUCTURE) ? unserialize($FORM_STRUCTURE) : array();
         if (CFormOutput::CheckTemplate($FORM_TEMPLATE, $arrFS)) {
             $GLOBALS['CACHE_MANAGER']->ClearByTag('form_' . $res);
             foreach ($arrFS as $arQuestion) {
                 $arQuestionFields = array("FORM_ID" => $res, "TITLE" => $arQuestion["CAPTION_UNFORM"], "TITLE_TYPE" => $arQuestion["isHTMLCaption"] == "N" ? "text" : "html", "SID" => $arQuestion["FIELD_SID"], "REQUIRED" => $arQuestion["isRequired"] == "N" ? "N" : "Y", "IN_RESULTS_TABLE" => $arQuestion["inResultsTable"] == "Y" ? "Y" : "N", "IN_EXCEL_TABLE" => $arQuestion["inExcelTable"] == "Y" ? "Y" : "N", "ACTIVE" => CForm::isFieldInTemplate($arQuestion["FIELD_SID"], $FORM_TEMPLATE) ? "Y" : "N", 'FILTER_TITLE' => $arQuestion['FILTER_TITLE']);
                 $FIELD_ID = $arQuestion["isNew"] == "Y" ? false : $arQuestion["ID"];
                 $QID = CFormField::Set($arQuestionFields, $FIELD_ID, 'Y', 'N');
                 if ($QID) {
                     foreach ($arQuestion["structure"] as $arAnswer) {
                         if (strlen($arAnswer["MESSAGE"]) <= 0) {
                             if ($arAnswer['ANS_NEW'] != 'Y' && in_array($arAnswer['FIELD_TYPE'], array('dropdown', 'multiselect', 'checkbox', 'radio'))) {
                                 CFormAnswer::Delete($arAnswer['ID'], $QID);
                             }
                             continue;
                         }
                         if (isset($arAnswer['DEFAULT'])) {
                             if ($arAnswer["FIELD_TYPE"] == "dropdown" || $arAnswer['FIELD_TYPE'] == "multiselect") {
                                 if ($arAnswer["DEFAULT"] == "Y") {
                                     $arAnswer["FIELD_PARAM"] = "SELECTED";
                                 } else {
                                     $arAnswer["FIELD_PARAM"] = "";
                                 }
 /**
  * <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;
 }