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

LogListGetter::getLogDetailsFromEvent()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 15
c 0
b 0
f 0
rs 9.7666
cc 1
nc 1
nop 1
1
<?php
2
3
namespace Addwiki\Mediawiki\Api\Service;
4
5
use Addwiki\Mediawiki\Api\Client\SimpleRequest;
6
use Addwiki\Mediawiki\DataModel\Log;
7
use Addwiki\Mediawiki\DataModel\LogList;
8
use Addwiki\Mediawiki\DataModel\Page;
9
use Addwiki\Mediawiki\DataModel\PageIdentifier;
10
use Addwiki\Mediawiki\DataModel\Revisions;
11
use Addwiki\Mediawiki\DataModel\Title;
12
13
/**
14
 * @access private
15
 *
16
 * @author Thomas Arrow
17
 */
18
class LogListGetter extends Service {
19
20
	/**
21
	 * @param array $extraParams
22
	 *
23
	 * @return LogList|void
24
	 */
25
	public function getLogList( array $extraParams = [] ) {
26
		$logList = new LogList();
27
28
		while ( true ) {
29
			$params = [
30
				'list' => 'logevents',
31
				'leprop' => 'title|ids|type|user|timestamp|comment|details'
32
			];
33
34
			$newParams = array_merge( $extraParams, $params );
35
			$result = $this->api->getRequest( new SimpleRequest( 'query', $newParams ) );
36
37
			foreach ( $result[ 'query' ]['logevents'] as $logevent ) {
38
				$logList->addLog(
39
					new Log(
40
						$logevent['logid'],
41
						$logevent['type'],
42
						$logevent['action'],
43
						$logevent['timestamp'],
44
						$logevent['user'],
45
						new Page(
46
							new PageIdentifier(
47
								new Title( $logevent['title'], $logevent['ns'] ),
48
								$logevent['pageid']
49
							),
50
							new Revisions()
51
						),
52
						$logevent['comment'],
53
						$this->getLogDetailsFromEvent( $logevent )
54
					)
55
				);
56
			}
57
58
			return $logList;
59
		}
60
	}
61
62
	/**
63
	 *
64
	 * @return mixed[]
65
	 */
66
	private function getLogDetailsFromEvent( array $event ): array {
67
		$ignoreKeys = array_flip( [
68
			'logid',
69
			'ns',
70
			'title',
71
			'pageid',
72
			'logpage',
73
			'type',
74
			'action',
75
			'user',
76
			'type',
77
			'timestamp',
78
			'comment' ] );
79
		return array_diff_key( $event, $ignoreKeys );
80
	}
81
82
}
83