예제 #1
0

    // Data bad due to election etc?
    $parent_status = dadem_get_area_status($eb_id);
    dadem_check_error($parent_status);
    $status = dadem_get_area_status($va_id);
    dadem_check_error($status);
    if ($parent_status != 'none' || $status != 'none'){
        $election_error = cobrand_election_error_message($cobrand);
        if (!$election_error) {
             $election_error = 'Sorry, an election is forthcoming or has recently happened here.';
        }
        template_show_error($election_error);
    }
    // Get the representative info
    $area_representatives = dadem_get_representatives($va_id);
    dadem_check_error($area_representatives);  
    debug("FRONTEND", "area representatives $area_representatives");
    $area_representatives = array($va_id => $area_representatives);
    euro_check($area_representatives, $voting_areas);
    $all_representatives = array_values($area_representatives[$va_id]);
    $representatives_info = dadem_get_representatives_info($all_representatives);
    dadem_check_error($representatives_info);
    debug_timestamp();

    debug("FRONTEND", "representatives info $representatives_info");

    //Check the contact method exists for each representative
    $any_contacts = false;
    $error_msg = "";
    $fyr_valid_reps = array();
예제 #2
0
파일: lords.php 프로젝트: vijo/writetothem
 * Main page of FaxYourRepresentative, where you enter your postcode
 * 
 * Copyright (c) 2004 UK Citizens Online Democracy. All rights reserved.
 * Email: francis@mysociety.org. WWW: http://www.mysociety.org
 *
 * $Id: lords.php,v 1.14 2006-08-01 16:38:44 francis Exp $
 * 
 */
