https://www.mediawiki.org/wiki/Special:Code/MediaWiki/112380

Revision: 112380
Author:   awjrichards
Date:     2012-02-25 01:42:53 +0000 (Sat, 25 Feb 2012)
Log Message:
-----------
Implement dynamic mobile url functionality (replacing the old way of building 
the mobile URL). added ability to force https when building the mobile URL. At 
the moment this has only been tested against unit tests.

Modified Paths:
--------------
    trunk/extensions/MobileFrontend/MobileFrontend.body.php

Modified: trunk/extensions/MobileFrontend/MobileFrontend.body.php
===================================================================
--- trunk/extensions/MobileFrontend/MobileFrontend.body.php     2012-02-25 
01:00:38 UTC (rev 112379)
+++ trunk/extensions/MobileFrontend/MobileFrontend.body.php     2012-02-25 
01:42:53 UTC (rev 112380)
@@ -126,7 +126,7 @@
         * @throws HttpError
         */
        public function testCanonicalRedirect( $request, $title, $output ) {
-               global $wgUsePathInfo, $wgMobileDomain;
+               global $wgUsePathInfo;
                $xDevice = isset( $_SERVER['HTTP_X_DEVICE'] ) ? 
$_SERVER['HTTP_X_DEVICE'] : '';
                if ( empty( $xDevice ) ) {
                        return true; // Let the redirect happen
@@ -161,15 +161,7 @@
                                }
                                throw new HttpError( 500, $message );
                        } else {
-                               $parsedUrl = wfParseUrl( $targetUrl );
-                               if ( stristr( $parsedUrl['host'], 
$wgMobileDomain ) === false ) {
-                                       $hostParts = explode( '.', 
$parsedUrl['host'] );
-                                       $parsedUrl['host'] = $hostParts[0] . 
$wgMobileDomain . $hostParts[1] . '.' . $hostParts[2];
-                               }
-                               $fragmentDelimiter = ( !empty( 
$parsedUrl['fragment'] ) ) ? '#' : '';
-                               $queryDelimiter = ( !empty( $parsedUrl['query'] 
) ) ? '?' : '';
-                               $targetUrl = $parsedUrl['scheme'] . '://' .     
 $parsedUrl['host'] . $parsedUrl['path']
-                                               . $queryDelimiter . 
$parsedUrl['query'] . $fragmentDelimiter . $parsedUrl['fragment'];
+                               $targetUrl = $this->getMobileUrl( $targetUrl );
                                $output->setSquidMaxage( 1200 );
                                $output->redirect( $targetUrl, '301' );
                        }
