Pmiazga has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/327696 )
Change subject: [WIP] Implement necessary wiring for preferences
......................................................................
[WIP] Implement necessary wiring for preferences
Additionally improve existing code quality
Change-Id: I3cbcdc1303411b28b613afa6dd1a00b410891471
---
M Popups.hooks.php
M extension.json
M includes/Module.php
3 files changed, 95 insertions(+), 52 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Popups
refs/changes/96/327696/1
diff --git a/Popups.hooks.php b/Popups.hooks.php
index 5972d14..6a2db6e 100644
--- a/Popups.hooks.php
+++ b/Popups.hooks.php
@@ -18,20 +18,17 @@
* @file
* @ingroup extensions
*/
-use MediaWiki\Logger\LoggerFactory;
+use Popups\Module;
class PopupsHooks {
- const PREVIEWS_ENABLED = 'enabled';
- const PREVIEWS_DISABLED = 'disabled';
- const PREVIEWS_OPTIN_PREFERENCE_NAME = 'popups-enable';
const PREVIEWS_PREFERENCES_SECTION = 'rendering/reading';
- static function getPreferences( User $user, array &$prefs ) {
+ static function onGetBetaPreferences( User $user, array &$prefs ) {
global $wgExtensionAssetsPath;
- if ( self::getConfig()->get( 'PopupsBetaFeature' ) !== true ) {
+ if ( self::getModule()->getConfig()->get( 'PopupsBetaFeature' )
!== true ) {
return;
}
- $prefs['popups'] = [
+ $prefs[Module::PREVIEWS_OPTIN_BETA_PREFERENCE_NAME] = [
'label-message' => 'popups-message',
'desc-message' => 'popups-desc',
'screenshot' => [
@@ -53,66 +50,52 @@
* @param array $prefs
*/
static function onGetPreferences( User $user, array &$prefs ) {
- $module = new \Popups\Module( self::getConfig() );
+ $module = self::getModule();
if ( !$module->showPreviewsOptInOnPreferencesPage() ) {
return;
}
- $prefs[self::PREVIEWS_OPTIN_PREFERENCE_NAME] = [
+ $prefs[Module::PREVIEWS_OPTIN_PREFERENCE_NAME] = [
'type' => 'radio',
'label-message' => 'popups-prefs-optin-title',
'options' => [
- wfMessage( 'popups-prefs-optin-enabled-label'
)->text() => self::PREVIEWS_ENABLED,
- wfMessage( 'popups-prefs-optin-disabled-label'
)->text() => self::PREVIEWS_DISABLED
+ wfMessage( 'popups-prefs-optin-enabled-label'
)->text() => Module::PREVIEWS_ENABLED,
+ wfMessage( 'popups-prefs-optin-disabled-label'
)->text() => Module::PREVIEWS_DISABLED
],
'section' => self::PREVIEWS_PREFERENCES_SECTION
];
}
/**
- * @return Config
+ * @return Module
*/
- public static function getConfig() {
- static $config;
- if ( !$config ) {
- $config =
ConfigFactory::getDefaultInstance()->makeConfig( 'popups' );
+ public static function getModule() {
+ static $module;
+ if ( !$module ) {
+ $config = \MediaWiki\MediaWikiServices::getInstance()
+ ->getConfigFactory()->makeConfig(
Module::EXTENSION_NAME );
+ $module = new \Popups\Module( $config );
}
- return $config;
+ return $module;
+ }
+
+ private static function areDependenciesMet() {
+ $registry = ExtensionRegistry::getInstance();
+ return $registry->isLoaded( 'TextExtracts' ) && class_exists(
'ApiQueryPageImages' );
}
public static function onBeforePageDisplay( OutputPage &$out, Skin
&$skin ) {
- // Enable only if the user has turned it on in Beta
Preferences, or BetaFeatures is not installed.
- // Will only be loaded if PageImages & TextExtracts extensions
are installed.
+ $module = self::getModule();
- $registry = ExtensionRegistry::getInstance();
- if ( !$registry->isLoaded( 'TextExtracts' ) || !class_exists(
'ApiQueryPageImages' ) ) {
- $logger = LoggerFactory::getInstance( 'popups' );
+ if ( !self::areDependenciesMet() ) {
+ $logger = $module->getLogger();
$logger->error( 'Popups requires the PageImages and
TextExtracts extensions.' );
return true;
}
- $config = self::getConfig();
- $isExperimentEnabled = $config->get( 'PopupsExperiment' );
-
- if (
- // If Popups are enabled as an experiment, then bypass
checking whether the user has enabled
- // it as a beta feature.
- !$isExperimentEnabled &&
- $config->get( 'PopupsBetaFeature' ) === true
- ) {
- if ( !class_exists( 'BetaFeatures' ) ) {
- $logger = LoggerFactory::getInstance( 'popups'
);
- $logger->error( 'PopupsMode cannot be used as a
beta feature unless ' .
- 'the
BetaFeatures extension is present.' );
- return true;
- }
- if ( !BetaFeatures::isFeatureEnabled( $skin->getUser(),
'popups' ) ) {
- return true;
- }
+ if ( $module->isExperimentEnabled() ||
$module->isEnabledByUser( $skin->getUser() ) ) {
+ $out->addModules( [ 'ext.popups' ] );
}
-
- $out->addModules( [ 'ext.popups' ] );
-
return true;
}
@@ -158,10 +141,11 @@
* @param array $vars
*/
public static function onResourceLoaderGetConfigVars( array &$vars ) {
- $conf = self::getConfig();
+ $module = self::getModule();
+ $conf = $module->getConfig();
$vars['wgPopupsSchemaPopupsSamplingRate'] = $conf->get(
'SchemaPopupsSamplingRate' );
- if ( $conf->get( 'PopupsExperiment' ) ) {
+ if ( $module->isExperimentEnabled() ) {
$vars['wgPopupsExperiment'] = true;
$vars['wgPopupsExperimentConfig'] = $conf->get(
'PopupsExperimentConfig' );
}
@@ -176,12 +160,12 @@
* @param OutputPage $out
*/
public static function onMakeGlobalVariablesScript( array &$vars,
OutputPage $out ) {
- $config = self::getConfig();
+ $module = self::getModule();
$user = $out->getUser();
- if ( $config->get( 'PopupsExperiment' ) ) {
- $vars['wgPopupsExperimentIsBetaFeatureEnabled'] =
- class_exists( 'BetaFeatures' ) &&
BetaFeatures::isFeatureEnabled( $user, 'popups' );
+ if ( $module->isExperimentEnabled() ) {
+ $vars['wgPopupsExperimentIsBetaFeatureEnabled'] =
class_exists( 'BetaFeatures' )
+ && BetaFeatures::isFeatureEnabled( $user,
Module::PREVIEWS_BETA_PREFERENCE_NAME );
}
}
@@ -198,7 +182,7 @@
* or when ConfigRegistry gets populated before calling
`callback` ExtensionRegistry hook
*/
$config =
\MediaWiki\MediaWikiServices::getInstance()->getMainConfig();
- $wgDefaultUserOptions[ self::PREVIEWS_OPTIN_PREFERENCE_NAME ] =
+ $wgDefaultUserOptions[ Module::PREVIEWS_OPTIN_PREFERENCE_NAME ]
=
$config->get( 'PopupsOptInDefaultState' );
}
}
diff --git a/extension.json b/extension.json
index 638a4bb..2b38d0c 100644
--- a/extension.json
+++ b/extension.json
@@ -17,7 +17,7 @@
},
"Hooks": {
"GetBetaFeaturePreferences": [
- "PopupsHooks::getPreferences"
+ "PopupsHooks::onGetBetaPreferences"
],
"BeforePageDisplay": [
"PopupsHooks::onBeforePageDisplay"
@@ -51,7 +51,7 @@
"SchemaPopupsSamplingRate": 0,
"PopupsExperiment": false,
"@PopupsHideOptInOnPreferencesPage": "@var bool: Whether the
option to enable/disable Page Previews should be hidden on Preferences page.
Please note if PopupsBetaFeature is set to true this option will be always
hidden. False by default",
- "PopupsHideOptInOnPreferencesPage": true,
+ "PopupsHideOptInOnPreferencesPage": false,
"@PopupsOptInDefaultState" : "@var string:[enabled|disabled]
Default Page Previews visibility",
"PopupsOptInDefaultState" : "disabled"
},
diff --git a/includes/Module.php b/includes/Module.php
index 448aa1d..6bd6ec7 100644
--- a/includes/Module.php
+++ b/includes/Module.php
@@ -4,12 +4,30 @@
*/
namespace Popups;
+use MediaWiki\Logger\LoggerFactory;
+
/**
* Popups Module
*
* @package Popups
*/
final class Module {
+
+ /**
+ * Extension name
+ * @var string
+ */
+ const EXTENSION_NAME = 'popups';
+ /**
+ * Logger channel (name)
+ * @var string
+ */
+ const LOGGER_CHANNEL = 'popups';
+ const PREVIEWS_ENABLED = 'enabled';
+ const PREVIEWS_DISABLED = 'disabled';
+ const PREVIEWS_OPTIN_PREFERENCE_NAME = 'popups-enable';
+ const PREVIEWS_BETA_PREFERENCE_NAME = 'poups';
+
/**
* @var \Config
*/
@@ -32,4 +50,45 @@
return $this->config->get( 'PopupsBetaFeature' ) === false
&& $this->config->get(
'PopupsHideOptInOnPreferencesPage' ) === false;
}
+
+ /**
+ * @return bool
+ */
+ public function isExperimentEnabled() {
+ return $this->config->get( 'PopupsExperiment' );
+ }
+ /**
+ * @param \User $user
+ * @return bool
+ */
+ public function isEnabledByUser( \User $user ) {
+ if ( $this->config->get( 'PopupsBetaFeature' ) ) {
+ if ( !class_exists( 'BetaFeatures' ) ) {
+ $this->getLogger()->error( 'PopupsMode cannot
be used as a beta feature unless ' .
+ 'the BetaFeatures extension is
present.' );
+ return false;
+ }
+ return \BetaFeatures::isFeatureEnabled( $user,
self::PREVIEWS_BETA_PREFERENCE_NAME );
+ };
+
+ return $user->getOption( self::PREVIEWS_OPTIN_PREFERENCE_NAME )
== self::PREVIEWS_ENABLED;
+ }
+
+ /**
+ * Get module logger
+ *
+ * @return \Psr\Log\LoggerInterface
+ */
+ public function getLogger() {
+ return LoggerFactory::getInstance( self::LOGGER_CHANNEL );
+ }
+
+ /**
+ * Get Module config
+ *
+ * @return \Config
+ */
+ public function getConfig() {
+ return $this->config;
+ }
}
--
To view, visit https://gerrit.wikimedia.org/r/327696
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I3cbcdc1303411b28b613afa6dd1a00b410891471
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Popups
Gerrit-Branch: mpga
Gerrit-Owner: Pmiazga <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits