static function Add($WEB_FORM_ID, $arrVALUES=false, $CHECK_RIGHTS="Y", $USER_ID=false)
{
$err_mess = (CAllFormResult::err_mess())."
Function: Add
Line: ";
global $DB, $USER, $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")."
";
}
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 ($arForm["RESTRICT_STATUS"] <> '')
{
$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, "s_timestamp", "desc", $arFilter, null, "N", intval($arForm["RESTRICT_USER"]));
$num = 0;
while ($row = $rsFormResult->Fetch())
{
if (++$num >= $arForm["RESTRICT_USER"])
{
$strError .= GetMessage("FORM_RESTRICT_USER_ERROR")."
";
break;
}
}
}
if ($strError == '' && 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, "s_timestamp", "desc", $arFilter, null, "N", 1);
CTimeZone::Enable();
if ($rsFormResult->Fetch())
{
$strError .= GetMessage("FORM_RESTRICT_TIME_ERROR")."
";
}
}
}
if ($strError == '')
{
// 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
);
foreach (GetModuleEvents('form', 'onBeforeResultAdd', true) as $arEvent)
{
ExecuteModuleEventEx($arEvent, array($WEB_FORM_ID, &$arFields, &$arrVALUES));
if ($ex = $APPLICATION->GetException())
{
$strError .= $ex->GetString().'
';
$APPLICATION->ResetException();
}
}
if ($strError == '')
$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] : $_FILES[$fname];
$arIMAGE["MODULE_ID"] = "form";
$fid = 0;
if (CFile::CheckImageFile($arIMAGE) == '')
{
if ($arIMAGE["name"] <> '')
{
$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] : $_FILES[$fname];
$arFILE["MODULE_ID"] = "form";
if ($arFILE["name"] <> '')
{
$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 ($vl_ANSWER_TEXT == '') $vl_ANSWER_TEXT = false;
if ($vl_ANSWER_VALUE == '') $vl_ANSWER_VALUE = false;
if ($vl_USER_TEXT == '') $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);
}
}
foreach (GetModuleEvents('form', 'onAfterResultAdd', true) as $arEvent)
{
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;
}