ChangesListSpecialPage: Add urlversion and make urlversion=2 ignore defaults
authorRoan Kattouw <roan.kattouw@gmail.com>
Fri, 9 Jun 2017 19:36:26 +0000 (12:36 -0700)
committerCatrope <roan@wikimedia.org>
Tue, 13 Jun 2017 01:42:53 +0000 (01:42 +0000)
This allows us to build reliable URLs that will be consistent over time
and between users (because the defaults depend on preferences,
extension presence, etC) by using urlversion=2 and specifying the
state of each filter relative to the empty state (i.e. nothing enabled).

urlversion defaults to 1, and urlversion=1 maintains the current
behavior where the parameters are interpreted relative to the
user's default state.

Bug: T166906
Change-Id: Iaf33c14e3f909092d96453e78016814aa417673a

includes/specialpage/ChangesListSpecialPage.php

index 09ed3c4..1b561ef 100644 (file)
@@ -791,16 +791,18 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                $config = $this->getConfig();
                $opts = new FormOptions();
                $structuredUI = $this->getUser()->getOption( 'rcenhancedfilters' );
+               // If urlversion=2 is set, ignore the filter defaults and set them all to false/empty
+               $useDefaults = $this->getRequest()->getInt( 'urlversion' ) !== 2;
 
                // Add all filters
                foreach ( $this->filterGroups as $filterGroup ) {
                        // URL parameters can be per-group, like 'userExpLevel',
                        // or per-filter, like 'hideminor'.
                        if ( $filterGroup->isPerGroupRequestParameter() ) {
-                               $opts->add( $filterGroup->getName(), $filterGroup->getDefault() );
+                               $opts->add( $filterGroup->getName(), $useDefaults ? $filterGroup->getDefault() : '' );
                        } else {
                                foreach ( $filterGroup->getFilters() as $filter ) {
-                                       $opts->add( $filter->getName(), $filter->getDefault( $structuredUI ) );
+                                       $opts->add( $filter->getName(), $useDefaults ? $filter->getDefault( $structuredUI ) : false );
                                }
                        }
                }
@@ -808,6 +810,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                $opts->add( 'namespace', '', FormOptions::STRING );
                $opts->add( 'invert', false );
                $opts->add( 'associated', false );
+               $opts->add( 'urlversion', 1 );
 
                return $opts;
        }