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() .
+ '">x</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