public function getGovtrackData($member) { $modified = array(); if (!$member->bioguide_id) { return null; } $gp = Doctrine::getTable('GovtrackPerson')->findOneByBioguideId($member->bioguide_id); if (!$gp) { return null; } //get birthday from govtrack if ($startDate = $gp->start_date) { $member->start_date = $startDate; $modified[] = 'start_date'; } //get gender from govtrack switch ($gp->gender) { case 'F': $member->gender_id = GenderTable::FEMALE; $modified[] = 'gender_id'; break; case 'M': $member->gender_id = GenderTable::MALE; $modified[] = 'gender_id'; break; } //get website from govtrack if ($url = $gp->url) { $member->website = $url; $modified[] = 'website'; } //get govtrack_id from govtrack $member->govtrack_id = $gp->govtrack_id; $modified[] = 'govtrack_id'; $this->printDebug("Set govtrack_id: " . $member->govtrack_id); //get opensecrets_id from govtrack if ($os_id = $gp->os_id) { $member->crp_id = $os_id; $modified[] = 'crp_id'; $this->printDebug("Set crp_id: " . $member->crp_id); } //get state and district if ($gp->State->name) { $state = $gp->State; if ($lsState = Doctrine::getTable('AddressState')->findOneByName($state->name)) { $this->printDebug('Added representative state: ' . $state->name); if ($federalDistrict = $gp->district) { $district = LsQuery::getByModelAndFieldsQuery('PoliticalDistrict', array('state_id' => $lsState->id, 'federal_district' => $federalDistrict))->fetchOne(); if (!$district) { $district = new PoliticalDistrict(); $district->State = $lsState; $district->federal_district = $federalDistrict; $district->save(); } $member->ElectedDistrict[] = $district; $this->printDebug('Added representative district: ' . $federalDistrict); } } } //create govtrack reference $ref = new Reference(); $ref->source = $this->_govtrackUrlBase . $member->govtrack_id; $ref->name = 'GovTrack.us'; $ref->addFields($modified); $this->_references['govtrack'] = $ref; }
public function execute() { if (!$this->safeToRun('uk-mp-candidates')) { $this->printDebug('Script already running'); die; } // Get (or create) the UK local Network $uk = Doctrine::getTable('LsList')->findOneByName('United Kingdom'); if (!$uk) { $uk = new LsList(); $uk->name = 'United Kingdom'; $uk->is_network = 1; $uk->description = 'People and organizations with significant influence on the policies of the United Kingdom'; $uk->display_name = 'uk'; $uk->save(); } // Get the MP list $raw = $this->getMPs(); // Add new MPs to the list foreach ($raw as $mp) { $this->printDebug(sprintf('Processing %s', $mp['name'])); // Split name $entity = PersonTable::parseFlatName($mp['name']); $entity->blurb = 'Prospective Parliamentary Candidate for ' . $mp['constituency']; $q = TagTable::getByTripleQuery('yournextmp', 'url', $mp['url']); $r = $q->count(); if ($r) { $this->printDebug('Already processed, skipping.'); continue; } // Get political party $q = EntityTable::getByExtensionQuery('PoliticalParty')->addWhere('e.name = ?', $mp['party']); if (!($partyEntity = $q->fetchOne())) { $partyEntity = new Entity(); $partyEntity->addExtension('Org'); $partyEntity->addExtension('PoliticalParty'); $partyEntity->name = $mp['party']; $partyEntity->blurb = 'UK Political Party'; $partyEntity->save(null, true, array($uk->id)); $this->printDebug("Created new political party: " . $mp['party']); } // Save entity to UK Network $entity->party_id = $partyEntity->id; $entity->save(null, true, array($uk->id)); // Add party relationship $r = new Relationship(); $r->entity1_id = $entity->id; $r->entity2_id = $partyEntity->id; $r->setCategory('Membership'); $r->description1 = 'Prospective parliamentary candidate'; $r->is_current = true; // $r->start_date = // Don't know where we can get this, and "now" seems kind of wrong $r->save(); // Add YourNextMP triple $entity->addTagByTriple('yournextmp', 'url', $mp['url']); // Add references $ref = new Reference(); $ref->addFields(array('name_first', 'name_last', 'name_middle')); // Don't need this $ref->source = $mp['url']; $ref->name = 'YourNextMP.com - ' . $entity['name']; $ref->object_model = 'Entity'; $ref->object_id = $entity->getId(); $ref->save(); unset($ref); $ref = new Reference(); $ref->addFields(array('name')); $ref->source = $mp['party_url']; $ref->name = 'YourNextMP.com - ' . $partyEntity['name']; $ref->object_model = 'Entity'; $ref->object_id = $partyEntity->getId(); $ref->save(); unset($ref); $ref = new Reference(); $ref->addFields(array('name')); $ref->source = $mp['url']; $ref->name = 'YourNextMP.com - ' . $entity['name']; $ref->object_model = 'Relationship'; $ref->object_id = $r->getId(); $ref->save(); unset($ref); $r->free(true); unset($r); // Add image? if ($mp['image']) { if ($fileName = ImageTable::createFiles($mp['image'])) { //insert image record $image = new Image(); $image->filename = $fileName; $image->title = $entity['name']; $image->caption = 'From YourNextMP under CC-BY-SA license.'; $image->is_featured = true; $image->is_free = true; $image->url = $mp['image']; $this->printDebug("Imported image: " . $image->filename); } $image->Entity = $entity; $image->save(); if ($mp['image']) { //save image source $image->addReference($mp['image']); $this->printDebug("Saved image reference"); } unset($image); } // Add party image? if ($mp['party_image']) { if ($fileName = ImageTable::createFiles($mp['party_image'])) { //insert image record $partyImage = new Image(); $partyImage->filename = $fileName; $partyImage->title = $partyEntity['name']; $partyImage->caption = 'From YourNextMP under CC-BY-SA license.'; $partyImage->is_featured = true; $partyImage->is_free = true; $partyImage->url = $mp['party_image']; $this->printDebug("Imported image: " . $partyImage->filename); } $partyImage->Entity = $partyEntity; $partyImage->save(); if ($mp['party_image']) { //save image source $partyImage->addReference($mp['party_image']); $this->printDebug("Saved image reference"); } unset($partyImage); } unset($entity); unset($partyEntity); } }
public function addReference($source, $excerpt = null, $fields = null, $name = null, $detail = null, $date = null, $check_existing = true) { $object = $this->getInvoker(); if (!$object->exists()) { throw new Exception("Can't add Reference to new object"); } //make sure provided fields all exist if ($fields) { $entityFields = array_diff($object->getAllFields(), array('id')); if ($diff = array_diff((array) $fields, $entityFields)) { throw new Exception('Unknown fields: ' . implode(', ', $diff)); } } //look for existing ref $ref = null; if ($check_existing == true) { $ref = $this->getReference($source, $detail); } if (!$ref) { $ref = new Reference(); $ref->object_model = get_class($object); $ref->object_id = $object->id; $ref->source = $source; $ref->source_detail = $detail; $ref->publication_date = $date; } if (!$ref->name) { $ref->name = $name; } //add fields $ref->addFields($fields); //save ref and excerpt, if provided $db = Doctrine_Manager::connection(); try { $db->beginTransaction(); if ($excerpt) { $ref->addExcerpt($excerpt); } $ref->save(); $db->commit(); } catch (Exception $e) { $db->rollback(); throw $e; } return $ref; }