public function getAreaForPostCode(PostcodeParser $postcodeParser) { global $CONFIG; if ($postcodeParser->isValid()) { $memcachedConnection = null; $areaRepo = new AreaRepository(); if ($CONFIG->memcachedServer) { $memcachedConnection = new \Memcached(); $memcachedConnection->addServer($CONFIG->memcachedServer, $CONFIG->memcachedPort); $url = $memcachedConnection->get($postcodeParser->getCanonical()); if ($url) { $urlBits = explode("/", $url); $urlBitsBits = explode("-", $urlBits[2]); $area = $areaRepo->loadBySlug($this->app['currentSite'], $urlBitsBits[0]); if ($area) { return $area; } } } $url = "http://mapit.mysociety.org/postcode/" . urlencode($postcodeParser->getCanonical()); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERAGENT, 'Meet Your Next MP'); $data = curl_exec($ch); $response = curl_getinfo($ch); curl_close($ch); if ($response['http_code'] != 200) { return; } $dataObj = json_decode($data); $mapItId = $dataObj->shortcuts->WMC; if (!$mapItId) { return; } $repo = new AreaMapItInfoRepository(); $areaMapIdInfo = $repo->getByMapItID($mapItId); if (!$areaMapIdInfo) { return; } $area = $areaRepo->loadById($areaMapIdInfo->getAreaId()); if (!$area) { return; } if ($memcachedConnection) { $memcachedConnection->set($postcodeParser->getCanonical(), '/area/' . $area->getSlugForUrl(), 60 * 60 * 24 * 30); } return $area; } }
protected function build($slug, Request $request, Application $app) { $this->parameters = array(); if (strpos($slug, "-") > 0) { $slugBits = explode("-", $slug, 2); $slug = $slugBits[0]; } $ampir = new AreaMapItInfoRepository(); $this->parameters['areaMapItInfo'] = $ampir->getByMapItID($slug); if (!$this->parameters['areaMapItInfo']) { return false; } $ar = new AreaRepository(); $this->parameters['area'] = $ar->loadById($this->parameters['areaMapItInfo']->getAreaId()); if (!$this->parameters['area']) { return false; } return true; }
protected function findAreaForLinkToSeat(Request $request, Application $app) { $repo = new AreaMapItInfoRepository(); $areaRepo = new AreaRepository(); if ($request->query->has("mapitid")) { $areaInfo = $repo->getByMapItID($request->query->get("mapitid")); if ($areaInfo) { $area = $areaRepo->loadById($areaInfo->getAreaId()); if ($area) { return $area; } } } if ($request->query->has("gssid")) { $areaInfo = $repo->getByCodeGSS($request->query->get("gssid")); if ($areaInfo) { $area = $areaRepo->loadById($areaInfo->getAreaId()); if ($area) { return $area; } } } if ($request->query->has("title")) { $areaInfo = $repo->getByName($request->query->get("title")); if ($areaInfo) { $area = $areaRepo->loadById($areaInfo->getAreaId()); if ($area) { return $area; } } } }