Пример #1
0
 function process()
 {
     global $CONFIG;
     $this->template_name = 'pages/team/ical.tpl';
     $this->smarty->assign('team', $this->team);
     $this->smarty->assign('short_league_name', variable_get('app_org_short_name', 'League'));
     # Our timezone is specified as US/Eastern, but ical wants US-Eastern.  bleh.
     $timezone = preg_replace("!/!", "-", $CONFIG['localization']['local_tz']);
     $this->smarty->assign('timezone', $timezone);
     /*
      * Grab schedule info
      */
     $games = Game::load_many(array('either_team' => $this->team->team_id, 'published' => 1, '_order' => 'g.game_date DESC,g.game_start,g.game_id'));
     // We'll be outputting an ical
     header('Content-type: text/calendar; charset=UTF-8');
     // Prevent caching
     header("Cache-Control: no-cache, must-revalidate");
     // get domain URL for signing games
     $arr = explode('@', variable_get('app_admin_email', "@{$short_league_name}"));
     $this->smarty->assign('domain_url', $arr[1]);
     // date stamp this file
     // MUST be in UTC
     $this->smarty->assign('now', gmstrftime('%Y%m%dT%H%M%SZ'));
     while (list(, $game) = each($games)) {
         $opponent_id = $game->home_id == $this->team->team_id ? $game->away_id : $game->home_id;
         $game->opponent = Team::load(array('team_id' => $opponent_id));
         $game->field = Field::load(array('fid' => $game->fid));
     }
     $this->smarty->assign('games', $games);
 }
Пример #2
0
 function process()
 {
     $games = Game::load_many(array('league_id' => $this->league->league_id, '_order' => 'g.game_date,g.game_id'));
     if (!is_array($games)) {
         error_exit("There are no games scheduled for this league");
     }
     $s = new Spirit();
     $s->display_numeric_sotg = $this->league->display_numeric_sotg();
     // Start the output, let the browser know what type it is
     header('Content-type: text/x-csv');
     header("Content-Disposition: attachment; filename=\"spirit{$this->league_id}.csv\"");
     $out = fopen('php://output', 'w');
     $header = array_merge(array('Game #', 'Date', 'Giver Name', 'Giver ID', 'Given To', 'Given To ID', 'SOTG Total'), (array) $s->question_headings(), array('Comments'));
     fputcsv($out, $header);
     while (list(, $game) = each($games)) {
         $teams = array($game->home_team => $game->home_name, $game->away_team => $game->away_name);
         while (list($giver, $giver_name) = each($teams)) {
             $recipient = $game->get_opponent_id($giver);
             # Fetch spirit answers for games
             $entry = $game->get_spirit_entry($recipient);
             if (!$entry) {
                 $entry = array(comments => 'Team did not submit a spirit rating');
             }
             $thisrow = array($game->game_id, strftime('%a %b %d %Y', $game->timestamp), $giver_name, $giver, $teams[$recipient], $recipient, $entry['numeric_sotg'], $entry['timeliness'], $entry['rules_knowledge'], $entry['sportsmanship'], $entry['rating_overall'], $entry['score_entry_penalty'], $entry['comments']);
             fputcsv($out, $thisrow);
         }
     }
     fclose($out);
     // Returning would cause the Leaguerunner menus to be added
     exit;
 }
Пример #3
0
 function process()
 {
     $this->title = "Approve Scores";
     $this->template_name = 'pages/league/approvescores.tpl';
     $games = Game::load_many(array('league_id' => $this->league->league_id, 'game_date_past' => 1, '_extra_table' => 'score_entry se', '_extra' => 'se.game_id = s.game_id'));
     foreach ($games as $game) {
         $home = $game->get_score_entry($game->home_id);
         if (!$home) {
             $game->home_score_for = 'not entered';
             $game->home_score_against = 'not entered';
         } else {
             $game->home_score_for = $home->score_for;
             $game->home_score_against = $home->score_against;
         }
         $away = $game->get_score_entry($game->away_id);
         if (!$away) {
             $game->away_score_for = 'not entered';
             $game->away_score_against = 'not entered';
         } else {
             $game->away_score_for = $away->score_for;
             $game->away_score_against = $away->score_against;
         }
         $game->captains_email_list = player_rfc2822_address_list($game->get_captains(), true);
     }
     $this->smarty->assign('games', $games);
 }
