public function getGeoLocation($ip)
 {
     if (!ExtraWatchConfig::isIPAddress($ip)) {
         $ip = @gethostbyname($ip);
     }
     if (ExtraWatchConfig::isIPAddress($ip)) {
         //if gethostbyname did not fail after gethostbyname
         $result = array();
         try {
             $csv = $this->retrieveCSV($ip);
             if (@function_exists('str_getcsv')) {
                 $csvParsed = str_getcsv($csv, ";");
             } else {
                 $csvParsed = $this->str_getcsv_manual($csv, ";");
             }
             @($result[ExtraWatchVisit::COUNTRY_CODE] = $csvParsed[3]);
             @($result[ExtraWatchVisit::COUNTRY_NAME] = ucwords(strtolower($csvParsed[4])));
             //camel case
             @($result[ExtraWatchVisit::CITY] = ucwords(strtolower($csvParsed[6])));
             //camel case
             @($result[ExtraWatchVisit::LATITUDE] = $csvParsed[8]);
             @($result[ExtraWatchVisit::LONGITUDE] = $csvParsed[9]);
             return $result;
         } catch (Exception $e) {
             $this->errors[] = $e->getMessage();
             return $result;
         }
     }
     $this->errors[] = '"' . @$ip . '" is not a valid IP address or hostname.';
     return;
 }
 function isPermittedWithHeatmapToken($heatmapToken)
 {
     return ExtraWatchConfig::getHeatmapToken() === $heatmapToken;
 }