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:
Geoffrey Mon 2017-06-03 21:12:21 -04:00
parent a1ffe2ed31
commit 287ddb4c9a
4 changed files with 49 additions and 45 deletions

View file

@ -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'],

View file

@ -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';
}

View file

@ -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;
}
}

View file

@ -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() {