function api_getMPsInfo_id($ids) { $fields = preg_split('#\\s*,\\s*#', get_http_var('fields'), -1, PREG_SPLIT_NO_EMPTY); $ids = preg_split('#\\s*,\\s*#', $ids, -1, PREG_SPLIT_NO_EMPTY); $safe_ids = array(0); foreach ($ids as $id) { if (ctype_digit($id)) { $safe_ids[] = $id; } } $ids = join(',', $safe_ids); $db = new ParlDB(); $last_mod = 0; $q = $db->query("select person_id, data_key, data_value, lastupdate from personinfo\n\t\twhere person_id in (" . $ids . ")"); if ($q->rows()) { $output = array(); for ($i = 0; $i < $q->rows(); $i++) { $data_key = $q->field($i, 'data_key'); if (count($fields) && !in_array($data_key, $fields)) { continue; } $pid = $q->field($i, 'person_id'); $output[$pid][$data_key] = $q->field($i, 'data_value'); $time = strtotime($q->field($i, 'lastupdate')); if ($time > $last_mod) { $last_mod = $time; } } $q = $db->query("select memberinfo.*, person_id from memberinfo, member\n\t\t\twhere memberinfo.member_id=member.member_id and person_id in (" . $ids . ")\n\t\t\torder by person_id,member_id"); if ($q->rows()) { $oldmid = 0; $count = -1; for ($i = 0; $i < $q->rows(); $i++) { $data_key = $q->field($i, 'data_key'); if (count($fields) && !in_array($data_key, $fields)) { continue; } $mid = $q->field($i, 'member_id'); $pid = $q->field($i, 'person_id'); if (!isset($output[$pid]['by_member_id'])) { $output[$pid]['by_member_id'] = array(); } if ($oldmid != $mid) { $count++; $oldmid = $mid; $output[$pid]['by_member_id'][$count]['member_id'] = $mid; } $output[$pid]['by_member_id'][$count][$data_key] = $q->field($i, 'data_value'); $time = strtotime($q->field($i, 'lastupdate')); if ($time > $last_mod) { $last_mod = $time; } } } ksort($output); api_output($output, $last_mod); } else { api_error('Unknown person ID'); } }
function api_getDivisions_postcode($pc) { $pc = preg_replace('#[^0-9]#i', '', $pc); $output = array(); if (is_postcode($pc)) { $constituency = postcode_to_constituency($pc); if ($constituency == 'CONNECTION_TIMED_OUT') { api_error('Connection timed out'); } elseif ($constituency) { if (is_array($constituency)) { $constituencies = $constituency; } else { $constituencies = array($constituency); } foreach ($constituencies as $c) { $output[] = array('name' => html_entity_decode($c)); } } else { api_error('Unknown postcode'); } } else { api_error('Invalid postcode'); } api_output($output); }
function api_getJournoArticles_invoke($params) { $offset = (int) $params['offset']; $limit = (int) $params['limit']; if (!$limit) { $limit = 100; } if (!$offset) { $offset = 0; } $j = $params['journo']; if (!$j) { api_error("required parameter 'journo' is missing"); return; } $jfield = is_numeric($j) ? 'id' : 'ref'; $sql = <<<EOT SELECT a.id, a.title, a.srcorg, a.permalink, a.description, a.pubdate FROM ((article a INNER JOIN journo_attr attr ON a.id=attr.article_id) INNER JOIN journo j ON j.id=attr.journo_id) WHERE a.status='a' AND j.status='a' AND j.{$jfield}=? ORDER BY a.pubdate DESC LIMIT ? OFFSET ? EOT; $articles = db_getAll($sql, $j, $limit, $offset); foreach ($articles as &$a) { $d = new DateTime($a['pubdate']); $a['pubdate'] = $d->format('c'); } $output = array('results' => $articles); api_output($output); }
function display_author_lastname_prefix($lastname, $firstname, $callback = '') { global $config; global $couch; $first_letter = mb_substr($firstname, 0, 1); $startkey = array($lastname, $first_letter); $endkey = array($lastname, $first_letter . mb_convert_encoding('￰', 'UTF-8', 'HTML-ENTITIES')); $url = '_design/author/_view/lastname_firstname?startkey=' . json_encode($startkey) . '&endkey=' . json_encode($endkey) . '&group_level=2'; if ($config['stale']) { $url .= '&stale=ok'; } $resp = $couch->send("GET", "/" . $config['couchdb_options']['database'] . "/" . $url); $response_obj = json_decode($resp); $obj = new stdclass(); $obj->status = 404; $obj->url = $url; if (isset($response_obj->error)) { $obj->error = $response_obj->error; } else { if (count($response_obj->rows) == 0) { $obj->error = 'Not found'; } else { $obj->status = 200; $obj->results = array(); foreach ($response_obj->rows as $row) { $author = new stdclass(); $author->firstname = $row->key[1]; $author->lastname = $row->key[0]; $author->name = $author->firstname . ' ' . $author->lastname; $obj->results[] = $author; } } } api_output($obj, $callback); }
function api_converturl_url_output($q) { $gid = $q->field(0, 'gid'); $url = get_listurl($q); $output = array('gid' => $gid, 'url' => 'http://www.openaustralia.org' . $url); api_output($output); }
function _api_getMembers_output($sql, $params) { global $parties; $db = new ParlDB(); $q = $db->query($sql, $params); $output = array(); $last_mod = 0; for ($i = 0; $i < $q->rows(); $i++) { $pid = $q->field($i, 'person_id'); $row = array('member_id' => $q->field($i, 'member_id'), 'person_id' => $pid, 'name' => html_entity_decode(member_full_name($q->field($i, 'house'), $q->field($i, 'title'), $q->field($i, 'given_name'), $q->field($i, 'family_name'), $q->field($i, 'lordofname'))), 'party' => isset($parties[$q->field($i, 'party')]) ? $parties[$q->field($i, 'party')] : $q->field($i, 'party')); if ($q->field($i, 'house') != 2) { $row['constituency'] = $q->field($i, 'constituency'); } $output[$pid] = $row; $time = strtotime($q->field($i, 'lastupdate')); if ($time > $last_mod) { $last_mod = $time; } } $pids = array_keys($output); if (count($pids)) { $q = $db->query('SELECT person, dept, position, from_date, to_date FROM moffice WHERE to_date="9999-12-31" AND person IN (' . join(',', $pids) . ')'); for ($i = 0; $i < $q->rows(); $i++) { $row = $q->row($i); $pid = $row['person']; unset($row['person']); $output[$pid]['office'][] = $row; } } $output = array_values($output); api_output($output, $last_mod); }
function _api_getHansard_search($array) { $search = isset($array['s']) ? trim($array['s']) : ''; $pid = trim($array['pid']); $type = isset($array['type']) ? $array['type'] : ''; $search = filter_user_input($search, 'strict'); if ($pid) { $search .= ($search ? ' ' : '') . 'speaker:' . $pid; } if ($type) { $search .= " section:" . $type; } $o = get_http_var('order'); if ($o == 'p') { $data = search_by_usage($search); $out = array(); foreach ($data['speakers'] as $pid => $s) { $out[$pid] = array('house' => $s['house'], 'name' => $s['name'], 'party' => $s['party'], 'count' => $s['count'], 'mindate' => substr($s['pmindate'], 0, 7), 'maxdate' => substr($s['pmaxdate'], 0, 7)); } api_output($out); return; } global $SEARCHENGINE; $SEARCHENGINE = new SEARCHENGINE($search); # $query_desc_short = $SEARCHENGINE->query_description_short(); $pagenum = get_http_var('page'); $args = array('s' => $search, 'p' => $pagenum, 'num' => get_http_var('num'), 'pop' => 1, 'o' => $o == 'd' || $o == 'r' ? $o : 'd'); $LIST = new HANSARDLIST(); $LIST->display('search', $args, 'api'); }
function api_getBoundary_name($name) { $name = html_entity_decode(normalise_constituency_name($name)); # XXX if (!$name) { api_error('Name not recognised'); return; } $out = array(); $areas = _api_cacheCheck('mapit_get_areas_by_type', 'WMC'); $areas_info = _api_cacheCheck('mapit_get_voting_areas_info', $areas); $id = null; foreach ($areas_info as $k => $v) { if (html_entity_decode(normalise_constituency_name($v['name'])) == $name) { $id = $k; } } if (!$id) { api_error('No data found for name'); return; } $out = mapit_get_voting_area_geometry($id, 'wgs84'); if (isset($out['polygon'])) { api_output($out['polygon']); } else { api_error('Nothing returned from get_voting_areas_geometry'); } }
function api_converturl_url_output($q) { $gid = $q->field(0, 'gid'); $url = get_listurl($q); $output = array('gid' => $gid, 'url' => 'http://www.theyworkforyou.com' . $url); api_output($output); }
function api_getAlerts_start_date($start_date) { $args = array('start_date' => $start_date, 'end_date' => get_http_var('end_date')); $alert = new ALERT(); $data = $alert->fetch_between($confirmed = 1, $deleted = 0, $args['start_date'], $args['end_date']); api_output($data); }
function api_getRepresentatives_postcode($pc) { $pc = preg_replace('#[^0-9]#i', '', $pc); if (is_postcode($pc)) { $constituency = postcode_to_constituency($pc); if ($constituency == 'CONNECTION_TIMED_OUT') { api_error('Connection timed out'); } elseif ($constituency) { if (is_array($constituency)) { $constituencies = $constituency; } else { $constituencies = array($constituency); } $output = array(); foreach ($constituencies as $c) { $output[] = _api_getMP_constituency($c); } api_output($output); } else { api_error('Unknown postcode'); } } else { api_error('Invalid postcode'); } }
function image() { $aid = jget('aid', 'int'); $count = jlogic('image')->albumimgnums($aid, 1); $images = jlogic('image')->getallalbumimg($aid, '', 1); api_output(array('total' => $count, 'images' => array_merge($images))); }
function api_findArticles_invoke($params) { $search = $params['search']; if (!$search) { api_error("required parameter 'search' is missing"); return; } $start = (int) $params['offset']; $num = (int) $params['limit']; if (!$num) { $num = 100; } if (!$start) { $start = 0; } try { $xap = new XapSearch(); $xap->set_query($search); $results = $xap->run($start, $num, 'date'); // foreach( $results as &$a ) { // // convert datetime objects to strings // $a['pubdate'] = $a['pubdate']->format('c'); // } $output = array('results' => $results); api_output($output); } catch (Exception $e) { api_error($e->getMessage()); } }
function api_getGeometry_name($name) { $out = _api_getGeometry_name($name); if ($out) { api_output($out); } else { api_error('Name not recognised'); } }
function api_getConstituencies_latitude($lat) { $lon = get_http_var('longitude') + 0; $d = get_http_var('distance') + 0; if (!$lat) { api_error('You must supply a latitude and longitude'); return; } $out = _api_getConstituencies_latitude($lat, $lon, $d); api_output($out); }
function display_wkt($wkt, $limit = 200, $callback = '') { global $config; global $couch; $url = $config['couchdb_options']['prefix'] . $config['couchdb_options']['host'] . '/' . $config['couchdb_options']['database'] . '/_design/geodd/_geo/points?g=' . urlencode($wkt) . '&relation=intersects' . '&include_docs=true' . '&limit=' . $limit; //echo $url; $json = get($url); $obj = json_decode($json); $obj->status = 200; // trim excess? api_output($obj, $callback); }
function api_getMPsInfo_id($ids) { $output = _api_getMPsInfo_id($ids); if ($output) { if ($output[0]) { api_output($output[0], $output[1]); } else { api_error('Unknown field'); } } else { api_error('Unknown person ID'); } }
function api_getMPinfo_id($id) { $fields = preg_split('#\\s*,\\s*#', get_http_var('fields'), -1, PREG_SPLIT_NO_EMPTY); $db = new ParlDB(); $last_mod = 0; $q = $db->query("select data_key, data_value, lastupdate from personinfo\n\t\twhere person_id = '" . mysql_escape_string($id) . "'"); if ($q->rows()) { $output = array(); for ($i = 0; $i < $q->rows(); $i++) { $data_key = $q->field($i, 'data_key'); if (count($fields) && !in_array($data_key, $fields)) { continue; } $output[$data_key] = $q->field($i, 'data_value'); $time = strtotime($q->field($i, 'lastupdate')); if ($time > $last_mod) { $last_mod = $time; } } $q = $db->query("select * from memberinfo\n\t\t\twhere member_id in (select member_id from member where person_id = '" . mysql_escape_string($id) . "')\n\t\t\torder by member_id"); if ($q->rows()) { $oldmid = 0; $count = -1; for ($i = 0; $i < $q->rows(); $i++) { $data_key = $q->field($i, 'data_key'); if (count($fields) && !in_array($data_key, $fields)) { continue; } $mid = $q->field($i, 'member_id'); if (!isset($output['by_member_id'])) { $output['by_member_id'] = array(); } if ($oldmid != $mid) { $count++; $oldmid = $mid; $output['by_member_id'][$count]['member_id'] = $mid; } $output['by_member_id'][$count][$data_key] = $q->field($i, 'data_value'); $time = strtotime($q->field($i, 'lastupdate')); if ($time > $last_mod) { $last_mod = $time; } } } ksort($output); api_output($output, $last_mod); } else { api_error('Unknown person ID'); } }
function _api_getConstituency_name($constituency) { $db = new ParlDB(); $q = $db->query("select constituency, data_key, data_value from consinfo\n where constituency = :constituency", array(':constituency' => $constituency)); if ($q->rows()) { for ($i = 0; $i < $q->rows(); $i++) { $data_key = $q->field($i, 'data_key'); $output[$data_key] = $q->field($i, 'data_value'); } ksort($output); } $output['name'] = $constituency; api_output($output); }
function _api_getMembers_output($sql) { $db = new ParlDB; $q = $db->query($sql); $output = array(); $last_mod = 0; for ($i=0; $i<$q->rows(); $i++) { $out = _api_getMP_row($q->row($i)); $output[] = $out; $time = strtotime($q->field($i, 'lastupdate')); if ($time > $last_mod) $last_mod = $time; } api_output($output, $last_mod); }
function _api_getConstituency_name($constituency) { $db = new ParlDB; $q = $db->query("select constituency, data_key, data_value from consinfo where constituency = '" . mysql_real_escape_string($constituency) . "'"); if ($q->rows()) { for ($i=0; $i<$q->rows(); $i++) { $data_key = $q->field($i, 'data_key'); $output[$data_key] = $q->field($i, 'data_value'); } ksort($output); } $output['name'] = $constituency; api_output($output); }
function _api_getPerson_output($q) { $output = array(); $last_mod = 0; for ($i = 0; $i < $q->rows(); $i++) { $house = $q->field($i, 'house'); $out = _api_getPerson_row($q->row($i), $house == HOUSE_TYPE_ROYAL ? false : true); $output[] = $out; $time = strtotime($q->field($i, 'lastupdate')); if ($time > $last_mod) { $last_mod = $time; } } api_output($output, $last_mod); }
function api_getCommittee_name($name) { $db = new ParlDB; $name = preg_replace('#\s+Committee#', '', $name); $date = parse_date(get_http_var('date')); if ($date) $date = '"' . $date['iso'] . '"'; else $date = 'date(now())'; $q = $db->query("select distinct(dept) from moffice where dept like '%" . mysql_real_escape_string($name) . "%Committee' and from_date <= " . $date . ' and ' . $date . ' <= to_date'); if ($q->rows() > 1) { # More than one committee matches for ($i=0; $i<$q->rows(); $i++) { $output['committees'][] = array( 'name' => $q->field($i, 'dept') ); } api_output($output); } elseif ($q->rows()) { # One committee $q = $db->query("select * from moffice,member where moffice.person = member.person_id and dept like '%" . mysql_real_escape_string($name) . "%Committee' and from_date <= " . $date . ' and ' . $date . " <= to_date and entered_house <= " . $date . ' and ' . $date . ' <= left_house'); if ($q->rows()) { $output = array(); $output['committee'] = $q->field(0, 'dept'); for ($i=0; $i<$q->rows(); $i++) { $member = array( 'person_id' => $q->field($i, 'person'), 'name' => $q->field($i, 'first_name') . ' ' . $q->field($i, 'last_name'), ); if ($q->field($i, 'position') == 'Chairman') { $member['position'] = $q->field($i, 'position'); } $output['members'][] = $member; } api_output($output); } else { api_error('That committee has no members...?'); } } else { api_error('That name was not recognised'); } }
function api_getMPinfo_id($id) { if (!ctype_digit($id)) { api_error('Unknown person ID'); return; } $output = _api_getMPsInfo_id($id); if ($output) { if ($output[0]) { api_output($output[0][$id], $output[1]); } else { api_error('Unknown field'); } } else { api_error('Unknown person ID'); } }
function api_getconstituency_postcode($pc) { $pc = preg_replace('#[^a-z0-9 ]#i', '', $pc); if (validate_postcode($pc)) { $constituency = postcode_to_constituency($pc); if ($constituency == 'CONNECTION_TIMED_OUT') { api_error('Connection timed out'); } elseif ($constituency) { $output['name'] = html_entity_decode($constituency); api_output($output); } else { api_error('Unknown postcode'); } } else { api_error('Invalid postcode'); } }
function api_getconstituency_postcode($pc) { $pc = preg_replace('#[^a-z0-9 ]#i', '', $pc); if (get_http_var('future')) { $new_areas = mapit_get_voting_areas($pc, 13); # Magic number 13 if (is_object($new_areas)) { # rabx_is_error throws Notice api_error('Unknown postcode, or problem with lookup'); } elseif (!isset($new_areas['WMC'])) { api_error('Unknown postcode, or problem with lookup'); } else { $new_info = mapit_get_voting_area_info($new_areas['WMC']); $output['name'] = $new_info['name']; api_output($output); } } else { if (validate_postcode($pc)) { $constituency = postcode_to_constituency($pc); if ($constituency == 'CONNECTION_TIMED_OUT') { api_error('Connection timed out'); } elseif ($constituency) { $db = new ParlDB; $q = $db->query("select constituency, data_key, data_value from consinfo where constituency = '" . mysql_real_escape_string($constituency) . "'"); if ($q->rows()) { for ($i=0; $i<$q->rows(); $i++) { $data_key = $q->field($i, 'data_key'); $output[$data_key] = $q->field($i, 'data_value'); } ksort($output); } $output['name'] = $constituency; api_output($output); } else { api_error('Unknown postcode'); } } else { api_error('Invalid postcode'); } } }
function api_getLord_id($id) { $db = new ParlDB(); $q = $db->query("select * from member\n\t\twhere house=2 and person_id = '" . mysql_real_escape_string($id) . "'\n\t\torder by left_house desc"); if ($q->rows()) { $output = array(); $last_mod = 0; for ($i = 0; $i < $q->rows(); $i++) { $out = _api_getLord_row($q->row($i)); $output[] = $out; $time = strtotime($q->field($i, 'lastupdate')); if ($time > $last_mod) { $last_mod = $time; } } api_output($output, $last_mod); } else { api_error('Unknown person ID'); } }
function _api_getMembers_output($sql) { global $parties; $db = new ParlDB(); $q = $db->query($sql); $output = array(); $last_mod = 0; for ($i = 0; $i < $q->rows(); $i++) { $row = array('member_id' => $q->field($i, 'member_id'), 'person_id' => $q->field($i, 'person_id'), 'name' => html_entity_decode(member_full_name($q->field($i, 'house'), $q->field($i, 'title'), $q->field($i, 'first_name'), $q->field($i, 'last_name'), $q->field($i, 'constituency'))), 'party' => isset($parties[$q->field($i, 'party')]) ? $parties[$q->field($i, 'party')] : $q->field($i, 'party')); if ($q->field($i, 'house') == 1) { $row['constituency'] = html_entity_decode($q->field($i, 'constituency')); } $output[] = $row; $time = strtotime($q->field($i, 'lastupdate')); if ($time > $last_mod) { $last_mod = $time; } } api_output($output, $last_mod); }
function api_getMPinfo_id($id) { $db = new ParlDB(); $last_mod = 0; $q = $db->query("select data_key, data_value, lastupdate from personinfo\n\t\twhere person_id = '" . mysql_escape_string($id) . "'"); if ($q->rows()) { $output = array(); for ($i = 0; $i < $q->rows(); $i++) { $output[$q->field($i, 'data_key')] = $q->field($i, 'data_value'); $time = strtotime($q->field($i, 'lastupdate')); if ($time > $last_mod) { $last_mod = $time; } } $q = $db->query("select * from memberinfo\n\t\t\twhere member_id in (select member_id from member where person_id = '" . mysql_escape_string($id) . "')"); if ($q->rows()) { $oldmid = 0; $count = -1; for ($i = 0; $i < $q->rows(); $i++) { $mid = $q->field($i, 'member_id'); if (!isset($output['by_member_id'])) { $output['by_member_id'] = array(); } if ($oldmid != $mid) { $count++; $oldmid = $mid; $output['by_member_id'][$count]['member_id'] = $mid; } $output['by_member_id'][$count][$q->field($i, 'data_key')] = $q->field($i, 'data_value'); $time = strtotime($q->field($i, 'lastupdate')); if ($time > $last_mod) { $last_mod = $time; } } } ksort($output); api_output($output, $last_mod); } else { api_error('Unknown person ID'); } }
function api_getconstituency_postcode($pc) { $pc = preg_replace('#[^a-z0-9 ]#i', '', $pc); if (!validate_postcode($pc)) { api_error('Invalid postcode'); return; } if (get_http_var('future')) { $xml = simplexml_load_string(file_get_contents(POSTCODE_API_URL . urlencode($pc))); if (!$xml || $xml->error) { api_error('Unknown postcode, or problem with lookup'); return; } $output['name'] = iconv('utf-8', 'iso-8859-1//TRANSLIT', (string) $xml->future_constituency); api_output($output); } else { $constituency = postcode_to_constituency($pc); if ($constituency == 'CONNECTION_TIMED_OUT') { api_error('Connection timed out'); return; } if (!$constituency) { api_error('Unknown postcode'); return; } $db = new ParlDB(); $q = $db->query("select constituency, data_key, data_value from consinfo\n where constituency = '" . mysql_real_escape_string($constituency) . "'"); if ($q->rows()) { for ($i = 0; $i < $q->rows(); $i++) { $data_key = $q->field($i, 'data_key'); $output[$data_key] = $q->field($i, 'data_value'); } ksort($output); } $output['name'] = $constituency; api_output($output); } }