0){ $this->anketa = $anketa; } // Check if we have data for countries $sql = sisplet_query("SELECT COUNT(*) AS cnt FROM countries_locations", 'obj'); if($sql->cnt > 0){ $this->countryDB = true; } } public function displayData(){ global $lang; // Zakesiramo podatke o lokacijah $this->calculateLocations(); //var_dump($this->data); // Opozorilo o nenatancnosti echo '

'.$lang['srv_geoip_warning'].'

'; echo '
'; echo '
'; // Izpis tabele frekvenc echo ''; // Prva vrstica echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; // Vrstice s podatki if(isset($this->data['all'])){ foreach($this->data['all'] as $country => $country_freq){ if($country !== 'all'){ // Frekvenca po drzavi $country_percent = ($this->data['freq'] > 0) ? round($country_freq['freq'] / $this->data['freq'], 3) * 100 : 0; echo ''; echo ''; $cities = mb_convert_encoding($this->data['all'][$country]['cities'], "UTF-8", "ISO-8859-1"); echo '' : ''); echo ''; echo ''; echo ''; // Se frekvence po mestih foreach($this->data['all'][$country]['cities'] as $city => $city_data){ $city_percent = ($this->data['freq'] > 0) ? round($city_data['cnt'] / $this->data['freq'], 3) * 100 : 0; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; } } } } // Zadnja vrstica echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo '
'.$lang['srv_geoip_country'].''.$lang['srv_geoip_city'].''.$lang['srv_geoip_freq'].'%
'.($country == '' ? ''.$lang['srv_geoip_unknown'].'' : mb_convert_encoding($country, "UTF-8", "ISO-8859-1")).''.(isset($country_freq['showMap']) ? ''.$country_freq['freq'].''.$country_percent.' %
'.($city == '' ? ''.$lang['srv_geoip_unknown'].'' : mb_convert_encoding($city, "UTF-8", "ISO-8859-1")).''.$city_data['cnt'].''.$city_percent.' %
'.$lang['hour_total'].''.$this->data['freq'].'100%
'; echo '
'; // Google maps on right of table if(count($this->countriesLocationsData)>0){ echo '
'; if(count($this->countriesLocationsData) > 1) $this->displayNavigationMaps(); echo '
'; echo '
'; $cities = mb_convert_encoding($this->data['all']['all']['cities'], "UTF-8", "ISO-8859-1"); echo ''; } echo '
'; } // Loop cez response in zackesiramo ip-je in lokacije private function calculateLocations(){ global $site_path; global $lang; // Inicializiramo reader s knjiznico ip lokacij $reader = new Reader($site_path.'admin/survey/modules/mod_geoIP/db/GeoLite2-City.mmdb'); //$reader = new Reader($site_path.'admin/survey/modules/mod_geoIP/db/GeoLite2-Country.mmdb'); $sql = sisplet_query("SELECT ip, preview, testdata, last_status, lurker FROM srv_user WHERE ank_id='".$this->anketa."' AND testdata='0' AND preview='0' AND deleted='0' "); while($row = mysqli_fetch_array($sql)){ // Ce locimo glede na status //$index = $row['last_status'].'_'.$row['lurker']; $index = 'all'; // Poskusimo ustvariti objekt z lokacijo za IP $unknown_location = false; try { $location_object = $reader->city($row['ip']); } catch (Exception $e) { //echo 'Error: ', $e->getMessage(); $unknown_location = true; } // Ce ni ip-ja v bazi gre za neznano lokacijo if($unknown_location){ $location_data['country_name'] = $lang['srv_unknown']; $location_data['country_code'] = ''; $location_data['city'] = $lang['srv_unknown']; $location_data['longitude'] = ''; $location_data['latitude'] = ''; } // Drugace preberemo iz knjiznice podatke o lokaciji else{ $location_data['country_name'] = $location_object->country->name; $location_data['country_code'] = $location_object->country->isoCode; $location_data['city'] = $location_object->city->name; $location_data['longitude'] = $location_object->location->longitude; $location_data['latitude'] = $location_object->location->latitude; } // Frekvence po drzavah if(isset($this->data[$index][$location_data['country_name']]['freq'])){ $this->data[$index][$location_data['country_name']]['freq']++; if($location_data['country_name']!='') $this->countriesLocationsData[$location_data['country_name']]['cnt']++; } else{ $this->data[$index][$location_data['country_name']]['freq'] = 1; //store coordinates for country if($this->countryDB && $location_data['country_name'] != '' && $location_data['country_name'] != $lang['srv_unknown']){ $sqlc = sisplet_query("SELECT latitude, longitude FROM countries_locations WHERE country_code='".$location_data['country_code']."'", 'obj'); $this->countriesLocationsData[$location_data['country_name']]['cnt'] = 1; $this->countriesLocationsData[$location_data['country_name']]['lat'] = $sqlc->latitude; $this->countriesLocationsData[$location_data['country_name']]['lng'] = $sqlc->longitude; } } // Frekvence po mestih if(isset($this->data[$index][$location_data['country_name']]['cities'][$location_data['city']])){ $this->data[$index][$location_data['country_name']]['cities'][$location_data['city']]['cnt']++; $this->data[$index]['all']['cities'][$location_data['city']]['cnt']++; } else{ $this->data[$index][$location_data['country_name']]['cities'][$location_data['city']]['cnt'] = 1; $this->data[$index]['all']['cities'][$location_data['city']]['cnt'] = 1; if($location_data['city'] != '' && $location_data['city'] != $lang['srv_unknown']){ $this->data[$index][$location_data['country_name']]['cities'][$location_data['city']]['lat'] = floatval($location_data['latitude']); $this->data[$index][$location_data['country_name']]['cities'][$location_data['city']]['lng'] = floatval($location_data['longitude']); $this->data[$index]['all']['cities'][$location_data['city']]['lat'] = floatval($location_data['latitude']); $this->data[$index]['all']['cities'][$location_data['city']]['lng'] = floatval($location_data['longitude']); } } // Mesto ni znano, imamo pa koordinate if($location_data['city'] == '' && isset($location_data['longitude']) && $location_data['longitude'] != '' && isset($location_data['latitude']) && $location_data['latitude'] != ''){ if(isset($this->data[$index][$location_data['country_name']]['cities'][$location_data['city']][''.floatval($location_data['latitude']).floatval($location_data['longitude'])])){ $this->data[$index][$location_data['country_name']]['cities'][$location_data['city']][''.floatval($location_data['latitude']).floatval($location_data['longitude'])]['cnt']++; $this->data[$index]['all']['cities'][$location_data['city']][''.floatval($location_data['latitude']).floatval($location_data['longitude'])]['cnt']++; } else{ $this->data[$index][$location_data['country_name']]['cities'][$location_data['city']][''.floatval($location_data['latitude']).floatval($location_data['longitude'])]['cnt'] = 1; $this->data[$index][$location_data['country_name']]['cities'][$location_data['city']][''.floatval($location_data['latitude']).floatval($location_data['longitude'])]['lat'] = floatval($location_data['latitude']); $this->data[$index][$location_data['country_name']]['cities'][$location_data['city']][''.floatval($location_data['latitude']).floatval($location_data['longitude'])]['lng'] = floatval($location_data['longitude']); $this->data[$index]['all']['cities'][$location_data['city']][''.floatval($location_data['latitude']).floatval($location_data['longitude'])]['cnt'] = 1; $this->data[$index]['all']['cities'][$location_data['city']][''.floatval($location_data['latitude']).floatval($location_data['longitude'])]['lat'] = floatval($location_data['latitude']); $this->data[$index]['all']['cities'][$location_data['city']][''.floatval($location_data['latitude']).floatval($location_data['longitude'])]['lng'] = floatval($location_data['longitude']); } } if(isset($location_data['latitude']) && $location_data['latitude'] != ''){ $this->data[$index][$location_data['country_name']]['showMap'] = 1; $this->data[$index]['all']['showMap'] = 1; } // Frekvenca vseh if(isset($this->data['freq'])) $this->data['freq']++; else $this->data['freq'] = 1; } } function displayNavigationMaps() { global $lang; $countries = mb_convert_encoding($this->countriesLocationsData, "UTF-8", "ISO-8859-1"); $cities = mb_convert_encoding($this->data['all']['all']['cities'], "UTF-8", "ISO-8859-1"); echo '
'; echo ''; echo '
'; echo '
'; echo '
'; } }