summaryrefslogtreecommitdiff
path: root/includes/api/ApiOptions.php
diff options
context:
space:
mode:
authorPierre Schmitz <pierre@archlinux.de>2015-12-17 09:15:42 +0100
committerPierre Schmitz <pierre@archlinux.de>2015-12-17 09:44:51 +0100
commita1789ddde42033f1b05cc4929491214ee6e79383 (patch)
tree63615735c4ddffaaabf2428946bb26f90899f7bf /includes/api/ApiOptions.php
parent9e06a62f265e3a2aaabecc598d4bc617e06fa32d (diff)
Update to MediaWiki 1.26.0
Diffstat (limited to 'includes/api/ApiOptions.php')
-rw-r--r--includes/api/ApiOptions.php14
1 files changed, 14 insertions, 0 deletions
diff --git a/includes/api/ApiOptions.php b/includes/api/ApiOptions.php
index 8ef06299..a62bcb6d 100644
--- a/includes/api/ApiOptions.php
+++ b/includes/api/ApiOptions.php
@@ -52,6 +52,14 @@ class ApiOptions extends ApiBase {
$this->dieUsageMsg( array( 'missingparam', 'optionname' ) );
}
+ // Load the user from the master to reduce CAS errors on double post (T95839)
+ if ( wfGetLB()->getServerCount() > 1 ) {
+ $user = User::newFromId( $user->getId() );
+ if ( !$user->loadFromId( User::READ_LATEST ) ) {
+ $this->dieUsage( 'Anonymous users cannot change preferences', 'notloggedin' );
+ }
+ }
+
if ( $params['reset'] ) {
$user->resetOptions( $params['resetkinds'], $this->getContext() );
$changed = true;
@@ -75,11 +83,17 @@ class ApiOptions extends ApiBase {
$prefs = Preferences::getPreferences( $user, $this->getContext() );
$prefsKinds = $user->getOptionKinds( $this->getContext(), $changes );
+ $htmlForm = null;
foreach ( $changes as $key => $value ) {
switch ( $prefsKinds[$key] ) {
case 'registered':
// Regular option.
+ if ( $htmlForm === null ) {
+ // We need a dummy HTMLForm for the validate callback...
+ $htmlForm = new HTMLForm( array(), $this );
+ }
$field = HTMLForm::loadInputFromParameters( $key, $prefs[$key] );
+ $field->mParent = $htmlForm;
$validation = $field->validate( $value, $user->getOptions() );
break;
case 'registered-multiselect':