mediawiki-extensions-AbuseF.../includes/Pager/GlobalAbuseFilterPager.php
Umherirrender 081a8e3c3c Add LinkBatch to Special:AbuseFilter/home and /history
Combine the check for red/blue user/talk links into one database query
This can improve the performance of the page view when many filters
from many different users are linked

Change-Id: I0b87ee15ecee4cecd5d5d6164e8c18e1b788ecd1
2022-07-29 13:56:03 +02:00

88 lines
2.7 KiB
PHP

<?php
namespace MediaWiki\Extension\AbuseFilter\Pager;
use MediaWiki\Extension\AbuseFilter\AbuseFilterPermissionManager;
use MediaWiki\Extension\AbuseFilter\CentralDBManager;
use MediaWiki\Extension\AbuseFilter\SpecsFormatter;
use MediaWiki\Extension\AbuseFilter\View\AbuseFilterViewList;
use MediaWiki\Linker\LinkRenderer;
/**
* Class to build paginated filter list for wikis using global abuse filters
*/
class GlobalAbuseFilterPager extends AbuseFilterPager {
/**
* @param AbuseFilterViewList $page
* @param LinkRenderer $linkRenderer
* @param AbuseFilterPermissionManager $afPermManager
* @param SpecsFormatter $specsFormatter
* @param CentralDBManager $centralDBManager
* @param array $conds
*/
public function __construct(
AbuseFilterViewList $page,
LinkRenderer $linkRenderer,
AbuseFilterPermissionManager $afPermManager,
SpecsFormatter $specsFormatter,
CentralDBManager $centralDBManager,
array $conds
) {
parent::__construct( $page, $linkRenderer, null, $afPermManager, $specsFormatter, $conds, null, null );
$this->mDb = $centralDBManager->getConnection( DB_REPLICA );
}
/**
* @param string $name
* @param string|null $value
* @return string
*/
public function formatValue( $name, $value ) {
$lang = $this->getLanguage();
$row = $this->mCurrentRow;
switch ( $name ) {
case 'af_id':
return $lang->formatNum( intval( $value ) );
case 'af_public_comments':
return $this->getOutput()->parseInlineAsInterface( $value );
case 'af_enabled':
$statuses = [];
if ( $row->af_deleted ) {
$statuses[] = $this->msg( 'abusefilter-deleted' )->parse();
} elseif ( $row->af_enabled ) {
$statuses[] = $this->msg( 'abusefilter-enabled' )->parse();
} else {
$statuses[] = $this->msg( 'abusefilter-disabled' )->parse();
}
if ( $row->af_global ) {
$statuses[] = $this->msg( 'abusefilter-status-global' )->parse();
}
return $lang->commaList( $statuses );
case 'af_hit_count':
// If the rule is hidden, don't show it, even to priviledged local admins
if ( $row->af_hidden ) {
return '';
}
return $this->msg( 'abusefilter-hitcount' )->numParams( $value )->parse();
case 'af_timestamp':
$user = $this->getUser();
return $this->msg(
'abusefilter-edit-lastmod-text',
$lang->userTimeAndDate( $value, $user ),
$row->af_user_text,
$lang->userDate( $value, $user ),
$lang->userTime( $value, $user ),
$row->af_user_text
)->parse();
case 'af_group':
// If this is global, local name probably doesn't exist, but try
return $this->specsFormatter->nameGroup( $value );
default:
return parent::formatValue( $name, $value );
}
}
}