• Модуль: seo
  • Путь к файлу: ~/bitrix/modules/seo/lib/Sitemap/Generator.php
  • Класс: BitrixSeoSitemapGenerator
  • Вызов: Generator::processDirectory
protected function processDirectory($dirData, FileBase $sitemapFile): void
{
	$processedDirs = [];

	if ($dirData['ACTIVE'] == RuntimeTable::ACTIVE)
	{
		$directories = CSeoUtils::getDirStructure(
			$this->sitemapData['SETTINGS']['logical'] == 'Y',
			$this->sitemapData['SITE_ID'],
			$dirData['ITEM_PATH']
		);

		foreach ($directories as $dir)
		{
			$dirKey = "/" . ltrim($dir['DATA']['ABS_PATH'], "/");

			if ($dir['TYPE'] == 'F')
			{
				if (
					!isset($this->sitemapData['SETTINGS']['FILE'][$dirKey])
					|| $this->sitemapData['SETTINGS']['FILE'][$dirKey] == 'Y'
				)
				{
					if (preg_match($this->sitemapData['SETTINGS']['FILE_MASK_REGEXP'], $dir['FILE']))
					{
						$f = new IOFile($dir['DATA']['PATH'], $this->sitemapData['SITE_ID']);
						$sitemapFile->addFileEntry($f);
					}
				}
			}
			else
			{
				if (!isset($this->sitemapData['SETTINGS']['DIR'][$dirKey])
					|| $this->sitemapData['SETTINGS']['DIR'][$dirKey] == 'Y')
				{
					$processedDirs[] = $dirKey;
				}
			}
		}
	}
	else
	{
		$len = mb_strlen($dirData['ITEM_PATH']);
		if (!empty($this->sitemapData['SETTINGS']['DIR']))
		{
			foreach ($this->sitemapData['SETTINGS']['DIR'] as $dirKey => $checked)
			{
				if ($checked == 'Y')
				{
					if (strncmp($dirData['ITEM_PATH'], $dirKey, $len) === 0)
					{
						$processedDirs[] = $dirKey;
					}
				}
			}
		}

		if (!empty($this->sitemapData['SETTINGS']['FILE']))
		{
			foreach ($this->sitemapData['SETTINGS']['FILE'] as $dirKey => $checked)
			{
				if ($checked == 'Y')
				{
					if (strncmp($dirData['ITEM_PATH'], $dirKey, $len) === 0)
					{
						$fileName = IOPath::combine(
							SiteTable::getDocumentRoot($this->sitemapData['SITE_ID']),
							$dirKey
						);

						if (!is_dir($fileName))
						{
							$f = new IOFile($fileName, $this->sitemapData['SITE_ID']);
							if (
								$f->isExists()
								&& !$f->isSystem()
								&& preg_match($this->sitemapData['SETTINGS']['FILE_MASK_REGEXP'], $f->getName())
							)
							{
								$sitemapFile->addFileEntry($f);
							}
						}
					}
				}
			}
		}
	}

	if (count($processedDirs) > 0)
	{
		foreach ($processedDirs as $dirKey)
		{
			$runtimeData = [
				'PID' => $this->sitemapId,
				'ITEM_PATH' => $dirKey,
				'PROCESSED' => RuntimeTable::UNPROCESSED,
				'ACTIVE' => RuntimeTable::ACTIVE,
				'ITEM_TYPE' => RuntimeTable::ITEM_TYPE_DIR,
			];
			RuntimeTable::add($runtimeData);
		}
	}

	RuntimeTable::update($dirData['ID'], [
		'PROCESSED' => RuntimeTable::PROCESSED,
	]);
}