0 and $user_longitude <> 0); $filename_log = "gcm_detected_sendtime.txt"; mysql_connect($ini['db']['host'], $ini['db']['user'], $ini['db']['pass']); mysql_select_db($ini['db']['db']); if ($calmax <> $calmin and $user_latitude <> 0) { //insert into notification table as first thing so counter_ref is 1 at least $sql = mysql_query("replace into notifications (enabled,user_id,latitude,longitude) values ($enabled,$user_id,$user_latitude,$user_longitude)"); if ($event == 1 and $enabled == 1 and $delta_notification < 8) { $sql = mysql_query("delete from candidate where data < date_sub(now(), interval 7 second)"); //cerca il conteggio di riferimento nella tabella di cache $sql = mysql_query("SELECT count as counter_ref FROM cache_refcount WHERE abs(latitude-$user_latitude)<0.01 and abs(longitude-$user_longitude)<0.01 order by counter_ref desc"); if (mysql_num_rows($sql)) { $counter_ref0 = mysql_result($sql, 0, "counter_ref"); } else{ //se il conteggio non รจ trovato viene calcolato e messo nella tabella di cache $sql = mysql_query("SELECT count(*) as counter_ref FROM notifications WHERE abs(latitude-$user_latitude)<0.2 and abs(longitude-$user_longitude)<0.2 and enabled=1"); $counter_ref0 = mysql_result($sql, 0, "counter_ref"); $sql = mysql_query("INSERT INTO cache_refcount (latitude,longitude,count) values ($user_latitude,$user_longitude,$counter_ref0)"); } $radius=0.2; $counter_ref = round(sqrt($counter_ref0)*2.0); $can_insert=1; if ($user_latitude>-33.625 && $user_latitude<-33.275 && $user_longitude>-70.85 && $user_longitude<-70.475){ $counter_ref = round(sqrt($counter_ref0)*3.5); } if ($user_latitude>19.15 && $user_latitude<19.75 && $user_longitude>-99.35 && $user_longitude<-98.82){ $counter_ref = round(sqrt($counter_ref0)*3.5); } if ($user_latitude>-33.1 && $user_latitude<-32.9 && $user_longitude>-71.7 && $user_longitude<-71.3){ $minutes=intval(date('i')); $seconds = intval(date('s')); if (($minutes==0 && $seconds<40) || ($minutes==59 && $seconds>50) || ($minutes==30 && $seconds<40) || ($minutes==29 && $seconds>50)){ $counter_ref = round(sqrt($counter_ref0)*3.5); } } if ($can_insert==1){ $sql = mysql_query("insert into candidate(latitude,longitude,active,max_acc) values ($user_latitude,$user_longitude,$counter_ref0,$max_acc)"); } $sql = mysql_query("select count(*) as count,avg(latitude) as mean_latitude,avg(longitude) as mean_longitude from candidate where abs(latitude-$user_latitude)<$radius and abs(longitude-$user_longitude)<$radius and abs(latitude-$user_latitude)>0.002 and abs(longitude-$user_longitude)>0.002 and data >= date_sub(now(), interval 7 second)"); $counter = mysql_result($sql, 0, "count"); $mean_latitude = mysql_result($sql, 0, "mean_latitude"); $mean_longitude = mysql_result($sql, 0, "mean_longitude"); if ($counter > $counter_ref) { $sql = mysql_query("SELECT count(*) as thr1 FROM notifications WHERE abs(latitude-$mean_latitude)<0.4 and abs(longitude-$mean_longitude)<0.4 and enabled=1"); $thr1 = mysql_result($sql, 0, "thr1"); $thr1 = round(sqrt($thr1)*2.0); $sql = mysql_query("SELECT count(*) as thr2 FROM notifications WHERE abs(latitude-$mean_latitude)<0.8 and abs(longitude-$mean_longitude)<0.8 and enabled=1"); $thr2 = mysql_result($sql, 0, "thr2"); $thr2 = round(sqrt($thr2)*2.0); $sql = mysql_query("select count(*) as signals1 from candidate where abs(latitude-$mean_latitude)<0.4 and abs(longitude-$mean_longitude)<0.4 and abs(latitude-$mean_latitude)>0.002 and abs(longitude-$mean_longitude)>0.002"); $signals1 = mysql_result($sql, 0, "signals1"); $sql = mysql_query("select count(*) as signals2 from candidate where abs(latitude-$mean_latitude)<0.8 and abs(longitude-$mean_longitude)<0.8 and abs(latitude-$mean_latitude)>0.002 and abs(longitude-$mean_longitude)>0.002"); $signals2 = mysql_result($sql, 0, "signals2"); $intensity=0; if ($thr1/$counter_ref>1.2){ if ($signals1>$thr1){ $intensity=2; } else{ $intensity=1; } } else{ if ($thr2/$counter_ref>1.2){ if ($signals2>$thr2){ $intensity=2; } } } $randcode = mt_rand(1000000, 9999999); $state = 2; $c = $counter + 1; //try to estimate a better epicenter using the weighted average algorithm //$sql = mysql_query("select sum(latitude*(1/active))/sum(1/active) as better_latitude,sum(longitude*(1/active))/sum(1/active) as better_longitude from candidate where abs(latitude-$mean_latitude)<2 and abs(longitude-$mean_longitude)<2 and active>0"); //$better_latitude = mysql_result($sql, 0, "better_latitude"); //$better_longitude = mysql_result($sql, 0, "better_longitude"); $better_latitude=$mean_latitude; $better_longitude=$mean_longitude; $sql = mysql_query("SELECT ID from earthquakes WHERE abs(latitude-$better_latitude)<4.5 AND abs(longitude-$better_longitude)<4.5 AND date > date_sub(now(), interval 2 minute) LIMIT 1"); if (mysql_num_rows($sql)) { //do nothing } else { $sql = mysql_query("insert into earthquakes (latitude,longitude,latitude_old,longitude_old,signals,thr,signals1,thr1,signals2,thr2,state,code,intensity) values ($better_latitude,$better_longitude,$mean_latitude,$mean_longitude,$c,$counter_ref,$signals1,$thr1,$signals2,$thr2,$state,$randcode,$intensity)"); //note that this is based on the mean_latitude and mean_longitude and NOT on the better estimates $sql = mysql_query("insert into earthquake_details (code,latitude,longitude,data,active,max_acc) select $randcode,latitude,longitude,data,active,max_acc from candidate where abs(latitude-$mean_latitude)<$radius and abs(longitude-$mean_longitude)<$radius"); //generate the new file for download $filename = "past_quakes.txt"; $sql = mysql_query('SET CHARACTER SET utf8'); $sql = mysql_query("SELECT format(latitude,3) as latitude,format(longitude,3) as longitude,users,state,code,TIMESTAMPDIFF(MINUTE,date,NOW()) AS difference FROM earthquakes where latitude<>0 AND longitude<>0 AND ban<5 AND falsealarm=0"); if (mysql_num_rows($sql)) { while ($e = mysql_fetch_assoc($sql)) $output_file[] = $e; $json_file = json_encode($output_file); file_put_contents($filename, $json_file); } $datetime = date('Y-m-d H:i:s'); $dataArray = array( 'latitude' => number_format((float) $better_latitude, 2, '.', ''), 'longitude' => number_format((float) $better_longitude, 2, '.', ''), 'detection_latitude' => number_format((float) $mean_latitude, 2, '.', ''), 'detection_longitude' => number_format((float) $mean_longitude, 2, '.', ''), 'wave_speed' => 8, 'counter' => $c, 'datetime' => $datetime, 'intensity' => $intensity, 'type' => 'eqn' ); //extract users for notifications $row_limit=250000; $distance_ref=-1; $keep_going=1; while ($keep_going){ $sql2 = mysql_query("SELECT reg_id,ABS(last_latitude-$better_latitude)+ABS(last_longitude-$better_longitude) as distance FROM gcm where notification_eqn=1 and reg_id<>'' and ABS(last_latitude-$better_latitude)+ABS(last_longitude-$better_longitude)>$distance_ref ORDER BY distance ASC limit $row_limit"); $num_rows2 = mysql_num_rows($sql2); if ($num_rows2>0){ while ($data = mysql_fetch_assoc($sql2)) { $regidArray[] = $data['reg_id']; $distanceArray[] = $data['distance']; } $distance_ref=end($distanceArray); $block_size = 999; $iter = ceil($num_rows2 / $block_size); $folder_eqn = uniqid(); mkdir($folder_eqn); $filename_data = $folder_eqn . "/dataarray.json"; file_put_contents($filename_data, json_encode($dataArray)); for ($i = 0; $i < $iter; $i++) { $index_start = $i * $block_size; $index_end = ($i + 1) * $block_size - 1; if ($index_end > $num_rows2 - 1) { $index_end = $num_rows2 - 1; } $regidArrayGCM = array_slice($regidArray, $index_start, $index_end - $index_start + 1); $filename = $folder_eqn . "/gcmid" . $i . ".json"; file_put_contents($filename, json_encode($regidArrayGCM)); exec("php /var/www/earthquakenetwork.it/mysql/distquake_gcm_call.php $filename_data $filename" . "> /dev/null 2>/dev/null &"); sleep(0.1); } //sleep(1); //$files = glob($folder_eqn.'/*',GLOB_MARK); //foreach ($files as $file) { // unlink($file); //} //rmdir($folder_eqn.'/'); unset($distanceArray); unset($regidArray); } else{ $keep_going=0; } } require_once('/var/www/earthquakenetwork.it/mysql/codebird.php'); if ($better_latitude<32 and $better_longitude>-115 and $better_longitude<-35){ \Codebird\Codebird::setConsumerKey("Y71jBy9zGPkqXo8Fa8BRHCfU9", "PEaChITvoSn9r32HwpHc4XY8kQQML8ksuBZZRbsdww6xY7EyaS"); $cb = \Codebird\Codebird::getInstance(); $cb->setToken("811156846937538560-I5n28wjcQ8eVf497q5qe36EF4I9Kwjb", "pvHLu9dz4BaVNOlQz3rzFkh0XvpJq3fZZ6PYZGv06u1Gy"); } else{ \Codebird\Codebird::setConsumerKey("ohMqhP9qQKMXSyNhdGltmnvgA", "ljMnxTuEIKDINSedkusbgRj6lIruB8Oi5EP6WOaZ6uW9DJg3gu"); $cb = \Codebird\Codebird::getInstance(); $cb->setToken("1707171247-n3v2z1JNPhJdkSJY2ES9PVFKWav9TgUPBPS22hI", "rgTMihngYdqHc69eFYjloZoSnzTOficDyG5FTm1zNqGmq"); } $url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" . $better_latitude . "," . $better_longitude . "&sensor=true&language=es"; $data = @file_get_contents($url); $jsondata = json_decode($data, true); if (is_array($jsondata) && $jsondata['status'] == "OK") { $c = count($jsondata['results']['0']['address_components']); $region = ""; $country = ""; $stored = 0; for ($i = 0; $i < $c; $i++) { if (strcmp($jsondata['results']['0']['address_components'][$i]['types'][0], "country") == 0) { $country = $jsondata['results']['0']['address_components'][$i]['long_name']; } if (strcmp($jsondata['results']['0']['address_components'][$i]['types'][0], "administrative_area_level_2") == 0) { if ($stored == 0) { $region = $jsondata['results']['0']['address_components'][$i]['long_name']; } } if (strcmp($jsondata['results']['0']['address_components'][$i]['types'][0], "administrative_area_level_3") == 0) { $region = $jsondata['results']['0']['address_components'][$i]['long_name']; $stored = 1; } } $region = str_replace(' ', '', $region); $country = str_replace(' ', '', $country); if ($better_latitude<32 and $better_longitude>-115 and $better_longitude<-35) { $text = "#sismo detectado en tiempo real en #" . $region . " #" . $country . " por @SismoDetector. Descarga la app https://goo.gl/v73ASq"; } else { $text = "#terremoto rilevato in tempo reale a #" . $region . " #" . $country . ". Scarica la app per ricevere allerte https://goo.gl/y4wBKB"; } $params = array( 'status' => $text ); $reply = $cb->statuses_update($params); } } } if ($counter > $counter_ref) { $sql = mysql_query("SELECT count(*) as thr1 FROM notifications WHERE abs(latitude-$mean_latitude)<0.4 and abs(longitude-$mean_longitude)<0.4 and enabled=1"); $thr1 = mysql_result($sql, 0, "thr1"); $thr1 = round(sqrt($thr1)*2.0); $sql = mysql_query("SELECT count(*) as thr2 FROM notifications WHERE abs(latitude-$mean_latitude)<0.8 and abs(longitude-$mean_longitude)<0.8 and enabled=1"); $thr2 = mysql_result($sql, 0, "thr2"); $thr2 = round(sqrt($thr2)*2.0); $sql = mysql_query("select count(*) as signals1 from candidate where abs(latitude-$mean_latitude)<0.4 and abs(longitude-$mean_longitude)<0.4 and abs(latitude-$mean_latitude)>0.002 and abs(longitude-$mean_longitude)>0.002"); $signals1 = mysql_result($sql, 0, "signals1"); $sql = mysql_query("select count(*) as signals2 from candidate where abs(latitude-$mean_latitude)<0.8 and abs(longitude-$mean_longitude)<0.8 and abs(latitude-$mean_latitude)>0.002 and abs(longitude-$mean_longitude)>0.002"); $signals2 = mysql_result($sql, 0, "signals2"); $sql = mysql_query("insert into earthquakes_test (latitude,longitude,signals,thr,signals1,thr1,signals2,thr2) values ($mean_latitude,$mean_longitude,$counter,$counter_ref,$signals1,$thr1,$signals2,$thr2)"); } } $filename = date('Ymd'); $host = gethostname(); $host = substr($host,0,4); $filename=$filename.'_'.$host; $filename = "/var/log/eqn/log_eqn_" . $filename . ".txt"; $delta_notification = round($delta_notification * 100) / 100; $chunck = (int) $event . ',' . $enabled . ',' . $_REQUEST['u_id'] . ',' . $_REQUEST['lat'] . ',' . $_REQUEST['lon'] . ',' . $_REQUEST['acc'] . ',' . strval($delta_notification) . ',' . strval($arrival_time) . "\r\n"; file_put_contents($filename, $chunck, FILE_APPEND); $sql = mysql_query("select count(*) as c from gcm where user_id=$user_id limit 1"); $c = mysql_result($sql, 0, "c"); if ($c>0){ if ($upd==1){ $sql = mysql_query("update gcm set last_latitude=$user_latitude,last_longitude=$user_longitude where user_id=$user_id limit 1"); } print("ok"); } else{ print("reg"); } if ($mon>0){ $sql = mysql_query("insert into monitoring (user_id,monitoring_time,date,last_update) values ($user_id,$mon,date_sub(now(),interval $mon minute),now()) on duplicate key update monitoring_time=monitoring_time+$mon,last_update=now()"); } } else{ print("ok"); } mysql_close(); ?>