Your IP : 172.28.240.42


Current Path : /var/www/html/clients/amz.e-nk.ru/bitrix/modules/main/
Upload File :
Current File : /var/www/html/clients/amz.e-nk.ru/bitrix/modules/main/ajax_tools.php

<?
define ('BX_AJAX_PARAM_ID', 'bxajaxid');

class CAjax
{
	function Init()
	{
		global $APPLICATION;

		$APPLICATION->SetTemplateCSS('ajax/ajax.css');
		$APPLICATION->AddHeadScript('/bitrix/js/main/ajax.js');
	}
	
	function GetComponentID($componentName, $componentTemplate, $additionalID)
	{
		if(function_exists("debug_backtrace"))
		{
			$aTrace = debug_backtrace();
			
			$trace_count = count($aTrace);
			$trace_current = $trace_count-1;
			for ($i = 0; $i<$trace_count; $i++)
			{
				if (strtolower($aTrace[$i]['function']) == 'includecomponent' && (($c = strtolower($aTrace[$i]['class'])) == 'callmain' || $c == 'cmain'))
				{
					$trace_current = $i;
					break;
				}
			}
			
			$sSrcFile = strtolower(str_replace("\\", "/", $aTrace[$trace_current]["file"]));
			$iSrcLine = intval($aTrace[$trace_current]["line"]);
			
			$bSrcFound = false;

			if($iSrcLine > 0 && $sSrcFile <> "")
			{
				// try to covert absolute path to file within DOCUMENT_ROOT
				//$doc_root = strtolower(str_replace("\\", "/", $_SERVER["DOCUMENT_ROOT"]));
				$doc_root = rtrim(str_replace(Array("\\\\", "//", "\\"), Array("\\", "/", "/"), realpath($_SERVER["DOCUMENT_ROOT"])), "\\/");
				$doc_root = strtolower($doc_root);
				
				if(strpos($sSrcFile, $doc_root) === 0)
				{
					//within
					$sSrcFile = substr($sSrcFile, strlen($doc_root));
					$bSrcFound = true;
				}
				else
				{
					//outside
					$sRealBitrix = strtolower(str_replace("\\", "/", realpath($_SERVER["DOCUMENT_ROOT"]."/bitrix")));
					if(strpos($sSrcFile, $sRealBitrix) === 0)
					{
						$sSrcFile = "/bitrix".substr($sSrcFile, strlen($sRealBitrix));
						$bSrcFound = true;
					}
				}
			}
			
			if (!$bSrcFound) 
				return false;
		
			$session_string = $sSrcFile.'|'.$iSrcLine.'|'.$componentName;
			
			if (strlen($componentTemplate) > 0)
				$session_string .= '|'.$componentTemplate;
			else
				$session_string .= '|.default';

			$session_string .= '|'.$additionalID;
				
			return md5($session_string);
		}
		
		return false;
	}
	
	function GetSession()
	{
		if (is_set($_REQUEST, BX_AJAX_PARAM_ID))
			return $_REQUEST[BX_AJAX_PARAM_ID];
		else
			return false;
	}
	
	function GetSessionParam($ajax_id = false)
	{
		if (!$ajax_id) $ajax_id = CAjax::GetSession();
		if (!$ajax_id) return '';
		else return BX_AJAX_PARAM_ID.'='.$ajax_id;
	}

	function AddSessionParam($url, $ajax_id = false)
	{
		$url_anchor = strstr($url, '#');
		if ($url_anchor !== false)
			$url = substr($url, 0, -strlen($url_anchor));
		
		$url .= strpos($url, "?") === false ? '?' : '&';
		$url .= CAjax::GetSessionParam($ajax_id);

		if (is_set($_REQUEST['AJAX_CALL'])) $url .= '&AJAX_CALL=Y';
		
		if ($url_anchor !== false)
			$url .= $url_anchor;
	
		return $url;
	}
	
