/
v.bolshakov
/
AIEcosystem-Testing
Обзор
Документация
Войти
/
v.bolshakov
/
AIEcosystem-Testing
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
common/forms/ai/MqmoQRequestModelForm.php
166 строк
5 KB
Developer
Initial commit
03 авг 2026, 17:43
03 авг 2026, 17:43
7433917
Код
Авторство
О чём код?
<?php namespace common\forms\ai; use common\helpers\ArrayHelper; use common\helpers\FileHelper; use common\helpers\LanguageHelper; use common\helpers\MemoQHelper; use common\kdf\KSystem; use common\memoQ\FileManagerService; use common\memoQ\meta\serverproject\ArrayOfguid; use common\memoQ\meta\serverproject\ArrayOfstring; use common\memoQ\meta\serverproject\ExportTranslationDocumentAsXliffBilingual; use common\memoQ\meta\serverproject\ExportTranslationDocumentAsXliffBilingualResponse; use common\memoQ\meta\serverproject\ImportTranslationDocuments; use common\memoQ\meta\serverproject\ImportTranslationDocumentsResponse; use common\memoQ\meta\serverproject\XliffBilingualExportOptions; use common\memoQ\ServerProjectService; use common\models\memoq\Document; use common\models\memoq\Project; use common\models\memoq\Xliff; use common\models\memoq\XliffSegment; use Yii; use yii\helpers\VarDumper; /** * Запрос к модели * * @author Dmitry E. Semenov <sde.tomsk@gmail.com> * @copyright Self (c) 2025 */ class MqmoQRequestModelForm extends \common\forms\api\RequestModelForm { /** * @var null */ public $xliff_id = null; /** * @inheritdoc */ public function rules() { return ArrayHelper::merge(parent::rules(), [ [['xliff_id'], 'required'], [['xliff_id'], 'number'], ]); } /** * @inheritdoc */ protected function afterSave($result) { parent::afterSave($result); if ($result) { $xliff_id = $this->xliff_id; Yii::debug(VarDumper::dumpAsString([ 'xliff_id' => $xliff_id ])); if ($xliff_id) { $items = $this->model['items']; foreach ($items as $segment => $item) { $seg = XliffSegment::findOne([ 'xliff_id' => $xliff_id, 'segment' => ($segment + 1), ]); if ($seg) { $seg->setAttributes([ 'target' => $item ]); if (!$seg->save()) { $this->addErrors($seg->errors); return false; } } } $xliff = Xliff::findOne($xliff_id); /** @var Document $document */ $document = $xliff->document; /** @var Project $project */ $project = $document->project; $options = new XliffBilingualExportOptions(); $parameters = new ExportTranslationDocumentAsXliffBilingual( $project->guid, $document->guid, $options ); /** @var ServerProjectService $service */ $service = new ServerProjectService(); $fmService = new FileManagerService(); /** @var ExportTranslationDocumentAsXliffBilingualResponse $res */ $res = $service->ExportTranslationDocumentAsXliffBilingual($parameters); $f_info = $res->getExportTranslationDocumentAsXliffBilingualResult(); $file_guid = $f_info->getFileGuid(); $info = MemoQHelper::DownloadFile($fmService, $file_guid); $dom = new \DOMDocument(); libxml_use_internal_errors(true); $dom->loadXML($info['content']); libxml_clear_errors(); // Convert to SimpleXML if needed $document = simplexml_import_dom($dom); /** @var \SimpleXMLElement $body */ $body = $document->file->body; /** @var \SimpleXMLElement $row */ foreach ($body->{"trans-unit"} as $row) { $segment = (int)$row->attributes()->id; if ($target = ArrayHelper::getValue($items, ($segment - 1))) { $row->target = $target; } } $file = Yii::getAlias('@common/runtime/xliff/') . 'p_' . $info['filename']; FileHelper::createDirectory(dirname($file)); // Generate xliff file and return as formated XML string $document->asXML($file); $parameters = new ImportTranslationDocuments($project->guid, null, null, null); $code = LanguageHelper::getLanguageCode($xliff->target_language_id, KSystem::MEMOQ); $langs = new ArrayOfstring(); $langs->setString((array)[$code]); $parameters->setTargetLangCodes($langs); $guid = MemoQHelper::UploadFile($fmService, $file); Yii::debug(VarDumper::dumpAsString([ 'upload_file' => 'true', 'guid' => $guid, ])); $files = new ArrayOfguid(); $files->setGuid([$guid]); $parameters->setFileGuids($files); /** @var ImportTranslationDocumentsResponse $response */ $response = $service->ImportTranslationDocuments($parameters); if (YII_ENV_PROD) { FileHelper::unlink($file); Yii::debug(VarDumper::dumpAsString([ 'remove' => $file, ])); } } } } }