if ( $opts[ 'namespace' ] !== '' ) {
$namespaces = explode( ';', $opts[ 'namespace' ] );
+ $namespaces = $this->expandSymbolicNamespaceFilters( $namespaces );
+
if ( $opts[ 'associated' ] ) {
+ $namespaceInfo = MediaWikiServices::getInstance()->getNamespaceInfo();
$associatedNamespaces = array_map(
- function ( $ns ) {
- return MediaWikiServices::getInstance()->getNamespaceInfo()->
- getAssociated( $ns );
+ function ( $ns ) use ( $namespaceInfo ){
+ return $namespaceInfo->getAssociated( $ns );
},
- $namespaces
+ array_filter(
+ $namespaces,
+ function ( $ns ) use ( $namespaceInfo ) {
+ return $namespaceInfo->hasTalkNamespace( $ns );
+ }
+ )
);
$namespaces = array_unique( array_merge( $namespaces, $associatedNamespaces ) );
}
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 );
+ }
}