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;
             }
         }
     }
 }