function process() { header("Content-type: text/xml"); $this->template_name = 'pages/gmaps/allfields.tpl'; $sth = Field::query(array('_extra' => 'ISNULL(f.parent_fid) AND f.status = "open"', '_order' => 'f.fid')); $fields = array(); while ($field = $sth->fetchObject('Field')) { if (!$field->latitude || !$field->longitude) { continue; } $fields[] = $field; } $this->smarty->assign('fields', $fields); }
function process() { $this->title = "{$this->league->fullname} » Status Report"; $this->template_name = 'pages/league/status.tpl'; // make sure the teams are loaded $this->league->load_teams(); // TODO: we calculate_standings() here, but it's probably not necessary list($order, $season, $round) = $this->league->calculate_standings(array('round' => $this->league->current_round)); $fields = array(); $sth = Field::query(array('_extra' => '1 = 1', '_order' => 'f.code')); while ($field = $sth->fetchObject('Field')) { $fields[$field->code] = $field->region; } // Parse the schedule and accumulate per-team stats $sth = Game::query(array('league_id' => $this->league->league_id, '_order' => 'g.game_date, g.game_start, field_code')); while ($g = $sth->fetchObject('Game')) { $season[$g->home_team]->game_count++; $season[$g->away_team]->game_count++; list($code, $num) = explode(' ', $g->field_code); $season[$g->home_team]->region_game_counts[$fields[$code]]++; $season[$g->away_team]->region_game_counts[$fields[$code]]++; $season[$g->home_team]->home_game_count++; $season[$g->home_team]->opponent_counts[$g->away_name]++; $season[$g->away_team]->opponent_counts[$g->home_name]++; } $teams = array(); while (list(, $tid) = each($order)) { $team = $season[$tid]; $ratio = $team->preferred_field_ratio(); if ($ratio > 1) { # If ratio is > 1, lower it to 1 for display purposes $ratio = 1; } $ratio = sprintf("%.3f", $ratio); $check_ratio = $ratio; if ($team->game_count % 2) { $check_ratio = ($ratio * $team->game_count + 1) / ($team->game_count + 1); } list($team->preferred_ratio, $team->preferred_ratio_bad) = array($ratio, $check_ratio < 0.5); list($team->home_game_ratio, $team->home_game_ratio_bad) = _ratio_helper($team->home_game_count, $team->game_count); $teams[] = $team; } $this->smarty->assign('teams', $teams); return true; }
function generateForm(&$edit) { $this->smarty->assign('field_statuses', array('open' => 'open', 'closed' => 'closed')); $this->smarty->assign('ratings', field_rating_values()); // TODO: Should become Field::get_eligible_parents() $sth = Field::query(array('_extra' => 'ISNULL(parent_fid)', '_order' => 'f.name,f.num')); $parents = array(); $parents[0] = "---"; while ($p = $sth->fetch(PDO::FETCH_OBJ)) { $parents[$p->fid] = $p->fullname; } $this->smarty->assign('parents', $parents); $this->smarty->assign('regions', getOptionsFromEnum('field', 'region')); $this->smarty->assign('noyes', array(0 => 'No', 1 => 'Yes')); $this->smarty->assign('province_names', getProvinceNames()); $this->smarty->assign('state_names', getStateNames()); $this->smarty->assign('country_names', getCountryNames()); return true; }
function process() { global $lr_session; $this->template_name = 'pages/field/list.tpl'; $this->title = 'List Fields'; if ($lr_session->has_permission('field', 'list', 'closed')) { $status = ''; } else { $status = "AND (status = 'open' OR ISNULL(status))"; } $sth = Field::query(array('_extra' => "ISNULL(parent_fid) {$status}", '_order' => 'f.region,f.name')); $fields = array(); while ($field = $sth->fetch(PDO::FETCH_OBJ)) { if (!array_key_exists($field->region, $fields)) { $fields[$field->region] = array(); } array_push($fields[$field->region], $field); } $this->smarty->assign('fields_by_region', $fields); return true; }
function generateForm($data = array()) { $output = form_hidden("edit[step]", "confirm"); $output .= form_textfield("Field Identification", 'edit[num]', $data['num'], 15, 15, "Location of this field at the given site; cannot be 0"); $output .= form_select("Field Status", 'edit[status]', $data['status'], array('open' => 'open', 'closed' => 'closed')); $output .= form_select("Field Rating", 'edit[rating]', $data['rating'], field_rating_values(), "Rate this field on the scale provided"); // TODO: Should become Field::get_eligible_parents() $sth = Field::query(array('_extra' => 'ISNULL(parent_fid)', '_order' => 'f.name,f.num')); $parents = array(); $parents[0] = "---"; while ($p = $sth->fetch(PDO::FETCH_OBJ)) { $parents[$p->fid] = $p->fullname; } $output .= form_select("Parent Field", 'edit[parent_fid]', $data['parent_fid'], $parents, "Inherit location and name from other field"); if (!$data['parent_fid']) { $output .= form_textfield("Field Name", 'edit[name]', $data['name'], 35, 255, "Name of field (do not append number)"); $output .= form_textfield("Field Code", 'edit[code]', $data['code'], 3, 3, "Three-letter abbreviation for field site"); $output .= form_select("Region", 'edit[region]', $data['region'], getOptionsFromEnum('field', 'region'), "Area of city this field is located in"); $output .= form_select("Is indoor", 'edit[is_indoor]', $data['is_indoor'], array(0 => 'No', 1 => 'Yes'), "Is this an indoor field"); $output .= form_textfield('Street and Number', 'edit[location_street]', $data['location_street'], 25, 100); $output .= form_textfield('City', 'edit[location_city]', $data['location_city'], 25, 100, 'Name of city'); $output .= form_select('Province', 'edit[location_province]', $data['location_province'], getProvinceNames(), 'Select a province from the list'); $output .= form_textfield("Location Map", 'edit[location_url]', $data['location_url'], 50, 255, "URL for image that shows how to reach the field"); $output .= form_textfield("Layout Map", 'edit[layout_url]', $data['layout_url'], 50, 255, "URL for image that shows how to set up fields at the site"); $output .= form_textarea("Driving Directions", 'edit[driving_directions]', $data['driving_directions'], 60, 5, ""); $output .= form_textarea("Parking Details", 'edit[parking_details]', $data['parking_details'], 60, 5, ""); $output .= form_textarea("Transit Directions", 'edit[transit_directions]', $data['transit_directions'], 60, 5, ""); $output .= form_textarea("Biking Directions", 'edit[biking_directions]', $data['biking_directions'], 60, 5, ""); $output .= form_textarea("Public Washrooms", 'edit[washrooms]', $data['washrooms'], 60, 5, ""); $output .= form_textarea("Special Instructions", 'edit[public_instructions]', $data['public_instructions'], 60, 5, "Specific instructions for this site that don't fit any other category."); $output .= form_textarea("Private Instructions", 'edit[site_instructions]', $data['site_instructions'], 60, 5, "Instructions for this site that should be shown only to logged-in members."); $output .= form_textarea("Sponsorship", 'edit[sponsor]', $data['sponsor'], 60, 5, ""); } $output .= form_submit('Submit') . form_reset('Reset'); return form($output); }
function generateStatusPage() { global $dbh; // make sure the teams are loaded $this->league->load_teams(); list($order, $season, $round) = $this->league->calculate_standings(array('round' => $this->league->current_round)); $fields = array(); $sth = Field::query(array('_order' => 'f.code')); while ($field = $sth->fetchObject('Field')) { $fields[$field->code] = $field->region; } $output = para("This is a general field scheduling balance report for the league. The first number in each cell is the number of games that team has played at a given site. The second number, in brackets, is the team's average ranking for that site. Zero represents an unranked field."); $num_teams = sizeof($order); $header[] = array('data' => "Rating", 'rowspan' => 2); $header[] = array('data' => "Team", 'rowspan' => 2); // now gather all possible fields this league can use $sth = $dbh->prepare('SELECT DISTINCT IF(f.parent_fid, pf.code, f.code) AS field_code, TIME_FORMAT(g.game_start, "%H:%i") as game_start, IF(f.parent_fid, pf.region, f.region) AS field_region, IF(f.parent_fid, pf.fid, f.fid) AS fid, IF(f.parent_fid, pf.name, f.name) AS name FROM league_gameslot_availability a INNER JOIN gameslot g ON (g.slot_id = a.slot_id) LEFT JOIN field f ON (f.fid = g.fid) LEFT JOIN field pf ON (pf.fid = f.parent_fid) WHERE a.league_id = ? ORDER BY field_region DESC, field_code, game_start'); $sth->execute(array($this->league->league_id)); $last_region = ""; $field_region_count = 0; while ($row = $sth->fetch(PDO::FETCH_OBJ)) { $field_list[] = "{$row->field_code} {$row->game_start}"; $subheader[] = array('data' => l($row->field_code, "field/view/{$row->fid}", array('title' => $row->name)) . " {$row->game_start}", 'class' => "subtitle"); if ($last_region == $row->field_region) { $field_region_count++; } else { if ($field_region_count > 0) { $header[] = array('data' => $last_region, 'colspan' => $field_region_count); } $last_region = $row->field_region; $field_region_count = 1; } } // and make the last region header too if ($field_region_count > 0) { $header[] = array('data' => $last_region, 'colspan' => $field_region_count); } $header[] = array('data' => "Games", 'rowspan' => 2); $rows = array(); $rows[] = $subheader; $rowstyle = "standings_light"; // get the schedule $schedule = array(); $sth = Game::query(array('league_id' => $this->league->league_id, '_order' => 'g.game_date, g.game_start, field_code')); while ($g = $sth->fetchObject('Game')) { $schedule[] = $g; } // we'll cache these results, so we can compute avgs and highlight numbers too far from average $cache_rows = array(); $total_at_field = array(); $sum_field_rankings = array(); while (list(, $tid) = each($order)) { if ($rowstyle == "standings_light") { $rowstyle = "standings_dark"; } else { $rowstyle = "standings_light"; } $row = array(array('data' => $season[$tid]->rating, 'class' => "{$rowstyle}")); $row[] = array('data' => l($season[$tid]->name, "team/view/{$tid}"), 'class' => "{$rowstyle}"); // count number of games per field for this team: $numgames = 0; $count = array(); $site_ranks = array(); // parse the schedule reset($schedule); while (list(, $game) = each($schedule)) { if ($game->home_team == $tid || $game->away_team == $tid) { $numgames++; list($code, $num) = explode(' ', $game->field_code); $count["{$code} {$game->game_start}"]++; $rank = $game->get_site_ranking($tid); if ($rank != 'unranked') { $site_ranks["{$code} {$game->game_start}"] += $rank; } } } foreach ($field_list as $f) { $thisrow = array('data' => "0", 'class' => "{$rowstyle}", 'align' => 'center'); if ($count[$f]) { $thisrow['data'] = $count[$f] . sprintf(' (%.3f)', $site_ranks[$f] / $count[$f]); $total_at_field[$f] += $count[$f]; $sum_field_ranks[$f] += $site_ranks[$f]; } $row[] = $thisrow; } $row[] = array('data' => $numgames, 'class' => "{$rowstyle}", 'align' => "center"); $cache_rows[] = $row; } // pass through cached rows and highlight entries far from avg foreach ($cache_rows as $row) { $i = 3; // first data column foreach ($field_list as $f) { $avg = $total_at_field[$f] / $num_teams; // we'll consider more than 1.5 game from avg too much if ($avg - 1.5 > $row[$i]['data'] || $row[$i]['data'] > $avg + 1.5) { $row[$i]['data'] = "<b><font color='red'>" . $row[$i]['data'] . "</font></b>"; } $i++; // move to next column in cached row } $rows[] = $row; } // output totals lines $total_row = array(array('data' => "Total games:", 'colspan' => 2, 'align' => 'right')); $avg_row = array(array('data' => "Avg num at site:", 'colspan' => 2, 'align' => 'right')); $rank_row = array(array('data' => "Average Rank:", 'colspan' => 2, 'align' => 'right')); $column_idx = 1; foreach ($field_list as $f) { $total_row[$column_idx] = array('data' => "0", 'align' => 'center'); $avg_row[$column_idx] = array('data' => "0", 'align' => 'center'); $rank_row[$column_idx] = array('data' => "0", 'align' => 'center'); if ($total_at_field[$f]) { $total_row[$column_idx]['data'] = $total_at_field[$f]; $avg_row[$column_idx]['data'] = sprintf('%.1f', $total_at_field[$f] / $num_teams); $rank_row[$column_idx]['data'] = sprintf("%.3f", $sum_field_ranks[$f] / $total_at_field[$f]); } $column_idx++; } $rows[] = $total_row; $rows[] = $avg_row; $rows[] = $rank_row; $rows[] = array_merge(array(array('colspan' => 2, 'data' => '')), $subheader); //$output .= table($header, $rows); $output .= "<div class='listtable'>" . table($header, $rows) . "</div>"; return form($output); }