jenkins-bot has submitted this change and it was merged.

Change subject: Removed $wgZeroDisableImages dependency
......................................................................


Removed $wgZeroDisableImages dependency

* Allows for config-based image showing logic
* Added caching for Zero check & config

Change-Id: Ic623359a989b02784b652643d9dcf46c89bc06da
---
M includes/PageRenderingHooks.php
1 file changed, 65 insertions(+), 56 deletions(-)

Approvals:
  Dr0ptp4kt: Verified; Looks good to me, approved
  jenkins-bot: Verified



diff --git a/includes/PageRenderingHooks.php b/includes/PageRenderingHooks.php
index 47e2248..1c329b7 100644
--- a/includes/PageRenderingHooks.php
+++ b/includes/PageRenderingHooks.php
@@ -30,8 +30,8 @@
         * @return bool
         */
        public static function onGetMobileUrl( &$subdomainTokenReplacement ) {
-               global $wgZeroDisableImages;
-               if ( self::isZeroRequest() && $wgZeroDisableImages === 1 ) {
+               // TODO: logic check
+               if ( self::isZeroRequest() && self::disableImages() ) {
                        $subdomainTokenReplacement = 'zero.';
                }
                return true;
@@ -46,9 +46,10 @@
         * @return bool
         */
        public static function onBeforePageDisplay( &$out, &$options ) {
-               global $wgRequest, $wgConf, 
$wgEnableZeroRatedMobileAccessTesting, $wgZeroDisableImages;
+               global $wgRequest, $wgConf, 
$wgEnableZeroRatedMobileAccessTesting;
                wfProfileIn( __METHOD__ );
 
+               // FIXME BUG -- why do we need master on every requests?!
                $DB = wfGetDB( DB_MASTER );
                $DBName = $DB->getDBname();
                /** @noinspection PhpUnusedLocalVariableInspection */
@@ -69,17 +70,9 @@
                $out->addModules( 'mobile.zero.scripts' );
 
                $isFilePage = $out->getTitle()->inNamespace( NS_FILE );
+               $config = self::getConfig();
 
-               // Allow URL override of the X-CS parameter for testing purposes
-               $carrierId = $wgRequest->getVal( 'X-CS' );
-               if ( $carrierId === null ) {
-                       $carrierId = $wgRequest->getHeader( 'X-CS' );
-               }
-               if ( $carrierId === '(null)' || !$carrierId ) {
-                       $carrierId = null;
-               }
-
-               $renderBanner = $carrierId !== null || 
$wgRequest->getFuzzyBool( 'renderZeroRatedBanner' );
+               $renderBanner = $config !== null || $wgRequest->getFuzzyBool( 
'renderZeroRatedBanner' );
                if ( !$renderBanner && self::isZeroRequest() && 
!$wgRequest->getFuzzyBool( 'renderZeroRatedLandingPage' ) ) {
                        $out->addHTML( self::renderUnknownCarrier() );
                        wfProfileOut( __METHOD__ );
@@ -98,7 +91,7 @@
 
                $renderWarning = false;
                if ( $isFilePage ) {
-                       $renderWarning = true;
+                       $renderWarning = $config === null || 
!$config['showImages'];
                } else {
                        $renderWarningFlag = $wgRequest->getVal( 
'renderwarning' );
                        if ( $renderWarningFlag === 'yes' ) {
@@ -106,18 +99,10 @@
                        }
                }
 
-               if ( $renderBanner ) {
-                       $config = self::lookupCarrier( $carrierId );
-                       if ( $config !== null ) {
-                               if ( $isFilePage && $config['showImages'] ) {
-                                       $renderWarning = false;
-                               }
-                               $options = array();
-                               $options['toggle_view_desktop'] = 
'&renderZeroRatedBanner=true&renderwarning=yes&returnto=';
-                               $options['supported_languages'] = 
$config['showLangs'];
-                       }
-               } else {
-                       $config = null;
+               if ( $renderBanner && $config !== null ) {
+                       $options = array();
+                       $options['toggle_view_desktop'] = 
'&renderZeroRatedBanner=true&renderwarning=yes&returnto=';
+                       $options['supported_languages'] = $config['showLangs'];
                }
 
                if ( $renderBanner && $renderWarning && $acceptBilling !== 
'yes' ) {
@@ -128,17 +113,11 @@
                        $output = self::renderZeroRedirect();
                        $out->clearHTML();
                        $out->setPageTitle( null );
-               } elseif ( $renderBanner && isset( $config['name'] ) ) {
-                       // FIXME: ^^ config[name] ?
-                       if ( $wgZeroDisableImages === 1 ) {
-                               $forceClickToViewImages = true;
-                               $wgRequest->response()->header( 'X-Images: no' 
);
-                       } else {
-                               $forceClickToViewImages = 
$wgRequest->getFuzzyBool( 'forceClickToViewImages' );
-                               $wgRequest->response()->header( 'X-Images: yes' 
);
-                       }
+               } elseif ( $renderBanner ) {
+                       $imgHeader = self::disableImages() ? 'X-Images: no' : 
'X-Images: yes';
+                       $wgRequest->response()->header( $imgHeader );
                        $html = $out->getHTML();
-                       $parsedHtml = self::parseLinksForZeroQueryString( 
$config, $html, $isFilePage, $forceClickToViewImages );
+                       $parsedHtml = self::parseLinksForZeroQueryString( 
$config, $html, $isFilePage );
                        $out->clearHTML();
                        $out->addHTML( $parsedHtml );
                        $output = self::renderBanner( $config );
@@ -312,7 +291,7 @@
         * @return string
         */
        private static function renderSpecialPage( $config ) {
-               global $wgRequest, $wgZeroDisableImages;
+               global $wgRequest;
                $output = '';
                $languageNames = Language::fetchLanguageNames();
 
@@ -328,7 +307,7 @@
                                if ( !array_key_exists( $languageCode, 
$languageNames ) ) {
                                        continue;
                                }
-                               $langUrlFormat = $wgZeroDisableImages === 1 ? 
self::$formatZeroUrl : self::$formatMobileUrl;
+                               $langUrlFormat = self::disableImages() ? 
self::$formatZeroUrl : self::$formatMobileUrl;
                                $languageLink = Html::element( 'a',
                                        array( 'id' => 'lang_' . $languageCode,
                                                'href' => sprintf( 
$langUrlFormat, $languageCode ) ),
@@ -354,7 +333,7 @@
                $freeLangs = $config['whitelistedLangs'];
                foreach ( $languageNames as $languageCode => $languageName ) {
                        $isFree = ( 0 === count( $freeLangs ) || in_array( 
$languageCode, $freeLangs ) );
-                       if ( !$isFree || $wgZeroDisableImages !== 1 ) {
+                       if ( !$isFree || !self::disableImages() ) {
                                // send user to the m subdomain
                                $languageUrl = sprintf( self::$formatMobileUrl, 
$languageCode );
                                if ( !$isFree ) {
@@ -437,25 +416,41 @@
 
 
        /**
-       * Returns information about carrier
-       *
-       * @param String $carrierId: carrier ID e.g., "250-99"
+       * Returns cached carrier configuration based on X-CS header or query 
parameter
        * @return array|null Carrier configuration or null if it doesn't exist 
or is disabled
        */
-       private static function lookupCarrier( $carrierId ) {
+       private static function getConfig() {
+
+               // Cached configuration array or null if missing or disabled.
+               static $config = false;
+               if ( $config !== false ) {
+                       return $config;
+               }
+
                wfProfileIn( __METHOD__ );
+               global $wgRequest;
 
                $config = null;
-               $store = new CarrierConfigStore( $carrierId );
-               $text = $store->get();
 
-               if ( $text !== null ) {
-                       $conf = new CarrierConfig( $text );
-                       if ( !$conf->isError() ) {
-                               $config = $conf->getData();
-                               if ( !$config['enabled'] ) {
-                                       // If the configuration is disabled, 
pretend like it doesn't exist
-                                       $config = null;
+               // Allow URL override of the X-CS parameter for testing purposes
+               $id = $wgRequest->getVal( 'X-CS' );
+               if ( $id === null ) {
+                       $id = $wgRequest->getHeader( 'X-CS' );
+               }
+               if ( $id === '(null)' || !$id ) {
+                       $id = null;
+               }
+               if ( $id !== null ) {
+                       $store = new CarrierConfigStore( $id );
+                       $text = $store->get();
+                       if ( $text !== null ) {
+                               $conf = new CarrierConfig( $text );
+                               if ( !$conf->isError() ) {
+                                       $config = $conf->getData();
+                                       if ( !$config['enabled'] ) {
+                                               // If the configuration is 
disabled, pretend like it doesn't exist
+                                               $config = null;
+                                       }
                                }
                        }
                }
@@ -471,10 +466,9 @@
         * @param array $config
         * @param String $html: Html of current page
         * @param bool $isFilePage
-        * @param bool $forceClickToViewImages
         * @return String
         */
-       private static function parseLinksForZeroQueryString( $config, $html, 
$isFilePage, $forceClickToViewImages ) {
+       private static function parseLinksForZeroQueryString( $config, $html, 
$isFilePage ) {
                wfProfileIn( __METHOD__ );
                $html = mb_convert_encoding( $html, 'HTML-ENTITIES', "UTF-8" );
                libxml_use_internal_errors( true );
@@ -487,7 +481,7 @@
 
                $xpath = new DOMXpath( $doc );
 
-               if ( !$isFilePage && $forceClickToViewImages ) {
+               if ( !$isFilePage && self::disableImages() ) {
                        $tagToReplace = 'img';
                        $tagToReplaceNodes = $doc->getElementsByTagName( 
$tagToReplace );
                        $tagToReplaceNodesCollection = array();
@@ -582,11 +576,26 @@
         * @return bool
         */
        private static function isZeroRequest() {
-               return isset( $_SERVER['HTTP_X_SUBDOMAIN'] ) && 
$_SERVER['HTTP_X_SUBDOMAIN'] === 'ZERO';
+               static $isZero = null;
+               if ( $isZero === null ) {
+                       $isZero = isset( $_SERVER['HTTP_X_SUBDOMAIN'] ) && 
$_SERVER['HTTP_X_SUBDOMAIN'] === 'ZERO';
+               }
+               return $isZero;
+       }
+
+
+       /**
+        * This is a placeholder function to replace $wgZeroDisableImages which 
seems to always be 1 for Zero
+        * @return bool
+        */
+       private static function disableImages() {
+               // TODO? FIXME? Probably need to check the config as well
+               return self::isZeroRequest();
        }
 
 
        public function getVersion() {
+               // TODO? Delete this?
                return __CLASS__ . ': $Id$';
        }
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/63420
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ic623359a989b02784b652643d9dcf46c89bc06da
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/ZeroRatedMobileAccess
Gerrit-Branch: master
Gerrit-Owner: Yurik <[email protected]>
Gerrit-Reviewer: Dr0ptp4kt <[email protected]>
Gerrit-Reviewer: jenkins-bot

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to