protected function build($slug, Request $request, Application $app)
 {
     $this->parameters = array('currentUserWatchesGroup' => false);
     if (strpos($slug, "-")) {
         $slug = array_shift(explode("-", $slug, 2));
     }
     $tr = new HumanRepository();
     $this->parameters['human'] = $tr->loadBySlug($app['currentSite'], $slug);
     if (!$this->parameters['human']) {
         return false;
     }
     return true;
 }
 protected function findHumanForLinkToCandidate(Request $request, Application $app)
 {
     $repo = new HumanPopItInfoRepository();
     $humanRepo = new HumanRepository();
     if ($request->query->has("ynmpid")) {
         $humanInfo = $repo->getByPopItID($request->query->get("ynmpid"));
         if ($humanInfo) {
             $human = $humanRepo->loadById($humanInfo->getHumanId());
             if ($human) {
                 return $human;
             }
         }
     }
 }
 function editHumans($slug, Request $request, Application $app)
 {
     if (!$this->build($slug, $request, $app)) {
         $app->abort(404, "Event does not exist.");
     }
     $humanRepo = new HumanRepository();
     if ('POST' == $request->getMethod() && $request->request->get('CSFRToken') == $app['websession']->getCSFRToken()) {
         if ($request->request->get('addHuman')) {
             $data = $request->request->get('addHuman');
             if (!is_array($data)) {
                 $data = array($data);
             }
             foreach ($data as $slug) {
                 $human = $humanRepo->loadBySlug($app['currentSite'], $slug);
                 if ($human) {
                     $humanRepo->addHumanToEvent($human, $this->parameters['event'], $app['currentUser']);
                 }
             }
         } elseif ($request->request->get('removeHuman')) {
             $human = $humanRepo->loadBySlug($app['currentSite'], $request->request->get('removeHuman'));
             if ($human) {
                 $humanRepo->removeHumanFromEvent($human, $this->parameters['event'], $app['currentUser']);
             }
         }
         if ($request->request->get("returnTo") == 'event') {
             return $app->redirect("/event/" . $this->parameters['event']->getSlugforURL());
         }
     }
     $trb = new HumanRepositoryBuilder();
     $trb->setSite($app['currentSite']);
     $trb->setIncludeDeleted(false);
     $trb->setHumansForEvent($this->parameters['event']);
     $this->parameters['humans'] = $trb->fetchAll();
     $this->parameters['filterLimitToArea'] = $request->query->get('limitToArea') != 'no';
     $this->parameters['filterFreeTextSearch'] = $request->query->get('freeTextSearch');
     $trb = new HumanRepositoryBuilder();
     $trb->setSite($app['currentSite']);
     $trb->setIncludeDeleted(false);
     $trb->setHumansNotForEvent($this->parameters['event']);
     if ($this->parameters['area'] && $this->parameters['filterLimitToArea']) {
         $trb->setArea($this->parameters['area']);
     }
     if ($this->parameters['filterFreeTextSearch']) {
         $trb->setFreeTextsearch($this->parameters['filterFreeTextSearch']);
     }
     $trb->setLimit(200);
     $this->parameters['humansToAdd'] = $trb->fetchAll();
     return $app['twig']->render('site/event/edit.humans.html.twig', $this->parameters);
 }
 /** @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');
 }