public function saveTranslationHistory($params) { global $wgContentTranslationDatabase, $wgContentTranslationTranslateInTarget; if ($wgContentTranslationDatabase === null) { // Central CX database not configured. return; } $user = $this->getUser(); $translator = new ContentTranslation\Translator($user); if (!$wgContentTranslationTranslateInTarget) { $targetTitle = Title::newFromText($params['title']); if (!$targetTitle) { throw new InvalidArgumentException("Invalid target title given"); } $targetURL = $targetTitle->getCanonicalUrl(); } else { $targetTitle = ContentTranslation\SiteMapper::getTargetTitle($params['title'], $this->getUser()->getName()); $targetURL = ContentTranslation\SiteMapper::getPageURL($params['to'], $targetTitle); } $translation = array('sourceTitle' => $params['sourcetitle'], 'targetTitle' => $params['title'], 'sourceLanguage' => $params['from'], 'targetLanguage' => $params['to'], 'sourceURL' => ContentTranslation\SiteMapper::getPageURL($params['from'], $params['sourcetitle']), 'status' => $params['status'], 'progress' => $params['progress'], 'startedTranslator' => $translator->getGlobalUserId(), 'lastUpdatedTranslator' => $translator->getGlobalUserId()); // Save targetURL only when the status is published. if ($params['status'] === 'published') { $translation['targetURL'] = $targetURL; } $cxtranslation = new ContentTranslation\Translation($translation); $cxtranslation->save(); $translationId = $cxtranslation->getTranslationId(); $translator->addTranslation($translationId); if ($params['status'] === 'draft') { // Save the draft ContentTranslation\Draft::save($translationId, $params['html']); } else { // Delete the draft ContentTranslation\Draft::delete($translationId); } }