require_once "../phplib/fyr.php";
require_once "../commonlib/phplib/utility.php";
require_once "../commonlib/phplib/mapit.php";
require_once '../commonlib/phplib/dadem.php';
require_once "../commonlib/phplib/votingarea.php";
// Random Lord
if (get_http_var("random_lord")) {
    $all_lords = dadem_get_representatives($HOC_AREA_ID);
    dadem_check_error($all_lords);
    $random_lord = $all_lords[rand(0, count($all_lords) - 1)];
    header('Location: ' . url_new('write', false, 'fyr_extref', fyr_external_referrer(), 'cocode', get_http_var('cocode'), 'who', $random_lord));
    exit;
}
if ($pid = get_http_var('pid')) {
    $ids = dadem_get_same_person('uk.org.publicwhip/person/' . $pid);
    dadem_check_error($ids);
    $id = $ids[count($ids) - 1];
    header('Location: ' . url_new('write', false, 'fyr_extref', fyr_external_referrer(), 'cocode', get_http_var('cocode'), 'who', $id));
    exit;
}
// Front page form
$ref = fyr_external_referrer();
$form_extra = '';
예제 #3
0
파일: stats.php 프로젝트: vijo/writetothem
    } else {
        $year_bar_array[] = "<a href=\"/stats/{$y}/{$type}\">{$y}</a>";
    }
}
if (!$got_year) {
    template_show_error("We don’t have statistics for that year");
}
$year_bar = "<p>Statistics for other years:</p><ul class=\"inline-list\"><li>" . join($year_bar_array, "</li><li>") . "</li></ul>";
#if (!get_http_var('really'))
#    $year_bar = "";
require_once "../phplib/summary_report_{$year}.php";
require_once "../phplib/questionnaire_report_{$year}_WMC.php";
$rep_info = array();
$voting_areas = mapit_call('postcode', $postcode, array(), array(400 => MAPIT_BAD_POSTCODE, 404 => MAPIT_POSTCODE_NOT_FOUND));
if (!rabx_is_error($voting_areas)) {
    $area_representatives = dadem_get_representatives($voting_areas['shortcuts']['WMC']);
    dadem_check_error($area_representatives);
    $rep_info = dadem_get_representative_info($area_representatives[0]);
    dadem_check_error($rep_info);
    $rep_info['postcode'] = $postcode;
} else {
    if ($voting_areas->code == MAPIT_BAD_POSTCODE) {
        $error_message = "Sorry, we need your complete UK postcode to identify your elected representatives.";
        $template = "index-advice";
    } elseif ($voting_areas->code == MAPIT_POSTCODE_NOT_FOUND) {
        $error_message = "We’re not quite sure why, but we can’t seem to recognise your postcode.";
        $template = "index-advice";
    }
}
if ($type == 'mps') {
    // Table of responsiveness of MPs
예제 #4
0
파일: write.php 프로젝트: vijo/writetothem
 $fyr_voting_area = null;
 foreach ($voting_areas['areas'] as $id => $arr) {
     if ($arr['type'] == $fyr_values['type']) {
         $fyr_voting_area = add_area_vars($arr);
     }
     if ($arr['type'] == $eb_type) {
         $eb_area = $arr;
     }
 }
 if (!$eb_area || !$fyr_voting_area) {
     mismatch_error();
 }
 // Data bad due to election etc?
 check_area_status($eb_area, $fyr_voting_area);
 // Get the representative info
 $area_representatives = dadem_get_representatives($fyr_voting_area['id']);
 dadem_check_error($area_representatives);
 debug("FRONTEND", "area representatives", $area_representatives);
 $area_representatives = array($fyr_voting_area['id'] => $area_representatives);
 euro_check($area_representatives, $area_ids);
 $all_representatives = array_values($area_representatives[$fyr_voting_area['id']]);
 $representatives_info = dadem_get_representatives_info($all_representatives);
 dadem_check_error($representatives_info);
 debug_timestamp();
 debug("FRONTEND", "representatives info", $representatives_info);
 //Check the contact method exists for each representative
 $any_contacts = false;
 $error_msg = "";
 $stash['valid_reps'] = array();
 # randomize the order that representatives will be displayed in
 shuffle($all_representatives);
예제 #5
0
파일: index.php 프로젝트: vijo/writetothem
 }
 /* Possibly a deep link (from another site which knows its users'
  * postcodes) specifying one or more particular area types. */
 if ($area_types = fyr_parse_area_type_list($a_forward)) {
     /* At this point we need to check whether we have only one
      * representative. If so grab their ID and redirect through to
      * write.php. Otherwise punt to who.php with the appropriate a
      * parameter. */
     $id = null;
     $a = array();
     foreach (array_keys($area_types) as $t) {
         if (array_key_exists($t, $voting_areas)) {
             array_push($a, $voting_areas[$t]);
         }
     }
     $area_representatives = dadem_get_representatives($a);
     foreach (array_values($area_representatives) as $rr) {
         if (count($rr) > 1) {
             $id = null;
             break;
         } else {
             if (count($rr) == 1) {
                 if ($id) {
                     $id = null;
                     break;
                 } else {
                     $id = $rr[0];
                 }
             }
         }
     }
예제 #6
0
                        'cocode', $cocode));
    }
}

// If in a county, but not a county electoral division, display explanation
// (which is lack of data from Ordnance Survey)
$fyr_county_note = false;
if (array_key_exists('CTY', $voting_areas) && !array_key_exists('CED', $voting_areas)) {
    $fyr_county_note = true; 
}

$voting_areas_info = mapit_get_voting_areas_info(array_values($voting_areas));
mapit_check_error($voting_areas_info);
debug_timestamp();

$area_representatives = dadem_get_representatives(array_values($voting_areas));
$error = dadem_get_error($area_representatives);
dadem_check_error($area_representatives);
debug_timestamp();

$all_representatives = array();
foreach (array_values($area_representatives) as $rr) {
    $all_representatives = array_merge($all_representatives, $rr);
}
$representatives_info = dadem_get_representatives_info($all_representatives);
dadem_check_error($representatives_info);
debug_timestamp();

$meps_hidden = euro_check($area_representatives, $voting_areas);

