public function edit(HumanPopItInfoModel $humanPopItInfoModel)
 {
     global $DB;
     try {
         $DB->beginTransaction();
         $stat = $DB->prepare("UPDATE human_popit_information SET " . " name=:name,  mapit_id=:mapit_id , gender_female=:gender_female, gender_male=:gender_male, email=:email,  " . "  party=:party, birth_date=:birth_date,facebook=:facebook, twitter=:twitter, image_url=:image_url, image_proxy_url=:image_proxy_url  " . "WHERE id=:id");
         $stat->execute(array('id' => $humanPopItInfoModel->getId(), 'mapit_id' => $humanPopItInfoModel->getMapitId(), 'name' => $humanPopItInfoModel->getName(), 'gender_female' => $humanPopItInfoModel->getGenderFemale() ? 1 : 0, 'gender_male' => $humanPopItInfoModel->getGenderMale() ? 1 : 0, 'email' => $humanPopItInfoModel->getEmail(), 'party' => $humanPopItInfoModel->getParty(), 'birth_date' => $humanPopItInfoModel->getBirthDate(), 'facebook' => $humanPopItInfoModel->getFacebook(), 'twitter' => $humanPopItInfoModel->getTwitter(), 'image_url' => $humanPopItInfoModel->getImageUrl(), 'image_proxy_url' => $humanPopItInfoModel->getImageProxyUrl()));
         $DB->commit();
     } catch (Exception $e) {
         $DB->rollBack();
     }
 }
 /** @return Array Roady to be made into JSON */
 protected function run()
 {
     // This would be nice, but then we wouldn't delete candidates mistakenly marked as standing
     // $url = 'http://yournextmp.popit.mysociety.org/api/v0.1/search/persons?q=_exists_:standing_in.2015.post_id&page=';
     $url = 'https://yournextmp.popit.mysociety.org/api/v0.1/persons?page=';
     $page = 0;
     $morePages = true;
     $countryRepo = new \repositories\CountryRepository();
     $areaRepo = new \repositories\AreaRepository();
     $gb = $countryRepo->loadByTwoCharCode("GB");
     $siteRepo = new \repositories\SiteRepository();
     $site = $siteRepo->loadById($this->app['config']->singleSiteID);
     // TODO assumes single site!
     $areaMapItInfoRepo = new \com\meetyournextmp\repositories\AreaMapItInfoRepository();
     $humanPopItInfoRepo = new \com\meetyournextmp\repositories\HumanPopItInfoRepository();
     $humanRepo = new HumanRepository();
     $areaRepo = new \repositories\AreaRepository();
     while ($morePages) {
         ++$page;
         $this->logVerbose("Getting page " . $page);
         $ch = curl_init();
         curl_setopt($ch, CURLOPT_URL, $url . $page);
         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 array('result' => 'error', 'errorHTTPCode' => 200);
         }
         $dataObj = json_decode($data);
         foreach ($dataObj->result as $humanObj) {
             $this->logVerbose("Human " . $humanObj->name . "  POPITID " . $humanObj->id);
             /** @var $humanPopItInfo HumanPopItInfoModel */
             $humanPopItInfo = $humanPopItInfoRepo->getByPopItID($humanObj->id);
             $human = null;
             $standing = false;
             if (isset($humanObj->standing_in)) {
                 $standingIn = get_object_vars($humanObj->standing_in);
                 $standingIn2015 = null;
                 if (isset($standingIn['2015'])) {
                     $standingIn2015 = get_object_vars($standingIn['2015']);
                     $standing = true;
                 }
                 $partyMemberships = isset($humanObj->party_memberships) ? get_object_vars($humanObj->party_memberships) : array();
                 $partyMemberships2015 = null;
                 if (isset($partyMemberships['2015'])) {
                     $partyMemberships2015 = get_object_vars($partyMemberships['2015']);
                 }
             }
             if ($standing) {
                 $facebook = null;
                 $twitter = null;
                 $imageURL = null;
                 $imageProxyURL = null;
                 $imageHumanURL = null;
                 if (isset($humanObj->links)) {
                     foreach ($humanObj->links as $linkData) {
                         $linkDataArray = get_object_vars($linkData);
                         if ($linkDataArray['note'] == 'facebook page') {
                             $facebook = $linkDataArray['url'];
                         }
                     }
                 }
                 if (isset($humanObj->contact_details)) {
                     foreach ($humanObj->contact_details as $linkData) {
                         $linkDataArray = get_object_vars($linkData);
                         if ($linkDataArray['type'] == 'twitter') {
                             $twitter = $linkDataArray['value'];
                         }
                     }
                 }
                 if (isset($humanObj->images)) {
                     foreach ($humanObj->images as $imageData) {
                         $imageDataArray = get_object_vars($imageData);
                         $imageProxyURL = $imageDataArray['proxy_url'] . '/300/0';
                         $imageURL = $imageDataArray['url'];
                         $imageHumanURL = $imageProxyURL ? $imageProxyURL : $imageURL;
                     }
                 }
                 $this->logVerbose(" - Standing in 2015!");
                 $description = "Standing in " . $standingIn2015['name'] . " for " . $partyMemberships2015['name'] . ".";
                 $humanUrl = "https://yournextmp.com/person/" . $humanObj->id;
                 $bits = explode('/', $standingIn2015['mapit_url']);
                 $mapItID = $bits[4];
                 if ($humanPopItInfo) {
                     $this->logVerbose(" - Found existing record");
                     $human = $humanRepo->loadById($humanPopItInfo->getHumanId());
                     if ($human->getIsDeleted()) {
                         $this->logVerbose(" - Undeleting existing Human record");
                         $humanRepo->undelete($human);
                     }
                     if ($human->getTitle() != $humanObj->name || $description != $human->getDescription() || $human->getEmail() != $humanObj->email || $human->getUrl() != $humanUrl || $human->getTwitter() != $twitter || $human->getParty() != $partyMemberships2015['name'] || $human->getImageUrl() != $imageHumanURL) {
                         $this->logVerbose(" - Updating existing Human record");
                         $human->setTitle($humanObj->name);
                         $human->setDescription($description);
                         $human->setEmail($humanObj->email);
                         $human->setTwitter($twitter);
                         $human->setParty($partyMemberships2015['name']);
                         $human->setImageUrl($imageHumanURL);
                         $human->setUrl($humanUrl);
                         $humanRepo->edit($human);
                     }
                     $humanPopItInfo->setMapitId($mapItID);
                     $humanPopItInfo->setName($humanObj->name);
                     if (isset($humanObj->gender)) {
                         $humanPopItInfo->setGenderFromString($humanObj->gender);
                     }
                     if (isset($humanObj->email)) {
                         $humanPopItInfo->setEmail($humanObj->email);
                     }
                     $humanPopItInfo->setParty($partyMemberships2015['name']);
                     // TODO if we reenable this we need to make sure it works for "YYYY" format to.
                     //if (isset($humanObj->birth_date)) {
                     //	$humanPopItInfo->setBirthDate($humanObj->birth_date);
                     //}
                     $humanPopItInfo->setFacebook($facebook);
                     $humanPopItInfo->setTwitter($twitter);
                     $humanPopItInfo->setImageUrl($imageURL);
                     $humanPopItInfo->setImageProxyUrl($imageProxyURL);
                     $humanPopItInfoRepo->edit($humanPopItInfo);
                 } else {
                     $this->logVerbose(" - Adding new record");
                     $human = new \com\meetyournextmp\models\HumanModel();
                     $human->setTitle($humanObj->name);
                     $human->setDescription($description);
                     $human->setEmail($humanObj->email);
                     $human->setTwitter($twitter);
                     $human->setImageUrl($imageHumanURL);
                     $human->setUrl($humanUrl);
                     $human->setParty($partyMemberships2015['name']);
                     $humanRepo->create($human, $site);
                     $humanPopItInfo = new \com\meetyournextmp\models\HumanPopItInfoModel();
                     $humanPopItInfo->setHumanId($human->getId());
                     $humanPopItInfo->setPopitId($humanObj->id);
                     $humanPopItInfo->setMapitId($mapItID);
                     $humanPopItInfo->setName($humanObj->name);
                     if (isset($humanObj->gender)) {
                         $humanPopItInfo->setGenderFromString($humanObj->gender);
                     }
                     if (isset($humanObj->email)) {
                         $humanPopItInfo->setEmail($humanObj->email);
                     }
                     $humanPopItInfo->setParty($partyMemberships2015['name']);
                     // TODO if we reenable this we need to make sure it works for "YYYY" format to.
                     //if (isset($humanObj->birth_date)) {
                     //	$humanPopItInfo->setBirthDate($humanObj->birth_date);
                     //}
                     $humanPopItInfo->setFacebook($facebook);
                     $humanPopItInfo->setTwitter($twitter);
                     $humanPopItInfo->setImageUrl($imageURL);
                     $humanPopItInfo->setImageProxyUrl($imageProxyURL);
                     $humanPopItInfoRepo->create($humanPopItInfo);
                 }
                 $areaMapItInfo = $areaMapItInfoRepo->getByMapItID($humanPopItInfo->getMapitId());
                 if ($areaMapItInfo) {
                     $area = $areaRepo->loadById($areaMapItInfo->getAreaId());
                     if ($area) {
                         $humanRepo->addHumanToArea($human, $area);
                         $humanRepo->removeHumanFromAllButOneArea($human, $area);
                     }
                 }
             } else {
                 $this->logVerbose(" - NOT Standing in 2015!");
                 if ($humanPopItInfo) {
                     $human = $humanRepo->loadById($humanPopItInfo->getHumanId());
                     if ($human && !$human->getIsDeleted()) {
                         $this->logVerbose(" - Deleteing ");
                         $humanRepo->delete($human);
                     }
                 }
             }
             // Next Task - have any humans been merged into this one?
             foreach ($humanObj->versions as $humanVersion) {
                 $idOfOldRecord = $humanVersion->data->id;
                 if ($idOfOldRecord != $humanObj->id) {
                     $this->logVerbose(" - found a record that was merged into this one: " . $idOfOldRecord);
                     $humanPopItInfoOfOldRecord = $humanPopItInfoRepo->getByPopItID($idOfOldRecord);
                     if ($humanPopItInfoOfOldRecord) {
                         $this->logVerbose(" - found HumanPopIt for old record ");
                         $humanOfOldRecord = $humanRepo->loadById($humanPopItInfoOfOldRecord->getHumanId());
                         if ($humanOfOldRecord) {
                             $this->logVerbose(" - found Human for old record");
                             if (!$humanOfOldRecord->getIsDeleted()) {
                                 if ($human) {
                                     $this->logVerbose(" - marking duplicate human of old record ");
                                     $humanRepo->markDuplicate($humanOfOldRecord, $human);
                                 } else {
                                     $this->logVerbose(" - deleting human of old record");
                                     $humanRepo->delete($humanOfOldRecord);
                                 }
                             } else {
                                 $this->logVerbose(" - human for old record already deleted");
                             }
                         }
                     }
                 }
             }
         }
         $morePages = $dataObj->has_more;
     }
     return array('result' => 'ok');
 }