Merge "Allow filtering AbuseLog for filter group"

This commit is contained in:
jenkins-bot 2019-04-06 12:24:10 +00:00 committed by Gerrit Code Review
commit cf5df265b0
3 changed files with 51 additions and 4 deletions

View file

@ -46,6 +46,8 @@
"abusefilter-log-summary": "This log shows a list of all actions caught by the filters.",
"abusefilter-log-search": "Search the abuse log",
"abusefilter-log-search-user": "User:",
"abusefilter-log-search-group": "Filter group:",
"abusefilter-log-search-group-any": "Any",
"abusefilter-log-search-filter": "Filter IDs (separate with pipes):",
"abusefilter-log-search-title": "Title:",
"abusefilter-log-search-wiki": "Wiki:",

View file

@ -80,6 +80,8 @@
"abusefilter-log-summary": "This message is displayed at the top of the log overview page for extension AbuseFilter.",
"abusefilter-log-search": "Caption of a fieldset for filter definition on [[Special:AbuseLog]]",
"abusefilter-log-search-user": "Field label in abuse filter log page.\n{{Identical|User}}",
"abusefilter-log-search-group": "Field label in abuse filter log page.",
"abusefilter-log-search-group-any": "Option allowing to find entries from any group in abuse log.\n{{Identical|Any}}",
"abusefilter-log-search-filter": "Field label in abuse filter log page.",
"abusefilter-log-search-title": "Field label in abuse filter log page.\n{{Identical|Title}}",
"abusefilter-log-search-wiki": "Label for text field that allows the user to limit search results to a specific wiki, by name.\n{{Identical|Wiki}}",

View file

@ -33,6 +33,9 @@ class SpecialAbuseLog extends SpecialPage {
protected $mSearchImpact;
/** @var string The filter group to search, as defined in $wgAbuseFilterValidGroups */
protected $mSearchGroup;
/**
* @inheritDoc
*/
@ -127,6 +130,9 @@ class SpecialAbuseLog extends SpecialPage {
$this->mSearchPeriodStart = $request->getText( 'wpSearchPeriodStart' );
$this->mSearchPeriodEnd = $request->getText( 'wpSearchPeriodEnd' );
$this->mSearchTitle = $request->getText( 'wpSearchTitle' );
if ( count( $this->getConfig()->get( 'AbuseFilterValidGroups' ) ) > 1 ) {
$this->mSearchGroup = $request->getText( 'wpSearchGroup' );
}
$this->mSearchFilter = null;
$this->mSearchAction = $request->getText( 'wpSearchAction' );
$this->mSearchActionTaken = $request->getText( 'wpSearchActionTaken' );
@ -238,6 +244,20 @@ class SpecialAbuseLog extends SpecialPage {
],
];
}
$groups = $this->getConfig()->get( 'AbuseFilterValidGroups' );
if ( count( $groups ) > 1 ) {
$options = array_merge(
[ $this->msg( 'abusefilter-log-search-group-any' )->text() => 0 ],
array_combine( $groups, $groups )
);
$formDescriptor['SearchGroup'] = [
'label-message' => 'abusefilter-log-search-group',
'type' => 'select',
'options' => $options
];
}
if ( self::canSeeDetails() ) {
$formDescriptor['SearchFilter'] = [
'label-message' => 'abusefilter-log-search-filter',
@ -246,7 +266,7 @@ class SpecialAbuseLog extends SpecialPage {
];
}
if ( $this->getConfig()->get( 'AbuseFilterIsCentral' ) ) {
// Add free form input for wiki name. Would be nice to generate
// @todo Add free form input for wiki name. Would be nice to generate
// a select with unique names in the db at some point.
$formDescriptor['SearchWiki'] = [
'label-message' => 'abusefilter-log-search-wiki',
@ -405,6 +425,17 @@ class SpecialAbuseLog extends SpecialPage {
}
}
$groupFilters = [];
if ( $this->mSearchGroup ) {
$groupFilters = $dbr->selectFieldValues(
'abuse_filter',
'af_id',
[ 'af_group' => $this->mSearchGroup ],
__METHOD__
);
}
$searchFilters = [];
if ( $this->mSearchFilter ) {
$searchFilters = array_map( 'trim', explode( '|', $this->mSearchFilter ) );
// if a filter is hidden, users who can't view private filters should
@ -423,12 +454,24 @@ class SpecialAbuseLog extends SpecialPage {
$out->addWikiMsg( 'abusefilter-log-private-not-included' );
}
}
if ( empty( $searchFilters ) ) {
$out->addWikiMsg( 'abusefilter-log-noresults' );
}
$searchIDs = null;
if ( $this->mSearchGroup && !$this->mSearchFilter ) {
$searchIDs = $groupFilters;
} elseif ( !$this->mSearchGroup && $this->mSearchFilter ) {
$searchIDs = $searchFilters;
} elseif ( $this->mSearchGroup && $this->mSearchFilter ) {
$searchIDs = array_intersect( $groupFilters, $searchFilters );
}
if ( $searchIDs !== null ) {
if ( !count( $searchIDs ) ) {
$out->addWikiMsg( 'abusefilter-log-noresults' );
return;
}
$conds['afl_filter'] = $searchFilters;
$conds['afl_filter'] = $searchIDs;
}
$searchTitle = Title::newFromText( $this->mSearchTitle );