Index: trunk/extensions/ZeroRatedMobileAccess/ZeroRatedMobileAccess.body.php |
— | — | @@ -199,27 +199,17 @@ |
200 | 200 | */ |
201 | 201 | private function lookupCarrier( $carrier ) { |
202 | 202 | wfProfileIn( __METHOD__ ); |
203 | | - $carrierLink = ''; |
204 | | - $carrierLinkData = ''; |
205 | | - switch ( $carrier ) { |
206 | | - case 'Verizon': |
207 | | - $carrierLinkData = array( 'name' => 'Verizon Wireless', |
208 | | - 'url' => 'http://www.verizonwireless.com/b2c/index.html', |
209 | | - 'partnerId' => '1006' ); |
210 | | - break; |
211 | | - case 'Orange': |
212 | | - $carrierLinkData = array( 'name' => 'Orange Tunisia', |
213 | | - 'url' => 'http://www.orange.tn/', |
214 | | - 'partnerId' => '1007' ); |
215 | | - break; |
| 203 | + $carrierLinkData = array(); |
| 204 | + $carrier = strtoupper( $carrier ); |
| 205 | + |
| 206 | + $allCarrierLinkData = $this->createCarrierOptionsFromWikiText(); |
| 207 | + |
| 208 | + if ( is_array( $allCarrierLinkData ) ) { |
| 209 | + if ( isset( $allCarrierLinkData[$carrier] ) ) { |
| 210 | + $carrierLinkData = $allCarrierLinkData[$carrier]; |
| 211 | + } |
216 | 212 | } |
217 | 213 | |
218 | | - if ( is_array( $carrierLinkData ) ) { |
219 | | - $carrierLink = Html::rawElement( 'a', |
220 | | - array('href' => $carrierLinkData['url'] ), |
221 | | - $carrierLinkData['name'] ); |
222 | | - } |
223 | | - $carrierLinkData['link'] = $carrierLink; |
224 | 214 | wfProfileOut( __METHOD__ ); |
225 | 215 | return $carrierLinkData; |
226 | 216 | } |
— | — | @@ -360,7 +350,52 @@ |
361 | 351 | wfProfileOut( __METHOD__ ); |
362 | 352 | return true; |
363 | 353 | } |
| 354 | + |
| 355 | + private static function createCarrierOptionsFromWikiText() { |
| 356 | + global $wgMemc; |
| 357 | + wfProfileIn( __METHOD__ ); |
| 358 | + $carrierOptionsWikiPage = wfMsg( 'zero-rated-mobile-access-carrier-options-wiki-page' ); |
| 359 | + $title = Title::newFromText( $carrierOptionsWikiPage, NS_MEDIAWIKI ); |
| 360 | + // Use the revision directly to prevent other hooks to be called |
| 361 | + $rev = Revision::newFromTitle( $title ); |
| 362 | + $sha1OfRev = $rev->getSha1(); |
| 363 | + $key = wfMemcKey( 'zero-rated-mobile-access-carrier-options', $sha1OfRev ); |
| 364 | + $carrierOptions = $wgMemc->get( $key ); |
364 | 365 | |
| 366 | + if ( !$carrierOptions ) { |
| 367 | + $carrierOptions = array(); |
| 368 | + $lines = array(); |
| 369 | + if ( $rev ) { |
| 370 | + $lines = explode( "\n", $rev->getRawText() ); |
| 371 | + } |
| 372 | + if ( $lines && count( $lines ) > 0 ) { |
| 373 | + $sizeOfLines = sizeof( $lines ); |
| 374 | + for ( $i = 0; $i < $sizeOfLines; $i++ ) { |
| 375 | + $line = $lines[$i]; |
| 376 | + if ( strpos( $line, '*' ) === 0 && strpos( $line, '**' ) !== 0 && $i >= 0 ) { |
| 377 | + $carrierName = strtoupper( str_replace( '* ', '', $line ) ); |
| 378 | + $carrierRaw = str_replace( '* ', '', $line ); |
| 379 | + $carrierOptions[$carrierName] = ''; |
| 380 | + $carrierOptions[$carrierName]['name'] = $carrierRaw; |
| 381 | + } elseif ( strpos( $line, '**' ) === 0 && $i > 0 ) { |
| 382 | + if ( $i % 3 === 1 ) { |
| 383 | + $carrierOptions[$carrierName]['url'] = trim( str_replace( '** ', '', $line ) ); |
| 384 | + $carrierLink = Html::rawElement( 'a', |
| 385 | + array('href' => $carrierOptions[$carrierName]['url'] ), |
| 386 | + $carrierOptions[$carrierName]['name'] ); |
| 387 | + $carrierOptions[$carrierName]['link'] = $carrierLink; |
| 388 | + } elseif ( $i % 3 === 2 ) { |
| 389 | + $carrierOptions[$carrierName]['partnerId'] = intval( trim( str_replace( '** ', '', $line ) ) ); |
| 390 | + } |
| 391 | + } |
| 392 | + } |
| 393 | + } |
| 394 | + $wgMemc->set( $key, $carrierOptions, self::getMaxAge() ); |
| 395 | + } |
| 396 | + wfProfileOut( __METHOD__ ); |
| 397 | + return $carrierOptions; |
| 398 | + } |
| 399 | + |
365 | 400 | /** |
366 | 401 | * Returns the language options array parsed from a valid Wiki page |
367 | 402 | * |
— | — | @@ -376,7 +411,7 @@ |
377 | 412 | $sha1OfRev = $rev->getSha1(); |
378 | 413 | $key = wfMemcKey( 'zero-rated-mobile-access-language-options', $sha1OfRev ); |
379 | 414 | $languageOptions = $wgMemc->get( $key ); |
380 | | - |
| 415 | + |
381 | 416 | if ( !$languageOptions ) { |
382 | 417 | $languageOptions = array(); |
383 | 418 | $lines = array(); |
Index: trunk/extensions/ZeroRatedMobileAccess/ZeroRatedMobileAccess.i18n.php |
— | — | @@ -16,6 +16,7 @@ |
17 | 17 | 'zero-rated-mobile-access-desc' => 'Provides features for mobile providers that provide free access', |
18 | 18 | 'zero-rated-mobile-access-search' => 'Search', |
19 | 19 | 'zero-rated-mobile-access-language-options-wiki-page' => 'Language_options', |
| 20 | + 'zero-rated-mobile-access-carrier-options-wiki-page' => 'Carrier_options', |
20 | 21 | 'zero-rated-mobile-access-language-selection' => 'All languages', |
21 | 22 | 'zero-rated-mobile-access-home-page-selection' => '$1 home page', |
22 | 23 | 'zero-rated-mobile-access-home-page-selection-text' => 'Or go to the home page in the following language:', |
— | — | @@ -35,6 +36,7 @@ |
36 | 37 | 'zero-rated-mobile-access-desc' => '{{desc}}', |
37 | 38 | 'zero-rated-mobile-access-search' => 'Text for search action on the search button', |
38 | 39 | 'zero-rated-mobile-access-language-options-wiki-page' => 'The name of the wiki page to store the country language data', |
| 40 | + 'zero-rated-mobile-access-carrier-options-wiki-page' => 'The name of the wiki page to store the carrier data', |
39 | 41 | 'zero-rated-mobile-access-language-selection' => 'Text to show the user when they select a language option', |
40 | 42 | 'zero-rated-mobile-access-home-page-selection' => 'name of language followed by text to show user in local link to Wikipedia', |
41 | 43 | 'zero-rated-mobile-access-home-page-selection-text' => 'Text to show user prior to selection of language option', |