Merge "userExpLevel test: use a single time()"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 2 May 2017 18:43:45 +0000 (18:43 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 2 May 2017 18:43:45 +0000 (18:43 +0000)
1  2 
includes/specialpage/ChangesListSpecialPage.php

@@@ -254,43 -254,6 +254,43 @@@ abstract class ChangesListSpecialPage e
  
                        // reviewStatus (conditional)
  
 +                      [
 +                              'name' => 'lastRevision',
 +                              'title' => 'rcfilters-filtergroup-lastRevision',
 +                              'class' => ChangesListBooleanFilterGroup::class,
 +                              'priority' => -7,
 +                              'filters' => [
 +                                      [
 +                                              'name' => 'hidelastrevision',
 +                                              'label' => 'rcfilters-filter-lastrevision-label',
 +                                              'description' => 'rcfilters-filter-lastrevision-description',
 +                                              'default' => false,
 +                                              'queryCallable' => function ( $specialClassName, $ctx, $dbr, &$tables, &$fields, &$conds,
 +                                                      &$query_options, &$join_conds ) {
 +                                                      $conds[] = 'rc_this_oldid <> page_latest';
 +                                              },
 +                                              'cssClassSuffix' => 'last',
 +                                              'isRowApplicableCallable' => function ( $ctx, $rc ) {
 +                                                      return $rc->getAttribute( 'rc_this_oldid' ) === $rc->getAttribute( 'page_latest' );
 +                                              }
 +                                      ],
 +                                      [
 +                                              'name' => 'hidepreviousrevisions',
 +                                              'label' => 'rcfilters-filter-previousrevision-label',
 +                                              'description' => 'rcfilters-filter-previousrevision-description',
 +                                              'default' => false,
 +                                              'queryCallable' => function ( $specialClassName, $ctx, $dbr, &$tables, &$fields, &$conds,
 +                                                      &$query_options, &$join_conds ) {
 +                                                      $conds[] = 'rc_this_oldid = page_latest';
 +                                              },
 +                                              'cssClassSuffix' => 'previous',
 +                                              'isRowApplicableCallable' => function ( $ctx, $rc ) {
 +                                                      return $rc->getAttribute( 'rc_this_oldid' ) !== $rc->getAttribute( 'page_latest' );
 +                                              }
 +                                      ]
 +                              ]
 +                      ],
 +
                        [
                                'name' => 'significance',
                                'title' => 'rcfilters-filtergroup-significance',
                                        ],
                                ],
                        ],
 +
 +                      [
 +                              'name' => 'watchlist',
 +                              'title' => 'rcfilters-filtergroup-watchlist',
 +                              'class' => ChangesListStringOptionsFilterGroup::class,
 +                              'isFullCoverage' => true,
 +                              'filters' => [
 +                                      [
 +                                              'name' => 'watched',
 +                                              'label' => 'rcfilters-filter-watchlist-watched-label',
 +                                              'description' => 'rcfilters-filter-watchlist-watched-description',
 +                                              'cssClassSuffix' => 'watched',
 +                                              'isRowApplicableCallable' => function ( $ctx, $rc ) {
 +                                                      return $rc->getAttribute( 'wl_user' );
 +                                              }
 +                                      ],
 +                                      [
 +                                              'name' => 'watchednew',
 +                                              'label' => 'rcfilters-filter-watchlist-watchednew-label',
 +                                              'description' => 'rcfilters-filter-watchlist-watchednew-description',
 +                                              'cssClassSuffix' => 'watchednew',
 +                                              'isRowApplicableCallable' => function ( $ctx, $rc ) {
 +                                                      return $rc->getAttribute( 'wl_user' ) &&
 +                                                              $rc->getAttribute( 'rc_timestamp' ) > $rc->getAttribute( 'wl_notificationtimestamp' );
 +                                              },
 +                                      ],
 +                                      [
 +                                              'name' => 'notwatched',
 +                                              'label' => 'rcfilters-filter-watchlist-notwatched-label',
 +                                              'description' => 'rcfilters-filter-watchlist-notwatched-description',
 +                                              'cssClassSuffix' => 'notwatched',
 +                                              'isRowApplicableCallable' => function ( $ctx, $rc ) {
 +                                                      return $rc->getAttribute( 'wl_user' ) === null;
 +                                              },
 +                                      ]
 +                              ],
 +                              'default' => ChangesListStringOptionsFilterGroup::NONE,
 +                              'queryCallable' => function ( $specialPageClassName, $context, $dbr,
 +                                      &$tables, &$fields, &$conds, &$query_options, &$join_conds, $selectedValues ) {
 +                                      sort( $selectedValues );
 +                                      $notwatchedCond = 'wl_user IS NULL';
 +                                      $watchedCond = 'wl_user IS NOT NULL';
 +                                      $newCond = 'rc_timestamp >= wl_notificationtimestamp';
 +
 +                                      if ( $selectedValues === [ 'notwatched' ] ) {
 +                                              $conds[] = $notwatchedCond;
 +                                              return;
 +                                      }
 +
 +                                      if ( $selectedValues === [ 'watched' ] ) {
 +                                              $conds[] = $watchedCond;
 +                                              return;
 +                                      }
 +
 +                                      if ( $selectedValues === [ 'watchednew' ] ) {
 +                                              $conds[] = $dbr->makeList( [
 +                                                      $watchedCond,
 +                                                      $newCond
 +                                              ], LIST_AND );
 +                                              return;
 +                                      }
 +
 +                                      if ( $selectedValues === [ 'notwatched', 'watched' ] ) {
 +                                              // no filters
 +                                              return;
 +                                      }
 +
 +                                      if ( $selectedValues === [ 'notwatched', 'watchednew' ] ) {
 +                                              $conds[] = $dbr->makeList( [
 +                                                      $notwatchedCond,
 +                                                      $dbr->makeList( [
 +                                                              $watchedCond,
 +                                                              $newCond
 +                                                      ], LIST_AND )
 +                                              ], LIST_OR );
 +                                              return;
 +                                      }
 +
 +                                      if ( $selectedValues === [ 'watched', 'watchednew' ] ) {
 +                                              $conds[] = $watchedCond;
 +                                              return;
 +                                      }
 +
 +                                      if ( $selectedValues === [ 'notwatched', 'watched', 'watchednew' ] ) {
 +                                              // no filters
 +                                              return;
 +                                      }
 +                              },
 +                      ],
                ];
  
                $this->reviewStatusFilterGroupDefinition = [
                        'rcfilters-hideminor-conflicts-typeofchange',
                        'rcfilters-typeofchange-conflicts-hideminor'
                );
 +
 +              $watchlistGroup = $this->getFilterGroup( 'watchlist' );
 +              $watchlistGroup->getFilter( 'watched' )->setAsSupersetOf(
 +                      $watchlistGroup->getFilter( 'watchednew' )
 +              );
        }
  
        /**
         * @param array $selectedExpLevels The allowed active values, sorted
         */
        public function filterOnUserExperienceLevel( $specialPageClassName, $context, $dbr,
-               &$tables, &$fields, &$conds, &$query_options, &$join_conds, $selectedExpLevels ) {
+               &$tables, &$fields, &$conds, &$query_options, &$join_conds, $selectedExpLevels, $now = 0 ) {
  
                global $wgLearnerEdits,
                        $wgExperiencedUserEdits,
                $tables[] = 'user';
                $join_conds['user'] = [ 'LEFT JOIN', 'rc_user = user_id' ];
  
-               $now = time();
+               if ( $now === 0 ) {
+                       $now = time();
+               }
                $secondsPerDay = 86400;
                $learnerCutoff = $now - $wgLearnerMemberSince * $secondsPerDay;
                $experiencedUserCutoff = $now - $wgExperiencedUserMemberSince * $secondsPerDay;