403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/landing/lib/hook/page/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/landing/lib/hook/page/fonts.php
<?php
namespace Bitrix\Landing\Hook\Page;

use Bitrix\Landing\Field;
use Bitrix\Landing\Manager;
use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Bitrix\UI;

class Fonts extends \Bitrix\Landing\Hook\Page
{
	/**
	 * Default font for backward compatibility.
	 */
	public const DEFAULT_FONTS = [
		'g-font-open-sans' => [
			'name' => 'Open Sans',
			'family' => '"Open Sans", Helvetica, Arial, sans-serif',
			'url' => 'https://fonts.googleapis.com/css2?family=Open+Sans:wght@100;200;300;400;500;600;700;800;900&subset=cyrillic',
		],
		'g-font-roboto' => [
			'name' => 'Roboto',
			'family' => '"Roboto", Arial, sans-serif',
			'url' => 'https://fonts.googleapis.com/css2?family=Roboto:wght@100;200;300;400;500;600;700;800;900&subset=cyrillic,cyrillic-ext,latin-ext',
		],
		'g-font-roboto-slab' => [
			'name' => 'Roboto Slab',
			'family' => '"Roboto Slab", Helvetica, Arial, sans-serif',
			'url' => 'https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@100;200;300;400;500;600;700;800;900&subset=cyrillic,cyrillic-ext,latin-ext',
		],
		'g-font-montserrat' => [
			'name' => 'Montserrat',
			'family' => '"Montserrat", Helvetica, Arial, sans-serif',
			'url' => 'https://fonts.googleapis.com/css2?family=Montserrat:wght@100;200;300;400;500;600;700;800;900&subset=cyrillic',
		],
		'g-font-alegreya-sans' => [
			'name' => 'Alegreya Sans',
			'family' => '"Alegreya Sans", sans-serif',
			'url' => 'https://fonts.googleapis.com/css2?family=Alegreya+Sans:wght@100;200;300;400;500;600;700;800;900&subset=cyrillic-ext,latin-ext',
		],
		'g-font-cormorant-infant' => [
			'name' => 'Cormorant Infant',
			'family' => '"Cormorant Infant", serif',
			'url' => 'https://fonts.googleapis.com/css2?family=Cormorant+Infant:wght@100;200;300;400;500;600;700;800;900&subset=cyrillic-ext,latin-ext',
		],
		'g-font-pt-sans-caption' => [
			'name' => 'PT Sans Caption',
			'family' => '"PT Sans Caption", sans-serif',
			'url' => 'https://fonts.googleapis.com/css2?family=PT+Sans+Caption:wght@100;200;300;400;500;600;700;800;900&subset=cyrillic-ext,latin-ext',
		],
		'g-font-pt-sans-narrow' => [
			'name' => 'PT Sans Narrow',
			'family' => '"PT Sans Narrow", sans-serif',
			'url' => 'https://fonts.googleapis.com/css2?family=PT+Sans+Narrow:wght@100;200;300;400;500;600;700;800;900&PT+Sans:wght@100;200;300;400;500;600;700;800;900&subset=cyrillic-ext,latin-ext',
		],
		'g-font-pt-sans' => [
			'name' => 'PT Sans',
			'family' => '"PT Sans", sans-serif',
			'url' => 'https://fonts.googleapis.com/css2?family=PT+Sans:wght@100;200;300;400;500;600;700;800;900&subset=cyrillic-ext,latin-ext',
		],
		'g-font-lobster' => [
			'name' => 'Lobster',
			'family' => '"Lobster", cursive',
			'url' => 'https://fonts.googleapis.com/css2?family=Lobster:wght@100;200;300;400;500;600;700;800;900&subset=cyrillic-ext,latin-ext',
		],
	];

	/**
	 * Set fonts on the page.
	 * @var array
	 */
	protected static $setFonts = [];

	/**
	 * Map of the field.
	 * @return array
	 */
	protected function getMap()
	{
		return [
			'CODE' => new Field\Textarea(
				'CODE', [
				'title' => Loc::getMessage('LNDNGHOOK_FONTS_FONT_BASE'),
			]),
		];
	}

	/**
	 * Enable or not the hook.
	 * @return boolean
	 */
	public function enabled()
	{
		return true;
	}

