1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
form_callformcrm.php
См. документацию.
1<?php
2
3abstract class CAllFormCrm
4{
5 const LINK_AUTO = 'A';
6 const LINK_MANUAL = 'M';
7
8 private static $_ob;
9
10 abstract public static function GetList($arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array());
11
12 public static function GetByID($ID)
13 {
14 return CFormCrm::GetList(array(), array('ID' => intval($ID)));
15 }
16
17 public static function GetByFormID($FORM_ID)
18 {
19 $query = "SELECT fcl.*
20FROM b_form_crm_link fcl
21LEFT JOIN b_form_crm fc ON fc.ID=fcl.CRM_ID
22WHERE fcl.FORM_ID='".intval($FORM_ID)."' AND fc.ACTIVE='Y'";
23 return $GLOBALS['DB']->Query($query);
24 }
25
26 public static function GetFields($LINK_ID)
27 {
28 $query = "SELECT FIELD_ID, FIELD_ALT, CRM_FIELD FROM b_form_crm_field WHERE LINK_ID='".intval($LINK_ID)."'";
29 return $GLOBALS['DB']->Query($query);
30 }
31
32 private static function _addField($FORM_ID, $CRM_ID, $crm_field)
33 {
34 if (!self::$_ob)
35 self::$_ob = new CFormCrmSender($CRM_ID);
36
37 $arFields = self::$_ob->GetFields();
38 foreach ($arFields as $arFld)
39 {
40 if ($arFld['ID'] == $crm_field)
41 {
42 $arAnswer = array();
43
44 switch ($arFld['TYPE'])
45 {
46 case 'enum':
47 if (is_array($arFld['VALUES']))
48 {
49 foreach ($arFld['VALUES'] as $arValue)
50 {
51 $arAnswer[] = array(
52 'MESSAGE' => $arValue['NAME'],
53 'VALUE' => $arValue['ID'],
54 'FIELD_TYPE' => 'dropdown',
55 'ACTIVE' => 'Y',
56 );
57 }
58 }
59
60 break;
61 case 'boolean':
62 $arAnswer[] = array(
63 'MESSAGE' => ' ',
64 'FIELD_TYPE' => 'checkbox',
65 'ACTIVE' => 'Y',
66 );
67 break;
68 default:
69 $arAnswer[] = array(
70 'MESSAGE' => ' ',
71 'FIELD_TYPE' => 'text',
72 'ACTIVE' => 'Y',
73 );
74 }
75
77 'SID' => $crm_field,
78 'FORM_ID' => $FORM_ID,
79 'ACTIVE' => 'Y',
80 'TITLE' => $arFld['NAME'],
81 'REQUIRED' => $arFld['REQUIRED'] == 'true' ? 'Y' : 'N',
82 'arANSWER' => $arAnswer
83 ));
84 }
85 }
86 return null;
87 }
88
89 public static function SetForm($FORM_ID, $arParams)
90 {
91 global $DB;
92
93 $FORM_ID = intval($FORM_ID);
94 if ($FORM_ID > 0)
95 {
96 $dbRes = self::GetByFormID($FORM_ID);
97 $arLink = $dbRes->Fetch();
98
99 if (is_array($arLink))
100 {
101 $DB->Query("DELETE FROM b_form_crm_field WHERE LINK_ID='".intval($arLink['ID'])."'");
102 }
103
104 $arParams['CRM_ID'] = intval($arParams['CRM_ID']);
105 if ($arParams['CRM_ID'] <= 0)
106 {
107 if (is_array($arLink))
108 {
109 $DB->Query("DELETE FROM b_form_crm_link WHERE ID='".intval($arLink['ID'])."'");
110 }
111 }
112 else
113 {
114 $arLinkFields = array(
115 'FORM_ID' => $FORM_ID,
116 'CRM_ID' => $arParams['CRM_ID'],
117 'LINK_TYPE' => $arParams['LINK_TYPE'] == self::LINK_MANUAL ? self::LINK_MANUAL : self::LINK_AUTO,
118 );
119
120 if (is_array($arLink))
121 {
122 $strUpdate = $DB->PrepareUpdate('b_form_crm_link', $arLinkFields);
123 $query = "UPDATE b_form_crm_link SET ".$strUpdate." WHERE ID='".intval($arLink['ID'])."'";
124 $dbRes = $DB->Query($query);
125 if ($dbRes)
126 $arLinkFields['ID'] = $arLink['ID'];
127 }
128 else
129 {
130 $arLinkFields['ID'] = $DB->Add('b_form_crm_link', $arLinkFields);
131 }
132
133 if ($arLinkFields['ID'] > 0)
134 {
135 if (is_array($arParams['CRM_FIELDS']) && is_array($arParams['FORM_FIELDS']))
136 {
137 $arMap = array();
138 foreach ($arParams['CRM_FIELDS'] as $key => $crm_field)
139 {
140 $form_field = $arParams['FORM_FIELDS'][$key];
141
142 if ($crm_field <> '' && $form_field <> '' && !array_key_exists($crm_field, $arMap))
143 {
144 $arMap[$crm_field] = true;
145
147 'LINK_ID' => $arLinkFields['ID'],
148 'CRM_FIELD' => $crm_field
149 );
150 if (intval($form_field) > 0)
151 $arFields['FIELD_ID'] = $form_field;
152 elseif ($form_field == 'NEW')
153 $arFields['FIELD_ID'] = self::_addField($FORM_ID, $arParams['CRM_ID'], $crm_field);
154 else
155 $arFields['FIELD_ALT'] = $form_field;
156
157 $DB->Add('b_form_crm_field', $arFields);
158 }
159 }
160 }
161 }
162 }
163 }
164 }
165
166 public static function onResultAdded($FORM_ID, $RESULT_ID)
167 {
168 $dbRes = CFormCrm::GetByFormID($FORM_ID);
169 $arLink = $dbRes->Fetch();
170 if (is_array($arLink) && $arLink['LINK_TYPE'] == self::LINK_AUTO)
171 {
172 self::AddLead($FORM_ID, $RESULT_ID, $arLink);
173 }
174 }
175
176 public static function AddLead($FORM_ID, $RESULT_ID, $arLink = null)
177 {
178 $FORM_ID = intval($FORM_ID);
179 $RESULT_ID = intval($RESULT_ID);
180
181 if ($FORM_ID <= 0 || $RESULT_ID <= 0)
182 return false;
183
184 if (!is_array($arLink))
185 {
186 $dbRes = CFormCrm::GetByFormID($FORM_ID);
187 $arLink = $dbRes->Fetch();
188 }
189
190 if (!$arLink)
191 return false;
192
193 $arResultFields = array();
194 $arAnswers = array();
195
196 CFormResult::GetDataByID($RESULT_ID, array(), $arResultFields, $arAnswers);
197
198 $ob = new CFormCrmSender($arLink['CRM_ID']);
199 $arCrmF = $ob->GetFields();
200 $arCrmFields = array();
201 foreach ($arCrmF as $ar)
202 $arCrmFields[$ar['ID']] = $ar;
203
204 $arLeadFields = array();
205 $dbRes = CFormCrm::GetFields($arLink['ID']);
206 while ($arRes = $dbRes->Fetch())
207 {
208 if (intval($arRes['FIELD_ID']) > 0)
209 {
210 $bFound = false;
211 foreach ($arAnswers as $arAnswer)
212 {
213 foreach ($arAnswer as $arAns)
214 {
215 if ($arAns['FIELD_ID'] == $arRes['FIELD_ID'])
216 {
217 $bFound = true;
218 if ($arCrmFields[$arRes['CRM_FIELD']])
219 {
220 if ($arRes['CRM_FIELD'] === 'SOURCE_ID')
221 {
222 $value = $arAns['VALUE'] ?: $arAns['ANSWER_TEXT'];
223 }
224 else
225 {
226 switch ($arCrmFields[$arRes['CRM_FIELD']]['TYPE'])
227 {
228 case 'enum':
229 $value = $arAns['ANSWER_TEXT'];
230 break;
231 case 'boolean':
232 $value = 'Y';
233 break;
234 default:
235 $value = ($arAns['USER_TEXT'] <> ''
236 ? $arAns['USER_TEXT']
237 : (
238 $arAns['ANSWER_TEXT'] <> ''
239 ? $arAns['ANSWER_TEXT']
240 : $arAns['VALUE']
241 )
242 );
243 break;
244 }
245 }
246
247 if(isset($arCrmFields[$arRes['CRM_FIELD']]['MULTIPLE']) && $arCrmFields[$arRes['CRM_FIELD']]['MULTIPLE'] === "true")
248 {
249 $arLeadFields[$arRes['CRM_FIELD']] .=
250 (empty($arLeadFields[$arRes['CRM_FIELD']]) ? '' : ',').$value;
251 }
252 else
253 {
254 $arLeadFields[$arRes['CRM_FIELD']] = $value;
255 }
256 }
257 }
258 }
259 }
260
261 if (!$bFound && $arCrmFields[$arRes['CRM_FIELD']] && $arCrmFields[$arRes['CRM_FIELD']]['TYPE'] == 'boolean')
262 {
263 $arLeadFields[$arRes['CRM_FIELD']] = 'N';
264 }
265 }
266 elseif ($arRes['FIELD_ALT'] <> '')
267 {
268 switch($arRes['FIELD_ALT'])
269 {
270 case 'RESULT_ID':
271 $arLeadFields[$arRes['CRM_FIELD']] = $arResultFields['ID'];
272 break;
273 case 'FORM_SID':
274 $arLeadFields[$arRes['CRM_FIELD']] = $arResultFields['SID'];
275 break;
276 case 'FORM_NAME':
277 $arLeadFields[$arRes['CRM_FIELD']] = $arResultFields['NAME'];
278 break;
279 case 'SITE_ID':
280 $arLeadFields[$arRes['CRM_FIELD']] = SITE_ID;
281 break;
282 case 'FORM_ALL':
283 $arLeadFields[$arRes['CRM_FIELD']] = self::_getAllFormFields($FORM_ID, $RESULT_ID, $arAnswers);
284 break;
285 case 'FORM_ALL_HTML':
286 $arLeadFields[$arRes['CRM_FIELD']] = self::_getAllFormFieldsHTML($FORM_ID, $RESULT_ID, $arAnswers);
287 break;
288 }
289 }
290 }
291
292 if (empty($arLeadFields['SOURCE_ID']))
293 {
294 $arLeadFields['SOURCE_ID'] = 'WEB';
295 }
296
297 $result = $ob->AddLead($arLeadFields);
298 if ($result->code() != 201)
299 {
300 $GLOBALS['APPLICATION']->ThrowException($result->error(), $result->code());
301 return false;
302 }
303 else
304 {
305 CFormResult::SetCRMFlag($RESULT_ID, 'Y');
306 return $result->field('ID');
307 }
308 }
309
310 public static function Add($arFields)
311 {
312 global $DB;
313
314 foreach (GetModuleEvents('form', 'OnBeforeFormCrmAdd', true) as $a)
315 {
316 if (false === ExecuteModuleEventEx($a, array(&$arFields)))
317 return false;
318 }
319
320 if (!self::CheckFields('ADD', $arFields))
321 return false;
322
323 $ID = $DB->Add('b_form_crm', $arFields);
324 if ($ID > 0)
325 {
326 $arFields['ID'] = $ID;
327
328 foreach (GetModuleEvents('form', 'OnAfterFormCrmAdd', true) as $a)
329 {
331 }
332 }
333
334 return $ID;
335 }
336
337 public static function Update($ID, $arFields)
338 {
339 global $DB;
340
341 if ($ID <= 0)
342 return false;
343
344 $arFields['ID'] = $ID;
345
346 foreach (GetModuleEvents('form', 'OnBeforeFormCrmUpdate', true) as $a)
347 {
348 if (false === ExecuteModuleEventEx($a, array(&$arFields)))
349 {
350 return false;
351 }
352 }
353
354 if (!self::CheckFields('UPDATE', $arFields))
355 return false;
356
357 $strUpdate = $DB->PrepareUpdate('b_form_crm', $arFields);
358 $query = 'UPDATE b_form_crm SET '.$strUpdate.' WHERE ID=\''.intval($ID).'\'';
359
360 $dbRes = $DB->Query($query);
361 if ($dbRes)
362 {
363 foreach (GetModuleEvents('form', 'OnAfterFormCrmUpdate', true) as $a)
364 {
366 }
367
368 return $ID;
369 }
370
371 return false;
372 }
373
374 public static function Delete($ID)
375 {
376 global $DB;
377
378 $ID = intval($ID);
379 if ($ID < 1)
380 return false;
381
383 $arCrm = $dbRes->Fetch();
384 if (is_array($arCrm))
385 {
386 foreach (GetModuleEvents("form", "OnBeforeFormCrmDelete", true) as $arEvent)
387 {
388 if (false === ExecuteModuleEventEx($arEvent, array($ID, $arCrm)))
389 {
390 return false;
391 }
392 }
393
394 if ($DB->Query("DELETE FROM b_form_crm WHERE ID='".$ID."'"))
395 {
396 foreach (GetModuleEvents("form", "OnAfterFormCrmDelete", true) as $arEvent)
397 {
398 ExecuteModuleEventEx($arEvent, array($ID));
399 }
400
401 return true;
402 }
403 }
404
405 return false;
406 }
407
408 protected static function _getAllFormFieldsHTML($WEB_FORM_ID, $RESULT_ID, $arAnswers)
409 {
410 global $APPLICATION;
411
412 $strResult = "";
413
414 $w = CFormField::GetList($WEB_FORM_ID, "ALL", '', '', array("ACTIVE" => "Y"));
415 while ($wr=$w->Fetch())
416 {
417 $answer = "";
418 $answer_raw = '';
419 if (is_array($arAnswers[$wr["SID"]]))
420 {
421 $bHasDiffTypes = false;
422 $lastType = '';
423 foreach ($arAnswers[$wr['SID']] as $arrA)
424 {
425 if ($lastType == '') $lastType = $arrA['FIELD_TYPE'];
426 elseif ($arrA['FIELD_TYPE'] != $lastType)
427 {
428 $bHasDiffTypes = true;
429 break;
430 }
431 }
432
433 foreach($arAnswers[$wr["SID"]] as $arrA)
434 {
435 if ($wr['ADDITIONAL'] == 'Y')
436 {
437 $arrA['FIELD_TYPE'] = $wr['FIELD_TYPE'];
438 }
439
440 $USER_TEXT_EXIST = (trim($arrA["USER_TEXT"]) <> '');
441 $ANSWER_TEXT_EXIST = (trim($arrA["ANSWER_TEXT"]) <> '');
442 $ANSWER_VALUE_EXIST = (trim($arrA["ANSWER_VALUE"]) <> '');
443 $USER_FILE_EXIST = (intval($arrA["USER_FILE_ID"])>0);
444
445 if (
446 $bHasDiffTypes
447 &&
448 !$USER_TEXT_EXIST
449 &&
450 (
451 $arrA['FIELD_TYPE'] == 'text'
452 ||
453 $arrA['FIELD_TYPE'] == 'textarea'
454 )
455 )
456 continue;
457
458 if (trim($answer) <> '') $answer .= "<br />";
459 if (trim($answer_raw) <> '') $answer_raw .= ",";
460
461 if ($ANSWER_TEXT_EXIST)
462 $answer .= $arrA["ANSWER_TEXT"].': ';
463
464 switch ($arrA['FIELD_TYPE'])
465 {
466 case 'text':
467 case 'textarea':
468 case 'hidden':
469 case 'date':
470 case 'password':
471
472 if ($USER_TEXT_EXIST)
473 {
474 $answer .= htmlspecialcharsbx(trim($arrA["USER_TEXT"]));
475 $answer_raw .= htmlspecialcharsbx(trim($arrA["USER_TEXT"]));
476 }
477
478 break;
479
480 case 'email':
481 case 'url':
482
483 if ($USER_TEXT_EXIST)
484 {
485 $answer .= '<a href="'.($arrA['FIELD_TYPE'] == 'email' ? 'mailto:' : '').trim($arrA["USER_TEXT"]).'">'.htmlspecialcharsbx(trim($arrA["USER_TEXT"])).'</a>';
486 $answer_raw .= htmlspecialcharsbx(trim($arrA["USER_TEXT"]));
487 }
488
489 break;
490
491 case 'checkbox':
492 case 'multiselect':
493 case 'radio':
494 case 'dropdown':
495
496 if ($ANSWER_TEXT_EXIST)
497 {
498 $answer = htmlspecialcharsbx(mb_substr($answer, 0, -2).' ');
499 $answer_raw .= htmlspecialcharsbx($arrA['ANSWER_TEXT']);
500 }
501
502 if ($ANSWER_VALUE_EXIST)
503 {
504 $answer .= '('.htmlspecialcharsbx($arrA['ANSWER_VALUE']).') ';
505 if (!$ANSWER_TEXT_EXIST)
506 $answer_raw .= htmlspecialcharsbx($arrA['ANSWER_VALUE']);
507 }
508
509 if (!$ANSWER_VALUE_EXIST && !$ANSWER_TEXT_EXIST)
510 $answer_raw .= $arrA['ANSWER_ID'];
511
512 $answer .= '['.$arrA['ANSWER_ID'].']';
513
514 break;
515
516 case 'file':
517 case 'image':
518
519 if ($USER_FILE_EXIST)
520 {
521 $f = CFile::GetByID($arrA["USER_FILE_ID"]);
522 if ($fr = $f->Fetch())
523 {
524 $file_size = CFile::FormatSize($fr["FILE_SIZE"]);
525 $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;
526
527 if ($arrA["USER_FILE_IS_IMAGE"]=="Y")
528 {
529 $answer .= "<a href=\"$url\">".htmlspecialcharsbx($arrA["USER_FILE_NAME"])."</a> [".$fr["WIDTH"]." x ".$fr["HEIGHT"]."] (".$file_size.")";
530 }
531 else
532 {
533 $answer .= "<a href=\"$url&action=download\">".htmlspecialcharsbx($arrA["USER_FILE_NAME"])."</a> (".$file_size.")";
534 }
535
536 $answer_raw .= htmlspecialcharsbx($arrA['USER_FILE_NAME']);
537 }
538 }
539
540 break;
541 }
542 }
543 }
544
545 $strResult .= $wr["TITLE"].":<br />".($answer == '' ? " " : $answer)."<br /><br />";
546 }
547
548 return $strResult;
549 }
550
551 protected static function _getAllFormFields($WEB_FORM_ID, $RESULT_ID, $arAnswers)
552 {
553 global $APPLICATION;
554
555 $strResult = "";
556
557 $w = CFormField::GetList($WEB_FORM_ID, "ALL", '', '', array("ACTIVE" => "Y"));
558 while ($wr=$w->Fetch())
559 {
560 $answer = "";
561 $answer_raw = '';
562 if (is_array($arAnswers[$wr["SID"]]))
563 {
564 $bHasDiffTypes = false;
565 $lastType = '';
566 foreach ($arAnswers[$wr['SID']] as $arrA)
567 {
568 if ($lastType == '') $lastType = $arrA['FIELD_TYPE'];
569 elseif ($arrA['FIELD_TYPE'] != $lastType)
570 {
571 $bHasDiffTypes = true;
572 break;
573 }
574 }
575
576 foreach($arAnswers[$wr["SID"]] as $arrA)
577 {
578 if ($wr['ADDITIONAL'] == 'Y')
579 {
580 $arrA['FIELD_TYPE'] = $wr['FIELD_TYPE'];
581 }
582
583 $USER_TEXT_EXIST = (trim($arrA["USER_TEXT"]) <> '');
584 $ANSWER_TEXT_EXIST = (trim($arrA["ANSWER_TEXT"]) <> '');
585 $ANSWER_VALUE_EXIST = (trim($arrA["ANSWER_VALUE"]) <> '');
586 $USER_FILE_EXIST = (intval($arrA["USER_FILE_ID"])>0);
587
588 if (
589 $bHasDiffTypes
590 && !$USER_TEXT_EXIST
591 && (
592 $arrA['FIELD_TYPE'] == 'text'
593 ||
594 $arrA['FIELD_TYPE'] == 'textarea'
595 )
596 )
597 {
598 continue;
599 }
600
601 if (trim($answer) <> '')
602 $answer .= "\n";
603 if (trim($answer_raw) <> '')
604 $answer_raw .= ",";
605
606 if ($ANSWER_TEXT_EXIST)
607 $answer .= $arrA["ANSWER_TEXT"].': ';
608
609 switch ($arrA['FIELD_TYPE'])
610 {
611 case 'text':
612 case 'textarea':
613 case 'email':
614 case 'url':
615 case 'hidden':
616 case 'date':
617 case 'password':
618
619 if ($USER_TEXT_EXIST)
620 {
621 $answer .= trim($arrA["USER_TEXT"]);
622 $answer_raw .= trim($arrA["USER_TEXT"]);
623 }
624
625 break;
626
627 case 'checkbox':
628 case 'multiselect':
629 case 'radio':
630 case 'dropdown':
631
632 if ($ANSWER_TEXT_EXIST)
633 {
634 $answer = mb_substr($answer, 0, -2).' ';
635 $answer_raw .= $arrA['ANSWER_TEXT'];
636 }
637
638 if ($ANSWER_VALUE_EXIST)
639 {
640 $answer .= '('.$arrA['ANSWER_VALUE'].') ';
641 if (!$ANSWER_TEXT_EXIST)
642 {
643 $answer_raw .= $arrA['ANSWER_VALUE'];
644 }
645 }
646
647 if (!$ANSWER_VALUE_EXIST && !$ANSWER_TEXT_EXIST)
648 {
649 $answer_raw .= $arrA['ANSWER_ID'];
650 }
651
652 $answer .= '['.$arrA['ANSWER_ID'].']';
653
654 break;
655
656 case 'file':
657 case 'image':
658
659 if ($USER_FILE_EXIST)
660 {
661 $f = CFile::GetByID($arrA["USER_FILE_ID"]);
662 if ($fr = $f->Fetch())
663 {
664 $file_size = CFile::FormatSize($fr["FILE_SIZE"]);
665 $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;
666
667 if ($arrA["USER_FILE_IS_IMAGE"]=="Y")
668 {
669 $answer .= $arrA["USER_FILE_NAME"]." [".$fr["WIDTH"]." x ".$fr["HEIGHT"]."] (".$file_size.")\n".$url;
670 }
671 else
672 {
673 $answer .= $arrA["USER_FILE_NAME"]." (".$file_size.")\n".$url."&action=download";
674 }
675 }
676
677 $answer_raw .= $arrA['USER_FILE_NAME'];
678 }
679
680 break;
681 }
682 }
683 }
684
685 $strResult .= $wr["TITLE"].":\r\n".($answer == '' ? " " : $answer)."\r\n\r\n";
686 }
687
688 return $strResult;
689 }
690
691
692
693 protected static function CheckFields($action, &$arFields)
694 {
695 if (isset($arFields['ID']))
696 unset($arFields['ID']);
697
698 if ($action == 'ADD' || isset($arFields['NAME']))
699 $arFields['NAME'] = trim($arFields['NAME']);
700 if ($action == 'ADD' || isset($arFields['URL']))
701 $arFields['URL'] = trim($arFields['URL']);
702 if ($action == 'ADD' || isset($arFields['AUTH_HASH']))
703 $arFields['AUTH_HASH'] = trim($arFields['AUTH_HASH']);
704
705 return true;
706 }
707
708 protected static function GetFilterOperation($key)
709 {
710 $strNegative = "N";
711 if (mb_substr($key, 0, 1) == "!")
712 {
713 $key = mb_substr($key, 1);
714 $strNegative = "Y";
715 }
716
717 $strOrNull = "N";
718 if (mb_substr($key, 0, 1) == "+")
719 {
720 $key = mb_substr($key, 1);
721 $strOrNull = "Y";
722 }
723
724 if (mb_substr($key, 0, 2) == ">=")
725 {
726 $key = mb_substr($key, 2);
727 $strOperation = ">=";
728 }
729 elseif (mb_substr($key, 0, 1) == ">")
730 {
731 $key = mb_substr($key, 1);
732 $strOperation = ">";
733 }
734 elseif (mb_substr($key, 0, 2) == "<=")
735 {
736 $key = mb_substr($key, 2);
737 $strOperation = "<=";
738 }
739 elseif (mb_substr($key, 0, 1) == "<")
740 {
741 $key = mb_substr($key, 1);
742 $strOperation = "<";
743 }
744 elseif (mb_substr($key, 0, 1) == "@")
745 {
746 $key = mb_substr($key, 1);
747 $strOperation = "IN";
748 }
749 elseif (mb_substr($key, 0, 1) == "~")
750 {
751 $key = mb_substr($key, 1);
752 $strOperation = "LIKE";
753 }
754 elseif (mb_substr($key, 0, 1) == "%")
755 {
756 $key = mb_substr($key, 1);
757 $strOperation = "QUERY";
758 }
759 else
760 {
761 $strOperation = "=";
762 }
763
764 return array("FIELD" => $key, "NEGATIVE" => $strNegative, "OPERATION" => $strOperation, "OR_NULL" => $strOrNull);
765 }
766
767 protected static function PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields)
768 {
769 global $DB;
770
771 $strSqlSelect = "";
772 $strSqlFrom = "";
773 $strSqlWhere = "";
774 $strSqlGroupBy = "";
775 $strSqlOrderBy = "";
776
777 $arGroupByFunct = array("COUNT", "AVG", "MIN", "MAX", "SUM");
778
779 $arAlreadyJoined = array();
780
781 // GROUP BY -->
782 if (is_array($arGroupBy) && count($arGroupBy)>0)
783 {
784 $arSelectFields = $arGroupBy;
785 foreach ($arGroupBy as $key => $val)
786 {
787 $val = mb_strtoupper($val);
788 $key = mb_strtoupper($key);
789 if (array_key_exists($val, $arFields) && !in_array($key, $arGroupByFunct))
790 {
791 if ($strSqlGroupBy <> '')
792 $strSqlGroupBy .= ", ";
793 $strSqlGroupBy .= $arFields[$val]["FIELD"];
794
795 if (isset($arFields[$val]["FROM"])
796 && $arFields[$val]["FROM"] <> ''
797 && !in_array($arFields[$val]["FROM"], $arAlreadyJoined))
798 {
799 if ($strSqlFrom <> '')
800 $strSqlFrom .= " ";
801 $strSqlFrom .= $arFields[$val]["FROM"];
802 $arAlreadyJoined[] = $arFields[$val]["FROM"];
803 }
804 }
805 }
806 }
807 // <-- GROUP BY
808
809 // SELECT -->
810 $arFieldsKeys = array_keys($arFields);
811
812 if (is_array($arGroupBy) && count($arGroupBy)==0)
813 {
814 $strSqlSelect = "COUNT(%%_DISTINCT_%% ".$arFields[$arFieldsKeys[0]]["FIELD"].") as CNT ";
815 }
816 else
817 {
818 if (isset($arSelectFields) && is_string($arSelectFields) && $arSelectFields <> '' && array_key_exists($arSelectFields, $arFields))
819 $arSelectFields = array($arSelectFields);
820
821 if (!isset($arSelectFields)
822 || !is_array($arSelectFields)
823 || count($arSelectFields)<=0
824 || in_array("*", $arSelectFields))
825 {
826 $cntFieldsKeys = count($arFieldsKeys);
827 for ($i = 0; $i < $cntFieldsKeys; $i++)
828 {
829 if (isset($arFields[$arFieldsKeys[$i]]["WHERE_ONLY"])
830 && $arFields[$arFieldsKeys[$i]]["WHERE_ONLY"] == "Y")
831 {
832 continue;
833 }
834
835 if ($strSqlSelect <> '')
836 $strSqlSelect .= ", ";
837
838 if ($arFields[$arFieldsKeys[$i]]["TYPE"] == "datetime")
839 {
840 if (($DB->type == "ORACLE" || $DB->type == "MSSQL") && (array_key_exists($arFieldsKeys[$i], $arOrder)))
841 $strSqlSelect .= $arFields[$arFieldsKeys[$i]]["FIELD"]." as ".$arFieldsKeys[$i]."_X1, ";
842
843 $strSqlSelect .= $DB->DateToCharFunction($arFields[$arFieldsKeys[$i]]["FIELD"], "FULL")." as ".$arFieldsKeys[$i];
844 }
845 elseif ($arFields[$arFieldsKeys[$i]]["TYPE"] == "date")
846 {
847 if (($DB->type == "ORACLE" || $DB->type == "MSSQL") && (array_key_exists($arFieldsKeys[$i], $arOrder)))
848 $strSqlSelect .= $arFields[$arFieldsKeys[$i]]["FIELD"]." as ".$arFieldsKeys[$i]."_X1, ";
849
850 $strSqlSelect .= $DB->DateToCharFunction($arFields[$arFieldsKeys[$i]]["FIELD"], "SHORT")." as ".$arFieldsKeys[$i];
851 }
852 else
853 $strSqlSelect .= $arFields[$arFieldsKeys[$i]]["FIELD"]." as ".$arFieldsKeys[$i];
854
855 if (isset($arFields[$arFieldsKeys[$i]]["FROM"])
856 && $arFields[$arFieldsKeys[$i]]["FROM"] <> ''
857 && !in_array($arFields[$arFieldsKeys[$i]]["FROM"], $arAlreadyJoined))
858 {
859 if ($strSqlFrom <> '')
860 $strSqlFrom .= " ";
861 $strSqlFrom .= $arFields[$arFieldsKeys[$i]]["FROM"];
862 $arAlreadyJoined[] = $arFields[$arFieldsKeys[$i]]["FROM"];
863 }
864 }
865 }
866 else
867 {
868 foreach ($arSelectFields as $key => $val)
869 {
870 $val = mb_strtoupper($val);
871 $key = mb_strtoupper($key);
872 if (array_key_exists($val, $arFields))
873 {
874 if ($strSqlSelect <> '')
875 $strSqlSelect .= ", ";
876
877 if (in_array($key, $arGroupByFunct))
878 {
879 $strSqlSelect .= $key."(".$arFields[$val]["FIELD"].") as ".$val;
880 }
881 else
882 {
883 if ($arFields[$val]["TYPE"] == "datetime")
884 {
885 if (($DB->type == "ORACLE" || $DB->type == "MSSQL") && (array_key_exists($val, $arOrder)))
886 $strSqlSelect .= $arFields[$val]["FIELD"]." as ".$val."_X1, ";
887
888 $strSqlSelect .= $DB->DateToCharFunction($arFields[$val]["FIELD"], "FULL")." as ".$val;
889 }
890 elseif ($arFields[$val]["TYPE"] == "date")
891 {
892 if (($DB->type == "ORACLE" || $DB->type == "MSSQL") && (array_key_exists($val, $arOrder)))
893 $strSqlSelect .= $arFields[$val]["FIELD"]." as ".$val."_X1, ";
894
895 $strSqlSelect .= $DB->DateToCharFunction($arFields[$val]["FIELD"], "SHORT")." as ".$val;
896 }
897 else
898 $strSqlSelect .= $arFields[$val]["FIELD"]." as ".$val;
899 }
900
901 if (isset($arFields[$val]["FROM"])
902 && $arFields[$val]["FROM"] <> ''
903 && !in_array($arFields[$val]["FROM"], $arAlreadyJoined))
904 {
905 if ($strSqlFrom <> '')
906 $strSqlFrom .= " ";
907 $strSqlFrom .= $arFields[$val]["FROM"];
908 $arAlreadyJoined[] = $arFields[$val]["FROM"];
909 }
910 }
911 }
912 }
913
914 if ($strSqlGroupBy <> '')
915 {
916 if ($strSqlSelect <> '')
917 $strSqlSelect .= ", ";
918 $strSqlSelect .= "COUNT(%%_DISTINCT_%% ".$arFields[$arFieldsKeys[0]]["FIELD"].") as CNT";
919 }
920 else
921 $strSqlSelect = "%%_DISTINCT_%% ".$strSqlSelect;
922 }
923 // <-- SELECT
924
925 // WHERE -->
926 $arSqlSearch = array();
927
928 if (!is_array($arFilter))
929 $filter_keys = array();
930 else
931 $filter_keys = array_keys($arFilter);
932
933 $cntFilterKeys = count($filter_keys);
934 for ($i = 0; $i < $cntFilterKeys; $i++)
935 {
936 $vals = $arFilter[$filter_keys[$i]];
937 if (!is_array($vals))
938 $vals = array($vals);
939 else
940 $vals = array_values($vals);
941
942 $key = $filter_keys[$i];
943 $key_res = self::GetFilterOperation($key);
944 $key = $key_res["FIELD"];
945 $strNegative = $key_res["NEGATIVE"];
946 $strOperation = $key_res["OPERATION"];
947 $strOrNull = $key_res["OR_NULL"];
948
949 if (array_key_exists($key, $arFields))
950 {
951 $arSqlSearch_tmp = array();
952 $cntVals = count($vals);
953 for ($j = 0; $j < $cntVals; $j++)
954 {
955 $val = $vals[$j];
956 if (isset($arFields[$key]["WHERE"]))
957 {
958 $arSqlSearch_tmp1 = call_user_func_array(
959 $arFields[$key]["WHERE"],
960 array($val, $key, $strOperation, $strNegative, $arFields[$key]["FIELD"], $arFields, $arFilter)
961 );
962 if ($arSqlSearch_tmp1 !== false)
963 $arSqlSearch_tmp[] = $arSqlSearch_tmp1;
964 }
965 else
966 {
967 if ($arFields[$key]["TYPE"] == "int")
968 {
969 if ((intval($val) == 0) && (mb_strpos($strOperation, "=") !== False))
970 $arSqlSearch_tmp[] = "(".$arFields[$key]["FIELD"]." IS ".(($strNegative == "Y") ? "NOT " : "")."NULL) ".(($strNegative == "Y") ? "AND" : "OR")." ".(($strNegative == "Y") ? "NOT " : "")."(".$arFields[$key]["FIELD"]." ".$strOperation." 0)";
971 else
972 $arSqlSearch_tmp[] = (($strNegative == "Y") ? " ".$arFields[$key]["FIELD"]." IS NULL OR NOT " : "")."(".$arFields[$key]["FIELD"]." ".$strOperation." ".intval($val)." )";
973 }
974 elseif ($arFields[$key]["TYPE"] == "double")
975 {
976 $val = str_replace(",", ".", $val);
977
978 if ((DoubleVal($val) == 0) && (mb_strpos($strOperation, "=") !== False))
979 $arSqlSearch_tmp[] = "(".$arFields[$key]["FIELD"]." IS ".(($strNegative == "Y") ? "NOT " : "")."NULL) ".(($strNegative == "Y") ? "AND" : "OR")." ".(($strNegative == "Y") ? "NOT " : "")."(".$arFields[$key]["FIELD"]." ".$strOperation." 0)";
980 else
981 $arSqlSearch_tmp[] = (($strNegative == "Y") ? " ".$arFields[$key]["FIELD"]." IS NULL OR NOT " : "")."(".$arFields[$key]["FIELD"]." ".$strOperation." ".DoubleVal($val)." )";
982 }
983 elseif ($arFields[$key]["TYPE"] == "string" || $arFields[$key]["TYPE"] == "char")
984 {
985 if ($strOperation == "QUERY")
986 {
987 $arSqlSearch_tmp[] = GetFilterQuery($arFields[$key]["FIELD"], $val, "Y");
988 }
989 else
990 {
991 if (($val == '') && (mb_strpos($strOperation, "=") !== False))
992 $arSqlSearch_tmp[] = "(".$arFields[$key]["FIELD"]." IS ".(($strNegative == "Y") ? "NOT " : "")."NULL) ".(($strNegative == "Y") ? "AND NOT" : "OR")." (".$DB->Length($arFields[$key]["FIELD"])." <= 0) ".(($strNegative == "Y") ? "AND NOT" : "OR")." (".$arFields[$key]["FIELD"]." ".$strOperation." '".$DB->ForSql($val)."' )";
993 else
994 $arSqlSearch_tmp[] = (($strNegative == "Y") ? " ".$arFields[$key]["FIELD"]." IS NULL OR NOT " : "")."(".$arFields[$key]["FIELD"]." ".$strOperation." '".$DB->ForSql($val)."' )";
995 }
996 }
997 elseif ($arFields[$key]["TYPE"] == "datetime")
998 {
999 if ($val == '')
1000 $arSqlSearch_tmp[] = ($strNegative=="Y"?"NOT":"")."(".$arFields[$key]["FIELD"]." IS NULL)";
1001 else
1002 $arSqlSearch_tmp[] = ($strNegative=="Y"?" ".$arFields[$key]["FIELD"]." IS NULL OR NOT ":"")."(".$arFields[$key]["FIELD"]." ".$strOperation." ".$DB->CharToDateFunction($DB->ForSql($val), "FULL").")";
1003 }
1004 elseif ($arFields[$key]["TYPE"] == "date")
1005 {
1006 if ($val == '')
1007 $arSqlSearch_tmp[] = ($strNegative=="Y"?"NOT":"")."(".$arFields[$key]["FIELD"]." IS NULL)";
1008 else
1009 $arSqlSearch_tmp[] = ($strNegative=="Y"?" ".$arFields[$key]["FIELD"]." IS NULL OR NOT ":"")."(".$arFields[$key]["FIELD"]." ".$strOperation." ".$DB->CharToDateFunction($DB->ForSql($val), "SHORT").")";
1010 }
1011 }
1012 }
1013
1014 if (isset($arFields[$key]["FROM"])
1015 && $arFields[$key]["FROM"] <> ''
1016 && !in_array($arFields[$key]["FROM"], $arAlreadyJoined))
1017 {
1018 if ($strSqlFrom <> '')
1019 $strSqlFrom .= " ";
1020 $strSqlFrom .= $arFields[$key]["FROM"];
1021 $arAlreadyJoined[] = $arFields[$key]["FROM"];
1022 }
1023
1024 $strSqlSearch_tmp = "";
1025 $cntSqlSearch_tmp = count($arSqlSearch_tmp);
1026
1027 for ($j = 0; $j < $cntSqlSearch_tmp; $j++)
1028 {
1029 if ($j > 0)
1030 $strSqlSearch_tmp .= ($strNegative=="Y" ? " AND " : " OR ");
1031 $strSqlSearch_tmp .= "(".$arSqlSearch_tmp[$j].")";
1032 }
1033 if ($strOrNull == "Y")
1034 {
1035 if ($strSqlSearch_tmp <> '')
1036 $strSqlSearch_tmp .= ($strNegative=="Y" ? " AND " : " OR ");
1037 $strSqlSearch_tmp .= "(".$arFields[$key]["FIELD"]." IS ".($strNegative=="Y" ? "NOT " : "")."NULL)";
1038
1039 if ($strSqlSearch_tmp <> '')
1040 $strSqlSearch_tmp .= ($strNegative=="Y" ? " AND " : " OR ");
1041 if ($arFields[$key]["TYPE"] == "int" || $arFields[$key]["TYPE"] == "double")
1042 $strSqlSearch_tmp .= "(".$arFields[$key]["FIELD"]." ".($strNegative=="Y" ? "<>" : "=")." 0)";
1043 elseif ($arFields[$key]["TYPE"] == "string" || $arFields[$key]["TYPE"] == "char")
1044 $strSqlSearch_tmp .= "(".$arFields[$key]["FIELD"]." ".($strNegative=="Y" ? "<>" : "=")." '')";
1045 else
1046 $strSqlSearch_tmp .= ($strNegative=="Y" ? " (1=1) " : " (1=0) ");
1047 }
1048
1049 if ($strSqlSearch_tmp != "")
1050 $arSqlSearch[] = "(".$strSqlSearch_tmp.")";
1051 }
1052 }
1053
1054 $cntSqlSearch = count($arSqlSearch);
1055 for ($i = 0; $i < $cntSqlSearch; $i++)
1056 {
1057 if ($strSqlWhere <> '')
1058 $strSqlWhere .= " AND ";
1059 $strSqlWhere .= "(".$arSqlSearch[$i].")";
1060 }
1061 // <-- WHERE
1062
1063 // ORDER BY -->
1064 $arSqlOrder = Array();
1065 foreach ($arOrder as $by => $order)
1066 {
1067 $by = mb_strtoupper($by);
1068 $order = mb_strtoupper($order);
1069
1070 if ($order != "ASC")
1071 $order = "DESC";
1072
1073 if (array_key_exists($by, $arFields))
1074 {
1075 $arSqlOrder[] = " ".$arFields[$by]["FIELD"]." ".$order." ";
1076
1077 if (isset($arFields[$by]["FROM"])
1078 && $arFields[$by]["FROM"] <> ''
1079 && !in_array($arFields[$by]["FROM"], $arAlreadyJoined))
1080 {
1081 if ($strSqlFrom <> '')
1082 $strSqlFrom .= " ";
1083 $strSqlFrom .= $arFields[$by]["FROM"];
1084 $arAlreadyJoined[] = $arFields[$by]["FROM"];
1085 }
1086 }
1087 }
1088
1089 DelDuplicateSort($arSqlOrder);
1090 $cntSqlOrder = count($arSqlOrder);
1091 for ($i=0; $i<$cntSqlOrder; $i++)
1092 {
1093 if ($strSqlOrderBy <> '')
1094 $strSqlOrderBy .= ", ";
1095
1096 if($DB->type == "ORACLE")
1097 {
1098 if(mb_substr($arSqlOrder[$i], -3) == "ASC")
1099 $strSqlOrderBy .= $arSqlOrder[$i]." NULLS FIRST";
1100 else
1101 $strSqlOrderBy .= $arSqlOrder[$i]." NULLS LAST";
1102 }
1103 else
1104 $strSqlOrderBy .= $arSqlOrder[$i];
1105 }
1106 // <-- ORDER BY
1107
1108 return array(
1109 "SELECT" => $strSqlSelect,
1110 "FROM" => $strSqlFrom,
1111 "WHERE" => $strSqlWhere,
1112 "GROUPBY" => $strSqlGroupBy,
1113 "ORDERBY" => $strSqlOrderBy
1114 );
1115 }
1116}
1117
1118
1120{
1121 const FIELDS_CACHE_TTL = 2592000;
1122
1123 private $ID;
1124 private $CACHE_ID;
1125 private $arLink;
1126 private $arCRMFields;
1127
1128 private $arAuth;
1129 private $authHash;
1130
1131 private $lastResult = null;
1132
1133 public function __construct($ID, $arAuth = null)
1134 {
1135 $this->ID = intval($ID);
1136 if ($this->ID > 0)
1137 {
1138 $dbRes = CFormCrm::GetByID($this->ID);
1139 $this->arLink = $dbRes->Fetch();
1140 }
1141
1142 if (is_array($arAuth))
1143 {
1144 $this->arAuth = array('LOGIN' => $arAuth['LOGIN'], 'PASSWORD' => $arAuth['PASSWORD']);
1145 }
1146 }
1147
1148 public function AddLead($arLeadFields)
1149 {
1150 return $this->_query('lead.add', $arLeadFields);
1151 }
1152
1153 public function GetFields($bReload = false)
1154 {
1155 global $CACHE_MANAGER;
1156
1157 if (!$this->arLink)
1158 return false;
1159
1160 if ($bReload)
1161 {
1162 $CACHE_MANAGER->Clean($this->_cacheId(), 'form_crm_data');
1163 $this->arCRMFields = null;
1164 }
1165
1166 if (!$this->arCRMFields)
1167 {
1168 if ($CACHE_MANAGER->Read(self::FIELDS_CACHE_TTL, $this->_cacheId(), 'form_crm_data') && !$bReload)
1169 {
1170 $this->arCRMFields = $CACHE_MANAGER->Get($this->_cacheId());
1171 }
1172 else
1173 {
1174 $result = $this->_query('lead.get_fields');
1175 if ($result !== false)
1176 {
1177 $data = $result->data();
1178 $this->arCRMFields = $data['FIELDS'];
1179
1180 $CACHE_MANAGER->Set($this->_cacheId(), $this->arCRMFields);
1181 }
1182 else
1183 {
1184 return false;
1185 }
1186 }
1187 }
1188
1189 return $this->arCRMFields;
1190 }
1191
1192 public function GetAuthHash()
1193 {
1194 return $this->authHash;
1195 }
1196
1197 public function GetLastResult()
1198 {
1199 return $this->lastResult;
1200 }
1201
1202 private function _setAuthHash($hash)
1203 {
1204 if ($hash <> '')
1205 {
1206 $this->authHash = $hash;
1207 CFormCrm::Update($this->ID, array('AUTH_HASH' => $hash));
1208 }
1209 }
1210
1211 private function _cacheId()
1212 {
1213 if ($this->CACHE_ID)
1214 return $this->CACHE_ID;
1215 else
1216 return ($this->CACHE_ID = 'FORM_CRM_'.$this->ID);
1217 }
1218
1219 private function _query($method, $params = array())
1220 {
1221 if ($this->arLink)
1222 {
1223 if (!$method)
1224 $method = 'lead.add';
1225
1226 $arPostFields = array(
1227 'method' => $method
1228 );
1229
1230 if ($this->arAuth)
1231 {
1232 $arPostFields['LOGIN'] = $this->arAuth['LOGIN'];
1233 $arPostFields['PASSWORD'] = $this->arAuth['PASSWORD'];
1234 }
1235 else
1236 {
1237 $arPostFields['AUTH'] = $this->arLink['AUTH_HASH'];
1238 }
1239
1240 $arPostFields = array_merge($params, $arPostFields);
1241
1242 $httpClient = new \Bitrix\Main\Web\HttpClient();
1243 $result_text = $httpClient->post($this->arLink['URL'], $arPostFields);
1244
1245 $version_header = $httpClient->getHeaders()->get('X-CRM-Version');
1246 if ($version_header == '' || version_compare($version_header, "11.5.0") < 0)
1247 {
1248 $result_text = '{"error":"500","error_message":"'.GetMessage('FORM_CRM_VERSION_FAILURE').'"}';
1249 }
1250
1251 $this->lastResult = new _CFormCrmSenderResult($result_text);
1252
1253 if ($this->lastResult->field('AUTH'))
1254 {
1255 $this->_setAuthHash($this->lastResult->field('AUTH'));
1256 }
1257
1258 return $this->lastResult;
1259 }
1260
1261 return false;
1262 }
1263}
1264
1266{
1267 private $bProcess = false;
1268
1269 private $result_text;
1270 private $result;
1271 private $result_code;
1272 private $result_error;
1273
1274 public function __construct($result_text)
1275 {
1276 $this->result_text = trim($result_text);
1277 }
1278
1279 public function code()
1280 {
1281 $this->_process();
1282 return $this->result_code;
1283 }
1284
1285 public function data()
1286 {
1287 $this->_process();
1288 return $this->result;
1289 }
1290
1291 public function error()
1292 {
1293 $this->_process();
1294 return $this->result_error;
1295 }
1296
1297 public function field($field)
1298 {
1299 $this->_process();
1300 return $this->result[$field] ?? null;
1301 }
1302
1303 private function _process()
1304 {
1305 if (!$this->bProcess)
1306 {
1307 if ($this->result_text <> '')
1308 {
1309 $this->result = CUtil::JsObjectToPhp($this->result_text, true);
1310
1311 if (!is_array($this->result))
1312 {
1313 $this->result = null;
1314 }
1315 else
1316 {
1317 $this->result_code = intval($this->result['error']);
1318 if ($this->result_code >= 400)
1319 {
1320 $this->result_error = $this->result['error_message'];
1321 }
1322 }
1323 }
1324
1325 $this->bProcess = true;
1326 }
1327 }
1328}
$arParams
Определения access_dialog.php:21
$hash
Определения ajax_redirector.php:8
global $APPLICATION
Определения include.php:80
field($field)
Определения form_callformcrm.php:1297
__construct($result_text)
Определения form_callformcrm.php:1274
Определения form_callformcrm.php:4
static SetForm($FORM_ID, $arParams)
Определения form_callformcrm.php:89
static GetByFormID($FORM_ID)
Определения form_callformcrm.php:17
static GetFilterOperation($key)
Определения form_callformcrm.php:708
static AddLead($FORM_ID, $RESULT_ID, $arLink=null)
Определения form_callformcrm.php:176
static Delete($ID)
Определения form_callformcrm.php:374
static Add($arFields)
Определения form_callformcrm.php:310
static GetByID($ID)
Определения form_callformcrm.php:12
static PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields)
Определения form_callformcrm.php:767
static _getAllFormFieldsHTML($WEB_FORM_ID, $RESULT_ID, $arAnswers)
Определения form_callformcrm.php:408
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static onResultAdded($FORM_ID, $RESULT_ID)
Определения form_callformcrm.php:166
const LINK_MANUAL
Определения form_callformcrm.php:6
static GetFields($LINK_ID)
Определения form_callformcrm.php:26
static _getAllFormFields($WEB_FORM_ID, $RESULT_ID, $arAnswers)
Определения form_callformcrm.php:551
static CheckFields($action, &$arFields)
Определения form_callformcrm.php:693
static Update($ID, $arFields)
Определения form_callformcrm.php:337
const LINK_AUTO
Определения form_callformcrm.php:5
static Set($arFields, $FIELD_ID=false, $CHECK_RIGHTS="Y", $UPDATE_FILTER="Y")
Определения form_callformfield.php:530
static GetList($WEB_FORM_ID, $get_fields, $by='s_sort', $order='asc', $arFilter=[])
Определения form_callformfield.php:5
static GetDataByID($RESULT_ID, $arrFIELD_SID, &$arrRES, &$arrANSWER)
Определения form_callformresult.php:124
static SetCRMFlag($RESULT_ID, $flag_value)
Определения form_callformresult.php:2091
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения form_cformcrm.php:4
GetFields($bReload=false)
Определения form_callformcrm.php:1153
AddLead($arLeadFields)
Определения form_callformcrm.php:1148
__construct($ID, $arAuth=null)
Определения form_callformcrm.php:1133
const FIELDS_CACHE_TTL
Определения form_callformcrm.php:1121
GetAuthHash()
Определения form_callformcrm.php:1192
GetLastResult()
Определения form_callformcrm.php:1197
global $CACHE_MANAGER
Определения clear_component_cache.php:7
$f
Определения component_props.php:52
$arFields
Определения dblapprove.php:5
$data['IS_AVAILABLE']
Определения .description.php:13
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
GetFilterQuery($field, $val, $procent="Y", $ex_sep=array(), $clob="N", $div_fields="Y", $clob_upper="N")
Определения filter_tools.php:383
$result
Определения get_property_values.php:14
$bFound
Определения get_search.php:40
$query
Определения get_search.php:11
if($ajaxMode) $ID
Определения get_user.php:27
global $DB
Определения cron_frame.php:29
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
DelDuplicateSort(&$arSort)
Определения tools.php:2055
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
Определения tools.php:2701
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
$order
Определения payment.php:8
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$ar
Определения options.php:199
if(empty($signedUserToken)) $key
Определения quickway.php:257
$i
Определения factura.php:643
</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
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
else $a
Определения template.php:137
$val
Определения options.php:1793
$method
Определения index.php:27
$arRes
Определения options.php:104
const SITE_ID
Определения sonet_set_content_view.php:12
$action
Определения file_dialog.php:21
$GLOBALS['_____370096793']
Определения update_client.php:1
$arFilter
Определения user_search.php:106
$url
Определения iframe.php:7
$dbRes
Определения yandex_detail.php:168