Fix action=feedcontributions date filtering parameters
* Convert year/month date filter parameters to use start/end so that
ApiFeedContributions still works as expected after b668887
* Move SpecialContributions::processDateFilter (used to convert
year/month parameters to start/end parameters) to ContribsPager
since ApiFeedContributions also uses it now
Bug: T166859
Change-Id: I34fc8388a29e4cd36474934e6266127d0e3253cd
This commit is contained in:
parent
a1ffe2ed31
commit
287ddb4c9a
4 changed files with 49 additions and 45 deletions
|
|
@ -70,11 +70,16 @@ class ApiFeedContributions extends ApiBase {
|
|||
$feedUrl
|
||||
);
|
||||
|
||||
// Convert year/month parameters to end parameter
|
||||
$params['start'] = '';
|
||||
$params['end'] = '';
|
||||
$params = ContribsPager::processDateFilter( $params );
|
||||
|
||||
$pager = new ContribsPager( $this->getContext(), [
|
||||
'target' => $target,
|
||||
'namespace' => $params['namespace'],
|
||||
'year' => $params['year'],
|
||||
'month' => $params['month'],
|
||||
'start' => $params['start'],
|
||||
'end' => $params['end'],
|
||||
'tagFilter' => $params['tagfilter'],
|
||||
'deletedOnly' => $params['deletedonly'],
|
||||
'topOnly' => $params['toponly'],
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ class SpecialContributions extends IncludableSpecialPage {
|
|||
|
||||
$this->opts['start'] = $request->getVal( 'start' );
|
||||
$this->opts['end'] = $request->getVal( 'end' );
|
||||
$this->opts = SpecialContributions::processDateFilter( $this->opts );
|
||||
$this->opts = ContribsPager::processDateFilter( $this->opts );
|
||||
}
|
||||
|
||||
$feedType = $request->getVal( 'feed' );
|
||||
|
|
@ -728,46 +728,6 @@ class SpecialContributions extends IncludableSpecialPage {
|
|||
return UserNamePrefixSearch::search( 'public', $search, $limit, $offset );
|
||||
}
|
||||
|
||||
/**
|
||||
* Set up date filter options, given request data.
|
||||
*
|
||||
* @param array $opts Options array
|
||||
* @return array Options array with processed start and end date filter options
|
||||
*/
|
||||
public static function processDateFilter( $opts ) {
|
||||
$start = $opts['start'] ?: '';
|
||||
$end = $opts['end'] ?: '';
|
||||
$year = $opts['year'] ?: '';
|
||||
$month = $opts['month'] ?: '';
|
||||
|
||||
if ( $start !== '' && $end !== '' &&
|
||||
$start > $end
|
||||
) {
|
||||
$temp = $start;
|
||||
$start = $end;
|
||||
$end = $temp;
|
||||
}
|
||||
|
||||
// If year/month legacy filtering options are set, convert them to display the new stamp
|
||||
if ( $year !== '' || $month !== '' ) {
|
||||
// Reuse getDateCond logic, but subtract a day because
|
||||
// the endpoints of our date range appear inclusive
|
||||
// but the internal end offsets are always exclusive
|
||||
$legacyTimestamp = ReverseChronologicalPager::getOffsetDate( $year, $month );
|
||||
$legacyDateTime = new DateTime( $legacyTimestamp->getTimestamp( TS_ISO_8601 ) );
|
||||
$legacyDateTime = $legacyDateTime->modify( '-1 day' );
|
||||
|
||||
// Clear the new timestamp range options if used and
|
||||
// replace with the converted legacy timestamp
|
||||
$start = '';
|
||||
$end = $legacyDateTime->format( 'Y-m-d' );
|
||||
}
|
||||
|
||||
$opts['start'] = $start;
|
||||
$opts['end'] = $end;
|
||||
return $opts;
|
||||
}
|
||||
|
||||
protected function getGroupName() {
|
||||
return 'users';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -573,4 +573,43 @@ class ContribsPager extends RangeChronologicalPager {
|
|||
public function getPreventClickjacking() {
|
||||
return $this->preventClickjacking;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set up date filter options, given request data.
|
||||
*
|
||||
* @param array $opts Options array
|
||||
* @return array Options array with processed start and end date filter options
|
||||
*/
|
||||
public static function processDateFilter( $opts ) {
|
||||
$start = $opts['start'] ?: '';
|
||||
$end = $opts['end'] ?: '';
|
||||
$year = $opts['year'] ?: '';
|
||||
$month = $opts['month'] ?: '';
|
||||
|
||||
if ( $start !== '' && $end !== '' && $start > $end ) {
|
||||
$temp = $start;
|
||||
$start = $end;
|
||||
$end = $temp;
|
||||
}
|
||||
|
||||
// If year/month legacy filtering options are set, convert them to display the new stamp
|
||||
if ( $year !== '' || $month !== '' ) {
|
||||
// Reuse getDateCond logic, but subtract a day because
|
||||
// the endpoints of our date range appear inclusive
|
||||
// but the internal end offsets are always exclusive
|
||||
$legacyTimestamp = ReverseChronologicalPager::getOffsetDate( $year, $month );
|
||||
$legacyDateTime = new DateTime( $legacyTimestamp->getTimestamp( TS_ISO_8601 ) );
|
||||
$legacyDateTime = $legacyDateTime->modify( '-1 day' );
|
||||
|
||||
// Clear the new timestamp range options if used and
|
||||
// replace with the converted legacy timestamp
|
||||
$start = '';
|
||||
$end = $legacyDateTime->format( 'Y-m-d' );
|
||||
}
|
||||
|
||||
$opts['start'] = $start;
|
||||
$opts['end'] = $end;
|
||||
|
||||
return $opts;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,14 +3,14 @@
|
|||
/**
|
||||
* @group Database
|
||||
*/
|
||||
class SpecialContributionsTest extends \PHPUnit_Framework_TestCase {
|
||||
class ContribsPagerTest extends \PHPUnit_Framework_TestCase {
|
||||
/**
|
||||
* @dataProvider dateFilterOptionProcessingProvider
|
||||
* @param array $inputOpts Input options
|
||||
* @param array $expectedOpts Expected options
|
||||
*/
|
||||
public function testDateFilterOptionProcessing( $inputOpts, $expectedOpts ) {
|
||||
$this->assertArraySubset( $expectedOpts, SpecialContributions::processDateFilter( $inputOpts ) );
|
||||
$this->assertArraySubset( $expectedOpts, ContribsPager::processDateFilter( $inputOpts ) );
|
||||
}
|
||||
|
||||
public static function dateFilterOptionProcessingProvider() {
|
||||
Loading…
Reference in a new issue