From 817f33d30f74b3fa50bf036845512b1b642cc0f3 Mon Sep 17 00:00:00 2001 From: Tomasz Finc Date: Fri, 6 Nov 2009 14:13:31 +0000 Subject: [PATCH] Adding working proof of concept for quick geo ip redirection --- extensions/GeoLite/GeoLite.i18n.php | 17 +++++++++++ extensions/GeoLite/GeoLite.php | 34 +++++++++++++++++++++ extensions/GeoLite/GeoLite_body.php | 46 +++++++++++++++++++++++++++++ 3 files changed, 97 insertions(+) create mode 100644 extensions/GeoLite/GeoLite.i18n.php create mode 100644 extensions/GeoLite/GeoLite.php create mode 100644 extensions/GeoLite/GeoLite_body.php diff --git a/extensions/GeoLite/GeoLite.i18n.php b/extensions/GeoLite/GeoLite.i18n.php new file mode 100644 index 0000000000..635892a12c --- /dev/null +++ b/extensions/GeoLite/GeoLite.i18n.php @@ -0,0 +1,17 @@ + 'Lightweight GeoIp Redirection', + 'geolite' => 'GeoLite', +); diff --git a/extensions/GeoLite/GeoLite.php b/extensions/GeoLite/GeoLite.php new file mode 100644 index 0000000000..a36649a29f --- /dev/null +++ b/extensions/GeoLite/GeoLite.php @@ -0,0 +1,34 @@ + 'en', + 'DE' => '', + 'PL' => '' + ); # Which Chapters actually have landing pages + +$wgExtensionCredits['specialpage'][] = array( + 'path' => __FILE__, + 'name' => 'GeoLite', + 'url' => 'http://www.mediawiki.org/wiki/Extension:GeoLite', + 'author' => array( 'Tomasz Finc' ), + 'descriptionmsg' => 'geolite-desc', +); + +$dir = dirname( __FILE__ ) . '/'; + +$wgAutoloadClasses['SpecialGeoLite'] = $dir . 'GeoLite_body.php'; +$wgExtensionMessagesFiles['GeoLite'] = $dir . 'GeoLite.i18n.php'; +$wgSpecialPages['GeoLite'] = 'SpecialGeoLite'; +$wgSpecialPageGroups['GeoLite'] = 'contribution'; + +?> diff --git a/extensions/GeoLite/GeoLite_body.php b/extensions/GeoLite/GeoLite_body.php new file mode 100644 index 0000000000..d28ff39177 --- /dev/null +++ b/extensions/GeoLite/GeoLite_body.php @@ -0,0 +1,46 @@ +getVal( 'lang' ) ) ? $wgRequest->getVal( 'lang' ) : 'en' ; + $utm_source = $wgRequest->getVal( 'utm_source' ); + $utm_medium = $wgRequest->getVal( 'utm_medium' ); + $utm_campaign = $wgRequest->getVal( 'utm_camapaign' ); + + $tracking = '?' . "utm_source=$utm_source" . "&utm_medium=$utm_medium" . "&utm_campaign=$utm_campaign"; + + if ( $wgRequest->getVal( 'ip') ) { + $ip = $wgRequest->getVal( 'ip' ); + } else { + $ip = $_SERVER[ 'REMOTE_ADDR' ]; + } + + if ( IP::isValid( $ip ) ) { + $country = geoip_country_code_by_name( $ip ); + + if ( is_string ( $country ) && array_key_exists( $country, $wgKnownLandingPages ) ) { + $wgOut->redirect( $wgLandingPageBase . "/" . $wgKnownLandingPages[ $country ] . $tracking ); + } + } + $wgOut->redirect( $wgLandingPageBase . "/" . $lang . $tracking ); + } + +} -- 2.20.1