}
}
+ /**
+ * @see $wgRCLinkDays in DefaultSettings.php.
+ * @see $wgRCFilterByAge in DefaultSettings.php.
+ * @return int[]
+ */
+ protected function getLinkDays() {
+ $linkDays = $this->getConfig()->get( 'RCLinkDays' );
+ $filterByAge = $this->getConfig()->get( 'RCFilterByAge' );
+ $maxAge = $this->getConfig()->get( 'RCMaxAge' );
+ if ( $filterByAge ) {
+ // Trim it to only links which are within $wgRCMaxAge.
+ // Note that we allow one link higher than the max for things like
+ // "age 56 days" being accessible through the "60 days" link.
+ sort( $linkDays );
+
+ $maxAgeDays = $maxAge / ( 3600 * 24 );
+ foreach ( $linkDays as $i => $days ) {
+ if ( $days >= $maxAgeDays ) {
+ array_splice( $linkDays, $i + 1 );
+ break;
+ }
+ }
+ }
+
+ return $linkDays;
+ }
+
/**
* Include the modules and configuration for the RCFilters app.
* Conditional on the user having the feature enabled.
'maxDays' => (int)$this->getConfig()->get( 'RCMaxAge' ) / ( 24 * 3600 ), // Translate to days
'limitArray' => $this->getConfig()->get( 'RCLinkLimits' ),
'limitDefault' => $this->getDefaultLimit(),
- 'daysArray' => $this->getConfig()->get( 'RCLinkDays' ),
+ 'daysArray' => $this->getLinkDays(),
'daysDefault' => $this->getDefaultDays(),
]
);
*
* There is light processing to simplify core maintenance.
* @param array $definition
- * @phan-param array<int,array{class:string}> $definition
+ * @phan-param array<int,array{class:string,filters:array}> $definition
*/
protected function registerFiltersFromDefinitions( array $definition ) {
$autoFillPriority = -1;
if ( $opts[ 'namespace' ] !== '' ) {
$namespaces = explode( ';', $opts[ 'namespace' ] );
+ $namespaces = $this->expandSymbolicNamespaceFilters( $namespaces );
+
if ( $opts[ 'associated' ] ) {
$namespaceInfo = MediaWikiServices::getInstance()->getNamespaceInfo();
$associatedNamespaces = array_map(
public function getDefaultDays() {
return floatval( $this->getUser()->getOption( static::$daysPreferenceName ) );
}
+
+ private function expandSymbolicNamespaceFilters( array $namespaces ) {
+ $nsInfo = MediaWikiServices::getInstance()->getNamespaceInfo();
+ $symbolicFilters = [
+ 'all-contents' => $nsInfo->getSubjectNamespaces(),
+ 'all-discussions' => $nsInfo->getTalkNamespaces(),
+ ];
+ $additionalNamespaces = [];
+ foreach ( $symbolicFilters as $name => $values ) {
+ if ( in_array( $name, $namespaces ) ) {
+ $additionalNamespaces = array_merge( $additionalNamespaces, $values );
+ }
+ }
+ $namespaces = array_diff( $namespaces, array_keys( $symbolicFilters ) );
+ $namespaces = array_merge( $namespaces, $additionalNamespaces );
+ return array_unique( $namespaces );
+ }
}