@@ -215,7 +207,7 @@
        }
 
        public function getMsg() {
-               global $wgUser, $wgContLang, $wgRequest, $wgServer, 
$wgMobileRedirectFormAction, $wgMobileDomain, $wgOut, $wgLanguageCode;
+               global $wgUser, $wgContLang, $wgRequest, $wgServer, 
$wgMobileRedirectFormAction, $wgOut, $wgLanguageCode;
                wfProfileIn( __METHOD__ );
 
                self::$disableImagesURL = $wgRequest->escapeAppendQuery( 
'disableImages=1' );
@@ -269,21 +261,7 @@
                        unset( $tmp );
                        $nt = Title::newFromText( $l );
                        if ( $nt ) {
-                               $parsedUrl = wfParseUrl( $nt->getFullURL() );
-                               if ( stristr( $parsedUrl['host'], 
$wgMobileDomain ) === false ) {
-                                       $hostParts = explode( '.', 
$parsedUrl['host'] );
-                                       $parsedUrl['host'] = $hostParts[0] . 
$wgMobileDomain . $hostParts[1] . '.' .  $hostParts[2];
-                               }
-                               $fragmentDelimiter = ( isset( 
$parsedUrl['fragment'] ) && $parsedUrl['fragment'] !== null  ) ? '#' : '';
-                               $queryDelimiter = ( isset( $parsedUrl['query'] 
) && $parsedUrl['query'] !== null  ) ? '?' : '';
-
-                               $languageUrl = $parsedUrl['scheme'] . 
$parsedUrl['delimiter'] .  $parsedUrl['host'] . $parsedUrl['path'];
-                               if ( isset( $parsedUrl['query'] ) ) {
-                                       $languageUrl .= $queryDelimiter . 
$parsedUrl['query'];
-                               }
-                               if ( isset( $parsedUrl['fragment'] ) ) {
-                                       $languageUrl .= $fragmentDelimiter . 
$parsedUrl['fragment'];
-                               }
+                               $languageUrl = $this->getMobileUrl( 
$nt->getFullURL() );
                                $languageUrls[] = array(
                                        'href' => $languageUrl,
                                        'text' => ( 
$wgContLang->getLanguageName( $nt->getInterwiki() ) != ''
@@ -298,10 +276,9 @@
 
                self::$languageUrls = $languageUrls;
 
-               $nonMobileServerBaseURL = str_replace( $wgMobileDomain, '.', 
$wgServer );
                self::$mobileRedirectFormAction = ( $wgMobileRedirectFormAction 
!== false )
                                ? $wgMobileRedirectFormAction
-                               : 
"{$nonMobileServerBaseURL}/w/mobileRedirect.php";
+                               : "{$wgServer}/w/mobileRedirect.php";
 
                self::$mainPageUrl = Title::newMainPage()->getLocalUrl();
                self::$randomPageUrl = $this->getRelativeURL( 
SpecialPage::getTitleFor( 'Randompage' )->getLocalUrl() );
@@ -310,58 +287,23 @@
        }
 
        /**
-        * @param $parsedUrl wfParseUrl Array
-        * @return string
-        */
-       public function parsePageRedirect( $parsedUrl ) {
-               global $wgMobileDomain;
-               wfProfileIn( __METHOD__ );
-               $redirect = '';
-               $hostParts = explode( '.', $parsedUrl['host'] );
-               $parsedUrl['host'] = $hostParts[0] . $wgMobileDomain . 
$hostParts[1] . '.' . $hostParts[2];
-               $fragmentDelimiter = ( !empty( $parsedUrl['fragment'] ) ) ? '#' 
: '';
-               $queryDelimiter = ( !empty( $parsedUrl['query'] ) ) ? '?' : '';
-               $redirect = $parsedUrl['scheme'] . '://' . $parsedUrl['host'] . 
$parsedUrl['path'];
-               if ( isset( $parsedUrl['query'] ) ) {
-                       $redirect .= $queryDelimiter . $parsedUrl['query'];
-               }
-               if ( isset( $parsedUrl['fragment'] ) ) {
-                       $redirect .= $fragmentDelimiter . 
$parsedUrl['fragment'];
-               }
-               wfProfileOut( __METHOD__ );
-               return $redirect;
-       }
-
-       /**
         * @param $out OutputPage
         * @param $redirect
         * @param $code
         * @return bool
         */
        public function beforePageRedirect( $out, &$redirect, &$code ) {
-               global $wgMobileDomain;
                wfProfileIn( __METHOD__ );
                if ( $out->getTitle()->isSpecial( 'Userlogin' ) ) {
                        $xDevice = isset( $_SERVER['HTTP_X_DEVICE'] ) ? 
$_SERVER['HTTP_X_DEVICE'] : '';
                        if ( $xDevice ) {
-                               $parsedUrl = wfParseUrl( $redirect );
-                               if ( stristr( $parsedUrl['host'], 
$wgMobileDomain ) === false ) {
-                                       $hostParts = explode( '.', 
$parsedUrl['host'] );
-                                       $parsedUrl['host'] = $hostParts[0] . 
$wgMobileDomain . $hostParts[1] . '.' . $hostParts[2];
-                               }
-                               if ( $parsedUrl['scheme'] == 'http' ) {
-                                       $parsedUrl['scheme'] = 'https';
-                               }
-
-                               $redirect = $this->parsePageRedirect( 
$parsedUrl );
+                               $forceHttps = true;
+                               $redirect = $this->getMobileUrl( $redirect, 
$forceHttps );
                        }
                } else if ( $out->getTitle()->isSpecial( 'Randompage' ) ) {
                        $xDevice = isset( $_SERVER['HTTP_X_DEVICE'] ) ? 
$_SERVER['HTTP_X_DEVICE'] : '';
                        if ( $xDevice ) {
-                               $parsedUrl = wfParseUrl( $redirect );
-                               if ( stristr( $parsedUrl['host'], 
$wgMobileDomain ) === false ) {
-                                       $redirect = $this->parsePageRedirect( 
$parsedUrl );
-                               }
+                               $redirect = $this->getMobileUrl( $redirect );
                        }
                }
                wfProfileOut( __METHOD__ );
@@ -1326,11 +1268,13 @@
         * @param $url string
         * @return string
         */
-       public function getMobileUrl( $url ) {
-               global $wgMobileUrlTemplate;            
+       public function getMobileUrl( $url, $forceHttps = false ) {
                $parsedUrl = wfParseUrl( $url );
                $this->updateMobileUrlHost( $parsedUrl );
                $this->updateMobileUrlPath( $parsedUrl );
+               if ( $forceHttps ) {
+                       $parsedUrl[ 'scheme' ] = 'https';
+               }
                return wfAssembleUrl( $parsedUrl );
        }
 


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

Reply via email to