- Модуль: 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;
}