<?php

// see http://cancan.waglo.com/config.sample.phps for a sample
@include 'config.php';

if (isset($db_username)) {
    $dbh = new PDO("mysql:host=$db_host;dbname=$db_name", $db_username, $db_password);
    if ('/' != $_SERVER['PATH_INFO'])
        $keys = explode('/', trim($_SERVER['PATH_INFO'], '/'));
}        
else {
//    $keys = array('Québec');
    $keys = array('district', 12004);
//    $keys = array('Manitoba', 'district', 12004);
    $dbh = new PDO('sqlite2:./cancan-2008.sqlite'); // success
//    $dbh = new PDO('sqlite:./cancan-2008.sqlite3'); // success
}

if (isset($_REQUEST['postal']) && (($postal = str_replace(' ', '', $_REQUEST['postal'])) && ('' !== $postal))) {
    $d_id = substr(file_get_contents("http://makethechange.ca/pc2csv/index.php?pc={$postal}&key=demo"), 0, 5);
    $d_id = intval($d_id);
    if ($d_id >= 10000) {
        header("Location: http://cancan.waglo.com/dataface/district/$d_id/");
        die();
    }
}

if (3 === count($keys) && ('district' === $keys[1])) {
    header("Location: http://cancan.waglo.com/dataface/{$keys[1]}/{$keys[2]}/", true, 301);
    die();
}

begin($keys);

if (isset($keys[1])) {
    if ('district' === $keys[0])
        district_info($keys, $dbh);
    else
        party_and_province_info($keys, $dbh);
}

if (isset($keys[0])) {
    province_info($keys, $dbh);
}

main($keys, $dbh);

echo "\n";
echo '</body></html>';

function main($keys, $dbh) {
    $sql = 'select province, count(*) as c from parliament group by province order by c desc';
    $so2 = $dbh->query($sql, PDO::FETCH_NUM);
    $so = $so2->fetchAll();
    $sql = "select parties.name_fr, count(edid) as c, party_id from parliament, candidates, parties where edid=district_id and province=? and parties.id=party_id group by party_id order by c desc";
    $ccpp = $dbh->prepare($sql);
    echo '<dl>';
    foreach ($so as $p) {
        $name = $p[0];
        $count = $p[1];
        $name_url = str_repeat('../', count($keys)) . urlencode($name) . '/';
        echo "<dt><a href='$name_url'>$name ($count circonscriptions)</a></dt>\n";
        $ccpp->execute(array($name));
        $candidates_counts = $ccpp->fetchAll(PDO::FETCH_NUM);
        foreach ($candidates_counts as $cc) {
            $party = $cc[0];
            $party_url = $name_url . $cc[2] . '/';
            $party_count = $cc[1];
            echo "<dd><a href='$party_url'>$party ($party_count candidats)</a></dd>\n";
        }
    }
    echo '</dl>';
}

function party_and_province_info($keys, $dbh) {
    // got party and province
    $province = urldecode($keys[0]);
    echo "<h2><a href='../'>$province</a></h2>";
    $province_db = $dbh->quote($province);
    $party_id = $keys[1];
    $sql = "select edid,districts.name_fr as s, first_name,last_name,phone, parties.name_fr from parliament,candidates,parties,districts where districts.id=edid and province=$province_db and edid=district_id and parties.id=party_id and party_id=$party_id order by s";

    $req = $dbh->query($sql, PDO::FETCH_NUM);
    $so = $req->fetchAll();
    echo "<h3>{$so[0][5]}</h3>";
    echo '<dl>';
    foreach ($so as $s) {
        echo "<dt><a href='../../district/{$s[0]}/'>{$s[1]}</a></dt>\n";
        echo "<dd>{$s[2]} {$s[3]} {$s[4]}</dd>\n";
    }
    echo '</dl>';
    echo '</body></html>';
    die();
}

function province_info($keys, $dbh) {
    // got province only
    $province_db = $dbh->quote($keys[0]);
    $sql = "select name_fr,edid,count(*) from parliament,districts,candidates where province=$province_db and districts.id=edid and edid=candidates.district_id group by edid order by name_fr";
    $req = $dbh->query($sql, PDO::FETCH_NUM);
    $so = $req->fetchAll();
    echo '<ol>';
    foreach ($so as $s) 
        echo "<li><a href='../district/{$s[1]}/'>{$s[0]} ({$s[2]} candidats)</a></li>\n";
    echo '</ol>';
    echo '</body></html>';
    die();
}

function candidate_results($edid) {
    $f = 'results-elections-canada-2008-utf8.csv';
    $fp = fopen($f, 'r');
    $ret = array();
    while (false !== ($data = fgetcsv($fp, 500, "\t"))) {
        if ($data[0] != $edid) continue;
        $ret[] = $data;
//        $num = count($data);
//        echo "<p> $num fields in line $row: <br /></p>\n";
//        $row++;
//        for ($c=0; $c < $num; $c++) {
//            echo $data[$c] . "<br />\n";
//        }
    }
    fclose($fp);

    return $ret;
}

function order_votes($a, $b) {
    if ($a[10] > $b[10]) return -1;
    if ($a[10] < $b[10]) return 1;
    return 0;

}

