diff options
Diffstat (limited to 'bin/reevotech/vendor/addwiki/mediawiki-api/src/Service/RevisionRollbacker.php')
-rw-r--r-- | bin/reevotech/vendor/addwiki/mediawiki-api/src/Service/RevisionRollbacker.php | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/bin/reevotech/vendor/addwiki/mediawiki-api/src/Service/RevisionRollbacker.php b/bin/reevotech/vendor/addwiki/mediawiki-api/src/Service/RevisionRollbacker.php new file mode 100644 index 00000000..76a2f5c7 --- /dev/null +++ b/bin/reevotech/vendor/addwiki/mediawiki-api/src/Service/RevisionRollbacker.php @@ -0,0 +1,73 @@ +<?php + +namespace Mediawiki\Api\Service; + +use Mediawiki\Api\SimpleRequest; +use Mediawiki\DataModel\Revision; +use Mediawiki\DataModel\Title; + +/** + * @access private + * + * @author Addshore + */ +class RevisionRollbacker extends Service { + + /** + * @since 0.3 + * + * @param Revision $revision + * @param Title $title if using MW 1.24 of lower (https://gerrit.wikimedia.org/r/#/c/133063/) + * + * @return bool + */ + public function rollback( Revision $revision, Title $title = null ) { + $this->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']; + } + +} |