diff options
Diffstat (limited to 'bin/wiki/vendor/addwiki/mediawiki-api/src/Service/LogListGetter.php')
-rw-r--r-- | bin/wiki/vendor/addwiki/mediawiki-api/src/Service/LogListGetter.php | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/bin/wiki/vendor/addwiki/mediawiki-api/src/Service/LogListGetter.php b/bin/wiki/vendor/addwiki/mediawiki-api/src/Service/LogListGetter.php new file mode 100644 index 00000000..d9394919 --- /dev/null +++ b/bin/wiki/vendor/addwiki/mediawiki-api/src/Service/LogListGetter.php @@ -0,0 +1,83 @@ +<?php + +namespace Mediawiki\Api\Service; + +use Mediawiki\Api\SimpleRequest; +use Mediawiki\DataModel\Log; +use Mediawiki\DataModel\LogList; +use Mediawiki\DataModel\Page; +use Mediawiki\DataModel\PageIdentifier; +use Mediawiki\DataModel\Revisions; +use Mediawiki\DataModel\Title; + +/** + * @access private + * + * @author Thomas Arrow + */ +class LogListGetter extends Service { + + /** + * @param array $extraParams + * + * @return LogList + */ + public function getLogList( array $extraParams = [] ) { + $logList = new LogList(); + + while ( true ) { + $params = [ + 'list' => 'logevents', + 'leprop' => 'title|ids|type|user|timestamp|comment|details' + ]; + + $newParams = array_merge( $extraParams, $params ); + $result = $this->api->getRequest( new SimpleRequest( 'query', $newParams ) ); + + foreach ( $result[ 'query' ]['logevents'] as $logevent ) { + $logList->addLog( + new Log( + $logevent['logid'], + $logevent['type'], + $logevent['action'], + $logevent['timestamp'], + $logevent['user'], + new Page( + new PageIdentifier( + new Title( $logevent['title'], $logevent['ns'] ), + $logevent['pageid'] + ), + new Revisions() + ), + $logevent['comment'], + $this->getLogDetailsFromEvent( $logevent ) + ) + ); + } + + return $logList; + } + } + + /** + * @param array $event + * + * @return array + */ + private function getLogDetailsFromEvent( $event ) { + $ignoreKeys = array_flip( [ + 'logid', + 'ns', + 'title', + 'pageid', + 'logpage', + 'type', + 'action', + 'user', + 'type', + 'timestamp', + 'comment' ] ); + return array_diff_key( $event, $ignoreKeys ); + } + +} |