• Модуль: translate
  • Путь к файлу: ~/bitrix/modules/translate/lib/io/directory.php
  • Класс: BitrixTranslateIODirectory
  • Вызов: Directory::copy
public function copy(
	MainIODirectory $target,
	bool $reWrite = true,
	bool $recursive = false,
	bool $convertEncoding = false,
	string $sourceEncoding = '',
	string $targetEncoding = ''
): bool
{
	if (mb_strpos($target->getPhysicalPath(), $this->getPhysicalPath()) === 0)
	{
		$this->addError(new MainError('Destination is inside in the source folder.'));

		return false;
	}
	if (!$this->isExists())
	{
		$this->addError(new MainError('Source is not exists.'));

		return false;
	}
	if (!$target->isExists())
	{
		$target->create();
	}

	$retFlag = true;

	$children = $this->getChildren();

	/** @var MainIODirectory $dir */
	foreach ($children as $entry)
	{
		if (in_array($entry->getName(), TranslateIGNORE_FS_NAMES, true))
		{
			continue;
		}

		if (
			($entry instanceof MainIODirectory) &&
			$entry->isDirectory() &&
			$recursive
		)
		{
			$source = new self($entry->getPhysicalPath());
			$res = $source->copy(
				(new MainIODirectory($target->getPhysicalPath(). '/'. $entry->getName())),
				$reWrite,
				$recursive,
				$convertEncoding,
				$sourceEncoding,
				$targetEncoding
			);
			if (!$res)
			{
				$retFlag = false;
				$this->addErrors($source->getErrors());
			}

		}
		elseif (
			($entry instanceof MainIOFile) &&
			$entry->isFile()
		)
		{
			$file = new MainIOFile($target->getPhysicalPath(). '/'. $entry->getName());
			if ($file->isExists() && !$reWrite)
			{
				continue;
			}

			try
			{
				$content = $entry->getContents();
				$content = str_replace(array("rn", "r"), array("n", "n"), $content);

				if ($convertEncoding)
				{
					$content = BitrixMainTextEncoding::convertEncoding($content, $sourceEncoding, $targetEncoding);
				}

				$file->putContents($content);
			}
			catch (MainIOIoException $exception)
			{
				$retFlag = false;
				$this->addError(new MainError($exception->getMessage()));
			}
		}
	}

	return $retFlag;
}