config = $config; $this->userFactory = $userFactory; } /** * Always consider titles as known to avoid red links for blue links. * * @param \MediaWiki\Title\Title $title The title to check * @param bool &$known Output parameter to indicate if the title is known * @return bool Always returns true to continue hook processing */ public function onTitleIsAlwaysKnown( $title, &$known ) { switch ( $title->getNamespace() ) { case NS_USER: // If user is registered, make the title known if ( !$this->config->get( 'IsekaiBlueLinkPatchOnUser' ) ) { return; } if ( $title->isSubpage() ) { return; } $user = $this->userFactory->newFromName( $title->getText() ); if ( $user && $user->isRegistered() ) { $known = true; } break; case NS_CATEGORY: // If category has members, make the title known if ( !$this->config->get( 'IsekaiBlueLinkPatchOnCategory' ) ) { return; } $category = Category::newFromTitle( $title ); if ( $category && $category->getMemberCount() > 0 ) { $known = true; } break; } } /** * This hook is called before displaying message key "noarticletext" or * "noarticletext-nopermission" at Article::showMissingArticle(). * * @since 1.35 * * @param \Article $article * @return bool|void True or no return value to continue or false to abort */ public function onBeforeDisplayNoArticleText( $article ) { $text = null; switch ( $article->getTitle()->getNamespace() ) { case NS_USER: // If user is registered, show an alternate message if ( !$this->config->get( 'IsekaiBlueLinkPatchOnUser' ) ) { return true; } if ( $article->getTitle()->isSubpage() ) { return true; } $user = $this->userFactory->newFromName( $article->getTitle()->getText() ); if ( $user && $user->isRegistered() ) { $text = $article->getContext()->msg( 'noarticletext-user-registered' )->text(); } break; case NS_CATEGORY: // If category has members, do not show noarticletext if ( !$this->config->get( 'IsekaiBlueLinkPatchOnCategory' ) ) { return true; } $category = Category::newFromTitle( $article->getTitle() ); if ( $category && $category->getMemberCount() > 0 ) { $text = $article->getContext()->msg( 'noarticletext-category-nonempty' )->text(); } break; } if ( !$text ) { return true; } $context = $article->getContext(); $outputPage = $context->getOutput(); $dir = $context->getLanguage()->getDir(); $lang = $context->getLanguage()->getHtmlCode(); $outputPage->addWikiTextAsInterface( Xml::openElement( 'div', [ 'class' => "noarticletext mw-content-$dir", 'dir' => $dir, 'lang' => $lang, ] ) . "\n$text\n" ); return false; // Abort default noarticletext display } }