Dr0ptp4kt has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/68304


Change subject: Further decouple banners from MobileFrontend. Dependent on 
change 67546.
......................................................................

Further decouple banners from MobileFrontend. Dependent on change 67546.

* Puts banners into template rendering hook instead of article render hook.
* Removed display:none now that only one banner is needed.
* Some code reformat fixes from IDE.

Change-Id: I1c05d1f97e2d6794b5e16eb20062df7153adbc05
---
M includes/PageRenderingHooks.php
1 file changed, 141 insertions(+), 52 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/ZeroRatedMobileAccess 
refs/changes/04/68304/1

diff --git a/includes/PageRenderingHooks.php b/includes/PageRenderingHooks.php
index 07b32a5..1decb16 100644
--- a/includes/PageRenderingHooks.php
+++ b/includes/PageRenderingHooks.php
@@ -49,10 +49,35 @@
 
        public static function onMinervaPreRender( \BaseTemplate $template ) {
                global $wgRequest;
+               // TODO: alias $template->data where appropriate
+               $bannersSupported = array_key_exists( 'banners', 
$template->data );
 
                $config = self::getConfig();
                if ( $config === null ) {
+                       if ( self::isZeroSubdomain() && $bannersSupported ) {
+                               $unsupported = self::renderUnknownCarrier();
+                               $template->data['banners'] = array( 
$unsupported );
+                               $template->set( 'banners', 
$template->data['banners'] );
+                       }
                        return true;
+               }
+
+               $redirectWarningQPS = 'renderZeroRatedRedirect=true&returnto=';
+
+               $warning = self::renderWarning( $config );
+
+               // TODO: If clearer way to put this, make it clearer
+               // trump all existing banners when in a banner-rendering context
+               if ( $bannersSupported ) {
+                       if ( isset( $warning ) ) {
+                               $template->data['banners'] = array( $warning );
+                               $template->set( 'banners', 
$template->data['banners'] );
+                               self::emptyLangLinks( $template );
+                       } else {
+                               $template->data['banners'] = array( 
self::renderBanner( $config ) );
+                               $template->set( 'banners', 
$template->data['banners'] );
+                               self::rewriteLangLinks( $template, $config, 
$redirectWarningQPS );
+                       }
                }
 
                $skin = new SkinTemplate();
@@ -63,35 +88,13 @@
                $privacyText = $skin->footerLink( 
'mobile-frontend-privacy-link-text', 'privacypage' );
                $termsText = wfMessage( 'mobile-frontend-terms-use-text' 
)->parse();
 
-               $licenseText = self::addWarning( $wgRequest, $pattern, 
$licenseText, $redirectWarning ) ;
+               $licenseText = self::addWarning( $wgRequest, $pattern, 
$licenseText, $redirectWarning );
                $privacyText = self::addWarning( $wgRequest, $pattern, 
$privacyText, $redirectWarning );
                $termsText = self::addWarning( $wgRequest, $pattern, 
$termsText, $redirectWarning );
 
                $template->set( 'mobile-license', $licenseText );
                $template->set( 'privacy', $privacyText );
                $template->set( 'terms-use', $termsText );
-
-               $redirectWarningQPS = 'renderZeroRatedRedirect=true&returnto=';
-
-               if ( isset( $template->data['language_urls'] )
-                       && 0 < count( $template->data['language_urls'] )
-               ) {
-                       $languageUrls = $template->data['language_urls'];
-                       $freeLangs = $config['whitelistedLangs'];
-                       foreach ( $languageUrls as &$lang ) {
-                               if ( 
preg_match('#^//([-a-zA-Z_]+)\.(zero|m)\.#', $lang['href'], $match ) ) {
-                                       $link = $lang['href'];
-                                       $isFree = ( 0 === count( $freeLangs ) 
|| in_array( $match[1], $freeLangs ) );
-                                       if ( !$isFree ) {
-                                               if ( self::isZeroSubdomain() ) {
-                                                       $link = str_replace( 
self::$zerodotParent, self::$mdotParent, $link );
-                                               }
-                                               $lang['href'] = 
$wgRequest->appendQuery( $redirectWarningQPS . urlencode( $link ) );
-                                       }
-                               }
-                       }
-                       $template->set( 'language_urls', $languageUrls );
-               }
 
                return true;
        }
