/** * @dataProvider provideGroups */ public function testGetParentGroups($expected, $target) { $group = MessageGroups::getGroup($target); $got = MessageGroups::getParentGroups($group); $this->assertEquals($expected, $got); }
public function execute( $parameters ) { $this->setHeaders(); global $wgRequest, $wgOut, $wgUser; $this->user = $wgUser; $request = $wgRequest; $target = $wgRequest->getText( 'target', $parameters ); $revision = $wgRequest->getInt( 'revision', 0 ); $action = $request->getVal( 'do' ); // No specific page or invalid input $title = Title::newFromText( $target ); if ( !$title ) { if ( $target !== '' ) { $wgOut->addWikiMsg( 'tpt-badtitle' ); } else { $this->listPages(); } return; } // Check permissions if ( !$this->user->isAllowed( 'pagetranslation' ) ) { $wgOut->permissionRequired( 'pagetranslation' ); return; } // Check permissions if ( $wgRequest->wasPosted() && !$this->user->matchEditToken( $wgRequest->getText( 'token' ) ) ) { self::superDebug( __METHOD__, "token failure", $this->user ); $wgOut->permissionRequired( 'pagetranslation' ); return; } // We are processing some specific page if ( !$title->exists() ) { $wgOut->addWikiMsg( 'tpt-nosuchpage', $title->getPrefixedText() ); return; } if ( $action === 'discourage' || $action === 'encourage' ) { $id = TranslatablePage::getMessageGroupIdFromTitle( $title ); $dbw = wfGetDB( DB_MASTER ); $table = 'translate_groupreviews'; $row = array( 'tgr_group' => $id, 'tgr_lang' => '*priority', 'tgr_state' => 'discouraged', ); if ( $action === 'encourage' ) { $dbw->delete( $table, $row, __METHOD__ ); } else { $index = array( 'tgr_group', 'tgr_lang' ); $dbw->replace( $table, array( $index ), $row, __METHOD__ ); } $this->listPages(); $group = MessageGroups::getGroup( $id ); $parents = MessageGroups::getParentGroups( $group ); MessageGroupStats::clearGroup( $parents ); return; } if ( $action === 'unmark' ) { $page = TranslatablePage::newFromTitle( $title ); $page->removeTags(); $page->getTitle()->invalidateCache(); $logger = new LogPage( 'pagetranslation' ); $params = array( 'user' => $wgUser->getName() ); $logger->addEntry( 'unmark', $page->getTitle(), null, array( serialize( $params ) ) ); $wgOut->addWikiMsg( 'tpt-unmarked', $title->getPrefixedText() ); self::superDebug( __METHOD__, "unmarked page", $this->user, $title ); return; } if ( $revision === 0 ) { // Get the latest revision $revision = intval( $title->getLatestRevID() ); } $page = TranslatablePage::newFromRevision( $title, $revision ); if ( !$page instanceof TranslatablePage ) { $wgOut->addWikiMsg( 'tpt-notsuitable', $title->getPrefixedText(), $revision ); return; } if ( $revision !== intval( $title->getLatestRevID() ) ) { // We do want to notify the reviewer if the underlying page changes during review $target = $title->getFullUrl( array( 'oldid' => $revision ) ); $link = "<span class='plainlinks'>[$target $revision]</span>"; $wgOut->addWikiMsg( 'tpt-oldrevision', $title->getPrefixedText(), $link ); self::superDebug( __METHOD__, "revision mismatch while marking", $this->user, $title, $revision, intval( $title->getLatestRevID() ) ); return; } $lastrev = $page->getMarkedTag(); if ( $lastrev !== false && $lastrev === $revision ) { $wgOut->addWikiMsg( 'tpt-already-marked' ); $this->listPages(); return; } // This will modify the sections to include name property $error = false; $sections = $this->checkInput( $page, $error ); // Non-fatal error which prevents saving if ( $error === false && $wgRequest->wasPosted() ) { $err = $this->markForTranslation( $page, $sections ); if ( $err ) { call_user_func_array( array( $wgOut, 'addWikiMsg' ), $err ); } else { $this->showSuccess( $page ); $this->listPages(); } return; } self::superDebug( __METHOD__, "marking page", $this->user, $title, $revision ); $this->showPage( $page, $sections ); }