Пример #4
0
 function process()
 {
     global $lr_session;
     $this->title = "{$this->team->name} » Spirit";
     $this->template_name = 'pages/team/spirit.tpl';
     // load the league
     $league = League::load(array('league_id' => $this->team->league_id));
     // if the person doesn't have permission to see this team's spirit, bail out
     if (!$lr_session->has_permission('team', 'view', $this->team->team_id, 'spirit')) {
         error_exit("You do not have permission to view this team's spirit results");
     }
     if ($league->display_sotg == 'coordinator_only' && !$lr_session->is_coordinator_of($league->league_id)) {
         error_exit("Spirit results are restricted to coordinator-only");
     }
     $s = new Spirit();
     $s->display_numeric_sotg = $league->display_numeric_sotg();
     /*
      * Grab schedule info
      */
     $games = Game::load_many(array('either_team' => $this->team->team_id, '_order' => 'g.game_date'));
     if (!is_array($games)) {
         error_exit('There are no games scheduled for this team');
     }
     $this->smarty->assign('question_keys', array_merge(array('full'), $s->question_keys(), array('score_entry_penalty')));
     $this->smarty->assign('question_headings', $s->question_headings());
     $this->smarty->assign('num_spirit_columns', count($s->question_headings()) + 1);
     $this->smarty->assign('num_comment_columns', count($s->question_headings()) + 2);
     $rows = array();
     foreach ($games as $game) {
         if (!$game->is_finalized()) {
             continue;
         }
         if ($game->home_id == $this->team->team_id) {
             $opponent_id = $game->away_id;
             $opponent_name = $game->away_name;
             $home_away = '(home)';
         } else {
             $opponent_id = $game->home_id;
             $opponent_name = $game->home_name;
             $home_away = '(away)';
         }
         $thisrow = array('game_id' => $game->game_id, 'day_id' => $game->day_id, 'given_by_id' => $opponent_id, 'given_by_name' => $opponent_name, 'has_entry' => 0);
         # Fetch spirit answers for games
         $entry = $game->get_spirit_entry($this->team->team_id);
         if (!$entry) {
             $rows[] = $thisrow;
             continue;
         }
         $thisrow['has_entry'] = 1;
         // can only see comments if you're a coordinator
         if ($lr_session->has_permission('league', 'view', $this->team->league_id, 'spirit')) {
             $thisrow['comments'] = $entry['comments'];
         }
         $thisrow = array_merge($thisrow, (array) $s->fetch_game_spirit_items_html($entry));
         $rows[] = $thisrow;
     }
     $this->smarty->assign('spirit_detail', $rows);
     return true;
 }
Пример #5
0
 function process()
 {
     global $lr_session;
     $this->title = "{$this->league->fullname} » Spirit";
     $this->template_name = 'pages/league/spirit.tpl';
     $s = new Spirit();
     $s->display_numeric_sotg = $this->league->display_numeric_sotg();
     $this->smarty->assign('question_headings', $s->question_headings());
     $this->smarty->assign('spirit_summary', $s->league_sotg($this->league));
     $this->smarty->assign('spirit_avg', $s->league_sotg_averages($this->league));
     $this->smarty->assign('spirit_dev', $s->league_sotg_std_dev($this->league));
     if (!$lr_session->is_coordinator_of($this->league)) {
         return true;
     }
     $games = Game::load_many(array('league_id' => $this->league->league_id, '_order' => 'g.game_date,g.game_id'));
     if (!is_array($games)) {
         error_exit("There are no games scheduled for this league");
     }
     $this->smarty->assign('question_keys', array_merge(array('full'), $s->question_keys(), array('score_entry_penalty')));
     $this->smarty->assign('num_spirit_columns', count($s->question_headings()) + 1);
     $this->smarty->assign('num_comment_columns', count($s->question_headings()) + 2);
     $rows = array();
     foreach ($games as $game) {
         $teams = array($game->home_team => $game->home_name, $game->away_team => $game->away_name);
         while (list($giver, ) = each($teams)) {
             $recipient = $game->get_opponent_id($giver);
             $thisrow = array('game_id' => $game->game_id, 'day_id' => $game->day_id, 'given_by_id' => $giver, 'given_by_name' => $teams[$giver], 'given_to_id' => $recipient, 'given_to_name' => $teams[$recipient], 'has_entry' => 0);
             # Fetch spirit answers for games
             $entry = $game->get_spirit_entry($recipient);
             if (!$entry) {
                 $rows[] = $thisrow;
                 continue;
             }
             $thisrow['has_entry'] = 1;
             $thisrow = array_merge($thisrow, (array) $s->fetch_game_spirit_items_html($entry));
             $thisrow['comments'] = $entry['comments'];
             $rows[] = $thisrow;
         }
     }
     $this->smarty->assign('spirit_detail', $rows);
     return true;
 }
