Completed
Push — main ( 2daa48...b5d932 )
by
unknown
08:38
created

RevisionRollbacker   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 54
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 0

Importance

Changes 0
Metric Value
dl 0
loc 54
c 0
b 0
f 0
wmc 4
lcom 0
cbo 0
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A rollback() 0 7 1
A getRollbackParams() 0 14 2
A getTokenForRevision() 0 14 1
1
<?php
2
3
namespace Addwiki\Mediawiki\Api\Service;
4
5
use Addwiki\Mediawiki\Api\Client\SimpleRequest;
6
use Addwiki\Mediawiki\DataModel\Revision;
7
use Addwiki\Mediawiki\DataModel\Title;
8
9
/**
10
 * @access private
11
 *
12
 * @author Addshore
13
 */
14
class RevisionRollbacker extends Service {
15
16
	/**
17
	 * @since 0.3
18
	 *
19
	 * @param Revision $revision
20
	 * @param Title|null $title if using MW 1.24 of lower (https://gerrit.wikimedia.org/r/#/c/133063/)
21
	 */
22
	public function rollback( Revision $revision, Title $title = null ): bool {
23
		$this->api->postRequest(
24
			new SimpleRequest( 'rollback', $this->getRollbackParams( $revision, $title ) )
25
		);
26
27
		return true;
28
	}
29
30
	/**
31
	 *
32
	 * @return array <string mixed>|array<string, string|null>
33
	 */
34
	private function getRollbackParams( Revision $revision, ?Title $title ): array {
35
		$params = [];
36
		if ( $title !== null ) {
37
			// This is needed prior to https://gerrit.wikimedia.org/r/#/c/133063/
38
			$params['title'] = $title->getTitle();
39
		} else {
40
			// This will work after https://gerrit.wikimedia.org/r/#/c/133063/
41
			$params['pageid'] = $revision->getPageId();
42
		}
43
		$params['user'] = $revision->getUser();
44
		$params['token'] = $this->getTokenForRevision( $revision );
45
46
		return $params;
47
	}
48
49
	/**
50
	 * @param Revision $revision
51
	 */
52
	private function getTokenForRevision( Revision $revision ): string {
53
		$result = $this->api->postRequest(
54
			new SimpleRequest(
55
				'query', [
56
				'prop' => 'revisions',
57
				'revids' => $revision->getId(),
58
				'rvtoken' => 'rollback',
59
			]
60
			)
61
		);
62
		$result = array_shift( $result['query']['pages'] );
63
64
		return $result['revisions'][0]['rollbacktoken'];
65
	}
66
67
}
68