- Модуль: translate
- Путь к файлу: ~/bitrix/modules/translate/lib/controller/editor/savesource.php
- Класс: BitrixTranslateControllerEditorSaveSource
- Вызов: SaveSource::run
public function run($file = '')
{
Loc::loadLanguageFile(__DIR__. '/operation.php');
Loc::loadLanguageFile(__FILE__);
$result = [];
if (empty($file))
{
$this->addError(new MainError(Loc::getMessage('TR_EDIT_FILE_PATH_ERROR')));
return $result;
}
$normalized = MainIOPath::normalize($file);
if ($normalized != $file)
{
$this->addError(new MainError(Loc::getMessage('TR_EDIT_FILE_WRONG_NAME')));
return $result;
}
$file = $normalized;
if (!TranslateIOPath::isLangDir($file, true) || !TranslateIOPath::isPhpFile($file))
{
$this->addError(new MainError(Loc::getMessage('TR_EDIT_ERROR_FILE_NOT_LANG', ['#FILE#' => $file])));
return $result;
}
if (!TranslatePermission::isAllowPath($file))
{
$this->addError(new MainError(Loc::getMessage('TR_EDIT_FILE_WRONG_NAME')));
return $result;
}
$request = $this->controller->getRequest();
$languagesToUpdate = [];
$enabledLanguagesList = TranslateConfig::getEnabledLanguages();
// languages to update
$languagesToUpdateTmp = $request->getPost('LANGS');
if ($languagesToUpdateTmp !== null && is_array($languagesToUpdateTmp) && count($languagesToUpdateTmp) > 0)
{
$languagesToUpdate = array_intersect($languagesToUpdateTmp, $enabledLanguagesList);
}
unset($languagesToUpdateTmp);
$currentEncoding = MainLocalizationTranslation::getCurrentEncoding();
$documentRoot = rtrim(TranslateIOPath::tidy(MainApplication::getDocumentRoot()), '/');
foreach ($enabledLanguagesList as $langId)
{
if (!in_array($langId, $languagesToUpdate))
{
continue;
}
$langRelPath = TranslateIOPath::replaceLangId($file, $langId);
$fullPath = TranslateIOPath::tidy($documentRoot.'/'.$langRelPath);
$fullPath = MainLocalizationTranslation::convertLangPath($fullPath, $langId);
$langFile = new TranslateFile($fullPath);
$langFile
->setLangId($langId)
->setOperatingEncoding($currentEncoding);
// backup
if ($langFile->isExists() && TranslateConfig::needToBackUpFiles())
{
if (!$langFile->backup())
{
$this->addError(new MainError(
Loc::getMessage('TR_CREATE_BACKUP_ERROR', ['#FILE#' => $langFile->getPath()])
));
}
}
$fileSrcForSave = $request->getPost('SRC_'. $langId);
if (empty($fileSrcForSave) || !is_string($fileSrcForSave))
{
$this->addError(new MainError(Loc::getMessage('TR_EDIT_PARAM_ERROR')));
continue;
}
if (!$langFile->lint($fileSrcForSave))
{
$this->addErrors($langFile->getErrors());
continue;
}
try
{
if (!$langFile->putContents($fileSrcForSave))
{
if ($langFile->hasErrors())
{
$this->addErrors($langFile->getErrors());
}
}
else
{
// check
if (!$langFile->load() && $langFile->hasErrors())
{
$this->addErrors($langFile->getErrors());
}
elseif ($langFile->count() > 0)
{
$langFile->updatePhraseIndex();
}
}
}
catch (MainIOIoException $exception)
{
if (!$langFile->isExists())
{
$this->addError(new MainError(
Loc::getMessage('TR_ERROR_WRITE_CREATE', ['#FILE#' => $langFile->getPath()])
));
}
else
{
$this->addError(new MainError(
Loc::getMessage('TR_ERROR_WRITE_UPDATE', ['#FILE#' => $langFile->getPath()])
));
}
}
}
if (!$this->hasErrors())
{
$result['SUMMARY'] = Loc::getMessage('TR_EDIT_SAVING_COMPLETED');
}
return $result;
}