. // represents a categorization of students // abstract class Categorization { abstract function name(); // returns descriptive name abstract function categories(); // returns list of categories abstract function categorize($user); // returns a student's category } class CatSex extends Categorization { function name() { return "Sex"; } function categories() { return array ("Male", "Female", "Unknown"); } function categorize($user) { switch ($user->bolt->sex) { case 1: return "Male"; case 2: return "Female"; default: return "Unknown"; } } } $x = localtime(time(), true); $this_year = 1900 + $x['tm_year']; class CatAge20 extends Categorization { function name() { return "Age (20-year groups)"; } function categories() { return array("0-19", "20-39", "40-59", "60-79", "80+", "Unknown"); } function categorize($user) { if (!$user->bolt->birth_year) return "Unknown"; global $this_year; $n = $this_year - $user->bolt->birth_year; if ($n < 20) return "0-19"; if ($n < 40) return "20-39"; if ($n < 60) return "40-59"; if ($n < 80) return "60-79"; return "80+"; } } $categorizations = array(new CatSex(), new CatAge20()); function lookup_categorization($name) { global $categorizations; foreach ($categorizations as $c) { if ($c->name() == $name) return $c; } return null; } function filter_form($sel_name, $sel_cat) { global $categorizations; $checked = (!$sel_name || $sel_name == "none")?"checked":""; echo " Filter by: "; } function breakdown_form($sel_name) { global $categorizations; $checked = (!$sel_name || $sel_name == "none")?"checked":""; echo " Break down by: "; } // get filter and breakdown from form vars // function get_filters_from_form() { global $breakdown, $breakdown_cat, $filter, $filter_cat; $breakdown_cat = null; $breakdown_info = get_str('breakdown', true); if ($breakdown_info && $breakdown_info != 'none') { $arr = explode(":", $breakdown_info); $breakdown_name = $arr[0]; if (count($arr) == 2) { $breakdown_cat = $arr[1]; } $breakdown = lookup_categorization($breakdown_name); if (!$breakdown) error_page("unknown breakdown $breakdown_name"); } else { $breakdown = null; } $filter_info = get_str('filter', true); if ($filter_info && $filter_info != "none") { $arr = explode(":", $filter_info); $filter_name = $arr[0]; $filter_cat = $arr[1]; $filter = lookup_categorization($filter_name); if (!$filter) error_page("unknown filter $filter_name"); } else { $filter_cat = ""; $filter = null; } } ?>