96 UserIdentity $userIdentity,
99 RevisionRecord $revisionRecord,
100 EditResult $editResult
102 global $wgEnablePageTranslation;
104 $content = $wikiPage->getContent();
106 if ( !$content instanceof TextContent ) {
111 $text = $content->getText();
114 if ( !$handle->isValid() ) {
120 $isDummyRevision = !$editResult->isNew()
121 && ( $editResult->getOriginalRevisionId() === $revisionRecord->getParentId() );
123 if ( $isDummyRevision ) {
138 $isNullEdit = $editResult->getOriginalRevisionId() === $revisionRecord->getId();
141 $revId = $revisionRecord->getId();
142 $mwServices = MediaWikiServices::getInstance();
144 $fuzzy = $handle->needsFuzzy( $text );
145 $parentId = $revisionRecord->getParentId();
146 $revTagStore = Services::getInstance()->getRevTagStore();
147 if ( $isNullEdit || $parentId == 0 ) {
149 $wasFuzzy = $handle->isFuzzy();
154 $wasFuzzy = $revTagStore->isRevIdFuzzy( $wikiPage->getId(), $parentId );
156 if ( !$fuzzy && $wasFuzzy ) {
157 $user = $mwServices->getUserFactory()->newFromUserIdentity( $userIdentity );
159 if ( !$mwServices->getPermissionManager()->userCan(
'unfuzzy', $user, $wikiPage->getTitle() ) ) {
162 } elseif ( $isNullEdit ) {
163 $entry =
new ManualLogEntry(
'translationreview',
'unfuzzy' );
168 $nullRevision = $mwServices->getPageUpdaterFactory()
169 ->newPageUpdater( $wikiPage, $userIdentity )
171 CommentStoreComment::newUnsavedComment(
172 $summary !==
'' ? $summary : wfMessage(
"translate-unfuzzy-comment" )
179 $revId = $nullRevision->getId();
180 $entry->setAssociatedRevId( $revId );
181 $entry->setPerformer( $userIdentity );
182 $entry->setTarget( $wikiPage );
183 $logId = $entry->insert();
184 $entry->publish( $logId );
192 if ( !$fuzzy && $editResult->isExactRevert() ) {
193 $method = $editResult->getRevertMethod();
194 if ( $method !== EditResult::REVERT_MANUAL ) {
195 $revertedTo = $editResult->getOriginalRevisionId();
198 if ( $revertedTo !==
null ) {
199 $fuzzy = $revTagStore->isRevIdFuzzy( $wikiPage->getId(), $revertedTo );
204 self::updateFuzzyTag( $wikiPage, $revId, $fuzzy );
206 $group = $handle->getGroup();
208 if ( $handle->getCode() !== $group->getSourceLanguage() ) {
213 MessageGroupStats::clear( $handle );
219 DeferredUpdates::addCallableUpdate(
220 static function () use ( $handle ) {
224 $user = $mwServices->getUserFactory()
225 ->newFromId( $userIdentity->getId() );
228 Services::getInstance()->getHookRunner()
229 ->onTranslate_newTranslation( $handle, $revId, $text, $user );
230 } elseif ( $revertedTo !==
null ) {
233 $oldTransver = $revTagStore->getTransver( $wikiPage, $revertedTo );
234 if ( $oldTransver !==
null ) {
235 $revTagStore->setTransver( $wikiPage, $revId, $oldTransver );
239 TtmServer::onChange( $handle );
241 if ( $wgEnablePageTranslation && $handle->isPageTranslation() ) {
243 $minor = (bool)( $flags & EDIT_MINOR );
245 $summary, $minor, $flags, $handle );
293 if ( $user->isAllowed(
'bot' ) ) {
297 $group = $handle->getGroup();
299 $title = $handle->getTitle();
300 $name = $handle->getKey() .
'/' . $group->getSourceLanguage();
301 $definitionTitle = Title::makeTitleSafe( $title->getNamespace(), $name );
302 if ( !$definitionTitle || !$definitionTitle->exists() ) {
306 $definitionRevision = $definitionTitle->getLatestRevID();
307 $revTagStore = Services::getInstance()->getRevTagStore();
308 $revTagStore->setTransver( $title, $revision, $definitionRevision );