Legoktm has uploaded a new change for review. https://gerrit.wikimedia.org/r/122086
Change subject: isFeatureEnabled: Check current Skin compatability ...................................................................... isFeatureEnabled: Check current Skin compatability Certain features depend on a certain skin, but that wasn't being taken into consideration. This makes checking whether a certain feature is enabled context-dependent. BetaFeaturesHooks::getBetaFeaturesFeaturesConfig is introduced as a simple caching caching layer for the GetBetaFeaturePreferences hook, since we might need to access the config multiple times in a single request. Bug: 62897 Change-Id: I46f3beed142dfc3af75b4165aa7cf97284ba62a9 --- M BetaFeaturesHooks.php M includes/ApiListBetaFeatures.php M includes/BetaFeaturesUtil.php 3 files changed, 26 insertions(+), 8 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/BetaFeatures refs/changes/86/122086/1 diff --git a/BetaFeaturesHooks.php b/BetaFeaturesHooks.php index 0030b22..eca2f8b 100644 --- a/BetaFeaturesHooks.php +++ b/BetaFeaturesHooks.php @@ -113,8 +113,7 @@ // Let's find out what's changed $oldUser = User::newFromName( $user->getName() ); - $betaFeatures = array(); - wfRunHooks( 'GetBetaFeaturePreferences', array( $user, &$betaFeatures ) ); + $betaFeatures = self::getBetaFeaturesFeaturesConfig( $user ); foreach ( $betaFeatures as $name => $option ) { $newVal = $user->getOption( $name ); @@ -139,6 +138,17 @@ return true; } + public static function getBetaFeaturesFeaturesConfig( User $user ) { + static $storage = array(); + if ( !isset( $storage[$user->getId()] ) ) { + $prefs = array(); + wfRunHooks( 'GetBetaFeaturePreferences', array( $user, &$prefs ) ); + $storage[$user->getId()] = $prefs; + } + + return $storage[$user->getId()]; + } + /** * @param User $user * @param array $prefs @@ -148,10 +158,8 @@ public static function getPreferences( User $user, array &$prefs ) { global $wgBetaFeaturesWhitelist; - $betaPrefs = array(); + $betaPrefs = self::getBetaFeaturesFeaturesConfig( $user ); $depHooks = array(); - - wfRunHooks( 'GetBetaFeaturePreferences', array( $user, &$betaPrefs ) ); $prefs['betafeatures-popup-disable'] = array( 'type' => 'api', diff --git a/includes/ApiListBetaFeatures.php b/includes/ApiListBetaFeatures.php index 5ef1c67..c8cf2a4 100644 --- a/includes/ApiListBetaFeatures.php +++ b/includes/ApiListBetaFeatures.php @@ -31,9 +31,8 @@ wfProfileIn( __METHOD__ ); $params = $this->extractRequestParams(); - $prefs = array(); $user = User::newFromName( 'MediaWiki default' ); - wfRunHooks( 'GetBetaFeaturePreferences', array( $user, &$prefs ) ); + $prefs = BetaFeaturesHooks::getBetaFeaturesFeaturesConfig( $user ); $counts = isset( $params['counts'] ) ? BetaFeaturesHooks::getUserCounts( array_keys( $prefs ) ) diff --git a/includes/BetaFeaturesUtil.php b/includes/BetaFeaturesUtil.php index 731ed56..dd63f05 100644 --- a/includes/BetaFeaturesUtil.php +++ b/includes/BetaFeaturesUtil.php @@ -30,9 +30,20 @@ * * @param User $user The user to check * @param string $feature The key passed back to BetaFeatures from the GetBetaFeaturePreferences hook + * @param IContextSource $ctx * @return bool */ - static function isFeatureEnabled( $user, $feature ) { + static function isFeatureEnabled( $user, $feature, $ctx = null ) { + $ctx = $ctx ?: RequestContext::getMain(); + $prefs = BetaFeaturesHooks::getBetaFeaturesFeaturesConfig( $user ); + // Bug 62897: If the feature depends on a skin, make sure that skin is being used + if ( isset( $prefs[$feature] ) && isset( $prefs[$feature]['requirements'] ) + && isset( $prefs[$feature]['requirements']['skins'] ) + ) { + if ( !in_array( $ctx->getSkin()->getSkinName(), $prefs[$feature]['requirements']['skins'] ) ) { + return false; + } + } return $user->getOption( $feature ) === HTMLFeatureField::OPTION_ENABLED; } } -- To view, visit https://gerrit.wikimedia.org/r/122086 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I46f3beed142dfc3af75b4165aa7cf97284ba62a9 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/BetaFeatures Gerrit-Branch: master Gerrit-Owner: Legoktm <legoktm.wikipe...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits