diff options
Diffstat (limited to 'www/wiki/extensions/AbuseFilter/includes/pagers/AbuseLogPager.php')
-rw-r--r-- | www/wiki/extensions/AbuseFilter/includes/pagers/AbuseLogPager.php | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/www/wiki/extensions/AbuseFilter/includes/pagers/AbuseLogPager.php b/www/wiki/extensions/AbuseFilter/includes/pagers/AbuseLogPager.php new file mode 100644 index 00000000..8b4513fe --- /dev/null +++ b/www/wiki/extensions/AbuseFilter/includes/pagers/AbuseLogPager.php @@ -0,0 +1,79 @@ +<?php + +use Wikimedia\Rdbms\ResultWrapper; + +class AbuseLogPager extends ReverseChronologicalPager { + /** + * @var SpecialAbuseLog + */ + public $mForm; + + /** + * @var array + */ + public $mConds; + + /** + * @param SpecialAbuseLog $form + * @param array $conds + */ + function __construct( $form, $conds = [] ) { + $this->mForm = $form; + $this->mConds = $conds; + parent::__construct(); + } + + function formatRow( $row ) { + return $this->mForm->formatRow( $row ); + } + + function getQueryInfo() { + $conds = $this->mConds; + + $info = [ + 'tables' => [ 'abuse_filter_log', 'abuse_filter' ], + 'fields' => '*', + 'conds' => $conds, + 'join_conds' => + [ 'abuse_filter' => + [ + 'LEFT JOIN', + 'af_id=afl_filter', + ], + ], + ]; + + if ( !$this->mForm->canSeeHidden() ) { + $db = $this->mDb; + $info['conds'][] = SpecialAbuseLog::getNotDeletedCond( $db ); + } + + return $info; + } + + /** + * @param ResultWrapper $result + */ + protected function preprocessResults( $result ) { + if ( $this->getNumRows() === 0 ) { + return; + } + + $lb = new LinkBatch(); + $lb->setCaller( __METHOD__ ); + foreach ( $result as $row ) { + // Only for local wiki results + if ( !$row->afl_wiki ) { + $lb->add( $row->afl_namespace, $row->afl_title ); + $lb->add( NS_USER, $row->afl_user ); + $lb->add( NS_USER_TALK, $row->afl_user_text ); + } + } + $lb->execute(); + $result->seek( 0 ); + } + + function getIndexField() { + return 'afl_timestamp'; + } +} |