X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fpreferences%2FDefaultPreferencesFactory.php;h=6cee7323f429db5dccb98bc3ac58ad4cd6096655;hp=8a82add61fe337c6d7489ae9d44f5bac3bc7f030;hb=3bf40e4021fbe1087ab275767d5cf367b4a32f02;hpb=70e1b9c450f6e07adc890222bef2599f9150f4af diff --git a/includes/preferences/DefaultPreferencesFactory.php b/includes/preferences/DefaultPreferencesFactory.php index 8a82add61f..6cee7323f4 100644 --- a/includes/preferences/DefaultPreferencesFactory.php +++ b/includes/preferences/DefaultPreferencesFactory.php @@ -20,7 +20,6 @@ namespace MediaWiki\Preferences; -use Config; use DateTime; use DateTimeZone; use Exception; @@ -37,6 +36,7 @@ use MediaWiki\Auth\PasswordAuthenticationRequest; use MediaWiki\Config\ServiceOptions; use MediaWiki\Linker\LinkRenderer; use MediaWiki\MediaWikiServices; +use MediaWiki\Permissions\PermissionManager; use MessageLocalizer; use MWException; use MWTimestamp; @@ -77,13 +77,15 @@ class DefaultPreferencesFactory implements PreferencesFactory { /** @var NamespaceInfo */ protected $nsInfo; + /** @var PermissionManager */ + protected $permissionManager; + /** - * TODO Make this a const when we drop HHVM support (T192166) - * * @var array * @since 1.34 */ - public static $constructorOptions = [ + public const CONSTRUCTOR_OPTIONS = [ + 'AllowRequiringEmailForResets', 'AllowUserCss', 'AllowUserCssPrefs', 'AllowUserJs', @@ -113,35 +115,29 @@ class DefaultPreferencesFactory implements PreferencesFactory { /** * Do not call this directly. Get it from MediaWikiServices. * - * @param ServiceOptions|Config $options Config accepted for backwards compatibility + * @param ServiceOptions $options * @param Language $contLang * @param AuthManager $authManager * @param LinkRenderer $linkRenderer - * @param NamespaceInfo|null $nsInfo + * @param NamespaceInfo $nsInfo + * @param PermissionManager $permissionManager */ public function __construct( - $options, + ServiceOptions $options, Language $contLang, AuthManager $authManager, LinkRenderer $linkRenderer, - NamespaceInfo $nsInfo = null + NamespaceInfo $nsInfo, + PermissionManager $permissionManager ) { - if ( $options instanceof Config ) { - wfDeprecated( __METHOD__ . ' with Config parameter', '1.34' ); - $options = new ServiceOptions( self::$constructorOptions, $options ); - } - - $options->assertRequiredOptions( self::$constructorOptions ); + $options->assertRequiredOptions( self::CONSTRUCTOR_OPTIONS ); - if ( !$nsInfo ) { - wfDeprecated( __METHOD__ . ' with no NamespaceInfo argument', '1.34' ); - $nsInfo = MediaWikiServices::getInstance()->getNamespaceInfo(); - } $this->options = $options; $this->contLang = $contLang; $this->authManager = $authManager; $this->linkRenderer = $linkRenderer; $this->nsInfo = $nsInfo; + $this->permissionManager = $permissionManager; $this->logger = new NullLogger(); } @@ -208,7 +204,7 @@ class DefaultPreferencesFactory implements PreferencesFactory { # # Make sure that form fields have their parent set. See T43337. $dummyForm = new HTMLForm( [], $context ); - $disable = !$user->isAllowed( 'editmyoptions' ); + $disable = !$this->permissionManager->userHasRight( $user, 'editmyoptions' ); $defaultOptions = User::getDefaultOptions(); $userOptions = $user->getOptions(); @@ -389,8 +385,8 @@ class DefaultPreferencesFactory implements PreferencesFactory { ]; } - $canViewPrivateInfo = $user->isAllowed( 'viewmyprivateinfo' ); - $canEditPrivateInfo = $user->isAllowed( 'editmyprivateinfo' ); + $canViewPrivateInfo = $this->permissionManager->userHasRight( $user, 'viewmyprivateinfo' ); + $canEditPrivateInfo = $this->permissionManager->userHasRight( $user, 'editmyprivateinfo' ); // Actually changeable stuff $defaultPreferences['realname'] = [ @@ -620,7 +616,19 @@ class DefaultPreferencesFactory implements PreferencesFactory { } } - if ( $this->options->get( 'EnableUserEmail' ) && $user->isAllowed( 'sendemail' ) ) { + if ( $this->options->get( 'AllowRequiringEmailForResets' ) ) { + $defaultPreferences['requireemail'] = [ + 'type' => 'toggle', + 'label-message' => 'tog-requireemail', + 'help-message' => 'prefs-help-requireemail', + 'section' => 'personal/email', + 'disabled' => $disableEmailPrefs, + ]; + } + + if ( $this->options->get( 'EnableUserEmail' ) && + $this->permissionManager->userHasRight( $user, 'sendemail' ) + ) { $defaultPreferences['disablemail'] = [ 'id' => 'wpAllowEmail', 'type' => 'toggle', @@ -910,7 +918,7 @@ class DefaultPreferencesFactory implements PreferencesFactory { 'label-message' => 'tog-numberheadings', ]; - if ( $user->isAllowed( 'rollback' ) ) { + if ( $this->permissionManager->userHasRight( $user, 'rollback' ) ) { $defaultPreferences['showrollbackconfirmation'] = [ 'type' => 'toggle', 'section' => 'rendering/advancedrendering', @@ -950,7 +958,7 @@ class DefaultPreferencesFactory implements PreferencesFactory { ]; } - if ( $user->isAllowed( 'minoredit' ) ) { + if ( $this->permissionManager->userHasRight( $user, 'minoredit' ) ) { $defaultPreferences['minordefault'] = [ 'type' => 'toggle', 'section' => 'editing/editor', @@ -1096,7 +1104,7 @@ class DefaultPreferencesFactory implements PreferencesFactory { $watchlistdaysMax = ceil( $this->options->get( 'RCMaxAge' ) / ( 3600 * 24 ) ); # # Watchlist ##################################### - if ( $user->isAllowed( 'editmywatchlist' ) ) { + if ( $this->permissionManager->userHasRight( $user, 'editmywatchlist' ) ) { $editWatchlistLinks = ''; $editWatchlistModes = [ 'edit' => [ 'subpage' => false, 'flags' => [] ], @@ -1210,20 +1218,20 @@ class DefaultPreferencesFactory implements PreferencesFactory { ]; // Kinda hacky - if ( $user->isAllowed( 'createpage' ) || $user->isAllowed( 'createtalk' ) ) { + if ( $this->permissionManager->userHasAnyRight( $user, 'createpage', 'createtalk' ) ) { $watchTypes['read'] = 'watchcreations'; } - if ( $user->isAllowed( 'rollback' ) ) { + if ( $this->permissionManager->userHasRight( $user, 'rollback' ) ) { $watchTypes['rollback'] = 'watchrollback'; } - if ( $user->isAllowed( 'upload' ) ) { + if ( $this->permissionManager->userHasRight( $user, 'upload' ) ) { $watchTypes['upload'] = 'watchuploads'; } foreach ( $watchTypes as $action => $pref ) { - if ( $user->isAllowed( $action ) ) { + if ( $this->permissionManager->userHasRight( $user, $action ) ) { // Messages: // tog-watchdefault, tog-watchmoves, tog-watchdeletion, tog-watchcreations, tog-watchuploads // tog-watchrollback @@ -1510,7 +1518,7 @@ class DefaultPreferencesFactory implements PreferencesFactory { } /** - * @var HTMLForm $htmlForm + * @var PreferencesFormOOUI $htmlForm */ $htmlForm = new $formClass( $formDescriptor, $context, 'prefs' ); @@ -1523,6 +1531,10 @@ class DefaultPreferencesFactory implements PreferencesFactory { ] ) ); $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() ); @@ -1530,7 +1542,7 @@ class DefaultPreferencesFactory implements PreferencesFactory { $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 ); } ); @@ -1595,7 +1607,9 @@ class DefaultPreferencesFactory implements PreferencesFactory { $hiddenPrefs = $this->options->get( 'HiddenPrefs' ); $result = true; - if ( !$user->isAllowedAny( 'editmyprivateinfo', 'editmyoptions' ) ) { + if ( !$this->permissionManager + ->userHasAnyRight( $user, 'editmyprivateinfo', 'editmyoptions' ) + ) { return Status::newFatal( 'mypreferencesprotected' ); } @@ -1606,14 +1620,14 @@ class DefaultPreferencesFactory implements PreferencesFactory { // (not really "private", but still shouldn't be edited without permission) if ( !in_array( 'realname', $hiddenPrefs ) - && $user->isAllowed( 'editmyprivateinfo' ) + && $this->permissionManager->userHasRight( $user, 'editmyprivateinfo' ) && array_key_exists( 'realname', $formData ) ) { $realName = $formData['realname']; $user->setRealName( $realName ); } - if ( $user->isAllowed( 'editmyoptions' ) ) { + if ( $this->permissionManager->userHasRight( $user, 'editmyoptions' ) ) { $oldUserOptions = $user->getOptions(); foreach ( $this->getSaveBlacklist() as $b ) {