Merge "Ensure suppressed user pages look like unregistered users when viewed without proper permissions."

This commit is contained in:
jenkins-bot 2021-05-05 17:08:20 +00:00 committed by Gerrit Code Review
commit 0474d8ab18
5 changed files with 41 additions and 10 deletions

View file

@ -137,10 +137,10 @@ class ToolbarBuilder {
public function getGroup(): Group {
$group = new Group( 'p-views' );
$permissions = $this->permissions;
$userPageOrUserTalkPageWithOveflowMode = $this->skinOptions->get( SkinOptions::TOOLBAR_SUBMENU )
$userPageOrUserTalkPageWithOverflowMode = $this->skinOptions->get( SkinOptions::TOOLBAR_SUBMENU )
&& $this->relevantUserPageHelper->isUserPage();
if ( !$userPageOrUserTalkPageWithOveflowMode && $permissions->isAllowed(
if ( !$userPageOrUserTalkPageWithOverflowMode && $permissions->isAllowed(
IMinervaPagePermissions::SWITCH_LANGUAGE ) ) {
$group->insertEntry( new LanguageSelectorEntry(
$this->title,
@ -160,7 +160,9 @@ class ToolbarBuilder {
$group->insertEntry( $this->getHistoryPageAction() );
}
if ( $this->relevantUserPageHelper->isUserPage() ) {
$isUserPage = $this->relevantUserPageHelper->isUserPage();
$isUserPageAccessible = $this->relevantUserPageHelper->isUserPageAccessibleToCurrentUser();
if ( $isUserPage && $isUserPageAccessible ) {
// T235681: Contributions icon should be added to toolbar on user pages
// and user talk pages for all users
$user = $this->relevantUserPageHelper->getPageUser();

View file

@ -227,9 +227,13 @@ class MinervaHooks {
// SkinUserPageHelper is being instantiated instead.
$relevantUserPageHelper = new SkinUserPageHelper(
$services->getUserNameUtils(),
$title->inNamespace( NS_USER_TALK ) ? $title->getSubjectPage() : $title
$title->inNamespace( NS_USER_TALK ) ? $title->getSubjectPage() : $title,
$mobileContext
);
$isUserPageOrUserTalkPage = $relevantUserPageHelper->isUserPage();
$isUserPage = $relevantUserPageHelper->isUserPage();
$isUserPageAccessible = $relevantUserPageHelper->isUserPageAccessibleToCurrentUser();
$isUserPageOrUserTalkPage = $isUserPage && $isUserPageAccessible;
} else {
// If no title this must be false
$isUserPageOrUserTalkPage = false;

View file

@ -89,7 +89,8 @@ return [
$relevantUserPageHelper = $title->inNamespace( NS_USER_TALK ) ?
new SkinUserPageHelper(
$services->getUserNameUtils(),
$context->getSkin()->getRelevantTitle()->getSubjectPage()
$context->getSkin()->getRelevantTitle()->getSubjectPage(),
$context
) :
$userPageHelper;
@ -132,7 +133,8 @@ return [
'Minerva.SkinUserPageHelper' => static function ( MediaWikiServices $services ): SkinUserPageHelper {
return new SkinUserPageHelper(
$services->getUserNameUtils(),
RequestContext::getMain()->getSkin()->getRelevantTitle()
RequestContext::getMain()->getSkin()->getRelevantTitle(),
RequestContext::getMain()
);
},
'Minerva.LanguagesHelper' => static function (): LanguagesHelper {

View file

@ -431,7 +431,8 @@ class SkinMinerva extends SkinMustache {
if ( $this->getUserPageHelper()->isUserPage() ) {
$pageUser = $this->getUserPageHelper()->getPageUser();
$fromDate = $pageUser->getRegistration();
if ( is_string( $fromDate ) ) {
if ( $this->getUserPageHelper()->isUserPageAccessibleToCurrentUser() && is_string( $fromDate ) ) {
$fromDateTs = wfTimestamp( TS_UNIX, $fromDate );
// This is shown when js is disabled. js enhancement made due to caching
@ -461,7 +462,9 @@ class SkinMinerva extends SkinMustache {
* @return string HTML for header
*/
protected function getHeadingHtml() {
if ( $this->getUserPageHelper()->isUserPage() ) {
$isUserPage = $this->getUserPageHelper()->isUserPage();
$isUserPageAccessible = $this->getUserPageHelper()->isUserPageAccessibleToCurrentUser();
if ( $isUserPage && $isUserPageAccessible ) {
// The heading is just the username without namespace
$heading = $this->getUserPageHelper()->getPageUser()->getName();
} else {

View file

@ -20,6 +20,7 @@
namespace MediaWiki\Minerva\Skins;
use IContextSource;
use MediaWiki\User\UserNameUtils;
use Title;
use User;
@ -29,10 +30,12 @@ class SkinUserPageHelper {
* @var UserNameUtils
*/
private $userNameUtils;
/**
* @var Title|null
*/
private $title;
/**
* @var bool
*/
@ -43,13 +46,20 @@ class SkinUserPageHelper {
*/
private $pageUser;
/**
* @var IContextSource|null
*/
private $context;
/**
* @param UserNameUtils $userNameUtils
* @param Title|null $title
* @param IContextSource|null $context
*/
public function __construct( UserNameUtils $userNameUtils, Title $title = null ) {
public function __construct( UserNameUtils $userNameUtils, Title $title = null, IContextSource $context = null ) {
$this->userNameUtils = $userNameUtils;
$this->title = $title;
$this->context = $context;
}
/**
@ -100,4 +110,14 @@ class SkinUserPageHelper {
public function isUserPage() {
return $this->fetchData() !== null;
}
/**
* @return bool
*/
public function isUserPageAccessibleToCurrentUser() {
$pageUser = $this->fetchData();
$isHidden = $pageUser && $pageUser->isHidden();
$canViewHidden = $this->context && $this->context->getAuthority()->isAllowed( 'hideuser' );
return !$isHidden || $canViewHidden;
}
}