diff --git a/admin_games.go b/admin_games.go index 0beb47f..209a4ac 100644 --- a/admin_games.go +++ b/admin_games.go @@ -1,6 +1,32 @@ package main -import "net/http" +import ( + "net/http" + "strings" + + "github.com/gorilla/mux" +) func handleAdminGames(w http.ResponseWriter, req *http.Request, page *pageData) { + vars := mux.Vars(req) + page.SubTitle = "Games" + gameId := vars["id"] + teamId := req.FormValue("teamid") + if strings.TrimSpace(teamId) != "" { + page.session.setStringValue("teamid", teamId) + page.TeamID = teamId + } + if gameId == "new" { + switch vars["function"] { + case "save": + name := req.FormValue("gamename") + if dbIsValidTeam(teamId) { + if dbEditTeamGame(teamId, name) != nil { + } + } + default: + page.SubTitle = "Add New Game" + page.show("admin-addgame.html", w) + } + } } diff --git a/admin_teams.go b/admin_teams.go index 02be4fc..7d02c17 100644 --- a/admin_teams.go +++ b/admin_teams.go @@ -14,7 +14,7 @@ func handleAdminTeams(w http.ResponseWriter, req *http.Request, page *pageData) switch vars["function"] { case "save": name := req.FormValue("teamname") - if dbIsValidTeam(name) { + if dbGetTeamByName(name) != nil { // A team with that name already exists page.session.setFlashMessage("A team with the name "+name+" already exists!", "error") } else { @@ -48,6 +48,8 @@ func handleAdminTeams(w http.ResponseWriter, req *http.Request, page *pageData) page.session.setFlashMessage("Error deleting team: "+err.Error(), "error") } redirect("/admin/teams", w, req) + case "savemember": + redirect("/admin/teams/"+teamId, w, req) default: page.SubTitle = "Edit Team" t := dbGetTeam(teamId) diff --git a/assets/css/admin.css b/assets/css/admin.css index 9e1a1ca..4033ccf 100644 --- a/assets/css/admin.css +++ b/assets/css/admin.css @@ -1,3 +1,7 @@ div.content { margin-left: 150px; } + +div.bottom-space { + margin-bottom: 15px; +} diff --git a/assets/css/gjvote.css b/assets/css/gjvote.css index 1a0a702..931f8d1 100644 --- a/assets/css/gjvote.css +++ b/assets/css/gjvote.css @@ -57,6 +57,10 @@ div.content { background-color: #191818; } +input.uuid-field { + width: 360px; +} + @media (min-width: 40em) { #menu { width: 150px; diff --git a/main.go b/main.go index 06bb629..70b2ffb 100644 --- a/main.go +++ b/main.go @@ -53,6 +53,7 @@ type pageData struct { CurrentJam string ClientID string ClientIsAuth bool + TeamID string TemplateData interface{} } @@ -237,6 +238,7 @@ func InitPageData(w http.ResponseWriter, req *http.Request) *pageData { p.ClientID = p.session.getClientID() p.ClientIsAuth = dbClientIsAuth(p.ClientID) + p.TeamID, _ = p.session.getStringValue("teamid") return p } diff --git a/model_games.go b/model_games.go index b09cc28..50b3538 100644 --- a/model_games.go +++ b/model_games.go @@ -6,3 +6,7 @@ type Game struct { UUID *uuid.UUID Name string } + +func dbIsValidGame(id string) bool { + return true +} diff --git a/model_teams.go b/model_teams.go index 3f57bd9..12750ba 100644 --- a/model_teams.go +++ b/model_teams.go @@ -1,6 +1,8 @@ package main import ( + "errors" + "github.com/pborman/uuid" ) @@ -145,3 +147,66 @@ func dbDeleteTeam(id string) error { teamPath := []string{"teams"} return db.DeleteBucket(teamPath, id) } + +func dbEditTeamGame(teamid, name string) error { + var err error + if err = db.OpenDB(); err != nil { + return err + } + defer db.CloseDB() + + gamePath := []string{"teams", teamid, "game"} + return db.SetValue(gamePath, "name", name) +} + +func dbGetTeamMembers(teamid string) ([]TeamMember, error) { + var ret []TeamMember + var err error + if err = db.OpenDB(); err != nil { + return ret, nil + } + defer db.CloseDB() + + teamMbrPath := []string{"teams", teamid, "members"} + var memberUuids []string + if memberUuids, err = db.GetBucketList(teamMbrPath); err != nil { + for _, v := range memberUuids { + var mbr *TeamMember + if mbr, err = dbGetTeamMember(teamid, v); err != nil { + ret = append(ret, *mbr) + } + } + } + return ret, nil +} + +func dbGetTeamMember(teamid, mbrid string) (*TeamMember, error) { + var err error + if err = db.OpenDB(); err != nil { + return nil, err + } + defer db.CloseDB() + + teamMbrPath := []string{"teams", teamid, "members", mbrid} + var memberUuids []string + if memberUuids, err = db.GetBucketList(teamMbrPath); err != nil { + for _, v := range memberUuids { + mbr := new(TeamMember) + mbr.UUID = v + if mbr.Name, err = db.GetValue(append(teamMbrPath, v), "name"); err != nil { + return nil, err + } + if mbr.SlackId, err = db.GetValue(append(teamMbrPath, v), "slackid"); err != nil { + return nil, err + } + if mbr.Twitter, err = db.GetValue(append(teamMbrPath, v), "twitter"); err != nil { + return nil, err + } + if mbr.Email, err = db.GetValue(append(teamMbrPath, v), "email"); err != nil { + return nil, err + } + return mbr, err + } + } + return nil, errors.New("Couldn't find team member") +} diff --git a/templates/admin-addgame.html b/templates/admin-addgame.html new file mode 100644 index 0000000..a05095b --- /dev/null +++ b/templates/admin-addgame.html @@ -0,0 +1,12 @@ +
+
+
+
+ + +
+ + +
+
+
diff --git a/templates/admin-addteam.html b/templates/admin-addteam.html index 6949e1f..b202ce2 100644 --- a/templates/admin-addteam.html +++ b/templates/admin-addteam.html @@ -6,6 +6,44 @@ +

Members

+ + + + + + + + + + + + + + + + + +
NameSlack IDTwitterEmail
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
diff --git a/templates/admin-editteam.html b/templates/admin-editteam.html index 158f93b..cfd42ae 100644 --- a/templates/admin-editteam.html +++ b/templates/admin-editteam.html @@ -7,7 +7,7 @@
- +
@@ -17,6 +17,48 @@
+ +

Members

+
+
+ + + + + + + + + + + + {{ range $i, $v := .TemplateData.Members }} + + + + + + + + {{ end }} + + + + + + + + + + + +
NameSlack IDTwitterEmail
{{ $v.Name }}{{ $v.SlackID }}{{ $v.Twitter }}{{ $v.Email }} + + +
Add a new member
+
+
+