1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
form_callformresult.php
См. документацию.
1<?php
2
3/***************************************
4 Web-form result
5***************************************/
6
8{
9 public static function GetFileByAnswerID($RESULT_ID, $ANSWER_ID)
10 {
11 global $DB;
12
13 $RESULT_ID = intval($RESULT_ID);
14 $ANSWER_ID = intval($ANSWER_ID);
15 $strSql = "
16 SELECT
17 USER_FILE_ID,
18 USER_FILE_NAME,
19 USER_FILE_IS_IMAGE,
20 USER_FILE_HASH,
21 USER_FILE_SUFFIX,
22 USER_FILE_SIZE
23 FROM
24 b_form_result_answer
25 WHERE
26 RESULT_ID='".$RESULT_ID."'
27 and ANSWER_ID='".$ANSWER_ID."'
28 ";
29 $z = $DB->Query($strSql);
30 if ($zr = $z->Fetch()) return $zr; else return false;
31 }
32
33 // return file data by file hash
34 public static function GetFileByHash($RESULT_ID, $HASH)
35 {
36 global $DB, $USER;
37
38 $RESULT_ID = intval($RESULT_ID);
39 if ($RESULT_ID<=0 || trim($HASH) == '')
40 {
41 return false;
42 }
43
44 $strSql = "
45SELECT
46 F.ID as FILE_ID,
47 F.FILE_NAME,
48 F.SUBDIR,
49 F.CONTENT_TYPE,
50 F.HANDLER_ID,
51 F.FILE_SIZE,
52 RA.USER_FILE_NAME ORIGINAL_NAME,
53 RA.USER_FILE_IS_IMAGE,
54 RA.FORM_ID, R.USER_ID
55FROM b_form_result R
56LEFT JOIN b_form_result_answer RA ON RA.RESULT_ID=R.ID
57INNER JOIN b_file F ON (F.ID = RA.USER_FILE_ID)
58WHERE R.ID = '".$RESULT_ID."'
59AND RA.USER_FILE_HASH = '".$DB->ForSql($HASH, 255)."'
60";
61
62 $z = $DB->Query($strSql);
63 if ($zr = $z->Fetch())
64 {
65 $F_RIGHT = CForm::GetPermission($zr['FORM_ID']);
66 if ($F_RIGHT >= 20 || ($F_RIGHT >= 15 && $USER->GetID() == $zr['USER_ID']))
67 {
68 unset($zr['FORM_ID']);
69 unset($zr['USER_ID']);
70 return $zr;
71 }
72 }
73 return false;
74 }
75
76 // create new event
77 public static function SetEvent($RESULT_ID, $IN_EVENT1=false, $IN_EVENT2=false, $IN_EVENT3=false, $money="", $currency="", $goto="", $chargeback="N")
78 {
79 global $DB, $strError;
80
81 if (CModule::IncludeModule("statistic"))
82 {
83 $RESULT_ID = intval($RESULT_ID);
84 $strSql = "SELECT FORM_ID FROM b_form_result WHERE ID='".$RESULT_ID."'";
85 $z = $DB->Query($strSql);
86 if ($zr = $z->Fetch())
87 {
88 $WEB_FORM_ID = $zr["FORM_ID"];
89 $strSql = "SELECT SID, STAT_EVENT1, STAT_EVENT2, STAT_EVENT3 FROM b_form WHERE ID = '".$WEB_FORM_ID."'";
90 $z = $DB->Query($strSql);
91 $zr = $z->Fetch();
92
93 if ($IN_EVENT1===false)
94 {
95 $event1 = ($zr["STAT_EVENT1"] == '') ? "form" : $zr["STAT_EVENT1"];
96 }
97 else $event1 = $IN_EVENT1;
98
99 if ($IN_EVENT2===false)
100 {
101 $event2 = ($zr["STAT_EVENT2"] == '') ? $zr["SID"] : $zr["STAT_EVENT2"];
102 }
103 else $event2 = $IN_EVENT2;
104
105 if ($IN_EVENT3===false)
106 {
107 $event3 = $zr["STAT_EVENT3"] == ''
108 ? (
109 $GLOBALS['APPLICATION']->IsHTTPS() ? "https://" : "http://"
110 ).$_SERVER["HTTP_HOST"]."/bitrix/admin/form_result_list.php?lang=".LANGUAGE_ID."&WEB_FORM_ID=".$WEB_FORM_ID."&find_id=".$RESULT_ID."&find_id_exact_match=Y&set_filter=Y"
111 : $zr["STAT_EVENT3"];
112 }
113 else $event3 = $IN_EVENT3;
114
115 CStatEvent::AddCurrent($event1, $event2, $event3, $money, $currency, $goto, $chargeback);
116 return true;
117 }
118 else $strError .= GetMessage("FORM_ERROR_RESULT_NOT_FOUND")."<br>";
119 }
120 return false;
121 }
122
123 //returns data for questions and answers array
124 public static function GetDataByID($RESULT_ID, $arrFIELD_SID, &$arrRES, &$arrANSWER)
125 {
126 global $DB;
127
128 $arrReturn = array();
129 $RESULT_ID = intval($RESULT_ID);
130 $z = CFormResult::GetByID($RESULT_ID);
131 if ($arrRES = $z->Fetch())
132 {
133 $s = '';
134 if (is_array($arrFIELD_SID) && count($arrFIELD_SID)>0)
135 {
136 $str = '';
137 foreach($arrFIELD_SID as $field) $str .= ",'".$DB->ForSql($field,50)."'";
138 $str = trim($str, ",");
139 if ($str <> '') $s = "and SID in ($str)";
140 }
141 $strSql = "SELECT ID, SID, SID as VARNAME FROM b_form_field WHERE FORM_ID='".$arrRES["FORM_ID"]."' " . $s;
142 $q = $DB->Query($strSql);
143 while ($qr = $q->Fetch())
144 {
145 $arrFIELDS[$qr["ID"]] = $qr["SID"];
146 }
147 if (is_array($arrFIELDS)) $arrKeys = array_keys($arrFIELDS);
148 CForm::GetResultAnswerArray($arrRES["FORM_ID"], $arrColumns, $arrAnswers, $arrAnswersSID, array("RESULT_ID"=>$RESULT_ID));
149
150 foreach ($arrAnswers[$RESULT_ID] as $fid => $arrAns)
151 {
152 if (is_array($arrKeys))
153 {
154 if (in_array($fid,$arrKeys))
155 {
156 $sid = $arrFIELDS[$fid];
157 $arrANSWER[$sid] = $arrAns;
158 $arrA = array_values($arrAns);
159 foreach($arrA as $arr) $arrReturn[$sid][] = $arr;
160 }
161 }
162 }
163 }
164 else return false;
165
166 if (is_array($arrANSWER)) reset($arrANSWER);
167 if (is_array($arrReturn)) reset($arrReturn);
168 if (is_array($arrRES)) reset($arrRES);
169
170 return $arrReturn;
171 }
172
173 // return array of result values for component
174 public static function GetDataByIDForHTML($RESULT_ID, $GET_ADDITIONAL="N")
175 {
176 global $DB;
177
178 $z = CFormResult::GetByID($RESULT_ID);
179 if ($zr=$z->Fetch())
180 {
181 $arrResult = $zr;
182 $additional = ($GET_ADDITIONAL=="Y") ? "ALL" : "N";
183
184 $WEB_FORM_ID = CForm::GetDataByID($arrResult["FORM_ID"], $arForm, $arQuestions, $arAnswers, $arDropDown, $arMultiSelect, $additional);
185
186 CForm::GetResultAnswerArray($WEB_FORM_ID, $arrResultColumns, $arrResultAnswers, $arrResultAnswersSID, array("RESULT_ID" => $RESULT_ID));
187 $arrResultAnswers = $arrResultAnswers[$RESULT_ID];
188
189 $DB_VARS = array();
190 foreach ($arQuestions as $arQuestion)
191 {
192 if ($arQuestion["ADDITIONAL"]!="Y")
193 {
194 $FIELD_SID = $arQuestion["SID"];
195 if (is_array($arAnswers[$FIELD_SID]))
196 {
197 foreach ($arAnswers[$FIELD_SID] as $arAnswer)
198 {
199 $arrResultAnswer = $arrResultAnswers[$arQuestion["ID"]][$arAnswer["ID"]];
200 $FIELD_TYPE = $arAnswer["FIELD_TYPE"];
201 switch ($FIELD_TYPE) :
202
203 case "radio":
204 case "dropdown":
205 if (intval($arrResultAnswer["ANSWER_ID"])>0)
206 {
207 $fname = "form_".mb_strtolower($FIELD_TYPE)."_".$FIELD_SID;
208 $DB_VARS[$fname] = $arrResultAnswer["ANSWER_ID"];
209 }
210 break;
211
212 case "checkbox":
213 case "multiselect":
214 if (intval($arrResultAnswer["ANSWER_ID"])>0)
215 {
216 $fname = "form_".mb_strtolower($FIELD_TYPE)."_".$FIELD_SID;
217 $DB_VARS[$fname][] = $arrResultAnswer["ANSWER_ID"];
218 }
219 break;
220
221 case "date":
222 if ($arrResultAnswer["USER_DATE"] <> '')
223 {
224 $arrResultAnswer["USER_TEXT"] = $DB->FormatDate(
225 $arrResultAnswer["USER_DATE"],
227 (MakeTimeStamp($arrResultAnswer["USER_TEXT"])+(int)date('Z'))%86400 == 0 ? FORMAT_DATE : FORMAT_DATETIME
228 );
229
230 $fname = "form_".mb_strtolower($FIELD_TYPE)."_".$arAnswer["ID"];
231 $DB_VARS[$fname] = $arrResultAnswer["USER_TEXT"];
232 }
233
234 break;
235
236 case "text":
237 case "password":
238 case "textarea":
239 case "email":
240 case "url":
241 case "hidden":
242 if ($arrResultAnswer["USER_TEXT"] <> '')
243 {
244 $fname = "form_".mb_strtolower($FIELD_TYPE)."_".$arAnswer["ID"];
245 $DB_VARS[$fname] = $arrResultAnswer["USER_TEXT"];
246 }
247 break;
248
249 case "image":
250 case "file":
251 if (intval($arrResultAnswer["USER_FILE_ID"])>0)
252 {
253 $fname = "form_".mb_strtolower($FIELD_TYPE)."_".$arAnswer["ID"];
254 $DB_VARS[$fname] = $arrResultAnswer["USER_FILE_ID"];
255 }
256 break;
257
258 endswitch;
259 } //endforeach;
260 }
261 }
262 else
263 {
264 $FIELD_TYPE = $arQuestion["FIELD_TYPE"];
265 $arrResultAnswer = $arrResultAnswers[$arQuestion["ID"]][0];
266 switch ($FIELD_TYPE) :
267 case "text":
268 if ($arrResultAnswer["USER_TEXT"] <> '')
269 {
270 $fname = "form_textarea_ADDITIONAL_".$arQuestion["ID"];
271 $DB_VARS[$fname] = $arrResultAnswer["USER_TEXT"];
272 }
273 break;
274 case "integer":
275 if ($arrResultAnswer["USER_TEXT"] <> '')
276 {
277 $fname = "form_text_ADDITIONAL_".$arQuestion["ID"];
278 $DB_VARS[$fname] = $arrResultAnswer["USER_TEXT"];
279 }
280 break;
281 case "date":
282 $fname = "form_date_ADDITIONAL_".$arQuestion["ID"];
283 $DB_VARS[$fname] = $arrResultAnswer["USER_TEXT"];
284 break;
285 endswitch;
286 }
287 }//endforeach
288 return $DB_VARS;
289 }
290 return null;
291 }
292
293 // add new form result
294 public static function Add($WEB_FORM_ID, $arrVALUES=false, $CHECK_RIGHTS="Y", $USER_ID=false)
295 {
297 if ($arrVALUES===false) $arrVALUES = $_REQUEST;
298
299 if ($CHECK_RIGHTS != "N") $CHECK_RIGHTS = "Y";
300
301 $WEB_FORM_ID = intval($WEB_FORM_ID);
302
303 if ($WEB_FORM_ID>0)
304 {
305 $WEB_FORM_ID = intval($WEB_FORM_ID);
306
307 // get form data
308 $arForm = array();
309 $arQuestions = array();
310 $arAnswers = array();
311 $arDropDown = array();
312 $arMultiSelect = array();
313
314 $WEB_FORM_ID = CForm::GetDataByID($WEB_FORM_ID, $arForm, $arQuestions, $arAnswers, $arDropDown, $arMultiSelect);
315
316 // if new form id is correct
317 if ($WEB_FORM_ID>0)
318 {
319 // check result rights
320 $F_RIGHT = CForm::GetPermission($WEB_FORM_ID);
321
322 if (intval($F_RIGHT)>=10 || $CHECK_RIGHTS=="N")
323 {
324 if (intval($USER_ID)<=0)
325 {
326 $USER_AUTH = "N";
327 $USER_ID = intval($_SESSION["SESS_LAST_USER_ID"]);
328 if (intval($USER->GetID())>0)
329 {
330 $USER_AUTH = "Y";
331 $USER_ID = intval($USER->GetID());
332 }
333 }
334 else $USER_AUTH = "Y";
335
336 // check result status
337 $fname = "status_".$arForm["SID"];
338 $STATUS_ID = (intval($arrVALUES[$fname] ?? 0) <=0) ? CFormStatus::GetDefault($WEB_FORM_ID) : intval($arrVALUES[$fname]);
339
340 if ($STATUS_ID <= 0)
341 {
342 $strError .= GetMessage("FORM_STATUS_NOT_DEFINED")."<br>";
343 }
344 else
345 {
346 // status found
347 if ($CHECK_RIGHTS != "N")
348 {
349 $arPerm = CFormStatus::GetPermissions($STATUS_ID);
350 }
351
352 if ($CHECK_RIGHTS == "N" || in_array("MOVE", $arPerm)) // has rights to a new status
353 {
354 // check restrictions
355
356 if ($arForm["USE_RESTRICTIONS"] == "Y" && intval($USER_ID) > 0)
357 {
358 $arFilter = array("USER_ID" => $USER_ID);
359 if ($arForm["RESTRICT_STATUS"] <> '')
360 {
361 $arStatus = explode(",", $arForm["RESTRICT_STATUS"]);
362 $arFilter = array_merge($arFilter, array("STATUS_ID" => implode(" | ", $arStatus)));
363 }
364
365 if (intval($arForm["RESTRICT_USER"]) > 0)
366 {
367 $rsFormResult = CFormResult::GetList($WEB_FORM_ID, "s_timestamp", "desc", $arFilter, null, "N", intval($arForm["RESTRICT_USER"]));
368 $num = 0;
369 while ($rsFormResult->Fetch())
370 {
371 if (++$num >= $arForm["RESTRICT_USER"])
372 {
373 $strError .= GetMessage("FORM_RESTRICT_USER_ERROR")."<br />";
374 break;
375 }
376 }
377 }
378
379 if ($strError == '' && intval($arForm["RESTRICT_TIME"]) > 0)
380 {
381 $DC2 = time();
382 $DC1 = $DC2 - intval($arForm["RESTRICT_TIME"]);
383 $arFilter = array_merge($arFilter, array(
384 "TIME_CREATE_1" => ConvertTimeStamp($DC1, "FULL"),
385 "TIME_CREATE_2" => ConvertTimeStamp($DC2, "FULL"),
386 ));
387
388 CTimeZone::Disable();
389 $rsFormResult = CFormResult::GetList($WEB_FORM_ID, "s_timestamp", "desc", $arFilter, null, "N", 1);
390 CTimeZone::Enable();
391
392 if ($rsFormResult->Fetch())
393 {
394 $strError .= GetMessage("FORM_RESTRICT_TIME_ERROR")."<br>";
395 }
396 }
397 }
398
399 if ($strError == '')
400 {
401 // save result
403 "TIMESTAMP_X" => $DB->GetNowFunction(),
404 "DATE_CREATE" => $DB->GetNowFunction(),
405 "STATUS_ID" => $STATUS_ID,
406 "FORM_ID" => $WEB_FORM_ID,
407 "USER_ID" => intval($USER_ID),
408 "USER_AUTH" => "'".$USER_AUTH."'",
409 "STAT_GUEST_ID" => intval($_SESSION["SESS_GUEST_ID"]),
410 "STAT_SESSION_ID" => intval($_SESSION["SESS_SESSION_ID"]),
411 "SENT_TO_CRM" => "'N'", // result can be sent only after adding
412 );
413
414 foreach (GetModuleEvents('form', 'onBeforeResultAdd', true) as $arEvent)
415 {
416 ExecuteModuleEventEx($arEvent, array($WEB_FORM_ID, &$arFields, &$arrVALUES));
417
418 if ($ex = $APPLICATION->GetException())
419 {
420 $strError .= $ex->GetString().'<br />';
421 $APPLICATION->ResetException();
422 }
423 }
424
425 if ($strError == '')
426 $RESULT_ID = $DB->Insert("b_form_result", $arFields);
427 }
428 }
429 else
430 $strError .= GetMessage("FORM_ERROR_ACCESS_DENIED");
431 }
432
433 $RESULT_ID = intval($RESULT_ID);
434 // save successful
435 if ($RESULT_ID>0)
436 {
437 $arrANSWER_TEXT = array();
438 $arrANSWER_VALUE = array();
439 $arrUSER_TEXT = array();
440
441 // process questions
442 foreach ($arQuestions as $arQuestion)
443 {
444 $FIELD_ID = $arQuestion["ID"];
445 $FIELD_SID = $arQuestion["SID"];
446 $radio = "N";
447 $checkbox = "N";
448 $multiselect = "N";
449 $dropdown = "N";
450 if (is_array($arAnswers[$FIELD_SID]))
451 {
452 // process answers
453 foreach ($arAnswers[$FIELD_SID] as $arAnswer)
454 {
455 $FIELD_TYPE = $arAnswer["FIELD_TYPE"];
456
457 switch ($FIELD_TYPE)
458 {
459 case "radio":
460 case "dropdown":
461
462 if (($radio=="N" && $FIELD_TYPE=="radio") ||
463 ($dropdown=="N" && $FIELD_TYPE=="dropdown"))
464 {
465 $fname = "form_".$FIELD_TYPE."_".$FIELD_SID;
466 $ANSWER_ID = intval($arrVALUES[$fname]);
467 if ($ANSWER_ID>0)
468 {
469 $z = CFormAnswer::GetByID($ANSWER_ID);
470 if ($zr = $z->Fetch())
471 {
473 "RESULT_ID" => $RESULT_ID,
474 "FORM_ID" => $WEB_FORM_ID,
475 "FIELD_ID" => $FIELD_ID,
476 "ANSWER_ID" => $ANSWER_ID,
477 "ANSWER_TEXT" => trim($zr["MESSAGE"]),
478 "ANSWER_VALUE" => $zr["VALUE"]
479 );
480 $arrANSWER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_TEXT"]);
481 $arrANSWER_VALUE[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_VALUE"]);
483 }
484 if ($FIELD_TYPE=="radio") $radio = "Y";
485 if ($FIELD_TYPE=="dropdown") $dropdown = "Y";
486 }
487 }
488
489 break;
490
491 case "checkbox":
492 case "multiselect":
493
494 if (($checkbox=="N" && $FIELD_TYPE=="checkbox") ||
495 ($multiselect=="N" && $FIELD_TYPE=="multiselect"))
496 {
497 $fname = "form_".$FIELD_TYPE."_".$FIELD_SID;
498 if (is_array($arrVALUES[$fname]) && count($arrVALUES[$fname])>0)
499 {
500 foreach($arrVALUES[$fname] as $ANSWER_ID)
501 {
502 $ANSWER_ID = intval($ANSWER_ID);
503 if ($ANSWER_ID>0)
504 {
505 $z = CFormAnswer::GetByID($ANSWER_ID);
506 if ($zr = $z->Fetch())
507 {
509 "RESULT_ID" => $RESULT_ID,
510 "FORM_ID" => $WEB_FORM_ID,
511 "FIELD_ID" => $FIELD_ID,
512 "ANSWER_ID" => $ANSWER_ID,
513 "ANSWER_TEXT" => trim($zr["MESSAGE"]),
514 "ANSWER_VALUE" => $zr["VALUE"]
515 );
516 $arrANSWER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_TEXT"]);
517 $arrANSWER_VALUE[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_VALUE"]);
519 }
520 }
521 }
522 if ($FIELD_TYPE=="checkbox") $checkbox = "Y";
523 if ($FIELD_TYPE=="multiselect") $multiselect = "Y";
524 }
525 }
526
527 break;
528
529 case "text":
530 case "hidden":
531 case "textarea":
532 case "password":
533 case "email":
534 case "url":
535
536 $fname = "form_".$FIELD_TYPE."_".$arAnswer["ID"];
537 $ANSWER_ID = intval($arAnswer["ID"]);
538 $z = CFormAnswer::GetByID($ANSWER_ID);
539 if ($zr = $z->Fetch())
540 {
542 "RESULT_ID" => $RESULT_ID,
543 "FORM_ID" => $WEB_FORM_ID,
544 "FIELD_ID" => $FIELD_ID,
545 "ANSWER_ID" => $ANSWER_ID,
546 "ANSWER_TEXT" => trim($zr["MESSAGE"]),
547 "ANSWER_VALUE" => $zr["VALUE"],
548 "USER_TEXT" => $arrVALUES[$fname]
549 );
550
551 $arrANSWER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_TEXT"]);
552 $arrANSWER_VALUE[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_VALUE"]);
553 $arrUSER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["USER_TEXT"]);
555 }
556
557 break;
558
559 case "date":
560
561 $fname = "form_".$FIELD_TYPE."_".$arAnswer["ID"];
562 $ANSWER_ID = intval($arAnswer["ID"]);
563 $USER_DATE = $arrVALUES[$fname];
564 if (CheckDateTime($USER_DATE))
565 {
566 $z = CFormAnswer::GetByID($ANSWER_ID);
567 if ($zr = $z->Fetch())
568 {
570 "RESULT_ID" => $RESULT_ID,
571 "FORM_ID" => $WEB_FORM_ID,
572 "FIELD_ID" => $FIELD_ID,
573 "ANSWER_ID" => $ANSWER_ID,
574 "ANSWER_TEXT" => trim($zr["MESSAGE"]),
575 "ANSWER_VALUE" => $zr["VALUE"],
576 "USER_DATE" => $USER_DATE,
577 "USER_TEXT" => $USER_DATE
578 );
579 $arrANSWER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_TEXT"]);
580 $arrANSWER_VALUE[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_VALUE"]);
581 $arrUSER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["USER_TEXT"]);
583 }
584 }
585 break;
586
587 case "image":
588
589 $fname = "form_".$FIELD_TYPE."_".$arAnswer["ID"];
590 $arIMAGE = $arrVALUES[$fname] ?? $_FILES[$fname] ?? null;
591
592 if (CFile::CheckImageFile($arIMAGE) == '')
593 {
594 if (!empty($arIMAGE["name"]))
595 {
596 $ANSWER_ID = intval($arAnswer["ID"]);
597 $arIMAGE["MODULE_ID"] = "form";
598 $fid = CFile::SaveFile($arIMAGE, "form");
599 $fid = intval($fid);
600 if ($fid>0)
601 {
602 $md5 = md5(uniqid(mt_rand(), true).time());
603 $z = CFormAnswer::GetByID($ANSWER_ID);
604 if ($zr = $z->Fetch())
605 {
607 "RESULT_ID" => $RESULT_ID,
608 "FORM_ID" => $WEB_FORM_ID,
609 "FIELD_ID" => $FIELD_ID,
610 "ANSWER_ID" => $ANSWER_ID,
611 "ANSWER_TEXT" => trim($zr["MESSAGE"]),
612 "ANSWER_VALUE" => $zr["VALUE"],
613 "USER_TEXT" => $arIMAGE["name"],
614 "USER_FILE_ID" => $fid,
615 "USER_FILE_IS_IMAGE" => "Y",
616 "USER_FILE_HASH" => $md5,
617 "USER_FILE_NAME" => $arIMAGE["name"],
618 "USER_FILE_SIZE" => $arIMAGE["size"],
619 );
620 $arrANSWER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_TEXT"]);
621 $arrANSWER_VALUE[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_VALUE"]);
622 $arrUSER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["USER_TEXT"]);
624 }
625 }
626 }
627 }
628
629 break;
630
631 case "file":
632
633 $fname = "form_".$FIELD_TYPE."_".$arAnswer["ID"];
634 $arFILE = $arrVALUES[$fname] ?? $_FILES[$fname] ?? null;
635
636 if (!empty($arFILE["name"]))
637 {
638 $ANSWER_ID = intval($arAnswer["ID"]);
639 $arFILE["MODULE_ID"] = "form";
640 $original_name = $arFILE["name"];
641 $upload_dir = COption::GetOptionString("form", "NOT_IMAGE_UPLOAD_DIR");
642
643 $fid = (int)CFile::SaveFile($arFILE, $upload_dir);
644 if ($fid>0)
645 {
646 $md5 = md5(uniqid(mt_rand(), true).time());
647 $z = CFormAnswer::GetByID($ANSWER_ID);
648 if ($zr = $z->Fetch())
649 {
651 "RESULT_ID" => $RESULT_ID,
652 "FORM_ID" => $WEB_FORM_ID,
653 "FIELD_ID" => $FIELD_ID,
654 "ANSWER_ID" => $ANSWER_ID,
655 "ANSWER_TEXT" => trim($zr["MESSAGE"]),
656 "ANSWER_VALUE" => $zr["VALUE"],
657 "USER_TEXT" => $original_name,
658 "USER_FILE_ID" => $fid,
659 "USER_FILE_NAME" => $original_name,
660 "USER_FILE_IS_IMAGE" => "N",
661 "USER_FILE_HASH" => $md5,
662 "USER_FILE_SIZE" => $arFILE["size"],
663 );
664 $arrANSWER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_TEXT"]);
665 $arrANSWER_VALUE[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_VALUE"]);
666 $arrUSER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["USER_TEXT"]);
668 }
669 }
670 }
671
672 break;
673 }
674 }
675 // update search fields
676 $arrANSWER_TEXT_upd = $arrANSWER_TEXT[$FIELD_ID];
677 $arrANSWER_VALUE_upd = $arrANSWER_VALUE[$FIELD_ID];
678 $arrUSER_TEXT_upd = $arrUSER_TEXT[$FIELD_ID];
679 TrimArr($arrANSWER_TEXT_upd);
680 TrimArr($arrANSWER_VALUE_upd);
681 TrimArr($arrUSER_TEXT_upd);
682 if (is_array($arrANSWER_TEXT_upd)) $vl_ANSWER_TEXT = trim(implode(" ",$arrANSWER_TEXT_upd));
683 if (is_array($arrANSWER_VALUE_upd)) $vl_ANSWER_VALUE = trim(implode(" ",$arrANSWER_VALUE_upd));
684 if (is_array($arrUSER_TEXT_upd)) $vl_USER_TEXT = trim(implode(" ",$arrUSER_TEXT_upd));
685 if ($vl_ANSWER_TEXT == '') $vl_ANSWER_TEXT = false;
686 if ($vl_ANSWER_VALUE == '') $vl_ANSWER_VALUE = false;
687 if ($vl_USER_TEXT == '') $vl_USER_TEXT = false;
689 "ANSWER_TEXT_SEARCH" => $vl_ANSWER_TEXT,
690 "ANSWER_VALUE_SEARCH" => $vl_ANSWER_VALUE,
691 "USER_TEXT_SEARCH" => $vl_USER_TEXT
692 );
693 CFormResult::UpdateField($arFields, $RESULT_ID, $FIELD_ID);
694 }
695 }
696
697 foreach (GetModuleEvents('form', 'onAfterResultAdd', true) as $arEvent)
698 {
699 ExecuteModuleEventEx($arEvent, array($WEB_FORM_ID, $RESULT_ID));
700 }
701
702 // call change status handler
703 CForm::ExecHandlerAfterChangeStatus($RESULT_ID, "ADD");
704 }
705 }
706 }
707 }
708 return intval($RESULT_ID)>0 ? intval($RESULT_ID) : false;
709 }
710
711 // update result
712 public static function Update($RESULT_ID, $arrVALUES=false, $UPDATE_ADDITIONAL="N", $CHECK_RIGHTS="Y")
713 {
715 if ($arrVALUES===false) $arrVALUES = $_REQUEST;
716
717 InitBvar($UPDATE_ADDITIONAL);
718 // check whether such result exists in db
719 $RESULT_ID = intval($RESULT_ID);
720 $z = CFormResult::GetByID($RESULT_ID);
721 if ($zr=$z->Fetch())
722 {
723 $arrResult = $zr;
724 $additional = ($UPDATE_ADDITIONAL=="Y") ? "ALL" : "N";
725 // get form data
726 $WEB_FORM_ID = CForm::GetDataByID($arrResult["FORM_ID"], $arForm, $arQuestions, $arAnswers, $arDropDown, $arMultiSelect, $additional);
727 if ($WEB_FORM_ID>0)
728 {
729 // check form rights
730 $F_RIGHT = ($CHECK_RIGHTS!="Y") ? 30 : intval(CForm::GetPermission($WEB_FORM_ID));
731 if ($F_RIGHT>=20 || ($F_RIGHT>=15 && $arrResult["USER_ID"]==$USER->GetID()))
732 {
733 // check result rights (its status rights)
734 $arrRESULT_PERMISSION = ($CHECK_RIGHTS!="Y") ? CFormStatus::GetMaxPermissions() : CFormResult::GetPermissions($RESULT_ID);
735
736 // if rights're correct
737 if (in_array("EDIT", $arrRESULT_PERMISSION))
738 {
739 // update result
740 $arFields = array("TIMESTAMP_X" => $DB->GetNowFunction());
741 $fname = "status_".$arForm["SID"];
742 $STATUS_ID = intval($arrVALUES[$fname]);
743
744 $bUpdateStatus = false;
745 // if there's new status defined
746 if ($STATUS_ID > 0)
747 {
748 // check new status rights
749 $arrNEW_STATUS_PERMISSION = ($CHECK_RIGHTS!="Y") ? CFormStatus::GetMaxPermissions() : CFormStatus::GetPermissions($STATUS_ID);
750
751 // if rights're correct
752 if (in_array("MOVE",$arrNEW_STATUS_PERMISSION))
753 {
754 // update it
755 $bUpdateStatus = true;
756 $arFields["STATUS_ID"] = intval($arrVALUES[$fname]);
757 }
758 }
759
760 if ($bUpdateStatus)
761 {
762 foreach (GetModuleEvents('form', 'onBeforeResultStatusChange', true) as $arEvent)
763 {
764 ExecuteModuleEventEx($arEvent, array($WEB_FORM_ID, $RESULT_ID, &$arFields["STATUS_ID"], $CHECK_RIGHTS));
765
766 if ($ex = $APPLICATION->GetException())
767 $strError .= $ex->GetString().'<br />';
768 }
769 }
770
771 if ($strError == '')
772 {
773 // call status change handler
774 CForm::ExecHandlerBeforeChangeStatus($RESULT_ID, "UPDATE", $arFields["STATUS_ID"]);
775
776 foreach (GetModuleEvents('form', 'onBeforeResultUpdate', true) as $arEvent)
777 {
778 ExecuteModuleEventEx($arEvent, array($WEB_FORM_ID, $RESULT_ID, &$arFields, &$arrVALUES, $CHECK_RIGHTS));
779
780 if ($ex = $APPLICATION->GetException())
781 $strError .= $ex->GetString().'<br />';
782 }
783 }
784
785 $rows = 0;
786
787 if ($strError == '')
788 $rows = $DB->Update("b_form_result", $arFields,"WHERE ID='".$RESULT_ID."'");
789
790 if ($bUpdateStatus)
791 {
792 foreach (GetModuleEvents('form', 'onAfterResultStatusChange', true) as $arEvent)
793 {
794 ExecuteModuleEventEx($arEvent, array($WEB_FORM_ID, $RESULT_ID, &$arFields["STATUS_ID"], $CHECK_RIGHTS));
795 }
796 }
797
798 // if update was successful
799 if (intval($rows)>0)
800 {
801 $arrException = array();
802
803 // gather files info
804 $arrFILES = array();
805 $strSql = "
806 SELECT
807 ANSWER_ID,
808 USER_FILE_ID,
809 USER_FILE_NAME,
810 USER_FILE_IS_IMAGE,
811 USER_FILE_HASH,
812 USER_FILE_SUFFIX,
813 USER_FILE_SIZE
814 FROM
815 b_form_result_answer
816 WHERE
817 RESULT_ID = $RESULT_ID
818 and USER_FILE_ID>0
819 ";
820 $q = $DB->Query($strSql);
821 while ($qr = $q->Fetch()) $arrFILES[$qr["ANSWER_ID"]] = $qr;
822
823 if (is_array($arrVALUES["ARR_CLS"])) $arrException = array_merge($arrException, $arrVALUES["ARR_CLS"]);
824
825 // clear all questions and answers for current result
826 CFormResult::Reset($RESULT_ID, false, $UPDATE_ADDITIONAL, $arrException);
827
828 // trace questions and additional fields
829 foreach ($arQuestions as $arQuestion)
830 {
831 $FIELD_ID = $arQuestion["ID"];
832 if (is_array($arrException) && count($arrException)>0)
833 {
834 if (in_array($FIELD_ID, $arrException)) continue;
835 }
836 $FIELD_SID = $arQuestion["SID"];
837 if ($arQuestion["ADDITIONAL"]!="Y")
838 {
839 // update form questions
840 $arrANSWER_TEXT = array();
841 $arrANSWER_VALUE = array();
842 $arrUSER_TEXT = array();
843 $radio = "N";
844 $checkbox = "N";
845 $multiselect = "N";
846 $dropdown = "N";
847 // trace answers
848 if (is_array($arAnswers[$FIELD_SID]))
849 {
850 foreach ($arAnswers[$FIELD_SID] as $arAnswer)
851 {
852 $FIELD_TYPE = $arAnswer["FIELD_TYPE"];
853
854 switch ($FIELD_TYPE) :
855
856 case "radio":
857 case "dropdown":
858
859 if (($radio=="N" && $FIELD_TYPE=="radio") ||
860 ($dropdown=="N" && $FIELD_TYPE=="dropdown"))
861 {
862 $fname = "form_".$FIELD_TYPE."_".$FIELD_SID;
863 $ANSWER_ID = intval($arrVALUES[$fname]);
864 if ($ANSWER_ID>0)
865 {
866 $z = CFormAnswer::GetByID($ANSWER_ID);
867 if ($zr = $z->Fetch())
868 {
870 "RESULT_ID" => $RESULT_ID,
871 "FORM_ID" => $WEB_FORM_ID,
872 "FIELD_ID" => $FIELD_ID,
873 "ANSWER_ID" => $ANSWER_ID,
874 "ANSWER_TEXT" => trim($zr["MESSAGE"]),
875 "ANSWER_VALUE" => $zr["VALUE"]
876 );
877 $arrANSWER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_TEXT"]);
878 $arrANSWER_VALUE[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_VALUE"]);
880 }
881 if ($FIELD_TYPE=="radio") $radio = "Y";
882 if ($FIELD_TYPE=="dropdown") $dropdown = "Y";
883 }
884 }
885
886 break;
887
888 case "checkbox":
889 case "multiselect":
890
891 if (($checkbox=="N" && $FIELD_TYPE=="checkbox") ||
892 ($multiselect=="N" && $FIELD_TYPE=="multiselect"))
893 {
894 $fname = "form_".$FIELD_TYPE."_".$FIELD_SID;
895 if (is_array($arrVALUES[$fname]) && count($arrVALUES[$fname])>0)
896 {
897 foreach($arrVALUES[$fname] as $ANSWER_ID)
898 {
899 $ANSWER_ID = intval($ANSWER_ID);
900 if ($ANSWER_ID>0)
901 {
902 $z = CFormAnswer::GetByID($ANSWER_ID);
903 if ($zr = $z->Fetch())
904 {
906 "RESULT_ID" => $RESULT_ID,
907 "FORM_ID" => $WEB_FORM_ID,
908 "FIELD_ID" => $FIELD_ID,
909 "ANSWER_ID" => $ANSWER_ID,
910 "ANSWER_TEXT" => trim($zr["MESSAGE"]),
911 "ANSWER_VALUE" => $zr["VALUE"]
912 );
913 $arrANSWER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_TEXT"]);
914 $arrANSWER_VALUE[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_VALUE"]);
916 }
917 }
918 }
919 if ($FIELD_TYPE=="checkbox") $checkbox = "Y";
920 if ($FIELD_TYPE=="multiselect") $multiselect = "Y";
921 }
922 }
923
924 break;
925
926 case "text":
927 case "textarea":
928 case "password":
929 case "email":
930 case "url":
931 case "hidden":
932 $fname = "form_".$FIELD_TYPE."_".$arAnswer["ID"];
933 $ANSWER_ID = intval($arAnswer["ID"]);
934 $z = CFormAnswer::GetByID($ANSWER_ID);
935 if ($zr = $z->Fetch())
936 {
938 "RESULT_ID" => $RESULT_ID,
939 "FORM_ID" => $WEB_FORM_ID,
940 "FIELD_ID" => $FIELD_ID,
941 "ANSWER_ID" => $ANSWER_ID,
942 "ANSWER_TEXT" => trim($zr["MESSAGE"]),
943 "ANSWER_VALUE" => $zr["VALUE"],
944 "USER_TEXT" => $arrVALUES[$fname]
945 );
946 $arrANSWER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_TEXT"]);
947 $arrANSWER_VALUE[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_VALUE"]);
948 $arrUSER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["USER_TEXT"]);
950 }
951
952 break;
953
954 case "date":
955
956 $fname = "form_".$FIELD_TYPE."_".$arAnswer["ID"];
957 $ANSWER_ID = intval($arAnswer["ID"]);
958 $USER_DATE = $arrVALUES[$fname];
959 if (CheckDateTime($USER_DATE))
960 {
961 $z = CFormAnswer::GetByID($ANSWER_ID);
962 if ($zr = $z->Fetch())
963 {
965 "RESULT_ID" => $RESULT_ID,
966 "FORM_ID" => $WEB_FORM_ID,
967 "FIELD_ID" => $FIELD_ID,
968 "ANSWER_ID" => $ANSWER_ID,
969 "ANSWER_TEXT" => trim($zr["MESSAGE"]),
970 "ANSWER_VALUE" => $zr["VALUE"],
971 "USER_DATE" => $USER_DATE,
972 "USER_TEXT" => $USER_DATE
973 );
974 $arrANSWER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_TEXT"]);
975 $arrANSWER_VALUE[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_VALUE"]);
976 $arrUSER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["USER_TEXT"]);
978 }
979 }
980 break;
981
982 case "image":
983
984 $fname = "form_".$FIELD_TYPE."_".$arAnswer["ID"];
985 $ANSWER_ID = intval($arAnswer["ID"]);
986 $arIMAGE = $arrVALUES[$fname] ?? $_FILES[$fname] ?? null;
987 $fid = 0;
988 $new_file = false;
989 if (!empty($arIMAGE["name"]) || !empty($arIMAGE["del"]))
990 {
991 $arIMAGE["old_file"] = $arrFILES[$ANSWER_ID]["USER_FILE_ID"];
992 $arIMAGE["del"] = $arrVALUES[$fname."_del"];
993 $arIMAGE["MODULE_ID"] = "form";
994 $new_file = true;
995 if (!empty($arIMAGE["del"]) || CFile::CheckImageFile($arIMAGE) == '')
996 {
997 $fid = CFile::SaveFile($arIMAGE, "form");
998 }
999 }
1000 else
1001 {
1002 $fid = $arrFILES[$ANSWER_ID]["USER_FILE_ID"];
1003 }
1004
1005 $fid = intval($fid);
1006 if ($fid>0)
1007 {
1008 $z = CFormAnswer::GetByID($ANSWER_ID);
1009 if ($zr = $z->Fetch())
1010 {
1011 $arFields = array(
1012 "RESULT_ID" => $RESULT_ID,
1013 "FORM_ID" => $WEB_FORM_ID,
1014 "FIELD_ID" => $FIELD_ID,
1015 "ANSWER_ID" => $ANSWER_ID,
1016 "ANSWER_TEXT" => trim($zr["MESSAGE"]),
1017 "ANSWER_VALUE" => $zr["VALUE"],
1018 "USER_FILE_ID" => $fid,
1019 "USER_FILE_IS_IMAGE" => "Y"
1020 );
1021 if ($new_file)
1022 {
1023 $arFields["USER_FILE_NAME"] = $arIMAGE["name"];
1024 $arFields["USER_FILE_SIZE"] = $arIMAGE["size"];
1025 $arFields["USER_FILE_HASH"] = md5(uniqid(mt_rand(), true).time());
1026
1027 }
1028 else
1029 {
1030 $arFields["USER_FILE_NAME"] = $arrFILES[$ANSWER_ID]["USER_FILE_NAME"];
1031 $arFields["USER_FILE_SIZE"] = $arrFILES[$ANSWER_ID]["USER_FILE_SIZE"];
1032 $arFields["USER_FILE_HASH"] = $arrFILES[$ANSWER_ID]["USER_FILE_HASH"];
1033 }
1034 $arFields["USER_TEXT"] = $arFields["USER_FILE_NAME"];
1035
1036 $arrANSWER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_TEXT"]);
1037 $arrANSWER_VALUE[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_VALUE"]);
1038 $arrUSER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["USER_TEXT"]);
1040 }
1041 }
1042
1043 break;
1044
1045 case "file":
1046
1047 $fname = "form_".$FIELD_TYPE."_".$arAnswer["ID"];
1048 $ANSWER_ID = intval($arAnswer["ID"]);
1049 $arFILE = $arrVALUES[$fname] ?? $_FILES[$fname] ?? null;
1050 $new_file = false;
1051
1052 if (!empty($arFILE["name"]) || !empty($arFILE["del"]))
1053 {
1054 $arFILE["old_file"] = $arrFILES[$ANSWER_ID]["USER_FILE_ID"];
1055 $arFILE["del"] = $arrVALUES[$fname."_del"];
1056 $arFILE["MODULE_ID"] = "form";
1057 $new_file = true;
1058 $original_name = $arFILE["name"];
1059 $upload_dir = COption::GetOptionString("form", "NOT_IMAGE_UPLOAD_DIR");
1060
1061 $fid = CFile::SaveFile($arFILE, $upload_dir);
1062 }
1063 else
1064 {
1065 $fid = $arrFILES[$ANSWER_ID]["USER_FILE_ID"];
1066 }
1067
1068 $fid = intval($fid);
1069
1070 if ($fid>0)
1071 {
1072 $z = CFormAnswer::GetByID($ANSWER_ID);
1073 if ($zr = $z->Fetch())
1074 {
1075 $arFields = array(
1076 "RESULT_ID" => $RESULT_ID,
1077 "FORM_ID" => $WEB_FORM_ID,
1078 "FIELD_ID" => $FIELD_ID,
1079 "ANSWER_ID" => $ANSWER_ID,
1080 "ANSWER_TEXT" => trim($zr["MESSAGE"]),
1081 "ANSWER_VALUE" => $zr["VALUE"],
1082 "USER_FILE_ID" => $fid,
1083 );
1084 if ($new_file)
1085 {
1086 $arFields["USER_FILE_NAME"] = $original_name;
1087 $arFields["USER_FILE_IS_IMAGE"] = "N";
1088 $arFields["USER_FILE_HASH"] = md5(uniqid(mt_rand(), true).time());
1089 $arFields["USER_FILE_SIZE"] = $arFILE["size"];
1090 }
1091 else
1092 {
1093 $arFields["USER_FILE_NAME"] = $arrFILES[$ANSWER_ID]["USER_FILE_NAME"];
1094 $arFields["USER_FILE_IS_IMAGE"] = $arrFILES[$ANSWER_ID]["USER_FILE_IS_IMAGE"];
1095 $arFields["USER_FILE_HASH"] = $arrFILES[$ANSWER_ID]["USER_FILE_HASH"];
1096 $arFields["USER_FILE_SUFFIX"] = $arrFILES[$ANSWER_ID]["USER_FILE_SUFFIX"];
1097 $arFields["USER_FILE_SIZE"] = $arrFILES[$ANSWER_ID]["USER_FILE_SIZE"];
1098 }
1099 $arFields["USER_TEXT"] = $arFields["USER_FILE_NAME"];
1100
1101 $arrANSWER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_TEXT"]);
1102 $arrANSWER_VALUE[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_VALUE"]);
1103 $arrUSER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["USER_TEXT"]);
1105 }
1106 }
1107
1108 break;
1109
1110 endswitch;
1111 }
1112 }
1113 // update fields for searching
1114 $arrANSWER_TEXT_upd = $arrANSWER_TEXT[$FIELD_ID];
1115 $arrANSWER_VALUE_upd = $arrANSWER_VALUE[$FIELD_ID];
1116 $arrUSER_TEXT_upd = $arrUSER_TEXT[$FIELD_ID];
1117 TrimArr($arrANSWER_TEXT_upd);
1118 TrimArr($arrANSWER_VALUE_upd);
1119 TrimArr($arrUSER_TEXT_upd);
1120 if (is_array($arrANSWER_TEXT_upd)) $vl_ANSWER_TEXT = trim(implode(" ",$arrANSWER_TEXT_upd));
1121 if (is_array($arrANSWER_VALUE_upd)) $vl_ANSWER_VALUE = trim(implode(" ",$arrANSWER_VALUE_upd));
1122 if (is_array($arrUSER_TEXT_upd)) $vl_USER_TEXT = trim(implode(" ",$arrUSER_TEXT_upd));
1123 if ($vl_ANSWER_TEXT == '') $vl_ANSWER_TEXT = false;
1124 if ($vl_ANSWER_VALUE == '') $vl_ANSWER_VALUE = false;
1125 if ($vl_USER_TEXT == '') $vl_USER_TEXT = false;
1126 $arFields = array(
1127 "ANSWER_TEXT_SEARCH" => $vl_ANSWER_TEXT,
1128 "ANSWER_VALUE_SEARCH" => $vl_ANSWER_VALUE,
1129 "USER_TEXT_SEARCH" => $vl_USER_TEXT
1130 );
1131 CFormResult::UpdateField($arFields, $RESULT_ID, $FIELD_ID);
1132 }
1133 else // update additional fields
1134 {
1135 $FIELD_TYPE = $arQuestion["FIELD_TYPE"];
1136 switch ($FIELD_TYPE) :
1137
1138 case "text":
1139 $fname = "form_textarea_ADDITIONAL_".$arQuestion["ID"];
1140 $arFields = array(
1141 "RESULT_ID" => $RESULT_ID,
1142 "FORM_ID" => $WEB_FORM_ID,
1143 "FIELD_ID" => $FIELD_ID,
1144 "USER_TEXT" => $arrVALUES[$fname],
1145 "USER_TEXT_SEARCH" => mb_strtoupper($arrVALUES[$fname])
1146 );
1148 break;
1149
1150 case "integer":
1151
1152 $fname = "form_text_ADDITIONAL_".$arQuestion["ID"];
1153 $arFields = array(
1154 "RESULT_ID" => $RESULT_ID,
1155 "FORM_ID" => $WEB_FORM_ID,
1156 "FIELD_ID" => $FIELD_ID,
1157 "USER_TEXT" => $arrVALUES[$fname],
1158 "USER_TEXT_SEARCH" => mb_strtoupper($arrVALUES[$fname])
1159 );
1161
1162 break;
1163
1164 case "date":
1165
1166 $fname = "form_date_ADDITIONAL_".$arQuestion["ID"];
1167 $USER_DATE = $arrVALUES[$fname];
1168 if (CheckDateTime($USER_DATE))
1169 {
1170 $arFields = array(
1171 "RESULT_ID" => $RESULT_ID,
1172 "FORM_ID" => $WEB_FORM_ID,
1173 "FIELD_ID" => $FIELD_ID,
1174 "USER_DATE" => $USER_DATE,
1175 "USER_TEXT" => $USER_DATE,
1176 "USER_TEXT_SEARCH" => mb_strtoupper($USER_DATE)
1177 );
1179 }
1180
1181 break;
1182 endswitch;
1183 }
1184 }
1185
1186 foreach (GetModuleEvents('form', 'onAfterResultUpdate', true) as $arEvent)
1187 {
1188 ExecuteModuleEventEx($arEvent, array($WEB_FORM_ID, $RESULT_ID, $CHECK_RIGHTS));
1189 }
1190
1191 // call "after status update" handler
1192 CForm::ExecHandlerAfterChangeStatus($RESULT_ID, "UPDATE");
1193 return true;
1194 }
1195 }
1196 }
1197 }
1198 }
1199 return false;
1200 }
1201
1202 // set question or field value in existed result
1203 public static function SetField($RESULT_ID, $FIELD_SID, $VALUE=false)
1204 {
1205 global $DB;
1206
1207 $RESULT_ID = intval($RESULT_ID);
1208 if ($RESULT_ID > 0)
1209 {
1210 $strSql = "
1211 SELECT
1212 FORM_ID
1213 FROM
1214 b_form_result
1215 WHERE
1216 ID = $RESULT_ID
1217 ";
1218 $z = $DB->Query($strSql);
1219 $zr = $z->Fetch();
1220 $WEB_FORM_ID = $zr["FORM_ID"];
1221 if (intval($WEB_FORM_ID)>0)
1222 {
1223 $strSql = "
1224 SELECT
1225 ID,
1226 FIELD_TYPE,
1227 ADDITIONAL
1228 FROM
1229 b_form_field
1230 WHERE
1231 FORM_ID = $WEB_FORM_ID
1232 and SID = '".$DB->ForSql($FIELD_SID,50)."'
1233 ";
1234 $q = $DB->Query($strSql);
1235 if ($arField = $q->Fetch())
1236 {
1237 $FIELD_ID = $arField["ID"];
1238 $IS_FIELD = $arField["ADDITIONAL"]=="Y";
1239
1240 if ($IS_FIELD)
1241 {
1242 $strSql = "
1243 DELETE FROM
1244 b_form_result_answer
1245 WHERE
1246 RESULT_ID = $RESULT_ID
1247 and FIELD_ID = $FIELD_ID
1248 ";
1249 //echo "<pre>".$strSql."</pre>";
1250 $DB->Query($strSql);
1251
1252 if ($VALUE <> '')
1253 {
1254
1255 $FIELD_TYPE = $arField["FIELD_TYPE"];
1256 switch ($FIELD_TYPE) :
1257
1258 case "text":
1259 case "integer":
1260
1261 $arFields = array(
1262 "RESULT_ID" => $RESULT_ID,
1263 "FORM_ID" => $WEB_FORM_ID,
1264 "FIELD_ID" => $FIELD_ID,
1265 "USER_TEXT" => $VALUE,
1266 "USER_TEXT_SEARCH" => mb_strtoupper($VALUE)
1267 );
1269 break;
1270
1271 case "date":
1272
1273 if (CheckDateTime($VALUE))
1274 {
1275 $arFields = array(
1276 "RESULT_ID" => $RESULT_ID,
1277 "FORM_ID" => $WEB_FORM_ID,
1278 "FIELD_ID" => $FIELD_ID,
1279 "USER_DATE" => $VALUE,
1280 "USER_TEXT" => $VALUE,
1281 "USER_TEXT_SEARCH" => mb_strtoupper($VALUE)
1282 );
1284 }
1285 break;
1286
1287 endswitch;
1288 }
1289 }
1290 else
1291 {
1292 $strSql = "
1293 SELECT
1294 USER_FILE_ID
1295 FROM
1296 b_form_result_answer
1297 WHERE
1298 RESULT_ID = $RESULT_ID
1299 and FIELD_ID = $FIELD_ID
1300 and USER_FILE_ID>0
1301 ";
1302 $rsFiles = $DB->Query($strSql);
1303 while ($arFile = $rsFiles->Fetch()) CFile::Delete($arFile["USER_FILE_ID"]);
1304
1305 $strSql = "
1306 DELETE FROM
1307 b_form_result_answer
1308 WHERE
1309 RESULT_ID = $RESULT_ID
1310 and FIELD_ID = $FIELD_ID
1311 ";
1312 $DB->Query($strSql);
1313
1314 if (is_array($VALUE) && count($VALUE)>0)
1315 {
1316 $arrANSWER_TEXT = array();
1317 $arrANSWER_VALUE = array();
1318 $arrUSER_TEXT = array();
1319 foreach ($VALUE as $ANSWER_ID => $val)
1320 {
1321 $rsAnswer = CFormAnswer::GetByID($ANSWER_ID);
1322 if ($arAnswer = $rsAnswer->Fetch())
1323 {
1324 switch ($arAnswer["FIELD_TYPE"])
1325 {
1326
1327 case "radio":
1328 case "dropdown":
1329 case "checkbox":
1330 case "multiselect":
1331
1332 $arFields = array(
1333 "RESULT_ID" => $RESULT_ID,
1334 "FORM_ID" => $WEB_FORM_ID,
1335 "FIELD_ID" => $FIELD_ID,
1336 "ANSWER_ID" => $ANSWER_ID,
1337 "ANSWER_TEXT" => trim($arAnswer["MESSAGE"]),
1338 "ANSWER_VALUE" => $arAnswer["VALUE"],
1339 );
1341 $arrANSWER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_TEXT"]);
1342 $arrANSWER_VALUE[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_VALUE"]);
1343
1344 break;
1345
1346 case "text":
1347 case "textarea":
1348 case "password":
1349 case "email":
1350 case "url":
1351 case "hidden":
1352
1353 $arFields = array(
1354 "RESULT_ID" => $RESULT_ID,
1355 "FORM_ID" => $WEB_FORM_ID,
1356 "FIELD_ID" => $FIELD_ID,
1357 "ANSWER_ID" => $ANSWER_ID,
1358 "ANSWER_TEXT" => trim($arAnswer["MESSAGE"]),
1359 "ANSWER_VALUE" => $arAnswer["VALUE"],
1360 "USER_TEXT" => $val,
1361 );
1363 $arrANSWER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_TEXT"]);
1364 $arrANSWER_VALUE[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_VALUE"]);
1365 $arrUSER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["USER_TEXT"]);
1366
1367 break;
1368
1369 case "date":
1370
1371 if (CheckDateTime($val))
1372 {
1373 $arFields = array(
1374 "RESULT_ID" => $RESULT_ID,
1375 "FORM_ID" => $WEB_FORM_ID,
1376 "FIELD_ID" => $FIELD_ID,
1377 "ANSWER_ID" => $ANSWER_ID,
1378 "ANSWER_TEXT" => trim($arAnswer["MESSAGE"]),
1379 "ANSWER_VALUE" => $arAnswer["VALUE"],
1380 "USER_TEXT" => $val,
1381 "USER_DATE" => $val
1382 );
1384 $arrANSWER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_TEXT"]);
1385 $arrANSWER_VALUE[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_VALUE"]);
1386 $arrUSER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["USER_TEXT"]);
1387 }
1388
1389 break;
1390
1391 case "image":
1392
1393 $arIMAGE = $val;
1394 if (is_array($arIMAGE) && count($arIMAGE)>0)
1395 {
1396 $arIMAGE["MODULE_ID"] = "form";
1397 if (CFile::CheckImageFile($arIMAGE) == '')
1398 {
1399 $fid = CFile::SaveFile($arIMAGE, "form");
1400 if (intval($fid)>0)
1401 {
1402 $arFields = array(
1403 "RESULT_ID" => $RESULT_ID,
1404 "FORM_ID" => $WEB_FORM_ID,
1405 "FIELD_ID" => $FIELD_ID,
1406 "ANSWER_ID" => $ANSWER_ID,
1407 "ANSWER_TEXT" => trim($arAnswer["MESSAGE"]),
1408 "ANSWER_VALUE" => $arAnswer["VALUE"],
1409 "USER_FILE_ID" => $fid,
1410 "USER_FILE_IS_IMAGE" => "Y",
1411 "USER_FILE_NAME" => $arIMAGE["name"],
1412 "USER_FILE_SIZE" => $arIMAGE["size"],
1413 "USER_TEXT" => $arIMAGE["name"]
1414 );
1416 $arrANSWER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_TEXT"]);
1417 $arrANSWER_VALUE[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_VALUE"]);
1418 $arrUSER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["USER_TEXT"]);
1419 }
1420 }
1421 }
1422
1423 break;
1424
1425 case "file":
1426
1427 $arFILE = $val;
1428 if (is_array($arFILE) && count($arFILE)>0)
1429 {
1430 $arFILE["MODULE_ID"] = "form";
1431 $original_name = $arFILE["name"];
1432 $upload_dir = COption::GetOptionString("form", "NOT_IMAGE_UPLOAD_DIR");
1433 $fid = CFile::SaveFile($arFILE, $upload_dir);
1434 if (intval($fid)>0)
1435 {
1436 $arFields = array(
1437 "RESULT_ID" => $RESULT_ID,
1438 "FORM_ID" => $WEB_FORM_ID,
1439 "FIELD_ID" => $FIELD_ID,
1440 "ANSWER_ID" => $ANSWER_ID,
1441 "ANSWER_TEXT" => trim($arAnswer["MESSAGE"]),
1442 "ANSWER_VALUE" => $arAnswer["VALUE"],
1443 "USER_FILE_ID" => $fid,
1444 "USER_FILE_IS_IMAGE" => "N",
1445 "USER_FILE_NAME" => $original_name,
1446 "USER_FILE_HASH" => md5(uniqid(mt_rand(), true).time()),
1447 "USER_FILE_SIZE" => $arFILE["size"],
1448 "USER_TEXT" => $original_name,
1449 );
1451 $arrANSWER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_TEXT"]);
1452 $arrANSWER_VALUE[$FIELD_ID][] = mb_strtoupper($arFields["ANSWER_VALUE"]);
1453 $arrUSER_TEXT[$FIELD_ID][] = mb_strtoupper($arFields["USER_TEXT"]);
1454 }
1455 }
1456
1457 break;
1458 }
1459 }
1460 }
1461 // update search fields
1462 $arrANSWER_TEXT_upd = $arrANSWER_TEXT[$FIELD_ID];
1463 $arrANSWER_VALUE_upd = $arrANSWER_VALUE[$FIELD_ID];
1464 $arrUSER_TEXT_upd = $arrUSER_TEXT[$FIELD_ID];
1465 TrimArr($arrANSWER_TEXT_upd);
1466 TrimArr($arrANSWER_VALUE_upd);
1467 TrimArr($arrUSER_TEXT_upd);
1468 if (is_array($arrANSWER_TEXT_upd)) $vl_ANSWER_TEXT = trim(implode(" ",$arrANSWER_TEXT_upd));
1469 if (is_array($arrANSWER_VALUE_upd)) $vl_ANSWER_VALUE = trim(implode(" ",$arrANSWER_VALUE_upd));
1470 if (is_array($arrUSER_TEXT_upd)) $vl_USER_TEXT = trim(implode(" ",$arrUSER_TEXT_upd));
1471 if ($vl_ANSWER_TEXT == '') $vl_ANSWER_TEXT = false;
1472 if ($vl_ANSWER_VALUE == '') $vl_ANSWER_VALUE = false;
1473 if ($vl_USER_TEXT == '') $vl_USER_TEXT = false;
1474 $arFields = array(
1475 "ANSWER_TEXT_SEARCH" => $vl_ANSWER_TEXT,
1476 "ANSWER_VALUE_SEARCH" => $vl_ANSWER_VALUE,
1477 "USER_TEXT_SEARCH" => $vl_USER_TEXT
1478 );
1479 CFormResult::UpdateField($arFields, $RESULT_ID, $FIELD_ID);
1480 }
1481 }
1482 return true;
1483 }
1484 }
1485 }
1486 return false;
1487 }
1488
1489 // delete result
1490 public static function Delete($RESULT_ID, $CHECK_RIGHTS="Y")
1491 {
1492// echo $RESULT_ID; exit();
1493 global $DB, $USER, $APPLICATION, $strError;
1494
1495 $strError = '';
1496
1497 $RESULT_ID = intval($RESULT_ID);
1498 $strSql = "SELECT FORM_ID FROM b_form_result WHERE ID='".$RESULT_ID."'";
1499 $q = $DB->Query($strSql);
1500 if ($qr = $q->Fetch())
1501 {
1502 // rights check
1503 $F_RIGHT = ($CHECK_RIGHTS!="Y") ? 20 : CForm::GetPermission($qr["FORM_ID"]);
1504 if ($F_RIGHT>=20) $RIGHT_OK = "Y";
1505 else
1506 {
1507 $strSql = "SELECT USER_ID FROM b_form_result WHERE ID='".$RESULT_ID."'";
1508 $z = $DB->Query($strSql);
1509 $zr = $z->Fetch();
1510 if ($F_RIGHT>=15 && intval($USER->GetID())==$zr["USER_ID"]) $RIGHT_OK = "Y";
1511 }
1512
1513 if ($RIGHT_OK=="Y")
1514 {
1515 // rights check by status
1516 if ($CHECK_RIGHTS == 'Y')
1517 {
1518 $arrRESULT_PERMISSION = CFormResult::GetPermissions($RESULT_ID);
1519 $RIGHT_OK = in_array("DELETE", $arrRESULT_PERMISSION) ? 'Y' : 'N';
1520 }
1521
1522 if ($RIGHT_OK=="Y") // delete rights ok
1523 {
1524 foreach (GetModuleEvents('form', 'onBeforeResultDelete', true) as $arEvent)
1525 {
1526 ExecuteModuleEventEx($arEvent, array($qr["FORM_ID"], $RESULT_ID, $CHECK_RIGHTS));
1527
1528 if ($ex = $APPLICATION->GetException())
1529 {
1530 $strError .= $ex->GetString().'<br />';
1531 $APPLICATION->ResetException();
1532 }
1533 }
1534
1535 if ($strError == '')
1536 {
1537 CForm::ExecHandlerBeforeChangeStatus($RESULT_ID, "DELETE");
1538 if (CFormResult::Reset($RESULT_ID, true, "Y"))
1539 {
1540 // delete result
1541 $DB->Query("DELETE FROM b_form_result WHERE ID='$RESULT_ID'");
1542 return true;
1543 }
1544 }
1545 }
1546 }
1547 else $strError .= GetMessage("FORM_ERROR_ACCESS_DENIED")."<br>";
1548 }
1549 else $strError .= GetMessage("FORM_ERROR_RESULT_NOT_FOUND")."<br>";
1550 return false;
1551 }
1552
1553 // clear result
1554 public static function Reset($RESULT_ID, $DELETE_FILES=true, $DELETE_ADDITIONAL="N", $arrException=array())
1555 {
1556 global $DB;
1557
1558 $RESULT_ID = intval($RESULT_ID);
1559 $strExc = '';
1560
1561 if (is_array($arrException) && count($arrException)>0)
1562 {
1563 foreach ($arrException as $field_id)
1564 {
1565 $strExc .= ($strExc === '' ? '' : "','").intval($field_id);
1566 }
1567 }
1568
1569 if ($DELETE_FILES)
1570 {
1571 $sqlExc = "";
1572 if ($strExc <> '') $sqlExc = " and FIELD_ID not in ('$strExc') ";
1573 // delete result files
1574 $strSql = "SELECT USER_FILE_ID, ANSWER_ID FROM b_form_result_answer WHERE RESULT_ID='$RESULT_ID' and USER_FILE_ID>0 $sqlExc";
1575 $z = $DB->Query($strSql);
1576 while ($zr = $z->Fetch()) CFile::Delete($zr["USER_FILE_ID"]);
1577 }
1578
1579 if ($DELETE_ADDITIONAL=="Y")
1580 {
1581 $sqlExc = "";
1582 if ($strExc <> '') $sqlExc = " and FIELD_ID not in ('$strExc') ";
1583 $DB->Query("DELETE FROM b_form_result_answer WHERE RESULT_ID='$RESULT_ID' $sqlExc");
1584 }
1585 else
1586 {
1587 $sqlExc = "";
1588 if ($strExc <> '') $sqlExc = "and F.ID not in ('".$strExc."'')";
1589 $strSql = "
1590 SELECT
1591 F.ID
1592 FROM
1593 b_form_result R,
1594 b_form_field F
1595 WHERE
1596 R.ID = $RESULT_ID
1597 and F.FORM_ID = R.FORM_ID
1598 and F.ADDITIONAL = 'N'
1599 $sqlExc
1600 ";
1601 $z = $DB->Query($strSql);
1602 while ($zr=$z->Fetch()) $arrD[] = $zr["ID"];
1603 if (is_array($arrD) && count($arrD)>0) $strD = implode(",",$arrD);
1604 if ($strD <> '')
1605 {
1606 $DB->Query("DELETE FROM b_form_result_answer WHERE RESULT_ID='$RESULT_ID' and FIELD_ID in ($strD)");
1607 }
1608 }
1609 return true;
1610 }
1611
1612 // update result status
1613 public static function SetStatus($RESULT_ID, $NEW_STATUS_ID, $CHECK_RIGHTS="Y")
1614 {
1615 global $DB, $USER, $strError, $APPLICATION;
1616 $NEW_STATUS_ID = intval($NEW_STATUS_ID);
1617 $RESULT_ID = intval($RESULT_ID);
1618
1619 if ($RESULT_ID <= 0 || $NEW_STATUS_ID <= 0)
1620 return false;
1621
1622 $strSql = "SELECT USER_ID, FORM_ID FROM b_form_result WHERE ID='".$RESULT_ID."'";
1623 $z = $DB->Query($strSql);
1624 if ($zr = $z->Fetch())
1625 {
1626 $WEB_FORM_ID = intval($zr["FORM_ID"]);
1627
1628 // rights check
1629 $RIGHT_OK = "N";
1630 if ($CHECK_RIGHTS!="Y")
1631 {
1632 $dbRes = CFormStatus::GetByID($NEW_STATUS_ID);
1633 if ($dbRes->Fetch())
1634 {
1635 $RIGHT_OK="Y";
1636 }
1637 }
1638 else
1639 {
1640 // form rights
1641 $F_RIGHT = CForm::GetPermission($WEB_FORM_ID);
1642 if ($F_RIGHT>=20 || ($F_RIGHT>=15 && $USER->GetID()==$zr["USER_ID"]))
1643 {
1644 // result rights
1645 $arrRESULT_PERMISSION = CFormResult::GetPermissions($RESULT_ID);
1646
1647 // new status rights
1648 $arrNEW_STATUS_PERMISSION = CFormStatus::GetPermissions($NEW_STATUS_ID);
1649
1650 if (in_array("EDIT", $arrRESULT_PERMISSION) && in_array("MOVE", $arrNEW_STATUS_PERMISSION))
1651 {
1652 $RIGHT_OK = "Y";
1653 }
1654 }
1655 }
1656
1657 if ($RIGHT_OK=="Y")
1658 {
1659 foreach (GetModuleEvents('form', 'onBeforeResultStatusChange', true) as $arEvent)
1660 {
1661 ExecuteModuleEventEx($arEvent, array($WEB_FORM_ID, $RESULT_ID, &$NEW_STATUS_ID, $CHECK_RIGHTS));
1662
1663 if ($ex = $APPLICATION->GetException())
1664 $strError .= $ex->GetString().'<br />';
1665 }
1666
1667 if ($strError == '')
1668 {
1669 // call handler before change status
1670 CForm::ExecHandlerBeforeChangeStatus($RESULT_ID, "SET_STATUS", $NEW_STATUS_ID);
1671 $arFields = Array(
1672 "TIMESTAMP_X" => $DB->GetNowFunction(),
1673 "STATUS_ID" => "'".intval($NEW_STATUS_ID)."'"
1674 );
1675 $DB->Update("b_form_result",$arFields,"WHERE ID='".$RESULT_ID."'");
1676
1677 foreach (GetModuleEvents('form', 'onAfterResultStatusChange', true) as $arEvent)
1678 {
1679 ExecuteModuleEventEx($arEvent, array($WEB_FORM_ID, $RESULT_ID, $NEW_STATUS_ID, $CHECK_RIGHTS));
1680 }
1681
1682 // call handler after change status
1683 CForm::ExecHandlerAfterChangeStatus($RESULT_ID, "SET_STATUS");
1684 return true;
1685 }
1686 }
1687 else $strError .= GetMessage("FORM_ERROR_ACCESS_DENIED")."<br>";
1688 }
1689 else $strError .= GetMessage("FORM_ERROR_RESULT_NOT_FOUND")."<br>";
1690 return false;
1691 }
1692
1693 //send form event notification;
1694 public static function Mail($RESULT_ID, $TEMPLATE_ID = false)
1695 {
1696 global $APPLICATION, $MESS, $strError;
1697
1698 $RESULT_ID = intval($RESULT_ID);
1699
1700 CTimeZone::Disable();
1701 $arrResult = CFormResult::GetDataByID($RESULT_ID, array(), $arrRES, $arrANSWER);
1702 CTimeZone::Enable();
1703 if ($arrResult)
1704 {
1705 $z = CForm::GetByID($arrRES["FORM_ID"]);
1706 if ($arrFORM = $z->Fetch())
1707 {
1708 $TEMPLATE_ID = intval($TEMPLATE_ID);
1709
1710 $arrFormSites = CForm::GetSiteArray($arrRES["FORM_ID"]);
1711 $arrFormSites = (is_array($arrFormSites)) ? $arrFormSites : array();
1712
1713 if (!defined('SITE_ID') || !in_array(SITE_ID, $arrFormSites))
1714 return true;
1715
1716 $rs = CSite::GetList("sort", "asc", array('ID' => implode('|', $arrFormSites)));
1717 $arrSites = array();
1718 while ($ar = $rs->Fetch())
1719 {
1720 $arrSites[$ar["ID"]] = $ar;
1721 }
1722
1723 $arrFormTemplates = CForm::GetMailTemplateArray($arrRES["FORM_ID"]);
1724 $arrFormTemplates = (is_array($arrFormTemplates)) ? $arrFormTemplates : array();
1725
1726 $arrTemplates = array();
1727 $rs = CEventMessage::GetList("id", "asc", array(
1728 "ACTIVE" => "Y",
1729 "SITE_ID" => SITE_ID,
1730 "EVENT_NAME" => $arrFORM["MAIL_EVENT_TYPE"]
1731 ));
1732
1733 while ($ar = $rs->Fetch())
1734 {
1735 if ($TEMPLATE_ID>0)
1736 {
1737 if ($TEMPLATE_ID == $ar["ID"])
1738 {
1739 $arrTemplates[$ar["ID"]] = $ar;
1740 break;
1741 }
1742 }
1743 elseif (in_array($ar["ID"],$arrFormTemplates)) $arrTemplates[$ar["ID"]] = $ar;
1744 }
1745
1746 foreach($arrTemplates as $arrTemplate)
1747 {
1748
1749 $OLD_MESS = $MESS;
1750 $MESS = array();
1751 IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/form/admin/form_mail.php", $arrSites[$arrTemplate["SITE_ID"]]["LANGUAGE_ID"]);
1752
1753 $USER_AUTH = " ";
1754 if (intval($arrRES["USER_ID"])>0)
1755 {
1756 $w = CUser::GetByID($arrRES["USER_ID"]);
1757 $arrUSER = $w->Fetch();
1758 $USER_ID = $arrUSER["ID"];
1759 $USER_EMAIL = $arrUSER["EMAIL"];
1760 $USER_NAME = $arrUSER["NAME"]." ".$arrUSER["LAST_NAME"];
1761 if ($arrRES["USER_AUTH"]!="Y") $USER_AUTH="(".GetMessage("FORM_NOT_AUTHORIZED").")";
1762 }
1763 else
1764 {
1765 $USER_ID = GetMessage("FORM_NOT_REGISTERED");
1766 $USER_NAME = "";
1767 $USER_AUTH = "";
1768 $USER_EMAIL = "";
1769 }
1770
1771 $arEventFields = array(
1772 "RS_FORM_ID" => $arrFORM["ID"],
1773 "RS_FORM_NAME" => $arrFORM["NAME"],
1774 "RS_FORM_VARNAME" => $arrFORM["SID"],
1775 "RS_FORM_SID" => $arrFORM["SID"],
1776 "RS_RESULT_ID" => $arrRES["ID"],
1777 "RS_DATE_CREATE" => $arrRES["DATE_CREATE"],
1778 "RS_USER_ID" => $USER_ID,
1779 "RS_USER_EMAIL" => $USER_EMAIL,
1780 "RS_USER_NAME" => $USER_NAME,
1781 "RS_USER_AUTH" => $USER_AUTH,
1782 "RS_STAT_GUEST_ID" => $arrRES["STAT_GUEST_ID"],
1783 "RS_STAT_SESSION_ID" => $arrRES["STAT_SESSION_ID"]
1784 );
1785 $w = CFormField::GetList($arrFORM["ID"], "ALL");
1786 while ($wr=$w->Fetch())
1787 {
1788 $answer = "";
1789 $answer_raw = '';
1790 if (is_array($arrResult[$wr["SID"]]))
1791 {
1792 $bHasDiffTypes = false;
1793 $lastType = '';
1794 foreach ($arrResult[$wr['SID']] as $arrA)
1795 {
1796 if ($lastType == '') $lastType = $arrA['FIELD_TYPE'];
1797 elseif ($arrA['FIELD_TYPE'] != $lastType)
1798 {
1799 $bHasDiffTypes = true;
1800 break;
1801 }
1802 }
1803
1804 foreach($arrResult[$wr["SID"]] as $arrA)
1805 {
1806 if ($wr['ADDITIONAL'] == 'Y')
1807 $arrA['FIELD_TYPE'] = $wr['FIELD_TYPE'];
1808
1809 $USER_TEXT_EXIST = (trim($arrA["USER_TEXT"]) <> '');
1810 $ANSWER_TEXT_EXIST = (trim($arrA["ANSWER_TEXT"]) <> '');
1811 $ANSWER_VALUE_EXIST = (trim($arrA["ANSWER_VALUE"]) <> '');
1812 $USER_FILE_EXIST = (intval($arrA["USER_FILE_ID"])>0);
1813
1814 if ($arrTemplate["BODY_TYPE"]=="html")
1815 {
1816 if (
1817 $bHasDiffTypes
1818 &&
1819 !$USER_TEXT_EXIST
1820 &&
1821 (
1822 $arrA['FIELD_TYPE'] == 'text'
1823 ||
1824 $arrA['FIELD_TYPE'] == 'textarea'
1825 )
1826 )
1827 continue;
1828
1829 if (trim($answer) <> '') $answer .= "<br />";
1830 if (trim($answer_raw) <> '') $answer_raw .= ",";
1831
1832 if ($ANSWER_TEXT_EXIST)
1833 $answer .= $arrA["ANSWER_TEXT"].': ';
1834
1835 switch ($arrA['FIELD_TYPE'])
1836 {
1837 case 'text':
1838 case 'textarea':
1839 case 'hidden':
1840 case 'date':
1841 case 'password':
1842 case 'integer':
1843
1844 if ($USER_TEXT_EXIST)
1845 {
1846 $answer .= trim($arrA["USER_TEXT"]);
1847 $answer_raw .= trim($arrA["USER_TEXT"]);
1848 }
1849
1850 break;
1851
1852 case 'email':
1853 case 'url':
1854
1855 if ($USER_TEXT_EXIST)
1856 {
1857 $answer .= '<a href="'.($arrA['FIELD_TYPE'] == 'email' ? 'mailto:' : '').trim($arrA["USER_TEXT"]).'">'.trim($arrA["USER_TEXT"]).'</a>';
1858 $answer_raw .= trim($arrA["USER_TEXT"]);
1859 }
1860
1861 break;
1862
1863 case 'checkbox':
1864 case 'multiselect':
1865 case 'radio':
1866 case 'dropdown':
1867
1868 if ($ANSWER_TEXT_EXIST)
1869 {
1870 $answer = mb_substr($answer, 0, -2).' ';
1871 $answer_raw .= $arrA['ANSWER_TEXT'];
1872 }
1873
1874 if ($ANSWER_VALUE_EXIST)
1875 {
1876 $answer .= '('.$arrA['ANSWER_VALUE'].') ';
1877 if (!$ANSWER_TEXT_EXIST)
1878 $answer_raw .= $arrA['ANSWER_VALUE'];
1879 }
1880
1881 if (!$ANSWER_VALUE_EXIST && !$ANSWER_TEXT_EXIST)
1882 $answer_raw .= $arrA['ANSWER_ID'];
1883
1884 $answer .= '['.$arrA['ANSWER_ID'].']';
1885
1886 break;
1887
1888 case 'file':
1889 case 'image':
1890
1891 if ($USER_FILE_EXIST)
1892 {
1893 $f = CFile::GetByID($arrA["USER_FILE_ID"]);
1894 if ($fr = $f->Fetch())
1895 {
1896 $file_size = CFile::FormatSize($fr["FILE_SIZE"]);
1897 $url = ($APPLICATION->IsHTTPS() ? "https://" : "http://").$_SERVER["HTTP_HOST"]. "/bitrix/tools/form_show_file.php?rid=".$RESULT_ID. "&hash=".$arrA["USER_FILE_HASH"]."&lang=".LANGUAGE_ID;
1898
1899 if ($arrA["USER_FILE_IS_IMAGE"]=="Y")
1900 {
1901 $answer .= "<a href=\"$url\">".$arrA["USER_FILE_NAME"]."</a> [".$fr["WIDTH"]." x ".$fr["HEIGHT"]."] (".$file_size.")";
1902 }
1903 else
1904 {
1905 $answer .= "<a href=\"$url&action=download\">".$arrA["USER_FILE_NAME"]."</a> (".$file_size.")";
1906 }
1907
1908 $answer_raw .= $arrA['USER_FILE_NAME'];
1909 }
1910 }
1911
1912 break;
1913 }
1914 }
1915 else
1916 {
1917 if (
1918 $bHasDiffTypes
1919 &&
1920 !$USER_TEXT_EXIST
1921 &&
1922 (
1923 $arrA['FIELD_TYPE'] == 'text'
1924 ||
1925 $arrA['FIELD_TYPE'] == 'textarea'
1926 )
1927 )
1928 continue;
1929
1930 if (trim($answer) <> '') $answer .= "\n";
1931 if (trim($answer_raw) <> '') $answer_raw .= ",";
1932
1933 if ($ANSWER_TEXT_EXIST)
1934 $answer .= $arrA["ANSWER_TEXT"].': ';
1935
1936 switch ($arrA['FIELD_TYPE'])
1937 {
1938 case 'text':
1939 case 'textarea':
1940 case 'email':
1941 case 'url':
1942 case 'hidden':
1943 case 'date':
1944 case 'password':
1945 case 'integer':
1946
1947 if ($USER_TEXT_EXIST)
1948 {
1949 $answer .= trim($arrA["USER_TEXT"]);
1950 $answer_raw .= trim($arrA["USER_TEXT"]);
1951 }
1952
1953 break;
1954
1955 case 'checkbox':
1956 case 'multiselect':
1957 case 'radio':
1958 case 'dropdown':
1959
1960 if ($ANSWER_TEXT_EXIST)
1961 {
1962 $answer = mb_substr($answer, 0, -2).' ';
1963 $answer_raw .= $arrA['ANSWER_TEXT'];
1964 }
1965
1966 if ($ANSWER_VALUE_EXIST)
1967 {
1968 $answer .= '('.$arrA['ANSWER_VALUE'].') ';
1969 if (!$ANSWER_TEXT_EXIST)
1970 {
1971 $answer_raw .= $arrA['ANSWER_VALUE'];
1972 }
1973 }
1974
1975 if (!$ANSWER_VALUE_EXIST && !$ANSWER_TEXT_EXIST)
1976 {
1977 $answer_raw .= $arrA['ANSWER_ID'];
1978 }
1979
1980 $answer .= '['.$arrA['ANSWER_ID'].']';
1981
1982 break;
1983
1984 case 'file':
1985 case 'image':
1986
1987 if ($USER_FILE_EXIST)
1988 {
1989 $f = CFile::GetByID($arrA["USER_FILE_ID"]);
1990 if ($fr = $f->Fetch())
1991 {
1992 $file_size = CFile::FormatSize($fr["FILE_SIZE"]);
1993 $url = ($APPLICATION->IsHTTPS() ? "https://" : "http://").$_SERVER["HTTP_HOST"]. "/bitrix/tools/form_show_file.php?rid=".$RESULT_ID. "&hash=".$arrA["USER_FILE_HASH"]."&action=download&lang=".LANGUAGE_ID;
1994
1995 if ($arrA["USER_FILE_IS_IMAGE"]=="Y")
1996 {
1997 $answer .= $arrA["USER_FILE_NAME"]." [".$fr["WIDTH"]." x ".$fr["HEIGHT"]."] (".$file_size.")\n".$url;
1998 }
1999 else
2000 {
2001 $answer .= $arrA["USER_FILE_NAME"]." (".$file_size.")\n".$url."&action=download";
2002 }
2003 }
2004
2005 $answer_raw .= $arrA['USER_FILE_NAME'];
2006 }
2007
2008 break;
2009 }
2010 }
2011 }
2012 }
2013
2014 $arEventFields[$wr["SID"]] = ($answer == '') ? " " : $answer;
2015 $arEventFields[$wr["SID"].'_RAW'] = ($answer_raw == '') ? " " : $answer_raw;
2016 }
2017
2018 CEvent::Send($arrTemplate["EVENT_NAME"], $arrTemplate["SITE_ID"], $arEventFields, "Y", $arrTemplate["ID"]);
2019 $MESS = $OLD_MESS;
2020 } //foreach($arrTemplates as $arrTemplate)
2021 return true;
2022 }
2023 else $strError .= GetMessage("FORM_ERROR_FORM_NOT_FOUND")."<br>";
2024 }
2025 else $strError .= GetMessage("FORM_ERROR_RESULT_NOT_FOUND")."<br>";
2026 return false;
2027 }
2028
2029 public static function GetCount($WEB_FORM_ID)
2030 {
2031 global $DB;
2032 $strSql = "SELECT count(ID) C FROM b_form_result WHERE FORM_ID=".intval($WEB_FORM_ID);
2033 $z = $DB->Query($strSql);
2034 $zr = $z->Fetch();
2035 return intval($zr["C"]);
2036 }
2037
2038 // prepare array of parameters for result filter
2039 public static function PrepareFilter($WEB_FORM_ID, $arFilter)
2040 {
2041 $arrFilterReturn = $arFilter;
2042
2043 if (array_key_exists("FIELDS", $arFilter))
2044 {
2045 $arFilterFields = $arFilter["FIELDS"];
2046
2047 $rsForm = CForm::GetByID($WEB_FORM_ID);
2048 $arForm = $rsForm->Fetch();
2049
2050 if (is_array($arFilterFields) && count($arFilterFields) > 0)
2051 {
2052 foreach ($arFilterFields as $arr)
2053 {
2054 if ($arr["SID"] <> '')
2055 $arr["CODE"] = $arr["SID"];
2056 else
2057 $arr["SID"] = $arr["CODE"];
2058
2059 $FIELD_SID = $arr["SID"];
2060
2061 $FILTER_TYPE = ($arr["FILTER_TYPE"] <> '') ? $arr["FILTER_TYPE"] : "text";
2062
2063 if ($FILTER_TYPE == "answer_id")
2064 {
2065 $PARAMETER_NAME = "ANSWER_ID";
2066 }
2067 else
2068 {
2069 $PARAMETER_NAME = ($arr["PARAMETER_NAME"] <> '') ? $arr["PARAMETER_NAME"] : "USER";
2070 }
2071
2072 $PART = $arr["PART"];
2073
2074 $FILTER_KEY = $arForm["SID"]."_".$FIELD_SID."_".$PARAMETER_NAME."_".$FILTER_TYPE;
2075 if ($PART <> '') $FILTER_KEY .= "_".intval($PART);
2076
2077 $arrFilterReturn[$FILTER_KEY] = $arr["VALUE"];
2078
2079 if ($FILTER_TYPE=="text")
2080 {
2081 $EXACT_MATCH = ($arr["EXACT_MATCH"]=="Y") ? "Y" : "N";
2082 $arrFilterReturn[$FILTER_KEY."_exact_match"] = $EXACT_MATCH;
2083 }
2084 }
2085 }
2086 unset($arrFilterReturn["FIELDS"]);
2087 }
2088 return $arrFilterReturn;
2089 }
2090
2091 public static function SetCRMFlag($RESULT_ID, $flag_value)
2092 {
2093 return $GLOBALS['DB']->Query("UPDATE b_form_result SET SENT_TO_CRM='".($flag_value == 'N' ? 'N' : 'Y')."' WHERE ID='".intval($RESULT_ID)."'");
2094 }
2095}
global $APPLICATION
Определения include.php:80
static GetList($by='id', $order='desc', $arFilter=[])
Определения eventmessage.php:416
static GetByID($ID)
Определения form_callformanswer.php:154
static GetList($WEB_FORM_ID, $get_fields, $by='s_sort', $order='asc', $arFilter=[])
Определения form_callformfield.php:5
static GetMailTemplateArray($FORM_ID)
Определения form_callform.php:102
static GetPermission($form_id, $arGroups=false, $get_from_database="")
Определения form_callform.php:254
static GetSiteArray($FORM_ID)
Определения form_callform.php:121
static ExecHandlerBeforeChangeStatus($RESULT_ID, $ACTION, $NEW_STATUS_ID=0)
Определения form_callform.php:140
static GetResultAnswerArray($WEB_FORM_ID, &$arrColumns, &$arrAnswers, &$arrAnswersSID, $arFilter=Array())
Определения form_callform.php:17
static GetDataByID($WEB_FORM_ID, &$arForm, &$arQuestions, &$arAnswers, &$arDropDown, &$arMultiSelect, $additional="N", $active="N")
Определения form_callform.php:859
static ExecHandlerAfterChangeStatus($RESULT_ID, $ACTION)
Определения form_callform.php:183
static GetDataByIDForHTML($RESULT_ID, $GET_ADDITIONAL="N")
Определения form_callformresult.php:174
static Update($RESULT_ID, $arrVALUES=false, $UPDATE_ADDITIONAL="N", $CHECK_RIGHTS="Y")
Определения form_callformresult.php:712
static GetDataByID($RESULT_ID, $arrFIELD_SID, &$arrRES, &$arrANSWER)
Определения form_callformresult.php:124
static SetEvent($RESULT_ID, $IN_EVENT1=false, $IN_EVENT2=false, $IN_EVENT3=false, $money="", $currency="", $goto="", $chargeback="N")
Определения form_callformresult.php:77
static GetFileByAnswerID($RESULT_ID, $ANSWER_ID)
Определения form_callformresult.php:9
static SetStatus($RESULT_ID, $NEW_STATUS_ID, $CHECK_RIGHTS="Y")
Определения form_callformresult.php:1613
static GetFileByHash($RESULT_ID, $HASH)
Определения form_callformresult.php:34
static PrepareFilter($WEB_FORM_ID, $arFilter)
Определения form_callformresult.php:2039
static GetCount($WEB_FORM_ID)
Определения form_callformresult.php:2029
static SetField($RESULT_ID, $FIELD_SID, $VALUE=false)
Определения form_callformresult.php:1203
static SetCRMFlag($RESULT_ID, $flag_value)
Определения form_callformresult.php:2091
static Delete($RESULT_ID, $CHECK_RIGHTS="Y")
Определения form_callformresult.php:1490
static Mail($RESULT_ID, $TEMPLATE_ID=false)
Определения form_callformresult.php:1694
static Add($WEB_FORM_ID, $arrVALUES=false, $CHECK_RIGHTS="Y", $USER_ID=false)
Определения form_callformresult.php:294
static Reset($RESULT_ID, $DELETE_FILES=true, $DELETE_ADDITIONAL="N", $arrException=array())
Определения form_callformresult.php:1554
static GetDefault($WEB_FORM_ID)
Определения form_callformstatus.php:83
static GetPermissions($STATUS_ID)
Определения form_callformstatus.php:35
static GetMaxPermissions()
Определения form_callformstatus.php:30
static AddCurrent($event1, $event2="", $event3="", $money="", $currency="", $goto="", $chargeback="N", $site_id=false)
Определения statevent.php:38
static GetByID($ID, $GET_BY_SID="N")
Определения form_cform.php:146
static GetPermissions($RESULT_ID, &$CURRENT_STATUS_ID=null)
Определения form_cformresult.php:419
static GetByID($ID)
Определения form_cformresult.php:391
static AddAnswer($arFields)
Определения form_cformresult.php:457
static UpdateField($arFields, $RESULT_ID, $FIELD_ID)
Определения form_cformresult.php:466
static GetList($WEB_FORM_ID, $by='s_timestamp', $order='desc', $arFilter=[], $is_filtered=null, $CHECK_RIGHTS="Y", $records_limit=false)
Определения form_cformresult.php:5
static GetByID($ID)
Определения form_cformstatus.php:97
$str
Определения commerceml2.php:63
$f
Определения component_props.php:52
$arFields
Определения dblapprove.php:5
$arr
Определения file_new.php:624
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$zr
Определения options.php:5
$_REQUEST["admin_mnu_menu_id"]
Определения get_menu.php:8
global $MESS
Определения bill.php:2
$strError
Определения options_user_settings.php:4
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
const FORMAT_DATETIME
Определения include.php:64
const FORMAT_DATE
Определения include.php:63
$z
Определения options.php:31
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
TrimArr(&$arr, $trim_value=false)
Определения tools.php:2110
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
GetMessage($name, $aReplace=null)
Определения tools.php:3397
CheckDateTime($datetime, $format=false)
Определения tools.php:398
MakeTimeStamp($datetime, $format=false)
Определения tools.php:538
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$ar
Определения options.php:199
$md5
Определения result_rec.php:12
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$currency
Определения template.php:266
$val
Определения options.php:1793
const SITE_ID
Определения sonet_set_content_view.php:12
$rows
Определения options.php:264
$rs
Определения action.php:82
$GLOBALS['_____370096793']
Определения update_client.php:1
$arFilter
Определения user_search.php:106
$arFilterFields
Определения user_search.php:40
$url
Определения iframe.php:7
$dbRes
Определения yandex_detail.php:168