1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
component_ajax.php
См. документацию.
1<?php
8
10
12{
13 var $componentID = '';
14 var $bAjaxSession = false;
15 var $bIFrameMode = false;
21 var $bShadow = true;
22 var $bJump = true;
23 var $bStyle = true;
24 var $bHistory = true;
25 var $bWrongRedirect = false;
31 var $currentUrl = false;
34 var $__nav_params = null;
35
36 public function __construct($componentName, $componentTemplate, &$arParams, $parentComponent)
37 {
39 global $APPLICATION, $USER;
40
41 if ($USER->IsAdmin())
42 {
43 $disableAjaxInGetParameter = $_GET['bitrix_disable_ajax'] ?? null;
44 if ($disableAjaxInGetParameter === 'N')
45 {
46 unset(\Bitrix\Main\Application::getInstance()->getSession()['bitrix_disable_ajax']);
47 }
48
49 if ($disableAjaxInGetParameter === 'Y' || \Bitrix\Main\Application::getInstance()->getSession()['bitrix_disable_ajax'] == 'Y')
50 {
51 \Bitrix\Main\Application::getInstance()->getSession()['bitrix_disable_ajax'] = 'Y';
52 return;
53 }
54 }
55
56 if ($parentComponent && $this->_checkParent($parentComponent))
57 {
58 return;
59 }
60
61 $this->componentName = $componentName;
62 $this->componentTemplate = $componentTemplate;
63 $this->arParams = $arParams;
64
65 $this->bShadow = !isset($this->arParams['AJAX_OPTION_SHADOW']) || $this->arParams['AJAX_OPTION_SHADOW'] != 'N';
66 $this->bJump = !isset($this->arParams['AJAX_OPTION_JUMP']) || $this->arParams['AJAX_OPTION_JUMP'] != 'N';
67 $this->bStyle = !isset($this->arParams['AJAX_OPTION_STYLE']) || $this->arParams['AJAX_OPTION_STYLE'] != 'N';
68 $this->bHistory = !isset($this->arParams['AJAX_OPTION_HISTORY']) || $this->arParams['AJAX_OPTION_HISTORY'] != 'N';
69
70 if (!$this->CheckSession())
71 {
72 return;
73 }
74
75 CJSCore::Init(['ajax']);
76
77 $arParams['AJAX_ID'] = $this->componentID;
78
79 if ($this->bAjaxSession)
80 {
81 // dirty hack: try to get breadcrumb call params
82 for ($i = 0, $cnt = count($APPLICATION->buffer_content_type); $i < $cnt; $i++)
83 {
84 if (is_array($APPLICATION->buffer_content_type[$i]['F']) && $APPLICATION->buffer_content_type[$i]['F'][1] === 'GetNavChain')
85 {
86 $this->__nav_params = $APPLICATION->buffer_content_type[$i]['P'];
87 }
88 }
89
90 $APPLICATION->RestartBuffer();
91
92 if (!defined('PUBLIC_AJAX_MODE'))
93 {
94 define('PUBLIC_AJAX_MODE', 1);
95 }
96
97 if (isset($_REQUEST['AJAX_CALL']))
98 {
99 $this->bIFrameMode = true;
100 }
101 }
102
103 if ($this->bStyle)
104 {
105 $this->arCSSList = $APPLICATION->sPath2css;
106 }
107
108 $this->arHeadScripts = $APPLICATION->arHeadScripts;
109
110 if (!$this->bAjaxSession)
111 {
112 $APPLICATION->AddBufferContent([$this, '__BufferDelimiter']);
113 }
114
115 $this->buffer_start_counter = count($APPLICATION->buffer_content);
116
117 $this->LocalRedirectHandlerId = AddEventHandler('main', 'OnBeforeLocalRedirect', [$this, "LocalRedirectHandler"]);
118 $this->RestartBufferHandlerId = AddEventHandler('main', 'OnBeforeRestartBuffer', [$this, 'RestartBufferHandler']);
119 }
120
125 protected function _checkParent($parent)
126 {
127 if (($parent->arParams['AJAX_MODE'] ?? null) === 'Y')
128 {
129 return true;
130 }
131 elseif (($parentComponent = $parent->GetParent()))
132 {
133 return $this->_checkParent($parentComponent);
134 }
135
136 return false;
137 }
138
142 public function __BufferDelimiter()
143 {
144 return '';
145 }
146
147 protected function __removeHandlers()
148 {
149 RemoveEventHandler('main', 'OnBeforeRestartBuffer', $this->RestartBufferHandlerId);
150 RemoveEventHandler('main', 'OnBeforeLocalRedirect', $this->LocalRedirectHandlerId);
151 }
152
156 public function RestartBufferHandler()
157 {
159 global $APPLICATION;
160
161 $this->bRestartBufferCalled = true;
162 //ob_end_clean();
163
164 $APPLICATION->AddBufferContent([$this, '__BufferDelimiter']);
165 $this->buffer_start_counter = count($APPLICATION->buffer_content);
166
167 $this->__removeHandlers();
168 }
169
173 public function LocalRedirectHandler(&$url)
174 {
175 if (!$this->bAjaxSession)
176 {
177 return;
178 }
179
180 if ($this->__isAjaxURL($url))
181 {
182 if (!$this->bIFrameMode)
183 {
184 Header('X-Bitrix-Ajax-Status: OK');
185 }
186 }
187 else
188 {
189 if (!$this->bRestartBufferCalled)
190 {
191 ob_end_clean();
192 }
193
194 if (!$this->bIFrameMode)
195 {
196 Header('X-Bitrix-Ajax-Status: Redirect');
197 }
198
199 $this->bWrongRedirect = true;
200
201 echo '<script>' . ($this->bIFrameMode ? 'top.' : 'window.') . 'location.href = \'' . CUtil::JSEscape($url) . '\'</script>';
202
203 require_once($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/include/epilog_after.php");
204 exit();
205 }
206
207 $url = CAjax::AddSessionParam($url, $this->componentID);
208
209 $this->__removeHandlers();
210 }
211
212 protected function CheckSession()
213 {
214 if ($this->componentID = CAjax::GetComponentID($this->componentName, $this->componentTemplate, $this->arParams['AJAX_OPTION_ADDITIONAL'] ?? null))
215 {
216 if ($current_session = CAjax::GetSession())
217 {
218 if ($this->componentID == $current_session)
219 {
220 $this->bAjaxSession = true;
221 return true;
222 }
223 else
224 {
225 return false;
226 }
227 }
228 return true;
229 }
230 return false;
231 }
232
233 protected function __GetSEFRealUrl($url)
234 {
235 $arResult = \Bitrix\Main\UrlRewriter::getList(SITE_ID, ['QUERY' => $url]);
236
237 if (is_array($arResult) && !empty($arResult))
238 {
239 return $arResult[0]['PATH'];
240 }
241 else
242 {
243 return false;
244 }
245 }
246
247 protected function __isAjaxURL($url)
248 {
250 global $APPLICATION;
251
252 if (preg_match("/^(#|mailto:|javascript:|callto:)/", $url))
253 {
254 return false;
255 }
256
257 if (str_contains($url, '://'))
258 {
259 return false;
260 }
261
262 if (CFile::IsImage($url))
263 {
264 return false;
265 }
266
267 $url = preg_replace('/#.*/', '', $url);
268
269 if (($this->arParams['SEF_MODE'] ?? null) === 'Y')
270 {
271 if ($url == POST_FORM_ACTION_URI)
272 {
273 return true;
274 }
275
276 $url = $this->__GetSEFRealUrl($url);
277
278 if ($url === false)
279 {
280 return false;
281 }
282 }
283 else
284 {
285 if (str_contains($url, '?'))
286 {
287 $url = mb_substr($url, 0, mb_strpos($url, '?'));
288 }
289
290 if (!str_ends_with($url, '.php'))
291 {
292 if (!str_ends_with($url, '/'))
293 {
294 $url .= '/';
295 }
296
297 $url .= 'index.php';
298 }
299 }
300
301 if (!$this->currentUrl)
302 {
303 $currentUrl = $APPLICATION->GetCurPage();
304
305 if (($this->arParams['SEF_MODE'] ?? null) === 'Y')
306 {
307 $currentUrl = $this->__getSEFRealUrl($currentUrl);
308 }
309
310 if (str_contains($currentUrl, '?'))
311 {
312 $currentUrl = mb_substr($currentUrl, 0, mb_strpos($currentUrl, '?'));
313 }
314
315 if (!str_ends_with($currentUrl, '.php'))
316 {
317 if (!str_ends_with($currentUrl, '/'))
318 {
319 $currentUrl .= '/';
320 }
321
322 $currentUrl .= 'index.php';
323 }
324
325 $this->currentUrl = $currentUrl;
326 $this->dirname_currentUrl = dirname($currentUrl);
327 $this->basename_currentUrl = basename($currentUrl);
328 }
329
330 $dirname = dirname($url);
331 if (
332 (
333 $dirname == $this->dirname_currentUrl
334 ||
335 $dirname == ''
336 ||
337 $dirname == '.'
338 )
339 &&
340 basename($url) == $this->basename_currentUrl
341 )
342 {
343 return true;
344 }
345
346 return false;
347 }
348
349 protected function _checkPcreLimit($data)
350 {
351 $pcre_backtrack_limit = intval(ini_get("pcre.backtrack_limit"));
352 $text_len = strlen($data);
353 $text_len++;
354
355 if ($pcre_backtrack_limit > 0 && $pcre_backtrack_limit < $text_len)
356 {
357 @ini_set("pcre.backtrack_limit", $text_len);
358 $pcre_backtrack_limit = intval(ini_get("pcre.backtrack_limit"));
359 }
360
361 return $pcre_backtrack_limit >= $text_len;
362 }
363
364 protected function __PrepareLinks(&$data)
365 {
366 $add_param = CAjax::GetSessionParam($this->componentID);
367
368 $regexp_links = '/(<a\s[^>]*?>.*?<\/a>)/isu';
369 $regexp_params = '/([\w\-]+)\s*=\s*([\"\'])(.*?)\2/isu';
370
371 $this->_checkPcreLimit($data);
372 $arData = preg_split($regexp_links, $data, -1, PREG_SPLIT_DELIM_CAPTURE);
373
374 if (!is_array($arData))
375 {
376 return;
377 }
378
379 $cData = count($arData);
380 if ($cData < 2)
381 {
382 return;
383 }
384
385 $arIgnoreAttributes = ['onclick' => true, 'target' => true];
386 $arSearch = [
387 $add_param . '&',
388 $add_param,
389 'AJAX_CALL=Y&',
390 'AJAX_CALL=Y',
391 ];
392 $bDataChanged = false;
393
394 for ($iData = 1; $iData < $cData; $iData += 2)
395 {
396 if (!preg_match('/^<a\s([^>]*?)>(.*?)<\/a>$/isu', $arData[$iData], $match))
397 {
398 continue;
399 }
400
401 $params = $match[1];
402
403 if (!preg_match_all($regexp_params, $params, $arLinkParams))
404 {
405 continue;
406 }
407
408 $strAdditional = ' ';
409 $url_key = -1;
410 $bIgnoreLink = false;
411
412 foreach ($arLinkParams[0] as $pkey => $value)
413 {
414 if ($value == '')
415 {
416 continue;
417 }
418
419 $param_name = mb_strtolower($arLinkParams[1][$pkey]);
420
421 if ($param_name === 'href')
422 {
423 $url_key = $pkey;
424 }
425 elseif (isset($arIgnoreAttributes[$param_name]))
426 {
427 $bIgnoreLink = true;
428 break;
429 }
430 else
431 {
432 $strAdditional .= $value . ' ';
433 }
434 }
435
436 if ($url_key >= 0 && !$bIgnoreLink)
437 {
438 $url = \Bitrix\Main\Text\Converter::getHtmlConverter()->decode($arLinkParams[3][$url_key]);
439 $url = str_replace($arSearch, '', $url);
440
441 if ($this->__isAjaxURL($url))
442 {
443 $real_url = $url;
444
445 $pos = mb_strpos($url, '#');
446 if ($pos !== false)
447 {
448 $real_url = mb_substr($real_url, 0, $pos);
449 }
450
451 $real_url .= !str_contains($url, '?') ? '?' : '&';
452 $real_url .= $add_param;
453
454 $url_str = CAjax::GetLinkEx($real_url, $url, $match[2], 'comp_' . $this->componentID, $strAdditional);
455
456 $arData[$iData] = $url_str;
457 $bDataChanged = true;
458 }
459 }
460 }
461
462 if ($bDataChanged)
463 {
464 $data = implode('', $arData);
465 }
466 }
467
468 protected function __PrepareForms(&$data)
469 {
470 $this->_checkPcreLimit($data);
471 $arData = preg_split('/(<form([^>]*)>)/iu', $data, -1, PREG_SPLIT_DELIM_CAPTURE);
472
473 $bDataChanged = false;
474 if (is_array($arData))
475 {
476 for ($key = 0, $l = count($arData); $key < $l; $key++)
477 {
478 if ($key % 3 != 0)
479 {
480 $arIgnoreAttributes = ['target'];
481 $bIgnore = false;
482 foreach ($arIgnoreAttributes as $attr)
483 {
484 if (mb_strpos($arData[$key], $attr . '="') !== false)
485 {
486 $bIgnore = true;
487 break;
488 }
489 }
490
491 if (!$bIgnore)
492 {
493 preg_match_all('/action=(["\']{1})(.*?)\1/i', $arData[$key], $arAction);
494 $url = $arAction[2][0];
495
496 if ($url === '' || $this->__isAjaxURL($url) || $this->__isAjaxURL(urldecode($url)))
497 {
498 $arData[$key] = CAjax::GetForm($arData[$key + 1], 'comp_' . $this->componentID, $this->componentID, true, $this->bShadow);
499 }
500 else
501 {
502 $new_url = str_replace(CAjax::GetSessionParam($this->componentID), '', $url);
503 $arData[$key] = str_replace($url, $new_url, $arData[$key]);
504 }
505
506 $bDataChanged = true;
507 }
508
509 unset($arData[$key + 1]);
510 $key++;
511 }
512 }
513 }
514
515 if ($bDataChanged)
516 {
517 $data = implode('', $arData);
518 }
519 }
520
521 protected function __prepareScripts(&$data)
522 {
523 $regexp = '/(<script(?:[^>]*)?>)(.*?)<\/script>/isu';
524
525 $this->_checkPcreLimit($data);
526 $scripts_num = preg_match_all($regexp, $data, $out);
527
528 $arScripts = [];
529
530 if (false !== $scripts_num)
531 {
532 for ($i = 0; $i < $scripts_num; $i++)
533 {
534 $data = str_replace($out[0][$i], '', $data);
535
536 if ($out[1][$i] <> '' && str_contains($out[1][$i], 'src='))
537 {
538 $regexp_src = '/src="([^"]*)?"/i';
539 if (preg_match($regexp_src, $out[1][$i], $out1) != 0)
540 {
541 $arScripts[] = [
542 'TYPE' => 'SCRIPT_SRC',
543 'DATA' => $out1[1],
544 ];
545 }
546 }
547 else
548 {
549 $out[2][$i] = str_replace('<!--', '', $out[2][$i]);
550 $arScripts[] = [
551 'TYPE' => 'SCRIPT',
552 'DATA' => $out[2][$i],
553 ];
554 }
555 }
556 }
557
558 if (!empty($arScripts))
559 {
560 $data .= "
561<script>
562parent.bxcompajaxframeonload = function() {
563 parent.BX.CaptureEventsGet();
564 parent.BX.CaptureEvents(parent, 'load');
565 parent.BX.evalPack(" . Json::encode($arScripts) . ");
566 setTimeout('parent.BX.ajax.__runOnload();', 300);
567}</script>
568";
569 }
570 }
571
575 public function _PrepareAdditionalData()
576 {
578 global $APPLICATION;
579
580 // get CSS changes list
581 if ($this->bStyle)
582 {
583 $arCSSList = $APPLICATION->sPath2css;
584 $cnt_old = count($this->arCSSList);
585 $cnt_new = count($arCSSList);
586 $arCSSNew = [];
587
588 if ($cnt_old != $cnt_new)
589 {
590 for ($i = $cnt_old; $i < $cnt_new; $i++)
591 {
592 $css_path = $arCSSList[$i];
593 if (mb_strtolower(mb_substr($css_path, 0, 7)) != 'http://' && mb_strtolower(mb_substr($css_path, 0, 8)) != 'https://')
594 {
595 if (($p = mb_strpos($css_path, "?")) > 0)
596 {
597 $css_file = mb_substr($css_path, 0, $p);
598 }
599 else
600 {
601 $css_file = $css_path;
602 }
603
604 if (file_exists($_SERVER["DOCUMENT_ROOT"] . $css_file))
605 {
606 $arCSSNew[] = $arCSSList[$i];
607 }
608 }
609 else
610 {
611 $arCSSNew[] = $arCSSList[$i];
612 }
613 }
614 }
615 }
616
617 // get scripts changes list
618 $arHeadScripts = $APPLICATION->arHeadScripts;
619
620 $cnt_old = count($this->arHeadScripts);
621 $cnt_new = count($arHeadScripts);
622 $arHeadScriptsNew = [];
623
624 if ($cnt_old != $cnt_new)
625 {
626 for ($i = $cnt_old; $i < $cnt_new; $i++)
627 {
628 $arHeadScriptsNew[] = $arHeadScripts[$i];
629 }
630 }
631
632 if (!$APPLICATION->oAsset->optimizeJs())
633 {
634 $arHeadScriptsNew = array_merge(CJSCore::GetScriptsList(), $arHeadScriptsNew);
635 }
636
637 // prepare additional data
638 $arAdditionalData = [];
639 $arAdditionalData['TITLE'] = htmlspecialcharsback($APPLICATION->GetTitle());
640 $arAdditionalData['WINDOW_TITLE'] = htmlspecialcharsback($APPLICATION->GetTitle('title'));
641
642 $arAdditionalData['SCRIPTS'] = [];
643 $arHeadScriptsNew = array_unique($arHeadScriptsNew);
644
645 foreach ($arHeadScriptsNew as $script)
646 {
647 $arAdditionalData['SCRIPTS'][] = CUtil::GetAdditionalFileURL($script);
648 }
649
650 if (null !== $this->__nav_params)
651 {
652 $arAdditionalData['NAV_CHAIN'] = $APPLICATION->GetNavChain($this->__nav_params[0], $this->__nav_params[1], $this->__nav_params[2], $this->__nav_params[3], $this->__nav_params[4]);
653 }
654
655 if ($this->bStyle)
656 {
657 $arAdditionalData["CSS"] = [];
659 $arCSSNew = array_unique($arCSSNew);
660 foreach ($arCSSNew as $style)
661 {
662 $arAdditionalData['CSS'][] = CUtil::GetAdditionalFileURL($style);
663 }
664 }
665
666 $additional_data = '<script bxrunfirst="true">' . "\n";
667 $additional_data .= 'var arAjaxPageData = ' . Json::encode($arAdditionalData) . ";\r\n";
668 $additional_data .= 'parent.BX.ajax.UpdatePageData(arAjaxPageData)' . ";\r\n";
669
670 $additional_data .= '</script><script>';
671
672 if (!$this->bIFrameMode && $this->bHistory)
673 {
674 $additional_data .= 'top.BX.ajax.history.put(window.AJAX_PAGE_STATE.getState(), \'' . CUtil::JSEscape(CAjax::encodeURI($APPLICATION->GetCurPageParam('', [BX_AJAX_PARAM_ID], false))) . '\')' . ";\r\n";
675 }
676
677 if ($this->bJump)
678 {
679 $additional_data .= (
680 $this->bIFrameMode
681 ? 'setTimeout(\'BX.scrollToNode("comp_' . $this->componentID . '")\', 100)' . ";\r\n"
682 : 'top.BX.scrollToNode(\'comp_' . $this->componentID . '\')' . ";\r\n"
683 );
684 }
685
686 $additional_data .= '</script>';
687
688 return $additional_data;
689 }
690
694 public function _PrepareData()
695 {
696 global $APPLICATION;
697
698 if ($this->bWrongRedirect)
699 {
700 return null;
701 }
702
703 $arBuffer = array_slice($APPLICATION->buffer_content, $this->buffer_start_counter, $this->buffer_finish_counter - $this->buffer_start_counter);
704
705 $delimiter = '###AJAX_' . $APPLICATION->GetServerUniqID() . '###';
706
707 $data = implode($delimiter, $arBuffer);
708
709 $this->__PrepareLinks($data);
710 $this->__PrepareForms($data);
711
712 if (!$this->bAjaxSession)
713 {
714 $data = '<div id="comp_' . $this->componentID . '">' . $data . '</div>';
715
716 if ($this->bHistory)
717 {
718 $data =
719 '<script>if (window.location.hash != \'\' && window.location.hash != \'#\') top.BX.ajax.history.checkRedirectStart(\'' . CUtil::JSEscape(BX_AJAX_PARAM_ID) . '\', \'' . CUtil::JSEscape($this->componentID) . '\')</script>'
720 . $data
721 . '<script>if (top.BX.ajax.history.bHashCollision) top.BX.ajax.history.checkRedirectFinish(\'' . CUtil::JSEscape(BX_AJAX_PARAM_ID) . '\', \'' . CUtil::JSEscape($this->componentID) . '\');</script>'
722 . '<script>top.BX.ready(BX.defer(function() {window.AJAX_PAGE_STATE = new top.BX.ajax.component(\'comp_' . $this->componentID . '\'); top.BX.ajax.history.init(window.AJAX_PAGE_STATE);}))</script>';
723 }
724 }
725 else
726 {
727 if ($this->bIFrameMode)
728 {
729 $this->__PrepareScripts($data);
730
731 // fix IE bug;
732 $data = '<html><head></head><body>' . $data . '</body></html>';
733 }
734 }
735
736 $arBuffer = explode($delimiter, $data);
737 for ($i = 0, $cnt = count($arBuffer); $i < $cnt; $i++)
738 {
739 $APPLICATION->buffer_content[$this->buffer_start_counter + $i] = $arBuffer[$i];
740 }
741
742 return '';
743 }
744
745 public function Process()
746 {
748 global $APPLICATION;
749
750 if ($this->componentID == '')
751 {
752 return;
753 }
754
755 $this->buffer_finish_counter = count($APPLICATION->buffer_content) + 1;
756
757 $APPLICATION->AddBufferContent([$this, '_PrepareData']);
758
759 $this->__removeHandlers();
760
761 if ($this->bAjaxSession)
762 {
764
765 $eventManager->addEventHandlerCompatible('main', 'onAfterAjaxResponse', [$this, '_PrepareAdditionalData']);
766 $eventManager->addEventHandlerCompatible('main', 'OnEndBufferContent', ['CComponentAjax', 'executeEvents']);
767
768 require_once($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/include/epilog_after.php");
769 exit();
770 }
771 }
772
773 // will be called as delay function and not in class entity context
774 public static function executeEvents(&$content = '')
775 {
776 ob_start();
777
778 foreach (GetModuleEvents('main', 'onAfterAjaxResponse', true) as $arEvent)
779 {
780 echo ExecuteModuleEventEx($arEvent);
781 }
782
783 $content = ob_get_clean() . $content;
784 }
785}
const BX_ROOT
Определения bx_root.php:3
global $APPLICATION
Определения include.php:80
static getInstance()
Определения application.php:98
static getInstance()
Определения eventmanager.php:31
static getHtmlConverter()
Определения converter.php:13
Определения json.php:9
static encodeURI($str)
Определения ajax_tools.php:158
static GetSessionParam($ajax_id=false)
Определения ajax_tools.php:53
static GetLinkEx($real_url, $public_url, $text, $container_id, $additional='')
Определения ajax_tools.php:91
static GetForm($form_params, $container_id, $ajax_id, $bReplace=true, $bShadow=true)
Определения ajax_tools.php:114
$RestartBufferHandlerId
Определения component_ajax.php:29
$bAjaxSession
Определения component_ajax.php:14
$componentTemplate
Определения component_ajax.php:17
__prepareScripts(&$data)
Определения component_ajax.php:521
LocalRedirectHandler(&$url)
Определения component_ajax.php:173
__GetSEFRealUrl($url)
Определения component_ajax.php:233
_checkPcreLimit($data)
Определения component_ajax.php:349
_PrepareAdditionalData()
Определения component_ajax.php:575
$dirname_currentUrl
Определения component_ajax.php:32
$__nav_params
Определения component_ajax.php:34
$componentID
Определения component_ajax.php:13
RestartBufferHandler()
Определения component_ajax.php:156
_checkParent($parent)
Определения component_ajax.php:125
$arParams
Определения component_ajax.php:18
$bHistory
Определения component_ajax.php:24
__construct($componentName, $componentTemplate, &$arParams, $parentComponent)
Определения component_ajax.php:36
__BufferDelimiter()
Определения component_ajax.php:142
$bShadow
Определения component_ajax.php:21
$componentName
Определения component_ajax.php:16
$buffer_start_counter
Определения component_ajax.php:26
$bWrongRedirect
Определения component_ajax.php:25
$currentUrl
Определения component_ajax.php:31
__removeHandlers()
Определения component_ajax.php:147
$bStyle
Определения component_ajax.php:23
__isAjaxURL($url)
Определения component_ajax.php:247
$bJump
Определения component_ajax.php:22
$bRestartBufferCalled
Определения component_ajax.php:28
__PrepareForms(&$data)
Определения component_ajax.php:468
static executeEvents(&$content='')
Определения component_ajax.php:774
$bIFrameMode
Определения component_ajax.php:15
$buffer_finish_counter
Определения component_ajax.php:27
$LocalRedirectHandlerId
Определения component_ajax.php:30
$arCSSList
Определения component_ajax.php:19
CheckSession()
Определения component_ajax.php:212
$arHeadScripts
Определения component_ajax.php:20
$basename_currentUrl
Определения component_ajax.php:33
Process()
Определения component_ajax.php:745
__PrepareLinks(&$data)
Определения component_ajax.php:364
static Init($arExt=array(), $bReturn=false)
Определения jscore.php:66
static GetScriptsList()
Определения jscore.php:344
$content
Определения commerceml.php:144
$data['IS_AVAILABLE']
Определения .description.php:13
bx_acc_lim_group_list limitGroupList[] multiple<?=$group[ 'ID']?> ID selected margin top
Определения file_new.php:657
$_REQUEST["admin_mnu_menu_id"]
Определения get_menu.php:8
$p
Определения group_list_element_edit.php:23
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $USER
Определения csv_new_run.php:40
const BX_AJAX_PARAM_ID(!defined('TAGGED_user_card_size'))
Определения constants.php:99
$l
Определения options.php:783
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
htmlspecialcharsback($str)
Определения tools.php:2693
AddEventHandler($FROM_MODULE_ID, $MESSAGE_ID, $CALLBACK, $SORT=100, $FULL_PATH=false)
Определения tools.php:5165
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
RemoveEventHandler($FROM_MODULE_ID, $MESSAGE_ID, $iEventHandlerKey)
Определения tools.php:5171
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
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
$eventManager
Определения include.php:412
$url
Определения iframe.php:7