Пример #6
0
 function process()
 {
     global $lr_session;
     $this->title = "{$this->team->name} » Schedule";
     $this->template_name = 'pages/team/schedule.tpl';
     $games = Game::load_many(array('either_team' => $this->team->team_id, 'published' => 1, '_order' => 'g.game_date,g.game_start,g.game_id'));
     if (!count($games)) {
         error_exit('This team does not yet have any games scheduled');
     }
     foreach ($games as $g) {
         if ($g->is_finalized()) {
             /* Already entered */
             $g->score_type = 'final';
         } else {
             /* Not finalized yet, so we will either:
              *   - display entered score if present
              *   - display score entry link if game date has passed
              *   - display a blank otherwise
              */
             $entered = $g->get_score_entry($this->team->team_id);
             if ($entered) {
                 $g->score_type = 'unofficial';
                 if ($g->home_id == $this->team->team_id) {
                     $g->home_score = $entered->score_for;
                     $g->away_score = $entered->score_against;
                 } else {
                     $g->away_score = $entered->score_for;
                     $g->home_score = $entered->score_against;
                 }
             } else {
                 if ($lr_session->has_permission('game', 'submit score', $g, $this->team) && $g->timestamp < time()) {
                     $g->score_type = l("submit score", "game/submitscore/{$g->game_id}/" . $this->team->team_id);
                 }
             }
         }
     }
     $this->smarty->assign('can_edit', false);
     $this->smarty->assign('games', $games);
     $this->smarty->assign('team', $this->team);
     return true;
 }
Пример #7
0
 /**
  * Swap this team with another team, updating schedules
  */
 function swap_team_with($other)
 {
     if (!$other) {
         return false;
     }
     $this_league_id = $this->league_id;
     $other_league_id = $other->league_id;
     // Moving to same league is silly
     if ($this_league_id == $other_league_id) {
         return false;
     }
     # Move team to other league
     $this->move_team_to($other_league_id);
     $other->move_team_to($this_league_id);
     # Get future games for $this and $other
     $this_games = Game::load_many(array('either_team' => $this->team_id, 'game_date_future' => 1));
     $other_games = Game::load_many(array('either_team' => $other->team_id, 'game_date_future' => 1));
     # Update future unplayed games in both leagues
     foreach ($this_games as $game) {
         if ($game->home_id == $this->team_id) {
             $game->set('home_team', $other->team_id);
         } else {
             $game->set('away_team', $other->team_id);
         }
         $game->save();
     }
     foreach ($other_games as $game) {
         if ($game->home_id == $other->team_id) {
             $game->set('home_team', $this->team_id);
         } else {
             $game->set('away_team', $this->team_id);
         }
         $game->save();
     }
     return true;
 }