@@ -125,7 +128,7 @@
                        }
                        if ( self::isZeroSubdomain() ) {
                                $referer = $wgRequest->getHeader( 'REFERER' );
-                               if ( strpos( $referer , 'zero.wikipedia.org' ) 
!== false ) {
+                               if ( strpos( $referer, 'zero.wikipedia.org' ) 
!== false ) {
                                        $warn .= ' && zero referer';
                                }
                        }
@@ -143,7 +146,6 @@
                if ( !$showBanner && self::isZeroSubdomain() ) {
                        $out->clearHTML();
                        $out->setPageTitle( null );
-                       $out->addHTML( self::renderUnknownCarrier() );
                        wfProfileOut( __METHOD__ );
                        return true;
                }
@@ -175,23 +177,11 @@
                }
 
                if ( $showBanner && $showWarning && $acceptBilling !== 'yes' ) {
-                       $domainReplacement = self::isZeroSubdomain() ? 
self::$zerodotParent : self::$mdotParent;
-                       $output = self::renderQuestion(
-                               str_replace(
-                                       self::$originParent,
-                                       $domainReplacement,
-                                       wfExpandUrl( $wgRequest->appendQuery( 
'acceptbilling=yes' ), PROTO_CURRENT )
-                               )
-                       );
+                       $output = '';
                        $out->clearHTML();
                        $out->setPageTitle( null );
                } elseif ( $wgRequest->getFuzzyBool( 'renderZeroRatedRedirect' 
) ) {
-                       $output = self::renderQuestion(
-                               $wgRequest->appendQuery(
-                                       
'acceptbilling=yes&renderZeroRatedBanner=true&returnto='
-                                       . urlencode( $wgRequest->getVal( 
'returnto' ) ) ),
-                               true // isWarning
-                       );
+                       $output = '';
                        $out->clearHTML();
                        $out->setPageTitle( null );
                } elseif ( $showBanner && $config !== null ) {
@@ -201,7 +191,7 @@
                        $parsedHtml = self::parseLinksForZeroQueryString( 
$config, $html, $isFilePage );
                        $out->clearHTML();
                        $out->addHTML( $parsedHtml );
-                       $output = self::renderBanner( $config );
+                       $output = '';
                } else {
                        $output = '';
                }
