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 ''.$lang['srv_geoip_country'].' | ';
echo ''.$lang['srv_geoip_city'].' | ';
echo ''.$lang['srv_geoip_freq'].' | ';
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 ''.($country == '' ? ''.$lang['srv_geoip_unknown'].'' : mb_convert_encoding($country, "UTF-8", "ISO-8859-1")).' | ';
$cities = mb_convert_encoding($this->data['all'][$country]['cities'], "UTF-8", "ISO-8859-1");
echo ''.(isset($country_freq['showMap']) ? ' | ' : '');
echo ''.$country_freq['freq'].' | ';
echo ''.$country_percent.' % | ';
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 ''.($city == '' ? ''.$lang['srv_geoip_unknown'].'' : mb_convert_encoding($city, "UTF-8", "ISO-8859-1")).' | ';
echo ''.$city_data['cnt'].' | ';
echo ''.$city_percent.' % | ';
echo '
';
}
}
}
}
// Zadnja vrstica
echo '';
echo ''.$lang['hour_total'].' | ';
echo ' | ';
echo ''.$this->data['freq'].' | ';
echo '100% | ';
echo '
';
echo '
';
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 '
';
}
}