function district_info($keys, $dbh) {
    $edid = $keys[1];
    $results = candidate_results($edid);
    $sql = "select * from candidates,parties where district_id=$edid and parties.id=party_id order by last_name";
    $so = $dbh->query($sql, PDO::FETCH_NUM);
    $candidates_array = $so->fetchAll();

    $sql = "select * from districts where id=$edid";
    $so2 = $dbh->query($sql, PDO::FETCH_NUM);
    $districts_array = $so2->fetchAll();

    $sql = "select * from wikipedia where edid=$edid and language='fr'";
    $so3 = $dbh->query($sql, PDO::FETCH_NUM);
    $wikipedia_array = $so3->fetchAll();

    $sql = "select * from parliament where edid=$edid";
    $so4 = $dbh->query($sql, PDO::FETCH_NUM);
    $parliament_array = $so4->fetchAll();
    $p = $parliament_array[0];
    $province = $p[2];
    echo "<h2>{$districts_array[0][2]}</h2>\n";
    echo "<h3>Parlement</h3>\n";
    echo "<h4>{$p[4]} est {$p[5]} pour $province</h4>";
    echo "<p>Voir la circonscription <a href='http://webinfo.parl.gc.ca/MembersOfParliament/ProfileConstituency.aspx?Key={$p[0]}&Language=F'>{$districts_array[0][2]}</a> ou la page du <a href='http://webinfo.parl.gc.ca/MembersOfParliament/ProfileMP.aspx?Key={$p[3]}&Language=F'>député actuel ({$p[4]}) sur le site du parlement canadien</a>.</p>\n";

    if (isset($wikipedia_array[0][1])) {
        $w_url = 'http://fr.wikipedia.org/wiki/' . $wikipedia_array[0][1];
        $w_text = str_replace('_', ' ', urldecode($wikipedia_array[0][1]));
        echo "<p>Voir aussi <a href='$w_url'>$w_text</a> sur wikipedia.</p>\n";
    }

    $cand_name = str_replace("\n", ' ', $p[4]);
    list($n1, $n2) = explode(',', $cand_name);
    $n1 = trim($n1);
    $n2 = trim($n2);
    $cand_name_url = urlencode("{$n2}_{$n1}");

    echo "<h3>Candidats</h3>\n";
    echo '<ol>';

    usort($results, 'order_votes');
    $m1 = 0;
    foreach ($results as $r) {
        $status = $r[4];
        $name = "{$r[7]} {$r[6]} {$r[5]}";
        $party = $r[9];
        $votes = $r[10];
        $p_votes = $r[11];
        $rejects = $r[12];
        $total = $r[13];
        if ($m1)
            echo "<li>$name ($party) a reçu $votes votes ($p_votes) dont $rejects votes rejetés sur un total de $total ($status)</li>";
        else
            echo "<li><strong>$name ($party) a reçu $votes votes ($p_votes) pour être élu dont $rejects votes rejetés sur un total de $total ($status)</strong></li>";

        ++$m1;
    }

//    echo '<pre>';
//    print_r($results);
//    echo '</pre>';


/*
    foreach ($candidates_array as $c) {
        $style = "{$c[3]}, {$c[4]}" === $cand_name
            ? ' style="font-weight: bold"'
            : '';
        echo "<li$style>{$c[4]} {$c[5]} {$c[3]} est candidat pour <a href='../../$province/$c[2]/'>{$c[9]}</a> {$c[6]}</li>\n";
    }
*/    
    echo '</ol>';        

    echo "<h3>Liens supplémentaires</h3>\n";
    echo '<ul>';
    echo "<li><a href='http://notreparlement.ca/members/$cand_name_url'>Notre Parlement : $cand_name</a></li>\n";
    echo "<li><a href='http://ibelieveinopen.ca/results/riding/{$keys[1]}/'>Je crois à l'Ouverture pour {$districts_array[0][2]}</a></li>\n";
    echo "<li><a href='http://www.digital-copyright.ca/edid/{$keys[1]}'>Digital Copyright Canada sur {$districts_array[0][2]}</a></li>\n";
    echo "<li><a href='http://www12.statcan.ca/francais/census06/data/profiles/fedprofile/RetrieveTable.cfm?GC={$keys[1]}'>Statistiques Canada sur {$districts_array[0][2]}</a></li>\n";
    echo "<li><a href='http://www.greenparty.ca/en/campaign/{$keys[1]}'>Parti vert pour {$districts_array[0][2]}</a></li>\n";
    echo "<li><a href='http://www.liberal.ca/candidate_f.aspx?riding={$keys[1]}'>Libéral pour {$districts_array[0][2]}</a></li>\n";
    echo '</ul>';

    echo '</body></html>';
    die();
}

function begin($keys) {
    header('Content-Type: text/html;charset=utf-8');
    echo<<<E_O_T
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>{$keys[0]} / {$keys[1]} - Canada Elections 2008</title>
</head>
<body>
<h1>Élections Canada 2008</h1>
<p>Aller au menu principal de <a href='/dataface/'>dataface</a>. <form>Entrez un code postal : <input type='text' name='postal' size='10'> (via <a href='http://makethechange.ca/'>make the change</a>).</form></p>

<p>Voir le billet <a href='http://rym.waglo.com/wordpress/2008/09/14/candidats-2008-des-elections-canadiennes/'>Candidats 2008 des élections canadiennes</a> sur le carnet de Robin Millette pour plus d'info, laisser un commentaire ou contacter le responsable de <a href='http://cancan.waglo.com/'>cancan.waglo.com</a>. <a href='/dataface.phps'>Source</a> AGPL v3 et bases de données disponibles sur demande.</p>

E_O_T;
}