// For each voting area in order, find all the representatives.  Put
예제 #7
0
require_once "../commonlib/phplib/votingarea.php";
require_once "../commonlib/phplib/utility.php";
// Get all fyr_values
$fyr_values = get_all_variables();
debug("FRONTEND", "All variables:", $fyr_values);
if (!array_key_exists('id', $fyr_values) || $fyr_values['id'] == '' || !ctype_digit($fyr_values['id'])) {
    template_show_error('Please <a href="/">start from the beginning</a>.');
    exit;
}
$fyr_vatype = $fyr_values['id'];
$va_info = mapit_call('area', $fyr_vatype);
mapit_check_error($va_info);
$parent_info = mapit_call('area', $va_info['parent_area']);
mapit_check_error($parent_info);
debug_timestamp();
$area_reps = dadem_get_representatives(array($fyr_vatype));
dadem_check_error($area_reps);
debug_timestamp();
$area_reps = $area_reps[$fyr_vatype];
$area_reps = array_values($area_reps);
$reps_info = dadem_get_representatives_info($area_reps);
dadem_check_error($reps_info);
debug_timestamp();
$template_page = 'corrections-index';
if (isset($fyr_values['name']) && isset($fyr_values['party'])) {
    # Changes have been submitted
    $fyr_names = $fyr_values['name'];
    $fyr_parties = $fyr_values['party'];
    $fyr_new = isset($fyr_values['new']) ? $fyr_values['new'] : array();
    $fyr_delete = isset($fyr_values['delete']) ? $fyr_values['delete'] : array();
    $fyr_url = isset($fyr_values['url']) ? $fyr_values['url'] : '';
예제 #8
0
파일: who.php 프로젝트: edent/writetothem
function get_reps($va_ids)
{
    $area_representatives = dadem_get_representatives($va_ids);
    dadem_check_error($area_representatives);
    debug_timestamp();
    return $area_representatives;
}
예제 #9
0
function crosssell_check_twfy($email, $postcode)
{
    global $crosssell_check_twfy_checked;
    if (!is_null($crosssell_check_twfy_checked)) {
        return $crosssell_check_twfy_checked;
    }
    if (!defined('OPTION_AUTH_SHARED_SECRET') || !$postcode) {
        return false;
    }
    // Look up who the MP is
    global $crosssell_voting_areas;
    if (!$crosssell_voting_areas) {
        $crosssell_voting_areas = mapit_get_voting_areas($postcode);
    }
    mapit_check_error($crosssell_voting_areas);
    if (!array_key_exists('WMC', $crosssell_voting_areas)) {
        $crosssell_check_twfy_checked = false;
        return false;
    }
    $reps = dadem_get_representatives($crosssell_voting_areas['WMC']);
    dadem_check_error($reps);
    if (count($reps) != 1) {
        $crosssell_check_twfy_checked = false;
        return false;
    }
    $rep_info = dadem_get_representative_info($reps[0]);
    dadem_check_error($rep_info);
    if (!array_key_exists('parlparse_person_id', $rep_info)) {
        $crosssell_check_twfy_checked = false;
        return false;
    }
    $person_id = str_replace('uk.org.publicwhip/person/', '', $rep_info['parlparse_person_id']);
    if (!$person_id) {
        $crosssell_check_twfy_checked = false;
        return false;
    }
    $auth_signature = auth_sign_with_shared_secret($email, OPTION_AUTH_SHARED_SECRET);
    // See if already signed up
    $already_signed = crosssell_fetch_page('www.theyworkforyou.com', '/alert/authed.php?pid=' . $person_id . '&email=' . urlencode($email) . '&sign=' . urlencode($auth_signature));
    if ($already_signed != 'not signed') {
        $crosssell_check_twfy_checked = false;
        return false;
    }
    $crosssell_check_twfy_checked = array($person_id, $auth_signature);
    return $crosssell_check_twfy_checked;
}
예제 #10
0
 function display($self_link)
 {
     // Input data
     $rep_id = get_http_var('rep_id');
     $va_id = get_http_var('va_id');
     $ds_va_id = get_http_var('ds_va_id');
     $bad_contacts = get_http_var('bad_contacts');
     $user_corrections = get_http_var('user_corrections');
     // Make new rep in this voting area
     $new_in_va_id = get_http_var('new_in_va_id');
     if (!$rep_id && $ds_va_id) {
         // Democratic services
         $ds_vainfo = dadem_get_representatives($ds_va_id);
         dadem_check_error($ds_vainfo);
         if (isset($ds_vainfo[0])) {
             $rep_id = $ds_vainfo[0];
         } else {
             $new_in_va_id = $ds_va_id;
         }
     }
     // Postcode
     $pc = get_http_var('pc');
     // Search
     $search = null;
     if (get_http_var('gos')) {
         if (validate_postcode(get_http_var('search'))) {
             $pc = get_http_var('search');
             $rep_id = null;
         } else {
             $search = get_http_var('search');
             $rep_id = null;
         }
     }
     if (get_http_var('cancel') != "") {
         $rep_id = null;
     }
     if (get_http_var('done') != "") {
         if (get_http_var('token') != $this->get_token()) {
             print "<p><i>Token not found</i></p>";
         } else {
             $newdata['name'] = get_http_var('name');
             $newdata['party'] = get_http_var('party');
             $newdata['method'] = get_http_var('method');
             $newdata['email'] = get_http_var('email');
             $newdata['fax'] = get_http_var('fax');
             if (!$rep_id) {
                 // Making a new representative, put in type and id
                 $newdata['area_id'] = $new_in_va_id;
                 $vainfo = mapit_call('area', $new_in_va_id);
                 mapit_check_error($vainfo);
                 $newdata['area_type'] = $vainfo['type'];
             }
             $result = dadem_admin_edit_representative($rep_id, $newdata, http_auth_user(), get_http_var('note'));
             dadem_check_error($result);
             $rep_id = $result;
             $new_in_va_id = null;
             print "<p><i>Successfully updated representative " . htmlspecialchars($rep_id) . "</i></p>";
             if (get_http_var('nextbad')) {
                 $rep_id = get_http_var('nextbad');
                 $url = $self_link . "&nextbad=" . urlencode($this->get_next_bad_contact($rep_id)) . "&just_done_bad=1&rep_id=" . urlencode($rep_id);
                 header("Location: {$url}");
                 exit;
             } else {
                 $rep_id = null;
             }
         }
     }
     if (get_http_var('just_done_bad')) {
         print "<p><i>Moved on to next bad contact</i></p>";
     }
     if (get_http_var('delete') != "") {
         if (get_http_var('token') != $this->get_token()) {
             print "<p><i>Token not found</i></p>";
         } else {
             $result = dadem_admin_edit_representative($rep_id, null, http_auth_user(), get_http_var('note'));
             dadem_check_error($result);
             print "<p><i>Successfully deleted representative " . htmlspecialchars($rep_id) . "</i></p>";
             $rep_id = null;
         }
     }
     if (get_http_var('ucclose') != "") {
         $result = dadem_admin_done_user_correction(get_http_var('ucid'));
         dadem_check_error($result);
         print "<p><i>Successfully closed correction " . htmlspecialchars(get_http_var('ucid')) . "</i></p>";
     }
     if (get_http_var('vaupdate') != "") {
         $result = dadem_admin_set_area_status(get_http_var('va_id'), get_http_var('new_status'));
         dadem_check_error($result);
         print "<p><i>Successfully updated voting area status " . htmlspecialchars(get_http_var('va_id')) . " to " . htmlspecialchars(get_http_var('new_status')) . "</i></p>";
     }
     // Postcode and search box
     $form = new HTML_QuickForm('adminRepsSearchForm', 'get', $self_link);
     $form->addElement('header', '', 'Search');
     $buttons[] =& HTML_QuickForm::createElement('text', 'search', null, array('size' => 20, 'maxlength' => 255));
     $buttons[] =& HTML_QuickForm::createElement('submit', 'gos', 'postcode or query');
     $form->addElement('hidden', 'page', $this->id);
     $form->addGroup($buttons, 'stuff', null, '&nbsp', false);
     admin_render_form($form);
     // Conditional parts:
     if ($rep_id or $new_in_va_id) {
         $form = new HTML_QuickForm('adminRepsEditForm', 'post', $self_link);
         $form->addElement('hidden', 'page', $this->id);
         $form->addElement('hidden', 'token', $this->get_token());
         // Edit representative
         $sameperson = null;
         if ($rep_id) {
             $repinfo = dadem_get_representative_info($rep_id);
             dadem_check_error($repinfo);
             if ($repinfo['parlparse_person_id']) {
                 $sameperson = dadem_get_same_person($repinfo['parlparse_person_id']);
                 dadem_check_error($sameperson);
             }
         }
         $va_id = $rep_id ? $repinfo['voting_area'] : $new_in_va_id;
         $vainfo = mapit_call('area', $va_id);
         mapit_check_error($vainfo);
         if ($vainfo['parent_area']) {
             $parentinfo = mapit_call('area', $vainfo['parent_area']);
             mapit_check_error($parentinfo);
         } else {
             $parentinfo = null;
         }
         $rephistory = $rep_id ? dadem_get_representative_history($rep_id) : array();
         dadem_check_error($rephistory);
         // Reverse postcode lookup
         if (!$pc) {
             $pc = mapit_call('area/example_postcode', $va_id);
             if (!mapit_get_error($pc)) {
                 $form->addElement('static', 'note1', null, "Example postcode for testing: " . "<a href='" . OPTION_BASE_URL . '/who?pc=' . urlencode($pc) . "'>" . htmlentities($pc) . "</a> (<a href='?search=" . urlencode($pc) . "&amp;gos=postcode+or+query&amp;page=reps'>all reps here</a>)");
             } else {
                 $pc = '';
             }
         }
         if ($rep_id) {
             $form->setDefaults(array('name' => $repinfo['name'], 'party' => $repinfo['party'], 'method' => $repinfo['method'], 'email' => $repinfo['email'], 'fax' => $repinfo['fax']));
         }
         // Councillor types are not edited here, but in match.cgi interface
         global $va_council_child_types, $va_type_name, $va_rep_name;
         $editable_here = true;
         if (OPTION_ADMIN_SERVICES_CGI && in_array($vainfo['type'], $va_council_child_types)) {
             $editable_here = false;
         }
         $readonly = $editable_here ? null : "readonly";
         if ($rep_id) {
             $form->addElement('header', '', 'Edit Representative');
             if ($repinfo['deleted']) {
                 $form->addElement('static', 'notedeleted', null, "<strong style=\"color: red\">Deleted representative</strong>, click 'Done' to undelete");
             }
         } else {
             $form->addElement('header', '', 'New Representative');
         }
         if ($rep_id and $editable_here) {
             $form->addElement('static', 'note1', null, "\n                Edit only the values which you need to.  If a representative\n                has changed delete them and make a new one.  Do not just edit\n                their values, as this would ruin our reponsiveness stats.");
         }
         if ($rep_id && $sameperson) {
             $html = '';
             foreach ($sameperson as $samerep) {
                 if ($samerep == $rep_id) {
                     continue;
                 }
                 $html .= "<a href=\"{$self_link}&pc=" . urlencode(get_http_var('pc')) . "&rep_id=" . $samerep . "\">" . $samerep . "</a> \n";
             }
             if ($html) {
                 $html = '(Note that these other representatives are the same person: ' . trim($html) . ')';
                 $form->addElement('static', 'sameperson', null, $html);
             }
         }
         $rep_name = isset($va_rep_name[$vainfo['type']]) ? $va_rep_name[$vainfo['type']] : '';
         $form->addElement('static', 'office', 'Office:', htmlspecialchars($rep_name) . " for " . htmlspecialchars($vainfo['name']) . " " . htmlspecialchars($va_type_name[$vainfo['type']]) . ($parentinfo ? " in " . htmlspecialchars($parentinfo['name']) . " " . htmlspecialchars($va_type_name[$parentinfo['type']]) : ""));
         $form->addElement('text', 'name', "Full name:", array('size' => 60, $readonly => 1));
         $form->addElement('text', 'party', "Party:", array('size' => 60, $readonly => 1));
         $form->addElement('static', 'note2', null, "Make sure you update contact method when you change email or fax numbers.");
         $form->addElement('select', 'method', "Contact method:", array('fax' => 'Fax only', 'email' => 'Email only', 'shame' => "Shame! Doesn't want contacting", 'via' => 'Contact via electoral body (e.g. Democratic Services)', 'unknown' => "We don't know contact details"));
         $form->addElement('text', 'email', "Email:", array('size' => 60, $readonly => 1));
         $form->addElement('text', 'fax', "Fax:", array('size' => 60, $readonly => 1));
         $form->addElement('textarea', 'note', "Notes for log:", array('rows' => 3, 'cols' => 60, $readonly => 1));
         $form->addElement('hidden', 'pc', $pc);
         if (get_http_var('nextbad')) {
             $form->addElement('hidden', 'nextbad', get_http_var('nextbad'));
         }
         if ($rep_id) {
             $form->addElement('hidden', 'rep_id', $rep_id);
         } else {
             $form->addElement('hidden', 'new_in_va_id', $new_in_va_id);
         }
         if ($editable_here) {
             $finalgroup[] =& HTML_QuickForm::createElement('submit', 'done', 'Done');
             $finalgroup[] =& HTML_QuickForm::createElement('submit', 'cancel', 'Cancel');
             if ($rep_id) {
                 $finalgroup[] =& HTML_QuickForm::createElement('static', 'newlink', null, "<a href=\"{$self_link}&pc=" . urlencode(get_http_var('pc')) . "&new_in_va_id=" . $va_id . "\">" . "Make new " . htmlspecialchars($vainfo['name']) . " rep" . "</a> \n");
                 if ($repinfo['deleted']) {
                     $finalgroup[] =& HTML_QuickForm::createElement('static', 'staticspacer', null, '&nbsp; Deleted rep, no longer in office, just click done to undelete');
                 } else {
                     $finalgroup[] =& HTML_QuickForm::createElement('static', 'staticspacer', null, '&nbsp; No longer in office? --->');
                     $finalgroup[] =& HTML_QuickForm::createElement('submit', 'delete', 'Delete');
                 }
             }
             $form->addGroup($finalgroup, "finalgroup", "", ' ', false);
         } else {
             $form->addElement('static', 'note3', null, '<a href="' . OPTION_ADMIN_SERVICES_CGI . 'match.cgi?page=councilinfo;area_id=' . $vainfo['parent_area'] . '">To edit Councillors please use the match.cgi interface</a>' . '<br><a href="' . $self_link . '&ds_va_id=' . $vainfo['parent_area'] . '">... or edit Democratic Services for this council</a>');
             $finalgroup[] =& HTML_QuickForm::createElement('submit', 'done', 'Done');
             $finalgroup[] =& HTML_QuickForm::createElement('submit', 'cancel', 'Cancel');
             $form->addGroup($finalgroup, "finalgroup", "", ' ', false);
         }
         if ($rep_id) {
             $search_links = "Search for: ";
             $search_links .= "<a href=\"{$self_link}&page=fyrqueue&rep_id=" . $rep_id . "\">WriteToThem messages</a> | ";
             foreach (array("tel " . $repinfo['name'], "fax " . $repinfo['name'], "tel " . $repinfo['name'] . " " . $rep_name, "fax " . $repinfo['name'] . " " . $rep_name) as $searchq) {
                 $search_links .= "<a href=\"http://search.yahoo.com/search?p=" . htmlspecialchars($searchq) . "\"> " . htmlspecialchars($searchq) . "</a> | ";
             }
             $form->addElement('static', 'newlink', null, $search_links);
             if ($repinfo['parlparse_person_id']) {
                 $form->addElement('static', 'person', 'parlparse person_id:', $repinfo['parlparse_person_id']);
             }
         }
         $form->addElement('header', '', 'Historical Changes');
         $html = "<table border=1>";
         $html .= "<th>Order</th><th>Date</th><th>Editor</th><th>Note</th>\n                <th>Name</th> <th>Party</th> <th>Method</th> <th>Email</th>\n                <th>Fax</th><th>Active</th>";
         $previous_row = null;
         foreach ($rephistory as $row) {
             $html .= "<tr>";
             foreach (array('order_id', 'whenedited', 'editor', 'note', 'name', 'party', 'method', 'email', 'fax', 'deleted') as $field) {
                 if ($row['deleted'] && ($field == 'email' || $field == 'fax' || $field == 'method')) {
                     $display_value = 'deleted';
                     $html .= "<td>-</td>\n";
                     continue;
                 }
                 $value = $row[$field];
                 if ($field == 'note') {
                     $display_value = make_ids_links($value);
                 } elseif ($field == 'whenedited') {
                     $display_value = strftime('%Y-%m-%d %H:%M:%S', $value);
                 } elseif ($field == 'deleted') {
                     $display_value = $value ? 'deleted' : 'yes';
                 } else {
                     $display_value = $value;
                 }
                 if ($field != "order_id" && $field != "whenedited" && $field != "editor" && $field != "note" && $previous_row && $previous_row[$field] != $value) {
                     $display_value = "<strong>{$display_value}</strong>";
                 }
                 # Try and spot stupidity
                 if (preg_match('#parl(i|a)ment#', $display_value)) {
                     $display_value = "<span style='color:#00ff00'>{$display_value}</span>";
                 }
                 $html .= "<td>" . $display_value . "</td>\n";
             }
             $html .= "</tr>";
             $previous_row = $row;
         }
         $html .= "</table>";
         $form->addElement('static', 'bytype', null, $html);
         admin_render_form($form);
     } elseif ($va_id) {
         // One voting area
         $form = new HTML_QuickForm('adminVotingArea', 'get', $self_link);
         $area_info = mapit_call('area', $va_id);
         mapit_check_error($area_info);
         $reps = dadem_get_representatives($va_id);
         dadem_check_error($reps);
         $reps = array_values($reps);
         $html = $this->render_area($self_link, $va_id, $area_info, $pc);
         $html .= $this->render_reps($self_link, $reps);
         $form->addElement('static', 'bytype', null, $html);
         $form->addElement('hidden', 'page', $this->id);
         $form->addElement('hidden', 'token', $this->get_token());
         $form->addElement('hidden', 'va_id', $va_id);
         $select = $form->addElement('select', 'new_status', null, array('none' => 'No special status', 'pending_election' => 'Pending election, rep data not valid', 'recent_election' => 'Recent election, our rep data not yet updated', 'boundary_changes' => 'Recent election, had boundary changes'), array());
         $status = dadem_get_area_status($va_id);
         dadem_check_error($status);
         $select->setSelected($status);
         $form->addElement('submit', 'vaupdate', 'Update');
         admin_render_form($form);
     } elseif ($search) {
         $form = new HTML_QuickForm('adminRepsSearchResults', 'get', $self_link);
         $html = '';
         $areas = mapit_call('areas', $search);
         mapit_check_error($areas);
         global $va_inside;
         foreach (array_keys($areas) as $va_id) {
             $area_info = mapit_call('area', $va_id);
             mapit_check_error($area_info);
             $reps = dadem_get_representatives($va_id);
             dadem_check_error($reps);
             $reps = array_values($reps);
             $html .= $this->render_area($self_link, $va_id, $area_info, $pc, isset($va_inside[$area_info['type']]));
             $html .= $this->render_reps($self_link, $reps);
         }
         // Search reps
         $reps = dadem_search_representatives($search);
         dadem_check_error($reps);
         $html .= '<hr>' . $this->render_reps($self_link, $reps);
         $form->addElement('static', 'bytype', null, $html);
         admin_render_form($form);
     } elseif ($pc) {
         $form = new HTML_QuickForm('adminRepsSearchResults', 'get', $self_link);
         // Postcode search
         $voting_areas = mapit_call('postcode', $pc);
         mapit_check_error($voting_areas);
         $areas_info = $voting_areas['areas'];
         $html = "";
         // Display in order council, ward, council, ward...
         global $va_display_order, $va_inside;
         $our_order = array();
         foreach ($va_display_order as $row) {
             if (!is_array($row)) {
                 $row = array($row);
             }
             if (!in_array($va_inside[$row[0]], $our_order)) {
                 $our_order[] = $va_inside[$row[0]];
             }
             foreach ($row as $va_type) {
                 $our_order[] = $va_type;
             }
         }
         // Render everything in the order
         foreach ($our_order as $va_type) {
             foreach ($areas_info as $area => $area_info) {
                 if ($va_type != $area_info['type']) {
                     continue;
                 }
                 $va_id = $area;
                 // One voting area
                 $reps = dadem_get_representatives($va_id);
                 dadem_check_error($reps);
                 $reps = array_values($reps);
                 $html .= $this->render_area($self_link, $va_id, $area_info, $pc, isset($va_inside[$va_type]));
                 $html .= $this->render_reps($self_link, $reps);
             }
         }
         $form->addElement('static', 'bytype', null, $html);
         admin_render_form($form);
     } elseif ($bad_contacts) {
         // Bad contacts
         $form = new HTML_QuickForm('adminRepsBad', 'post', $self_link);
         $badcontacts = dadem_get_bad_contacts();
         dadem_check_error($badcontacts);
         $form->addElement('header', '', 'Bad Contacts ' . count($badcontacts));
         $html = $this->render_reps($self_link, $badcontacts, true);
         $form->addElement('static', 'badcontacts', null, $html);
         admin_render_form($form);
     } elseif ($user_corrections) {
         // User submitted corrections
         $form = new HTML_QuickForm('adminRepsCorrectionsHeader', 'post', $self_link);
         $corrections = dadem_get_user_corrections();
         dadem_check_error($corrections);
         $form->addElement('header', '', 'User Submitted Corrections ' . count($corrections));
         $form->addElement('hidden', 'token', $this->get_token());
         admin_render_form($form);
         // Get all the data for areas and their parents in as few call as possible
         $vaids = array();
         foreach ($corrections as $correction) {
             array_push($vaids, $correction['voting_area_id']);
         }
         $info1 = mapit_call('areas', $vaids);
         mapit_check_error($info1);
         $vaids = array();
         foreach ($info1 as $key => $value) {
             array_push($vaids, $value['parent_area']);
         }
         $info2 = mapit_call('areas', $vaids);
         foreach ($corrections as $correction) {
             $form = new HTML_QuickForm('adminRepsCorrections', 'post', $self_link);
             $html = "";
             $rep = $correction['representative_id'];
             $html .= "<p>";
             $html .= strftime('%Y-%m-%d %H:%M:%S', $correction['whenentered']) . " ";
             if ($correction['user_email']) {
                 $html .= " by " . htmlspecialchars($correction['user_email']);
             }
             $html .= "<br>";
             if ($correction['voting_area_id']) {
                 $wardinfo = $info1[$correction['voting_area_id']];
                 $vaid = $wardinfo['parent_area'];
                 $vainfo = $info2[$vaid];
                 // TODO: Make this councilinfo, and give a valid r= return URL
                 $html .= '<a href="' . OPTION_ADMIN_SERVICES_CGI . 'match.cgi?page=councilinfo;area_id=' . $vaid . '&r=' . '">' . htmlspecialchars($vainfo['name']) . "</a>, ";
                 $html .= htmlspecialchars($wardinfo['name']);
                 $html .= "<br>";
             }
             $html .= $correction['alteration'] . " ";
             if ($rep) {
                 $repinfo = dadem_get_representative_info($rep);
                 dadem_check_error($repinfo);
                 $html .= "<a href=\"{$self_link}&pc=" . urlencode(get_http_var('pc')) . "&rep_id=" . $rep . "\">" . htmlspecialchars($repinfo['name']) . " (" . htmlspecialchars($repinfo['party']) . ")</a> \n";
                 if ($correction['alteration'] != "delete") {
                     $html .= " to ";
                 }
             }
             if ($correction['alteration'] != "delete") {
                 $html .= htmlspecialchars($correction['name']) . " (" . htmlspecialchars($correction['party']) . ")";
             }
             if ($correction['user_notes']) {
                 $html .= "<br>Notes: " . htmlspecialchars($correction['user_notes']);
             }
             $usercorr = array();
             $usercorr[] =& HTML_QuickForm::createElement('static', 'usercorrections', null, $html);
             // You can't do this with element type "hidden" as it only allows one value in a
             // page for variable named ucid.  So once again I go to raw HTML.  Remind me not
             // to use HTML_QuickForm again...
             $usercorr[] =& HTML_QuickForm::createElement('html', '<input name="ucid" type="hidden" value="' . $correction['user_correction_id'] . '" />');
             $usercorr[] =& HTML_QuickForm::createElement('submit', 'ucclose', 'hide (done)');
             $form->addGroup($usercorr, 'stuff', null, '&nbsp', false);
             admin_render_form($form);
         }
     } else {
         print '<p><a href="?page=reps&bad_contacts=1">Bad contacts</a> (please fix these!)';
         // General info
         if (OPTION_ADMIN_SERVICES_CGI) {
             print '<br><a href="?page=reps&user_corrections=1">User corrections</a> (just for your interest, as sent automatically to GovEval)';
         }
     }
 }