43 $disableAjaxInGetParameter = $_GET[
'bitrix_disable_ajax'] ??
null;
44 if ($disableAjaxInGetParameter ===
'N')
46 unset(\
Bitrix\Main\Application::getInstance()->getSession()[
'bitrix_disable_ajax']);
49 if ($disableAjaxInGetParameter ===
'Y' || \
Bitrix\Main\Application::getInstance()->getSession()[
'bitrix_disable_ajax'] ==
'Y')
56 if ($parentComponent && $this->
_checkParent($parentComponent))
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';
79 if ($this->bAjaxSession)
92 if (!defined(
'PUBLIC_AJAX_MODE'))
94 define(
'PUBLIC_AJAX_MODE', 1);
99 $this->bIFrameMode =
true;
110 if (!$this->bAjaxSession)
112 $APPLICATION->AddBufferContent([$this,
'__BufferDelimiter']);
117 $this->LocalRedirectHandlerId =
AddEventHandler(
'main',
'OnBeforeLocalRedirect', [$this,
"LocalRedirectHandler"]);
118 $this->RestartBufferHandlerId =
AddEventHandler(
'main',
'OnBeforeRestartBuffer', [$this,
'RestartBufferHandler']);
127 if (($parent->arParams[
'AJAX_MODE'] ??
null) ===
'Y')
131 elseif (($parentComponent = $parent->GetParent()))
161 $this->bRestartBufferCalled =
true;
164 $APPLICATION->AddBufferContent([$this,
'__BufferDelimiter']);
175 if (!$this->bAjaxSession)
182 if (!$this->bIFrameMode)
184 Header(
'X-Bitrix-Ajax-Status: OK');
189 if (!$this->bRestartBufferCalled)
194 if (!$this->bIFrameMode)
196 Header(
'X-Bitrix-Ajax-Status: Redirect');
199 $this->bWrongRedirect =
true;
201 echo
'<script>' . ($this->bIFrameMode ?
'top.' :
'window.') .
'location.href = \'' . CUtil::JSEscape(
$url) .
'\'</script>
';
203 require_once($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/main/include/epilog_after.php");
207 $url = CAjax::AddSessionParam($url, $this->componentID);
209 $this->__removeHandlers();
212 protected function CheckSession()
214 if ($this->componentID = CAjax::GetComponentID($this->componentName, $this->componentTemplate, $this->arParams['AJAX_OPTION_ADDITIONAL
'] ?? null))
216 if ($current_session = CAjax::GetSession())
218 if ($this->componentID == $current_session)
220 $this->bAjaxSession = true;
233 protected function __GetSEFRealUrl($url)
235 $arResult = \Bitrix\Main\UrlRewriter::getList(SITE_ID, ['QUERY
' => $url]);
237 if (is_array($arResult) && !empty($arResult))
239 return $arResult[0]['PATH
'];
247 protected function __isAjaxURL($url)
252 if (preg_match("/^(#|mailto:|javascript:|callto:)/", $url))
257 if (str_contains($url, ':
262 if (CFile::IsImage(
$url))
267 $url = preg_replace(
'/#.*/',
'',
$url);
269 if (($this->arParams[
'SEF_MODE'] ??
null) ===
'Y')
271 if (
$url == POST_FORM_ACTION_URI)
285 if (str_contains(
$url,
'?'))
290 if (!str_ends_with(
$url,
'.php'))
292 if (!str_ends_with(
$url,
'/'))
301 if (!$this->currentUrl)
305 if (($this->arParams[
'SEF_MODE'] ??
null) ===
'Y')
327 $this->basename_currentUrl = basename(
$currentUrl);
330 $dirname = dirname(
$url);
333 $dirname == $this->dirname_currentUrl
340 basename(
$url) == $this->basename_currentUrl
351 $pcre_backtrack_limit = intval(ini_get(
"pcre.backtrack_limit"));
352 $text_len = strlen(
$data);
355 if ($pcre_backtrack_limit > 0 && $pcre_backtrack_limit < $text_len)
357 @ini_set(
"pcre.backtrack_limit", $text_len);
358 $pcre_backtrack_limit = intval(ini_get(
"pcre.backtrack_limit"));
361 return $pcre_backtrack_limit >= $text_len;
368 $regexp_links =
'/(<a\s[^>]*?>.*?<\/a>)/isu';
369 $regexp_params =
'/([\w\-]+)\s*=\s*([\"\'])(.*?)\2/isu';
372 $arData = preg_split($regexp_links,
$data, -1, PREG_SPLIT_DELIM_CAPTURE);
374 if (!is_array($arData))
379 $cData =
count($arData);
385 $arIgnoreAttributes = [
'onclick' =>
true,
'target' =>
true];
392 $bDataChanged =
false;
394 for ($iData = 1; $iData < $cData; $iData += 2)
396 if (!preg_match(
'/^<a\s([^>]*?)>(.*?)<\/a>$/isu', $arData[$iData], $match))
403 if (!preg_match_all($regexp_params,
$params, $arLinkParams))
408 $strAdditional =
' ';
410 $bIgnoreLink =
false;
412 foreach ($arLinkParams[0] as $pkey => $value)
419 $param_name = mb_strtolower($arLinkParams[1][$pkey]);
421 if ($param_name ===
'href')
425 elseif (isset($arIgnoreAttributes[$param_name]))
432 $strAdditional .= $value .
' ';
436 if ($url_key >= 0 && !$bIgnoreLink)
439 $url = str_replace($arSearch,
'',
$url);
445 $pos = mb_strpos(
$url,
'#');
448 $real_url = mb_substr($real_url, 0, $pos);
451 $real_url .= !str_contains(
$url,
'?') ?
'?' :
'&';
452 $real_url .= $add_param;
454 $url_str =
CAjax::GetLinkEx($real_url,
$url, $match[2],
'comp_' . $this->componentID, $strAdditional);
456 $arData[$iData] = $url_str;
457 $bDataChanged =
true;
464 $data = implode(
'', $arData);
471 $arData = preg_split(
'/(<form([^>]*)>)/iu',
$data, -1, PREG_SPLIT_DELIM_CAPTURE);
473 $bDataChanged =
false;
474 if (is_array($arData))
480 $arIgnoreAttributes = [
'target'];
482 foreach ($arIgnoreAttributes as $attr)
484 if (mb_strpos($arData[
$key], $attr .
'="') !==
false)
493 preg_match_all(
'/action=(["\']{1})(.*?)\1/i', $arData[
$key], $arAction);
494 $url = $arAction[2][0];
498 $arData[
$key] =
CAjax::GetForm($arData[
$key + 1],
'comp_' . $this->componentID, $this->componentID,
true, $this->bShadow);
503 $arData[
$key] = str_replace(
$url, $new_url, $arData[
$key]);
506 $bDataChanged =
true;
509 unset($arData[
$key + 1]);
517 $data = implode(
'', $arData);
523 $regexp =
'/(<script(?:[^>]*)?>)(.*?)<\/script>/isu';
526 $scripts_num = preg_match_all($regexp,
$data, $out);
530 if (
false !== $scripts_num)
532 for (
$i = 0;
$i < $scripts_num;
$i++)
536 if ($out[1][
$i] <>
'' && str_contains($out[1][
$i],
'src='))
538 $regexp_src =
'/src="([^"]*)?"/i';
539 if (preg_match($regexp_src, $out[1][
$i], $out1) != 0)
542 'TYPE' =>
'SCRIPT_SRC',
549 $out[2][
$i] = str_replace(
'<!--',
'', $out[2][
$i]);
552 'DATA' => $out[2][
$i],
558 if (!empty($arScripts))
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);
584 $cnt_old =
count($this->arCSSList);
588 if ($cnt_old != $cnt_new)
590 for (
$i = $cnt_old;
$i < $cnt_new;
$i++)
593 if (mb_strtolower(mb_substr($css_path, 0, 7)) !=
'http://' && mb_strtolower(mb_substr($css_path, 0, 8)) !=
'https://')
595 if ((
$p = mb_strpos($css_path,
"?")) > 0)
597 $css_file = mb_substr($css_path, 0,
$p);
601 $css_file = $css_path;
604 if (file_exists(
$_SERVER[
"DOCUMENT_ROOT"] . $css_file))
620 $cnt_old =
count($this->arHeadScripts);
622 $arHeadScriptsNew = [];
624 if ($cnt_old != $cnt_new)
626 for (
$i = $cnt_old;
$i < $cnt_new;
$i++)
638 $arAdditionalData = [];
642 $arAdditionalData[
'SCRIPTS'] = [];
643 $arHeadScriptsNew = array_unique($arHeadScriptsNew);
645 foreach ($arHeadScriptsNew as $script)
647 $arAdditionalData[
'SCRIPTS'][] = CUtil::GetAdditionalFileURL($script);
650 if (
null !== $this->__nav_params)
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]);
657 $arAdditionalData[
"CSS"] = [];
659 $arCSSNew = array_unique($arCSSNew);
660 foreach ($arCSSNew as $style)
662 $arAdditionalData[
'CSS'][] = CUtil::GetAdditionalFileURL($style);
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";
670 $additional_data .=
'</script><script>';
672 if (!$this->bIFrameMode && $this->bHistory)
679 $additional_data .= (
681 ? 'setTimeout(\
'BX.scrollToNode("comp_' . $this->componentID .
'")\', 100)' .
";\r\n"
682 :
'top.BX.scrollToNode(\'comp_' . $this->componentID .
'\')
' . ";\r\n"
686 $additional_data .= '</script>
';
688 return $additional_data;
694 public function _PrepareData()
698 if ($this->bWrongRedirect)
703 $arBuffer = array_slice($APPLICATION->buffer_content, $this->buffer_start_counter, $this->buffer_finish_counter - $this->buffer_start_counter);
705 $delimiter = '###AJAX_
' . $APPLICATION->GetServerUniqID() . '###
';
707 $data = implode($delimiter, $arBuffer);
709 $this->__PrepareLinks($data);
710 $this->__PrepareForms($data);
712 if (!$this->bAjaxSession)
714 $data = '<div
id=
"comp_' . $this->componentID . '">
' . $data . '</div>
';
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>
'
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>';
727 if ($this->bIFrameMode)
729 $this->__PrepareScripts(
$data);
732 $data =
'<html><head></head><body>' .
$data .
'</body></html>';
736 $arBuffer = explode($delimiter,
$data);
737 for (
$i = 0, $cnt =
count($arBuffer);
$i < $cnt;
$i++)
739 $APPLICATION->buffer_content[$this->buffer_start_counter +
$i] = $arBuffer[
$i];
750 if ($this->componentID ==
'')
757 $APPLICATION->AddBufferContent([$this,
'_PrepareData']);
761 if ($this->bAjaxSession)
765 $eventManager->addEventHandlerCompatible(
'main',
'onAfterAjaxResponse', [$this,
'_PrepareAdditionalData']);
766 $eventManager->addEventHandlerCompatible(
'main',
'OnEndBufferContent', [
'CComponentAjax',
'executeEvents']);
768 require_once(
$_SERVER[
"DOCUMENT_ROOT"] .
BX_ROOT .
"/modules/main/include/epilog_after.php");
778 foreach (
GetModuleEvents(
'main',
'onAfterAjaxResponse',
true) as $arEvent)
static getHtmlConverter()
static GetSessionParam($ajax_id=false)
static GetLinkEx($real_url, $public_url, $text, $container_id, $additional='')
static GetForm($form_params, $container_id, $ajax_id, $bReplace=true, $bShadow=true)
LocalRedirectHandler(&$url)
__construct($componentName, $componentTemplate, &$arParams, $parentComponent)
static executeEvents(&$content='')
static Init($arExt=array(), $bReturn=false)
bx_acc_lim_group_list limitGroupList[] multiple<?=$group[ 'ID']?> ID selected margin top
$_SERVER["DOCUMENT_ROOT"]
const BX_AJAX_PARAM_ID(!defined('TAGGED_user_card_size'))
ExecuteModuleEventEx($arEvent, $arParams=[])
htmlspecialcharsback($str)
AddEventHandler($FROM_MODULE_ID, $MESSAGE_ID, $CALLBACK, $SORT=100, $FULL_PATH=false)
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
RemoveEventHandler($FROM_MODULE_ID, $MESSAGE_ID, $iEventHandlerKey)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key
</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."%"
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']