Your IP : 3.147.79.237


Current Path : /var/www/www-root/data/www/www.monolith-realty.ru/bitrix/modules/translate/lib/index/
Upload File :
Current File : /var/www/www-root/data/www/www.monolith-realty.ru/bitrix/modules/translate/lib/index/pathindex.php

<?php

namespace Bitrix\Translate\Index;

use Bitrix\Main;
use Bitrix\Translate;
use Bitrix\Translate\Index;

/**
 * @see \Bitrix\Main\ORM\Objectify\EntityObject
 */
class PathIndex
	extends Index\Internals\EO_PathIndex
{

	/**
	 *  Loads pathIndex by its path.
	 *
	 * @param string $path Path to search index.
	 *
	 * @return self|null
	 */
	public static function loadByPath($path): ?self
	{
		$path = '/'. \trim($path, '/');
		$path = Translate\IO\Path::replaceLangId($path, '#LANG_ID#');

		/** @var Translate\Index\PathIndex $indexPath */
		$indexPath = Translate\Index\Internals\PathIndexTable::getList(['filter' => ['=PATH' => $path]])->fetchObject();

		// if it is lang folder when find the lang/#LANG_ID# folder
		if (
			$indexPath instanceof Translate\Index\PathIndex
			&& $indexPath->getIsLang()
			&& $indexPath->getName() === 'lang'
		)
		{
			$topPathRes = Translate\Index\Internals\PathIndexTable::getList([
				'filter' => [
					'=NAME' => '#LANG_ID#',
					'=DEPTH_LEVEL' => $indexPath->getDepthLevel() + 1,
					'=DESCENDANTS.PARENT_ID' => $indexPath->getId(),//ancestor
				],
			]);
			$indexPath = $topPathRes->fetchObject();
		}

		return $indexPath;
	}


	/**
	 * Detects and returns module id from a path.
	 *
	 * @return string|null
	 */
	public function detectModuleId(): ?string
	{
		$arr = \explode('/', $this->getPath());
		$pos = \array_search('modules', $arr);
		if ($pos !== false)
		{
			if ($arr[$pos - 1] === 'bitrix' && !empty($arr[$pos + 1]))
			{
				return $arr[$pos + 1];
			}
		}

		return null;
	}

	/**
	 * Detects assignment id from a path.
	 *
	 * @return string|null
	 */
	public function detectAssignment(): ?string
	{
		$path = $this->getPath();

		// /bitrix/mobileapp/[moduleName]
		// /bitrix/templates/[templateName]
		// /bitrix/components/bitrix/[componentName]
		// /bitrix/activities/bitrix/[activityName]
		// /bitrix/wizards/bitrix/[wizardsName]
		// /bitrix/gadgets/bitrix/[gadgetName]
		// /bitrix/js/[moduleName]/[smth]
		foreach (Translate\ASSIGNMENT_TYPES as $testEntry)
		{
			$testPath = '/bitrix/'. $testEntry;
			if (\mb_strpos($path, $testPath.'/') === 0 || $path == $testPath)
			{
				return $testEntry;
			}
		}

		$assignment = null;

		$moduleName = $this->detectModuleId();

		if ($moduleName !== null)
		{
			$assignment = 'modules';

			foreach (Translate\ASSIGNMENT_TYPES as $testEntry)
			{
				// /bitrix/modules/[moduleName]/install/mobileapp/[moduleName]
				// /bitrix/modules/[moduleName]/install/templates/[templateName]
				// /bitrix/modules/[moduleName]/install/components/bitrix/[componentName]
				// /bitrix/modules/[moduleName]/install/activities/bitrix/[activityName]
				// /bitrix/modules/[moduleName]/install/wizards/bitrix/[wizardsName]
				// /bitrix/modules/[moduleName]/install/gadgets/bitrix/[gadgetName]
				// /bitrix/modules/[moduleName]/install/js/[moduleName]/[smth]
				$testPath = '/bitrix/modules/'.$moduleName.'/install/'. $testEntry;
				if (\mb_strpos($path, $testPath.'/') === 0 || $path == $testPath)
				{
					return $testEntry;
				}
				if ($testEntry == 'templates')
				{
					// /bitrix/modules/[moduleName]/install/public/templates/[templateName]
					$testPath = '/bitrix/modules/'.$moduleName.'/install/public/'. $testEntry;
					if (\mb_strpos($path, $testPath.'/') === 0 || $path == $testPath)
					{
						return $testEntry;
					}
				}
				// /bitrix/modules/[moduleName]/install/bitrix/templates/[templateName]
				$testPath = '/bitrix/modules/'.$moduleName.'/install/bitrix/'. $testEntry;
				if (\mb_strpos($path, $testPath.'/') === 0 || $path == $testPath)
				{
					return $testEntry;
				}
				// /bitrix/modules/[moduleName]/install/public/templates/[templateName]
				/*$testPath = '/bitrix/modules/'.$moduleName.'/install/public/'. $testEntry;
				if (\mb_strpos($path, $testPath. '/') === 0 || $path == $testPath)
				{
					return $testEntry;
				}*/
				// /bitrix/modules/[moduleName]/lang/#LANG_ID#/[smth]
				$testPath = '/bitrix/modules/'.$moduleName.'/lang/#LANG_ID#/'. $testEntry;
				if (\mb_strpos($path, $testPath.'/') === 0 || $path == $testPath)
				{
					return $testEntry;
				}
				// /bitrix/modules/[moduleName]/lang/#LANG_ID#/install/[smth]
				$testPath = '/bitrix/modules/'.$moduleName.'/lang/#LANG_ID#/install/'. $testEntry;
				if (\mb_strpos($path, $testPath.'/') === 0 || $path == $testPath)
				{
					return $testEntry;
				}

				// /bitrix/modules/[moduleName]/handlers/delivery/[smth]
				// /bitrix/modules/[moduleName]/handlers/paysystem/[smth]
				$testPath = '/bitrix/modules/'.$moduleName.'/handlers/'. $testEntry;
				if (\mb_strpos($path, $testPath.'/') === 0 || $path == $testPath)
				{
					return $testEntry;
				}


				// /bitrix/modules/[moduleName]/payment/[paymentHandler]
			}
		}

		return $assignment;
	}
}