/** * get JSON with nets - use MODE and get only sites which are visible in that MODES * * @param Nette\Http\Request $request * @return string JSON formated array */ public function getNetsProcessClick(Nette\Http\Request $request) { $detail = false; if ($request->getQuery("net")) { $id = intval($request->getQuery("net")); $detail = $this->getWifiById($id); $click_lat = $detail["latitude"]; $click_lon = $detail["longitude"]; } else { $click_lat = doubleval($request->getQuery("click_lat")); $click_lon = doubleval($request->getQuery("click_lon")); } $mapCoords = new Coords($request->getQuery("map_lat1"), $request->getQuery("map_lat2"), $request->getQuery("map_lon1"), $request->getQuery("map_lon2")); // vytvoreni okoli bodu kliknuti $lat1 = doubleval($click_lat) - self::CLICK_POINT_CIRCLE_RADIUS * $mapCoords->getDeltaLat(); $lat2 = doubleval($click_lat) + self::CLICK_POINT_CIRCLE_RADIUS * $mapCoords->getDeltaLat(); $lon1 = doubleval($click_lon) - self::CLICK_POINT_CIRCLE_RADIUS * $mapCoords->getDeltaLon(); $lon2 = doubleval($click_lon) + self::CLICK_POINT_CIRCLE_RADIUS * $mapCoords->getDeltaLon(); $requestCoords = new Coords($lat1, $lat2, $lon1, $lon2); switch ($request->getQuery("mode")) { case WifiPresenter::MODE_HIGHLIGHT: $sql = $this->getNetsRangeQuery($requestCoords); break; case WifiPresenter::MODE_SEARCH: $params = array(); if ($request->getQuery("ssidmac")) { if (preg_match("^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})^", urldecode($request->getQuery("ssidmac")))) { $params['mac'] = urldecode($request->getQuery("ssidmac")); } else { $params["ssid"] = $request->getQuery("ssidmac"); } } if ($request->getQuery("channel") && $request->getQuery("channel") != "") { $params['channel'] = intval($request->getQuery("channel")); } if ($request->getQuery("security") && $request->getQuery("security") != "") { $params['sec'] = intval($request->getQuery("security")); } $sql = $this->getSearchQuery($requestCoords, $params); break; default: $sql = $this->getNetsRangeQuery($requestCoords); } $sql->select("id,mac,latitude,longitude,ssid,channel,altitude,SQRT(POW(latitude-?,2)+POW(longitude-?,2)) AS distance ", doubleval($click_lat), doubleval($click_lon)); $sql->order("distance"); if (!$detail) { $f = $sql->fetch(); if ($f) { $detail = Wifi::createWifiFromDBRow($f); } } $wf = $sql->fetchPairs("id"); $nbs = $wf; unset($nbs[$detail->getId()]); $json = array(); $json["count"] = count($wf); $json["detail"] = $detail; foreach (array_slice($nbs, 0, 5, true) as $nb) { $json["others"][] = $nb->toArray(); } return $json; }
/** * show detail of one AP * @throws Nette\Application\AbortException */ public function renderProcessClick() { $httpr = $this->getHttpRequest(); if ($httpr->getQuery("zoom") != null && $httpr->getQuery("zoom") < self::MIN_INFO_WINDOW_ZOOM) { echo json_encode(array("success" => false), JSON_UNESCAPED_UNICODE); $this->terminate(); } $click_lat = doubleval($httpr->getQuery("click_lat")); $click_lon = doubleval($httpr->getQuery("click_lon")); $detail = array(); // click on concrete net in info window table if ($httpr->getQuery("net")) { $id = intval($httpr->getQuery("net")); $wifi = $this->wifiManager->getWifiById($id); $click_lat = $wifi->getLatitude(); $click_lon = $wifi->getLongitude(); $detail["id"] = $wifi->getId(); $detail["mac"] = $wifi->getMac(); $detail["latitude"] = $wifi->getLatitude(); $detail["longitude"] = $wifi->getLongitude(); $detail["ssid"] = $wifi->getSsid(); $detail["channel"] = $wifi->getChannel(); $detail["altitude"] = $wifi->getAltitude(); $detail["calculated"] = $wifi->getCalculated(); $detail["dateAdded"] = $wifi->getDateAdded(); $detail["accuracy"] = $wifi->getAccuracy(); $detail["sec"]["label"] = $this->wifisecService->getById($wifi->getSec())->getLabel(); $source = $this->sourceManager->getById($wifi->getSource()); $detail["source"]["id"] = $source["id"]; $detail["source"]["name"] = $source["name"]; } $mapCoords = new Coords($httpr->getQuery("map_lat1"), $httpr->getQuery("map_lat2"), $httpr->getQuery("map_lon1"), $httpr->getQuery("map_lon2")); $lat1 = doubleval($click_lat) - self::CLICK_POINT_CIRCLE_RADIUS * $mapCoords->getDeltaLat(); $lat2 = doubleval($click_lat) + self::CLICK_POINT_CIRCLE_RADIUS * $mapCoords->getDeltaLat(); $lon1 = doubleval($click_lon) - self::CLICK_POINT_CIRCLE_RADIUS * $mapCoords->getDeltaLon(); $lon2 = doubleval($click_lon) + self::CLICK_POINT_CIRCLE_RADIUS * $mapCoords->getDeltaLon(); $requestCoords = new Coords($lat1, $lat2, $lon1, $lon2); $params = array("coords" => $requestCoords); switch ($httpr->getQuery("mode")) { case self::MODE_SEARCH: if ($httpr->getQuery("ssidmac") != null) { if (MyUtils::isMacAddress(urldecode($httpr->getQuery("ssidmac")))) { $params['mac'] = urldecode($httpr->getQuery("ssidmac")); } else { $params["ssid"] = $httpr->getQuery("ssidmac"); } } if ($httpr->getQuery("channel") != null && $httpr->getQuery("channel") != "") { $params['channel'] = intval($httpr->getQuery("channel")); } if ($httpr->getQuery("security") != null && $httpr->getQuery("security") != "") { $params['sec'] = intval($httpr->getQuery("security")); } if ($httpr->getQuery("source") != null && $httpr->getQuery("source") != "") { $params["id_source"] = intval($httpr->getQuery("source")); } break; case self::MODE_ONE: $ssidmac = $this->getHttpRequest()->getQuery('ssid'); if (MyUtils::isMacAddress($ssidmac)) { $params['mac'] = urldecode($ssidmac); } else { $params['ssid'] = $ssidmac; } break; case self::MODE_CALCULATED: $a = $this->wifiManager->getWifiById($httpr->getQuery("a")); $mac = $a->getMac(); $params["mac"] = $mac; break; default: break; } $select = array("id", "mac", "latitude", "longitude", "ssid", "channel", "altitude", "calculated", "date_added", "accuracy", "sec", "id_source", "SQRT(POW(latitude-" . doubleval($click_lat) . ",2)+POW(longitude-" . doubleval($click_lon) . ",2)) AS distance"); $nets = $this->oWifiManager->getNetsByParams($params, $select, null, "distance"); if (!$httpr->getQuery("net") && isset($nets[0])) { $wifi = $nets[0]; $detail["id"] = $wifi["id"]; $detail["mac"] = $wifi["mac"]; $detail["latitude"] = $wifi["latitude"]; $detail["longitude"] = $wifi["longitude"]; $detail["ssid"] = $wifi["ssid"]; $detail["channel"] = $wifi["channel"]; $detail["altitude"] = $wifi["altitude"]; $detail["calculated"] = $wifi["calculated"]; $detail["dateAdded"] = $wifi["date_added"]; $detail["accuracy"] = $wifi["accuracy"]; $detail["sec"]["label"] = $this->wifisecService->getById($wifi["sec"])->getLabel(); $source = $this->sourceManager->getById($wifi["id_source"]); $detail["source"]["id"] = $source["id"]; $detail["source"]["name"] = $source["name"]; } $count = count($nets) - 1; $others = array(); unset($nets[0]); foreach (array_slice($nets, 0, 5, true) as $w) { $others[] = array('id' => $w["id"], 'mac' => $w['mac'], 'ssid' => $w['ssid']); } $alreadyInGoogleQueue = $this->downloadRequest->isInGoogleQueue($detail['id']); $json = array(); $this->template->setFile(__DIR__ . "/../templates/Wifi/processClick.latte"); $this->template->count = $count; $this->template->others = $others; $this->template->detail = $detail; $this->template->alreadyInGoogleQueue = $alreadyInGoogleQueue; $temp = (string) $this->template; $json['iw'] = $temp; if ($detail == null) { $json['success'] = false; } else { $json['success'] = true; $json['lat'] = $detail['latitude']; $json['lng'] = $detail['longitude']; } echo json_encode($json, JSON_UNESCAPED_UNICODE); $this->terminate(); }