Adding working proof of concept for quick geo ip redirection
[lhc/web/wiklou.git] / extensions / GeoLite / GeoLite_body.php
1 <?php
2 /**
3 * Special Page for GeoLite
4 *
5 * @file
6 * @ingroup Extensions
7 */
8
9 // Special page GeoLite
10
11 class SpecialGeoLite extends SpecialPage {
12
13 /* Functions */
14
15 public function __construct() {
16 // Initialize special page
17 parent::__construct( 'GeoLite' );
18 }
19
20 public function execute( $sub ) {
21 global $wgOut, $wgRequest, $wgLandingPageBase, $wgKnownLandingPages;
22
23 $lang = ( $wgRequest->getVal( 'lang' ) ) ? $wgRequest->getVal( 'lang' ) : 'en' ;
24 $utm_source = $wgRequest->getVal( 'utm_source' );
25 $utm_medium = $wgRequest->getVal( 'utm_medium' );
26 $utm_campaign = $wgRequest->getVal( 'utm_camapaign' );
27
28 $tracking = '?' . "utm_source=$utm_source" . "&utm_medium=$utm_medium" . "&utm_campaign=$utm_campaign";
29
30 if ( $wgRequest->getVal( 'ip') ) {
31 $ip = $wgRequest->getVal( 'ip' );
32 } else {
33 $ip = $_SERVER[ 'REMOTE_ADDR' ];
34 }
35
36 if ( IP::isValid( $ip ) ) {
37 $country = geoip_country_code_by_name( $ip );
38
39 if ( is_string ( $country ) && array_key_exists( $country, $wgKnownLandingPages ) ) {
40 $wgOut->redirect( $wgLandingPageBase . "/" . $wgKnownLandingPages[ $country ] . $tracking );
41 }
42 }
43 $wgOut->redirect( $wgLandingPageBase . "/" . $lang . $tracking );
44 }
45
46 }