	// $text = htmlspecialchars;
	function GetLinkEx($real_url, $public_url, $text, $container_id, $additional = '', $bReplace = true, $bShadow = true)
	{
		if (!$public_url) $public_url = $real_url;
	
		return sprintf(
			'<a href="%s" onclick="jsAjaxUtil.%sDataToNode(\'%s\', \'%s\', %s); return false;" %s>%s</a>',
			
			$public_url,
			$bReplace ? 'Insert' : 'Append',
			$real_url,
			$container_id,
			$bShadow ? 'true' : 'false',
			$additional,
			$text
		);
	}
	
	// $text - no htmlspecialchars
	function GetLink($url, $text, $container_id, $additional = '', $bReplace = true, $bShadow = true)
	{
		return CAjax::GetLinkEx($url, false, htmlspecialchars($text), htmlspecialchars($container_id), $additional, (bool)$bReplace ? true : false, (bool)$bShadow ? true : false);
	}
	
	function GetForm($form_params, $container_id, $ajax_id, $bReplace = true, $bShadow = true)
	{
		preg_match_all('/onsubmit=(["\']{1})(.*?)\1/i', $form_params, $arParams);
		
		if (count($arParams[0]) <= 0)
			return '<form '.trim($form_params).' '.CAjax::GetFormEvent($container_id, $bReplace, $bShadow).'><input type="hidden" name="'.BX_AJAX_PARAM_ID.'" value="'.$ajax_id.'" />';
		else
		{
			$event_attr = $arParams[0][0];
			$event_delimiter = $arParams[1][0];
			$event_string = $arParams[2][0];
			
			if ($pos = strpos($event_string, 'return') === false)
			{
				$event_string = $event_string.'; return '.CAjax::GetFormEventValue($container_id, $bReplace, $bShadow, $event_delimiter);
			}
			else
			{
				if ($pos > 0) 
				{
					$event_string_start = substr($event_string, 0, $pos).'; ';
					$event_string = substr($event_string, $pos);
				}
				else
					$event_string_start = '';
				
				$event_string = str_replace('return', '', $event_string);
				$event_string = trim($event_string);
				$event_string = rtrim($event_string, ';');
				$event_string = $event_string_start.'return '.$event_string.' && '.CAjax::GetFormEventValue($container_id, $bReplace, $bShadow, $event_delimiter);
			}

			$event_attr_new = 'onsubmit='.$event_delimiter.$event_string.$event_delimiter;
			$form_params = str_replace($event_attr, $event_attr_new, $form_params);
			
			return '<form '.$form_params.'><input type="hidden" name="'.BX_AJAX_PARAM_ID.'" value="'.$ajax_id.'" />';
		}
	}
	
	function ClearForm($form_params, $ajax_id = false)
	{
		$form_params = str_replace(CAjax::GetSessionParam($ajax_id), '', $form_params);
		
		return '<form '.trim($form_params).'>';
	}

	function GetFormEvent($container_id, $bReplace = true, $bShadow = true)
	{
		return 'onsubmit="return jsAjaxUtil.'.($bReplace ? 'Insert' : 'Append').'FormDataToNode(this, \''.$container_id.'\', '.($bShadow ? 'true' : 'false').');"';
	}
	
	function GetFormEventValue($container_id, $bReplace = true, $bShadow = true, $event_delimiter = '\'')
	{
		$delimiter = $event_delimiter == '\'' ? '"' : '\'';
		return 'jsAjaxUtil.'.($bReplace ? 'Insert' : 'Append').'FormDataToNode(this, '.$delimiter.$container_id.$delimiter.', '.($bShadow ? 'true' : 'false').')';
	}
	
	function encodeURI($str)
	{
		$str = 'view'.$str;
		
		return $str;
	}

	function decodeURI($str)
	{
		global $APPLICATION;
	
		$pos = strpos($str, 'view');
		if ($pos !== 0) 
		{
			$APPLICATION->ThrowException(GetMessage('AJAX_REDIRECTOR_BAD_URL'));
			return false;
		}

		$str = substr($str, 4);
		
		if (substr($str, 0, 8) == '/bitrix/')
		{
			$APPLICATION->ThrowException(GetMessage('AJAX_REDIRECTOR_BAD_URL'));
			return false;
		}
		
		return $str;
	}
}
?>