%PDF- %PDF-
Direktori : /home/lightco1/luminero.com.au/libraries/compojoom/geolocation/ |
Current File : /home/lightco1/luminero.com.au/libraries/compojoom/geolocation/geolocation.php |
<?php /** * @package Lib_Compojoom * @author DanielDimitrov <daniel@compojoom.com> * @date 2016-09-29 * * @copyright Copyright (C) 2008 - 2016 compojoom.com . All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE */ defined('_JEXEC') or die('Restricted access'); /** * FreeGeoIp location helper * * @since 6.0.1 */ class CompojoomGeolocation { /** * Get the location * * @return object ('lat', 'lng', 'text') * * @since 5.1.0 */ public static function getLocation() { $cookieLocation = json_decode(self::getCookieLocation()); // Use saved location if ($cookieLocation && $cookieLocation->lat != 0) { return $cookieLocation; } $geoLocation = (object) self::getGeolocation(); if ($geoLocation && $geoLocation->lat != 0) { self::setCookieLocation($geoLocation); return $geoLocation; } // Warning returning default return (object) array('lat' => '51.507351', 'lng' => '-0.127758', 'text' => 'London'); } /** * Get the location based on the cookie * * @return mixed * * @since 5.1.0 */ protected static function getCookieLocation() { $jcookie = JFactory::getApplication()->input->cookie; return base64_decode($jcookie->get('clocation', null, 'raw')); } /** * Set the cookie location * * @param array $location Location array with lat, lng, text * * @since 5.1.0 */ public static function setCookieLocation($location, $duration = null) { if (!$duration) { // Valid for 90 days $duration = time()+60*60*24*90; } $jCookie = JFactory::getApplication()->input->cookie; $jCookie->set('clocation', base64_encode(json_encode($location)), $duration); } /** * Get the location based on freegeoip * * @return bool|string * * @since 5.1.0 */ protected static function getGeolocation() { $ip = self::getUserIp(); $url = 'http://freegeoip.net/json/' . $ip; $options = new JRegistry; $transport = new JHttpTransportCurl($options); // Create a 'curl' transport. $http = new JHttp($options, $transport); $http->setOption('timeout', 5); try { $get = $http->get($url); } catch (Exception $e) { return false; } if ($get->code === 200) { $body = json_decode($get->body); $text = 'Unknown'; // Small to large areas if (!empty($body->city)) { $text = $body->city; } elseif (!empty($body->zip_code)) { $text = $body->zip_code; } elseif (!empty($body->region_name)) { $text = $body->region_name; } elseif (!empty($body->country_name)) { $text = $body->country_name; } return array('lat' => $body->latitude, 'lng' => $body->longitude, 'text' => $text); } return false; } /** * Makes a best quess what the user's IP is * * @return mixed * * @since 5.1.0 */ private static function getUserIp() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) { return $_SERVER['HTTP_CLIENT_IP']; } if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { return $_SERVER['HTTP_X_FORWARDED_FOR']; } return $_SERVER['REMOTE_ADDR']; } }