Example #1
0
 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);
 }
Example #2
0
 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;
 }
Example #3
0
 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;
 }
Example #4
0
 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;
 }
Example #5
0
 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);
 }
Example #6
0
    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);
    }