@@ -213,6 +203,7 @@
                }
 
                if ( $output ) {
+                       // TODO: Remove unnecessary 'id' attributes
                        $output = Html::rawElement( 'div',
                                array( 'id' => 'zero-landing-page' ), $output );
                        $out->addHTML( $output );
@@ -230,18 +221,19 @@
                global $wgRequest;
                $ip = $wgRequest->getIP();
                // @FIXME: Unescaped UI text output as HTML in next 3 lines.
+               // TODO: Remove unnecessary 'id' attributes
                $bannerText = wfMessage( 'zero-rated-mobile-access-sorry' 
)->text();
                $bannerText .= '<br />' . wfMessage( 
'zero-rated-mobile-access-sorry-ip', $ip )->text();
                $bannerText .= '<br />' . wfMessage(
-                       'zero-rated-mobile-access-sorry-goto',
-                       '<a href="http://m.wikipedia.org/";>m.wikipedia.org</a>' 
)->text();
+                               'zero-rated-mobile-access-sorry-goto',
+                               '<a 
href="http://m.wikipedia.org/";>m.wikipedia.org</a>' )->text();
                $bannerText = Html::rawElement( 'div',
                        array( 'class' => 'mw-mf-message',
                                'id' => 'zero-rated-banner-text' ),
                        $bannerText );
                $banner = Html::rawElement( 'div',
                        array( 'class' => 'mw-mf-banner 
mw-mf-banner-undismissable',
-                               'style' => 'display:none;', 'id' => 
'zero-rated-banner-red' ),
+                               'id' => 'zero-rated-banner-red' ),
                        $bannerText );
                return Html::rawElement( 'div',
                        array( 'id' => 'zero-landing-page' ),
@@ -260,7 +252,7 @@
                        global $wgRequest;
                        $billingURL = $wgRequest->appendQuery(
                                
'renderZeroRatedBanner=true&renderwarning=yes&returnto='
-                                       . urlencode( $config['bannerUrl'] )
+                               . urlencode( $config['bannerUrl'] )
                        );
                        $carrierLink = Html::rawElement( 'a', array( 'href' => 
$billingURL ), $bannerText );
                        if ( !$config['bannerWarning'] ) {
@@ -290,6 +282,7 @@
                        $carrierLink );
                $customStyleNotifyClose = 'background-color:' . 
$config['background'] .
                        ';border: 2px solid ' . $config['foreground'] . ';';
+               // TODO: Remove unnecessary 'id' attributes
                $bannerText = Html::rawElement( 'span',
                        array(
                                'class' => 'mw-mf-message',
@@ -298,14 +291,56 @@
                $banner = Html::rawElement( 'div',
                        array(
                                'class' => 'mw-mf-banner',
-                               'style' => ( $lang === null ? 'display:none;' : 
'' ) . $customStyle,
+                               'style' => $customStyle,
                                'id' => 'zero-rated-banner'
                        ),
                        '<button style="padding:0.5em;' . 
$customStyleNotifyClose . $customStyle .
-                               '" class="notify-close" title="' .
-                               wfMessage( 
'zero-rated-mobile-access-dismiss-notification' )->escaped() .
-                               '">×</button>' . $bannerText );
+                       '" class="notify-close" title="' .
+                       wfMessage( 
'zero-rated-mobile-access-dismiss-notification' )->escaped() .
+                       '">&#120;</button>' . $bannerText );
                return $banner;
+       }
+
+       /**
+        * @param $config
+        * @return null|string null Warning banner if applicable, else null
+        */
+       private static function renderWarning( $config ) {
+               global $wgRequest;
+               global $wgOut;
+
+               $isFilePage = $wgOut->getTitle()->inNamespace( NS_FILE );
+               $acceptBilling = $wgRequest->getVal( 'acceptbilling' );
+
+               $showWarning = false;
+               if ( $isFilePage ) {
+                       $showWarning = !$config['showImages'];
+               } else {
+                       $showWarningFlag = $wgRequest->getVal( 'renderwarning' 
);
+                       if ( $showWarningFlag === 'yes' ) {
+                               $showWarning = true;
+                       }
+               }
+
+               if ( $showWarning && $acceptBilling !== 'yes' ) {
+                       $domainReplacement = self::isZeroSubdomain() ? 
self::$zerodotParent : self::$mdotParent;
+                       $question = self::renderQuestion(
+                               str_replace(
+                                       self::$originParent,
+                                       $domainReplacement,
+                                       wfExpandUrl( $wgRequest->appendQuery( 
'acceptbilling=yes' ), PROTO_CURRENT )
+                               )
+                       );
+               } elseif ( $wgRequest->getFuzzyBool( 'renderZeroRatedRedirect' 
) ) {
+                       $question = self::renderQuestion(
+                               $wgRequest->appendQuery(
+                                       
'acceptbilling=yes&renderZeroRatedBanner=true&returnto='
+                                       . urlencode( $wgRequest->getVal( 
'returnto' ) ) ),
+                               true // isWarning
+                       );
+               }
+
+               return isset( $question ) ? $question : null;
        }
 
 
@@ -323,6 +358,7 @@
                $acceptBillingNo = Html::rawElement( 'a',
                        array( 'href' => $wgRequest->appendQuery( 
'acceptbilling=no&returnto=' . urlencode( $referrer ) ) ),
                        wfMessage( 
'zero-rated-mobile-access-banner-text-data-charges-no' )->escaped() );
+               // TODO: Remove unnecessary 'id' attributes
                $bannerText = Html::rawElement( 'div',
                        array( 'class' => 'mw-mf-message',
                                'id' => 'zero-rated-banner-text' ),
@@ -334,9 +370,61 @@
                        $cssClass .= ' mw-mf-banner-warning';
                }
                $banner = Html::rawElement( 'div',
-                       array( 'class' => $cssClass,
-                               'style' => 'display:none;', 'id' => 
'zero-rated-banner-red' ), $bannerText );
+                       array( 'class' => $cssClass, 'id' => 
'zero-rated-banner-red' ),
+                       $bannerText
+               );
                return $banner;
