api->postRequest( new SimpleRequest( 'rollback', $this->getRollbackParams( $revision, $title ) ) ); return true; } /** * @param Revision $revision * @param Title|null $title * * @return array */ private function getRollbackParams( Revision $revision, $title ) { $params = []; if ( !is_null( $title ) ) { // This is needed prior to https://gerrit.wikimedia.org/r/#/c/133063/ $params['title'] = $title->getTitle(); } else { // This will work after https://gerrit.wikimedia.org/r/#/c/133063/ $params['pageid'] = $revision->getPageId(); } $params['user'] = $revision->getUser(); $params['token'] = $this->getTokenForRevision( $revision ); return $params; } /** * @param Revision $revision * * @returns string */ private function getTokenForRevision( Revision $revision ) { $result = $this->api->postRequest( new SimpleRequest( 'query', [ 'prop' => 'revisions', 'revids' => $revision->getId(), 'rvtoken' => 'rollback', ] ) ); $result = array_shift( $result['query']['pages'] ); return $result['revisions'][0]['rollbacktoken']; } }