}
/**
- * @var HTMLForm $htmlForm
+ * @var PreferencesFormOOUI $htmlForm
*/
$htmlForm = new $formClass( $formDescriptor, $context, 'prefs' );
] ) );
$htmlForm->setModifiedUser( $user );
+ $htmlForm->setOptionsEditable( $this->permissionManager
+ ->userHasRight( $user, 'editmyoptions' ) );
+ $htmlForm->setPrivateInfoEditable( $this->permissionManager
+ ->userHasRight( $user, 'editmyprivateinfo' ) );
$htmlForm->setId( 'mw-prefs-form' );
$htmlForm->setAutocomplete( 'off' );
$htmlForm->setSubmitText( $context->msg( 'saveprefs' )->text() );
$htmlForm->setSubmitTooltip( 'preferences-save' );
$htmlForm->setSubmitID( 'prefcontrol' );
$htmlForm->setSubmitCallback(
- function ( array $formData, HTMLForm $form ) use ( $formDescriptor ) {
+ function ( array $formData, PreferencesFormOOUI $form ) use ( $formDescriptor ) {
return $this->submitForm( $formData, $form, $formDescriptor );
}
);
* @file
*/
-use MediaWiki\MediaWikiServices;
-
/**
* Form to edit user preferences.
*
// Override default value from HTMLForm
protected $mSubSectionBeforeFields = false;
+ /** @var User|null */
private $modifiedUser;
+ /** @var bool */
+ private $privateInfoEditable = true;
+
+ /** @var bool */
+ private $optionsEditable = true;
+
/**
* @param User $user
*/
}
}
+ /**
+ * @return bool
+ */
+ public function isPrivateInfoEditable() {
+ return $this->privateInfoEditable;
+ }
+
+ /**
+ * Whether the
+ * @param bool $editable
+ */
+ public function setPrivateInfoEditable( $editable ) {
+ $this->privateInfoEditable = $editable;
+ }
+
+ /**
+ * @return bool
+ */
+ public function areOptionsEditable() {
+ return $this->optionsEditable;
+ }
+
+ /**
+ * @param bool $optionsEditable
+ */
+ public function setOptionsEditable( $optionsEditable ) {
+ $this->optionsEditable = $optionsEditable;
+ }
+
/**
* Get extra parameters for the query string when redirecting after
* successful save.
* @return string
*/
function getButtons() {
- $permissionManager = MediaWikiServices::getInstance()->getPermissionManager();
- if ( !$permissionManager->userHasAnyRight(
- $this->getModifiedUser(),
- 'editmyprivateinfo',
- 'editmyoptions'
- ) ) {
+ if ( !$this->areOptionsEditable() && !$this->isPrivateInfoEditable() ) {
return '';
}
$html = parent::getButtons();
- if ( $permissionManager->userHasRight( $this->getModifiedUser(), 'editmyoptions' ) ) {
+ if ( $this->areOptionsEditable() ) {
$t = $this->getTitle()->getSubpage( 'reset' );
$html .= new OOUI\ButtonWidget( [
/**
* Get a basic PreferencesFactory for testing with.
- * @param PermissionManager|null $manager
+ * @param PermissionManager $mockPM
* @return DefaultPreferencesFactory
*/
- protected function getPreferencesFactory( PermissionManager $manager = null ) {
+ protected function getPreferencesFactory( PermissionManager $mockPM ) {
$mockNsInfo = $this->createMock( NamespaceInfo::class );
$mockNsInfo->method( 'getValidNamespaces' )->willReturn( [
NS_MAIN, NS_TALK, NS_USER, NS_USER_TALK
$mockNsInfo->expects( $this->never() )
->method( $this->anythingBut( 'getValidNamespaces', '__destruct' ) );
- $mockPermissionManager = $manager ?? $this->createMock( PermissionManager::class );
-
return new DefaultPreferencesFactory(
new LoggedServiceOptions( self::$serviceOptionsAccessLog,
DefaultPreferencesFactory::$constructorOptions, $this->config ),
AuthManager::singleton(),
MediaWikiServices::getInstance()->getLinkRenderer(),
$mockNsInfo,
- $mockPermissionManager
+ $mockPM
);
}
$this->setTemporaryHook( 'GetPreferences', null );
$testUser = $this->getTestUser();
- $form = $this->getPreferencesFactory()->getForm( $testUser->getUser(), $this->context );
+ $pm = $this->createMock( PermissionManager::class );
+ $pm->method( 'userHasRight' )->willReturn( true );
+ $form = $this->getPreferencesFactory( $pm )->getForm( $testUser->getUser(), $this->context );
$this->assertInstanceOf( PreferencesFormOOUI::class, $form );
$this->assertCount( 5, $form->getPreferenceSections() );
}