+       }
+
+       /**
+        * @param \BaseTemplate $template
+        * @param $config
+        * @param string $qps Query path separator for rewriting
+        * @return bool
+        *
+        * Rewrite Read in Another Language links as interstitial links
+        */
+       private static function rewriteLangLinks( $template, $config, $qps ) {
+               global $wgRequest;
+
+               if ( isset( $template->data['language_urls'] )
+                       && 0 < count( $template->data['language_urls'] )
+               ) {
+                       $languageUrls = $template->data['language_urls'];
+                       $freeLangs = $config['whitelistedLangs'];
+                       foreach ( $languageUrls as &$lang ) {
+                               if ( preg_match( 
'#^//([-a-zA-Z_]+)\.(zero|m)\.#', $lang['href'], $match ) ) {
+                                       $link = $lang['href'];
+                                       $isFree = ( 0 === count( $freeLangs ) 
|| in_array( $match[1], $freeLangs ) );
+                                       if ( !$isFree ) {
+                                               if ( self::isZeroSubdomain() ) {
+                                                       $link = str_replace( 
self::$zerodotParent, self::$mdotParent, $link );
+                                               }
+                                               $lang['href'] = 
$wgRequest->appendQuery( $qps . urlencode( $link ) );
+                                       }
+                               }
+                       }
+                       $template->set( 'language_urls', $languageUrls );
+               }
+
+               return true;
+       }
+
+       /**
+        * @param \BaseTemplate $template
+        * @return bool
+        *
+        * Empty out the Read in Another Language list
+        */
+       private static function emptyLangLinks( $template ) {
+               if ( isset( $template->data['language_urls'] )
+                       && 0 < count( $template->data['language_urls'] )
+               ) {
+                       $template->data['language_urls'] = array();
+                       $template->set( 'language_urls', 
$template->data['language_urls'] );
+               }
+
+               return true;
        }
 
 
@@ -372,6 +460,7 @@
                }
                $output .= Html::element( 'hr' );
                $output .= wfMessage( 
'zero-rated-mobile-access-home-page-selection-text' )->escaped();
+               // TODO: Remove unnecessary 'id' attributes
                $output .= Html::openElement( 'select',
                        array( 'id' => 'languageselection',
                                'onchange' => 'javascript:window.location = 
this.options[this.selectedIndex].value;',
@@ -392,7 +481,7 @@
                                        // offer upgraded ux
                                        $languageUrl = $wgRequest->appendQuery(
                                                
'renderZeroRatedBanner=true&renderwarning=yes&returnto='
-                                                       . urlencode( 
$languageUrl ) );
+                                               . urlencode( $languageUrl ) );
                                }
                        } else {
                                // send low bandwidth user to whitelisted zero 
subdomain
@@ -744,7 +833,7 @@
        private static function logDebug( $dbg ) {
                static $printedHeaders = false;
                global $wgRequest;
-               $dbg .= "\t" . $wgRequest->getIP() .  "\t" . 
$wgRequest->getFullRequestURL();
+               $dbg .= "\t" . $wgRequest->getIP() . "\t" . 
$wgRequest->getFullRequestURL();
                if ( !$printedHeaders ) {
                        $headers = $wgRequest->getAllHeaders();
                        ksort( $headers );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I1c05d1f97e2d6794b5e16eb20062df7153adbc05
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/ZeroRatedMobileAccess
Gerrit-Branch: master
Gerrit-Owner: Dr0ptp4kt <[email protected]>

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

Reply via email to