mediawiki-extensions-Popups/includes/UserPreferencesChangeHandler.php
Brion Vibber 9602856226 Fix for changes to preferences form
The PreferencesFormPreSave hook now may return any HTMLForm
subclass, not just a PreferencesForm. It may be the new
PreferencesFormLegacy, or the future PreferrencesFormOOUI.

Change the function signature to accept any HTMLForm,
which seems to fix saving of preferences.

Bug: T195580
Change-Id: I41e37d78d87ab8965995c6e19ef76db87f7616fa
2018-05-25 09:52:48 -07:00

89 lines
2.6 KiB
PHP

<?php
/*
* This file is part of the MediaWiki extension Popups.
*
* Popups is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* Popups is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Popups. If not, see <http://www.gnu.org/licenses/>.
*
* @file
* @ingroup extensions
*/
namespace Popups;
use MediaWiki\MediaWikiServices;
use User;
use HTMLForm;
/**
* User Preferences save change listener
*
* @package Popups
*/
class UserPreferencesChangeHandler {
/**
* @var PopupsContext
*/
private $popupsContext;
/**
* UserPreferencesChangeHandler constructor.
* @param PopupsContext $context Popups context instance
*/
public function __construct( $context ) {
$this->popupsContext = $context;
}
/**
* Hook executed on Preferences Form Save, when user disables Page Previews call PopupsContext
* to log `disabled` event.
*
* @param User $user Logged-in user
* @param array $oldUserOptions Old user options array
*/
public function doPreferencesFormPreSave( User $user, array $oldUserOptions ) {
if ( !array_key_exists( PopupsContext::PREVIEWS_OPTIN_PREFERENCE_NAME, $oldUserOptions ) ) {
return;
}
$oldSetting = $oldUserOptions[ PopupsContext::PREVIEWS_OPTIN_PREFERENCE_NAME ];
$newSetting = $user->getOption( PopupsContext::PREVIEWS_OPTIN_PREFERENCE_NAME );
if ( $oldSetting == PopupsContext::PREVIEWS_ENABLED
&& $newSetting == PopupsContext::PREVIEWS_DISABLED ) {
$this->popupsContext->logUserDisabledPagePreviewsEvent();
}
}
/**
* @return UserPreferencesChangeHandler
*/
private static function newFromGlobalState() {
return MediaWikiServices::getInstance()->getService( 'Popups.UserPreferencesChangeHandler' );
}
/**
* @param array $formData Form data submitted by user
* @param HTMLForm $form A preferences form
* @param User $user Logged-in user
* @param bool &$result Variable defining is form save successful
* @param array $oldUserOptions Old user options array
*/
public static function onPreferencesFormPreSave(
array $formData,
HTMLForm $form,
User $user,
&$result,
$oldUserOptions ) {
self::newFromGlobalState()->doPreferencesFormPreSave( $user, $oldUserOptions );
}
}