Пример #8
0
 function process()
 {
     $this->title = "{$this->league->fullname} &raquo; Scores";
     $this->template_name = 'pages/league/headtohead.tpl';
     if ($this->league->schedule_type == 'none') {
         error_exit("This league does not have a schedule or standings.");
     }
     // TODO: do we need to handle multiple rounds differently?
     list($order, $season, $round) = $this->league->calculate_standings();
     $teams = array();
     foreach ($order as $tid) {
         $row = array();
         // grab schedule information
         $games = Game::load_many(array('either_team' => $tid, '_order' => 'g.game_date,g.game_start,g.game_id'));
         $gameentry = array();
         foreach ($games as &$game) {
             if ($game->home_id == $tid) {
                 $opponent_id = $game->away_id;
             } else {
                 $opponent_id = $game->home_id;
             }
             // if score finalized, save game for printing
             if ($game->is_finalized()) {
                 $gameentry[$opponent_id][] = $game;
             }
         }
         // output game results row
         foreach ($order as $opponent_id) {
             if ($opponent_id == $tid) {
                 // no games against my own team
                 $row[] = array('data' => '&nbsp;', 'class' => 'impossible');
                 continue;
             }
             if (!array_key_exists($opponent_id, $gameentry)) {
                 // no games against this team
                 $row[] = array('data' => '&nbsp;');
                 continue;
             }
             $results = array();
             $wins = $losses = 0;
             foreach ($gameentry[$opponent_id] as &$game) {
                 $game_score = '';
                 $game_result = "";
                 switch ($game->status) {
                     case 'home_default':
                         $game_score = "(default)";
                         $game_result = "{$game->home_name} defaulted";
                         break;
                     case 'away_default':
                         $game_score = "(default)";
                         $game_result = "{$game->away_name} defaulted";
                         break;
                     case 'forfeit':
                         $game_score = "(forfeit)";
                         $game_result = "forfeit";
                         break;
                     default:
                         //normal finalized game
                         if ($game->home_id == $tid) {
                             $opponent_name = $game->away_name;
                             $game_score = "{$game->home_score}-{$game->away_score}";
                             if ($game->home_score > $game->away_score) {
                                 $wins++;
                             } else {
                                 if ($game->home_score < $game->away_score) {
                                     $losses++;
                                 }
                             }
                         } else {
                             $opponent_name = $game->home_name;
                             $game_score = "{$game->away_score}-{$game->home_score}";
                             if ($game->away_score > $game->home_score) {
                                 $wins++;
                             } else {
                                 if ($game->away_score < $game->home_score) {
                                     $losses++;
                                 }
                             }
                         }
                         if ($game->home_score > $game->away_score) {
                             $game_result = "{$game->home_name} defeated {$game->away_name}" . " {$game->home_score}-{$game->away_score}";
                         } else {
                             if ($game->home_score < $game->away_score) {
                                 $game_result = "{$game->away_name} defeated {$game->home_name}" . " {$game->away_score}-{$game->home_score}";
                             } else {
                                 $game_result = "{$game->home_name} and {$game->away_name} tied {$game_score}";
                             }
                         }
                         $game_result .= " ({$game->rating_points} rating points transferred)";
                 }
                 $popup = strftime('%a %b %d', $game->timestamp) . " at {$game->field_code}: {$game_result}";
                 $results[] = l($game_score, "game/view/{$game->game_id}", array('title' => htmlspecialchars($popup)));
             }
             $thiscell = implode('<br />', $results);
             if ($thiscell == '') {
                 $thiscell = '&nbsp;';
             }
             if ($wins > $losses) {
                 /* $row[] = array('data'=>$thiscell, 'bgcolor'=>'#A0FFA0'); */
                 $row[] = array('data' => $thiscell, 'class' => 'winning');
             } else {
                 if ($wins < $losses) {
                     $row[] = array('data' => $thiscell, 'class' => 'losing');
                 } else {
                     $row[] = array('data' => $thiscell);
                 }
             }
         }
         $season[$tid]->headtohead = $row;
         $teams[] = $season[$tid];
     }
     $this->smarty->assign('teams', $teams);
 }
Пример #9
0
 function reschedule_games_for_day($olddate, $newdate)
 {
     global $dbh;
     $dbh->beginTransaction();
     $games_list = Game::load_many(array('league_id' => $this->league_id, 'game_date' => strftime("%Y-%m-%d", $olddate)));
     $gameslot_sth = $dbh->prepare('UPDATE gameslot SET game_id = NULL where game_id = ?');
     $fieldranking_sth = $dbh->prepare('DELETE FROM field_ranking_stats WHERE game_id = ?');
     foreach ($games_list as $game) {
         $gameslot_sth->execute(array($game->game_id));
         $fieldranking_sth->execute(array($game->game_id));
         $game->slot_id = null;
     }
     try {
         $this->assign_fields_by_preferences($games_list, $newdate);
     } catch (Exception $e) {
         $extra_errors = $e->getMessage();
         if (!$dbh->rollback()) {
             $extra_errors .= "<br />Also, failed to roll back transaction.  Please contact the system administrator";
         }
         return array(false, "Failed to assign gameslots for requested games on " . strftime('%c', $datestamp) . ": {$extra_errors}");
     }
     $rc = $dbh->commit();
     if (!$rc) {
         return array(false, 'Transaction commit failed');
     }
     return array(true, '');
 }