mirror of
https://github.com/Team254/cheesy-arena-lite.git
synced 2026-03-09 21:56:50 -04:00
Add button to re-download team info from TBA and overwrite local edits.
This commit is contained in:
@@ -26,6 +26,11 @@
|
||||
<div class="form-group">
|
||||
<button type="submit" class="btn btn-info">Add Teams</button>
|
||||
</div>
|
||||
{{if .EventSettings.TBADownloadEnabled}}
|
||||
<div class="form-group">
|
||||
<a href="/setup/teams/refresh" class="btn btn-info">Refresh Team Data from TBA</a>
|
||||
</div>
|
||||
{{end}}
|
||||
<div class="form-group">
|
||||
<button type="button" class="btn btn-primary" onclick="$('#confirmClearTeams').modal('show');">
|
||||
Clear Team List
|
||||
|
||||
@@ -48,13 +48,14 @@ func (web *Web) teamsPostHandler(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
for _, teamNumber := range teamNumbers {
|
||||
team, err := web.getOfficialTeamInfo(teamNumber)
|
||||
if err != nil {
|
||||
handleWebErr(w, err)
|
||||
return
|
||||
team := model.Team{Id: teamNumber}
|
||||
if web.arena.EventSettings.TBADownloadEnabled {
|
||||
if err := web.populateOfficialTeamInfo(&team); err != nil {
|
||||
handleWebErr(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
err = web.arena.Database.CreateTeam(team)
|
||||
if err != nil {
|
||||
if err := web.arena.Database.CreateTeam(&team); err != nil {
|
||||
handleWebErr(w, err)
|
||||
return
|
||||
}
|
||||
@@ -62,6 +63,32 @@ func (web *Web) teamsPostHandler(w http.ResponseWriter, r *http.Request) {
|
||||
http.Redirect(w, r, "/setup/teams", 303)
|
||||
}
|
||||
|
||||
// Re-downloads the data for all teams from TBA and overwrites any local edits.
|
||||
func (web *Web) teamsRefreshHandler(w http.ResponseWriter, r *http.Request) {
|
||||
if !web.userIsAdmin(w, r) {
|
||||
return
|
||||
}
|
||||
|
||||
teams, err := web.arena.Database.GetAllTeams()
|
||||
if err != nil {
|
||||
handleWebErr(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
for _, team := range teams {
|
||||
if err = web.populateOfficialTeamInfo(&team); err != nil {
|
||||
handleWebErr(w, err)
|
||||
return
|
||||
}
|
||||
if err = web.arena.Database.SaveTeam(&team); err != nil {
|
||||
handleWebErr(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
http.Redirect(w, r, "/setup/teams", 303)
|
||||
}
|
||||
|
||||
// Clears the team list.
|
||||
func (web *Web) teamsClearHandler(w http.ResponseWriter, r *http.Request) {
|
||||
if !web.userIsAdmin(w, r) {
|
||||
@@ -261,54 +288,45 @@ func (web *Web) canModifyTeamList() bool {
|
||||
}
|
||||
|
||||
// Returns the data for the given team number.
|
||||
func (web *Web) getOfficialTeamInfo(teamId int) (*model.Team, error) {
|
||||
// Create the team variable that stores the result
|
||||
var team model.Team
|
||||
|
||||
if web.arena.EventSettings.TBADownloadEnabled {
|
||||
tbaTeam, err := web.arena.TbaClient.GetTeam(teamId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Check if the result is valid. If a team is not found, just return a basic team
|
||||
if tbaTeam.TeamNumber == 0 {
|
||||
team = model.Team{Id: teamId}
|
||||
} else {
|
||||
robotName, err := web.arena.TbaClient.GetRobotName(teamId, time.Now().Year())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
recentAwards, err := web.arena.TbaClient.GetTeamAwards(teamId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var accomplishmentsBuffer bytes.Buffer
|
||||
|
||||
// Generate string of recent awards in reverse chronological order.
|
||||
for i := len(recentAwards) - 1; i >= 0; i-- {
|
||||
award := recentAwards[i]
|
||||
if time.Now().Year()-award.Year <= 2 {
|
||||
accomplishmentsBuffer.WriteString(fmt.Sprintf("<p>%d %s - %s</p>", award.Year, award.EventName,
|
||||
award.Name))
|
||||
}
|
||||
}
|
||||
|
||||
// Download and store the team's avatar; if there isn't one, ignore the error.
|
||||
web.arena.TbaClient.DownloadTeamAvatar(teamId, time.Now().Year())
|
||||
|
||||
// Use those variables to make a team object
|
||||
team = model.Team{Id: teamId, Name: tbaTeam.Name, Nickname: tbaTeam.Nickname, City: tbaTeam.City,
|
||||
StateProv: tbaTeam.StateProv, Country: tbaTeam.Country, RookieYear: tbaTeam.RookieYear,
|
||||
RobotName: robotName, Accomplishments: accomplishmentsBuffer.String()}
|
||||
}
|
||||
} else {
|
||||
// If team grab is disabled, just use the team number
|
||||
team = model.Team{Id: teamId}
|
||||
func (web *Web) populateOfficialTeamInfo(team *model.Team) error {
|
||||
tbaTeam, err := web.arena.TbaClient.GetTeam(team.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Return the team object
|
||||
return &team, nil
|
||||
// Check if the result is valid. If a team is not found, it will just not have its detail fields filled out.
|
||||
if tbaTeam.TeamNumber == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
team.Name = tbaTeam.Name
|
||||
team.Nickname = tbaTeam.Nickname
|
||||
team.City = tbaTeam.City
|
||||
team.StateProv = tbaTeam.StateProv
|
||||
team.Country = tbaTeam.Country
|
||||
team.RookieYear = tbaTeam.RookieYear
|
||||
team.RobotName, err = web.arena.TbaClient.GetRobotName(team.Id, time.Now().Year())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Generate string of recent awards in reverse chronological order.
|
||||
recentAwards, err := web.arena.TbaClient.GetTeamAwards(team.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
var accomplishmentsBuffer bytes.Buffer
|
||||
for i := len(recentAwards) - 1; i >= 0; i-- {
|
||||
award := recentAwards[i]
|
||||
if time.Now().Year()-award.Year <= 2 {
|
||||
accomplishmentsBuffer.WriteString(fmt.Sprintf("<p>%d %s - %s</p>", award.Year, award.EventName,
|
||||
award.Name))
|
||||
}
|
||||
}
|
||||
team.Accomplishments = accomplishmentsBuffer.String()
|
||||
|
||||
// Download and store the team's avatar; if there isn't one, ignore the error.
|
||||
web.arena.TbaClient.DownloadTeamAvatar(team.Id, time.Now().Year())
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -107,6 +107,13 @@ func TestSetupTeams(t *testing.T) {
|
||||
recorder = web.getHttpResponse("/setup/teams")
|
||||
assert.Contains(t, recorder.Body.String(), "Teh Chezy Pofs")
|
||||
|
||||
// Re-download team info from TBA.
|
||||
recorder = web.getHttpResponse("/setup/teams/refresh")
|
||||
assert.Equal(t, 303, recorder.Code)
|
||||
recorder = web.getHttpResponse("/setup/teams")
|
||||
assert.Contains(t, recorder.Body.String(), "The Cheesy Poofs")
|
||||
assert.NotContains(t, recorder.Body.String(), "Teh Chezy Pofs")
|
||||
|
||||
// Delete a team.
|
||||
recorder = web.postHttpResponse("/setup/teams/1114/delete", "")
|
||||
assert.Equal(t, 303, recorder.Code)
|
||||
|
||||
@@ -195,6 +195,7 @@ func (web *Web) newHandler() http.Handler {
|
||||
router.HandleFunc("/setup/teams/clear", web.teamsClearHandler).Methods("POST")
|
||||
router.HandleFunc("/setup/teams/generate_wpa_keys", web.teamsGenerateWpaKeysHandler).Methods("GET")
|
||||
router.HandleFunc("/setup/teams/publish", web.teamsPublishHandler).Methods("POST")
|
||||
router.HandleFunc("/setup/teams/refresh", web.teamsRefreshHandler).Methods("GET")
|
||||
return router
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user