Fix action=feedcontributions date filtering parameters
authorGeoffrey Mon <geofbot@gmail.com>
Sun, 4 Jun 2017 01:12:21 +0000 (21:12 -0400)
committerGeoffrey Mon <geofbot@gmail.com>
Tue, 6 Jun 2017 14:41:40 +0000 (10:41 -0400)
* 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

includes/api/ApiFeedContributions.php
includes/specials/SpecialContributions.php
includes/specials/pagers/ContribsPager.php
tests/phpunit/includes/specials/ContribsPagerTest.php [new file with mode: 0644]
tests/phpunit/includes/specials/SpecialContributionsTest.php [deleted file]

index 97720c6..cae1e15 100644 (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'],
index cc399b6..4da1c85 100644 (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';
        }
index e690a3f..a3880ee 100644 (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;
+       }
 }
diff --git a/tests/phpunit/includes/specials/ContribsPagerTest.php b/tests/phpunit/includes/specials/ContribsPagerTest.php
new file mode 100644 (file)
index 0000000..d7fc13d
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * @group Database
+ */
+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, ContribsPager::processDateFilter( $inputOpts ) );
+       }
+
+       public static function dateFilterOptionProcessingProvider() {
+               return [
+                       [ [ 'start' => '2016-05-01',
+                               'end' => '2016-06-01',
+                               'year' => null,
+                               'month' => null ],
+                         [ 'start' => '2016-05-01',
+                               'end' => '2016-06-01' ] ],
+                       [ [ 'start' => '2016-05-01',
+                               'end' => '2016-06-01',
+                               'year' => '',
+                               'month' => '' ],
+                         [ 'start' => '2016-05-01',
+                               'end' => '2016-06-01' ] ],
+                       [ [ 'start' => '2016-05-01',
+                               'end' => '2016-06-01',
+                               'year' => '2012',
+                               'month' => '5' ],
+                         [ 'start' => '',
+                               'end' => '2012-05-31' ] ],
+                       [ [ 'start' => '',
+                               'end' => '',
+                               'year' => '2012',
+                               'month' => '5' ],
+                         [ 'start' => '',
+                               'end' => '2012-05-31' ] ],
+                       [ [ 'start' => '',
+                               'end' => '',
+                               'year' => '2012',
+                               'month' => '' ],
+                         [ 'start' => '',
+                               'end' => '2012-12-31' ] ],
+               ];
+       }
+}
diff --git a/tests/phpunit/includes/specials/SpecialContributionsTest.php b/tests/phpunit/includes/specials/SpecialContributionsTest.php
deleted file mode 100644 (file)
index 6e692a7..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
-/**
- * @group Database
- */
-class SpecialContributionsTest 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 ) );
-       }
-
-       public static function dateFilterOptionProcessingProvider() {
-               return [
-                       [ [ 'start' => '2016-05-01',
-                               'end' => '2016-06-01',
-                               'year' => null,
-                               'month' => null ],
-                         [ 'start' => '2016-05-01',
-                               'end' => '2016-06-01' ] ],
-                       [ [ 'start' => '2016-05-01',
-                               'end' => '2016-06-01',
-                               'year' => '',
-                               'month' => '' ],
-                         [ 'start' => '2016-05-01',
-                               'end' => '2016-06-01' ] ],
-                       [ [ 'start' => '2016-05-01',
-                               'end' => '2016-06-01',
-                               'year' => '2012',
-                               'month' => '5' ],
-                         [ 'start' => '',
-                               'end' => '2012-05-31' ] ],
-                       [ [ 'start' => '',
-                               'end' => '',
-                               'year' => '2012',
-                               'month' => '5' ],
-                         [ 'start' => '',
-                               'end' => '2012-05-31' ] ],
-                       [ [ 'start' => '',
-                               'end' => '',
-                               'year' => '2012',
-                               'month' => '' ],
-                         [ 'start' => '',
-                               'end' => '2012-12-31' ] ],
-               ];
-       }
-}