| <?php |
| |
| #***************************************************************************** |
| # |
| # candidate.php |
| # |
| # Author: Karl Matthias |
| # Date: 2005-11-07 |
| # |
| # Description: This file defines the Article class which is used to define, |
| # and render as html, articles. |
| # |
| #**************************************************************************** |
| require_once("candidate_xml.php"); |
| |
| $candidates_root = getcwd() . '/'; |
| |
| function & get_candidate($id, $year="") { |
| if (!$year) $year = date("Y"); // if no year has been provided, use the current one. |
| $file_name = $GLOBALS['candidates_root'] . $year . '/' . $id . '.xml'; |
| |
| $candidate = get_candidate_from_file($file_name, $year); |
| |
| return $candidate; |
| } |
| |
| function & get_all_candidates($year = "") { |
| if (!$year) $year = date("Y"); // if no year has been provided, use the current one. |
| $candidates = array(); |
| $root = $GLOBALS['candidates_root'] . $year . '/'; |
| if (@$dh = opendir($root)) { |
| while (($file = readdir($dh)) !== false) { |
| if (ends_with($file, ".xml")) { |
| $file = $root.$file; |
| $candidate = get_candidate_from_file($file, $year); |
| if ($candidate->name) |
| array_push($candidates, $candidate); |
| } |
| } |
| closedir($dh); |
| } |
| |
| // Randomize the order of the candidates. |
| shuffle($candidates); |
| // usort($candidates, 'sort_candidates_cmp'); |
| return $candidates; |
| } |
| |
| /* |
| * Sort candidates by last name in ascending order (a-z). |
| * Note that this only sorts by last name since we do not currently |
| * need to be any smarter (i.e. we don't need to sort first by |
| * last name and then by first name). Also note that this algorithm |
| * assumes that the last word in the name of a candidate is their |
| * last name. We don't currently handle compound last names because |
| * we don't need to. |
| */ |
| function sort_candidates_cmp($a, $b) { |
| $a_names = explode(' ', trim($a->name)); |
| $b_names = explode(' ', trim($b->name)); |
| |
| $a_last_name = end($a_names); |
| $b_last_name = end($b_names); |
| |
| return strcmp($a_last_name, $b_last_name); |
| } |
| |
| function & get_candidate_from_file($file_name, $year) { |
| if (!file_exists($file_name)) { |
| return FALSE; |
| } |
| $candidate = get_candidate_from_xml($file_name); |
| |
| $image = trim($candidate->image); |
| if ($image) { |
| $image = "$year/$image"; |
| $candidate->image = $image; |
| } |
| |
| return $candidate; |
| } |
| |
| function & get_candidates_short_summary_as_html($year = "") { |
| if (!$year) $year = date("Y"); // if no year has been provided, use the current one. |
| $candidates = get_all_candidates($year); |
| $html = "<ul>"; |
| foreach ($candidates as $candidate) { |
| $html .= "<li>"; |
| $html .= "<a href=\"candidate.php?year=$year&id=$candidate->id\">$candidate->name</a>"; |
| $html .= "</li>"; |
| } |
| $html .= "</ul>"; |
| return $html; |
| } |
| |
| function ends_with($source, $pattern) { |
| $end = substr($source, strlen($source) - strlen($pattern)); |
| return strcmp($end, $pattern) == 0; |
| } |
| |
| class Candidate { |
| var $id; |
| var $type; |
| var $name; |
| var $email; |
| var $phone; |
| var $affiliation; |
| var $eclipse_affiliation; |
| var $contact; |
| var $image; |
| var $vision; |
| var $bio; |
| var $location; |
| |
| // Render this category in html format. |
| function to_html(& $html) { |
| $html .= "<h3><a href=\"$this->id\">$this->name</a></h3>"; |
| $html .= "<p>$this->type</p>"; |
| } |
| } |
| ?> |