See Release Notes
Long Term Support Release
Differences Between: [Versions 401 and 403]
1 <?php 2 3 // This file is part of Moodle - http://moodle.org/ 4 // 5 // Moodle is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // Moodle is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU General Public License for more details. 14 // 15 // You should have received a copy of the GNU General Public License 16 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 17 18 /** 19 * IP Lookup utility functions 20 * 21 * @package core 22 * @subpackage iplookup 23 * @copyright 2010 Petr Skoda {@link http://skodak.org} 24 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 25 */ 26 27 defined('MOODLE_INTERNAL') || die(); 28 29 /** 30 * Returns location information 31 * @param string $ip 32 * @return array 33 */ 34 function iplookup_find_location($ip) { 35 global $CFG; 36 37 $info = array('city'=>null, 'country'=>null, 'longitude'=>null, 'latitude'=>null, 'error'=>null, 'note'=>'', 'title'=>array()); 38 39 if (!empty($CFG->geoip2file) and file_exists($CFG->geoip2file)) { 40 $reader = new GeoIp2\Database\Reader($CFG->geoip2file); 41 $record = $reader->city($ip); 42 43 if (empty($record)) { 44 $info['error'] = get_string('iplookupfailed', 'error', $ip); 45 return $info; 46 } 47 48 $info['city'] = core_text::convert($record->city->name, 'iso-8859-1', 'utf-8'); 49 $info['title'][] = $info['city']; 50 51 $countrycode = $record->country->isoCode; 52 $countries = get_string_manager()->get_list_of_countries(true); 53 if (isset($countries[$countrycode])) { 54 // Prefer our localized country names. 55 $info['country'] = $countries[$countrycode]; 56 } else { 57 $info['country'] = $record->country->names['en']; 58 } 59 $info['title'][] = $info['country']; 60 61 $info['longitude'] = $record->location->longitude; 62 $info['latitude'] = $record->location->latitude; 63 $info['note'] = get_string('iplookupmaxmindnote', 'admin'); 64 65 return $info; 66 67 } else { 68 require_once($CFG->libdir.'/filelib.php'); 69 70 if (strpos($ip, ':') !== false) { 71 // IPv6 is not supported by geoplugin.net. 72 $info['error'] = get_string('invalidipformat', 'error'); 73 return $info; 74 } 75 76 $ipdata = download_file_content('http://www.geoplugin.net/json.gp?ip='.$ip); 77 if ($ipdata) { 78 $ipdata = preg_replace('/^geoPlugin\((.*)\)\s*$/s', '$1', $ipdata); 79 $ipdata = json_decode($ipdata, true); 80 } 81 if (!is_array($ipdata)) { 82 $info['error'] = get_string('cannotgeoplugin', 'error'); 83 return $info; 84 } 85 $info['latitude'] = (float)$ipdata['geoplugin_latitude']; 86 $info['longitude'] = (float)$ipdata['geoplugin_longitude']; 87 $info['city'] = s($ipdata['geoplugin_city']); 88 89 $countrycode = $ipdata['geoplugin_countryCode']; 90 $countries = get_string_manager()->get_list_of_countries(true); 91 if (isset($countries[$countrycode])) { 92 // prefer our localized country names 93 $info['country'] = $countries[$countrycode]; 94 } else { 95 $info['country'] = s($ipdata['geoplugin_countryName']); 96 } 97 98 $info['note'] = get_string('iplookupgeoplugin', 'admin'); 99 100 $info['title'][] = $info['city']; 101 $info['title'][] = $info['country']; 102 103 return $info; 104 } 105 106 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body