	/**
	 * Sets font code as using on the page.
	 * @param string $fontCode Font code.
	 * @return void
	 */
	public static function setFontCode(string $fontCode): void
	{
		if (!array_key_exists($fontCode, self::$setFonts))
		{
			self::$setFonts[$fontCode] = [];
		}
	}

	/**
	 * Exec hook.
	 * @return void
	 */
	public function exec()
	{
		if (!self::$setFonts)
		{
			return;
		}
		// @fix for #101643

		$this->fields['CODE'] = str_replace(
			['st yle', 'onl oad', 'li nk'],
			['style', 'onload', 'link'],
			$this->fields['CODE']
		);
		$styleFound = preg_match_all(
			'#(<noscript>.*?<style.*?data-id="([^"]+)"[^>]*>[^<]+</style>)#is',
			$this->fields['CODE'],
			$matches
		);

		$fonts = [];
		if ($styleFound)
		{
			$fonts = array_combine($matches[2], $matches[1]);
		}
		$this->outputFonts($fonts);
	}

	/**
	 * Sets fonts data to the page.
	 * @param array $fonts Fonts data ([fontCode => fontStyle]).
	 * @return void
	 */
	protected function outputFonts(array $fonts): void
	{
		$setFonts = [];

		foreach (self::$setFonts as $fontCode => $foo)
		{
			if (isset($fonts[$fontCode]))
			{
				unset(self::$setFonts[$fontCode]);
				$setFonts[] = self::proxyFontUrl($fonts[$fontCode]);
			}
		}

		// set default fonts
		foreach (self::$setFonts as $fontCode => $foo)
		{
			$setFonts[] = self::outputDefaultFont($fontCode);
		}

		if ($setFonts)
		{
			Manager::setPageView(
				'BeforeHeadClose',
				implode('', $setFonts)
			);
		}
	}

	/**
	 * Outputs default font.
	 * @param string $code Font code.
	 * @return string
	 */
	public static function outputDefaultFont(string $code): string
	{
		if (isset(self::DEFAULT_FONTS[$code]))
		{
			$fontUrl = self::DEFAULT_FONTS[$code]['url'];
			$fontUrl = self::proxyFontUrl($fontUrl);

			return '<link 
						rel="preload" 
						as="style" 
						onload="this.removeAttribute(\'onload\');this.rel=\'stylesheet\'" 
						data-font="' . $code . '" 
						data-protected="true" 
						href="' . $fontUrl . '">
					<noscript>
						<link
							rel="stylesheet" 
							data-font="' . $code . '" 
							data-protected="true" 
							href="' . $fontUrl . '">
					</noscript>';
		}

		return '';
	}

	/**
	 * Generates HTML and CSS tags to load and apply a specified font.
	 *
	 * @param string $fontName The name of the font to be loaded and applied.
	 *
	 * @return string HTML and CSS tags for embedding the specified font.
	 */
	public static function generateFontTags(string $fontName): string
	{
		$fontUrl = "https://fonts.bitrix24.ru/css2?family="
			. str_replace(' ', '+', $fontName)
			. ":wght@100;200;300;400;500;600;700;800;900";
		$fontClass = strtolower(str_replace(' ', '-', $fontName));

		return <<<HTML
			<noscript><link rel="stylesheet" href="$fontUrl" data-font="g-font-$fontClass"></noscript>
			<link rel="preload" href="$fontUrl" data-font="g-font-$fontClass" onload="this.removeAttribute('onload');this.rel='stylesheet'" as="style">
			<style data-id="g-font-$fontClass">.g-font-$fontClass { font-family: "$fontName", sans-serif; }</style>
		HTML;
}

	/**
	 * Proxy font url to bitrix servers
	 * @param string $fontString - string of font with link, noscript or other tags
	 * @return string
	 */
	protected static function proxyFontUrl(string $fontString): string
	{
		$defaultDomain = 'fonts.googleapis.com';
		$proxyDomain = $defaultDomain;
		if (Loader::includeModule('ui'))
		{
			$proxyDomain = UI\Fonts\Proxy::resolveDomain(Manager::getZone());
		}

		return ($defaultDomain !== $proxyDomain)
			? str_replace($defaultDomain, $proxyDomain, $fontString)
			: $fontString
		;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit