mirror of
https://github.com/Team254/cheesy-arena-lite.git
synced 2026-03-09 13:46:44 -04:00
Add support for reordering sponsor slides.
This commit is contained in:
@@ -84,8 +84,8 @@ func TestRankingsApi(t *testing.T) {
|
||||
func TestSponsorSlidesApi(t *testing.T) {
|
||||
web := setupTestWeb(t)
|
||||
|
||||
slide1 := model.SponsorSlide{1, "subtitle", "line1", "line2", "image", 2}
|
||||
slide2 := model.SponsorSlide{2, "Chezy Sponsaur", "Teh", "Chezy Pofs", "ejface.jpg", 54}
|
||||
slide1 := model.SponsorSlide{1, "subtitle", "line1", "line2", "image", 2, 0}
|
||||
slide2 := model.SponsorSlide{2, "Chezy Sponsaur", "Teh", "Chezy Pofs", "ejface.jpg", 54, 1}
|
||||
web.arena.Database.CreateSponsorSlide(&slide1)
|
||||
web.arena.Database.CreateSponsorSlide(&slide2)
|
||||
|
||||
|
||||
@@ -160,6 +160,7 @@ func (web *Web) saveLowerThird(lowerThird *model.LowerThird) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Swaps the lower third having the given ID with the one immediately above or below it.
|
||||
func (web *Web) reorderLowerThird(id int, moveUp bool) error {
|
||||
lowerThird, err := web.arena.Database.GetLowerThirdById(id)
|
||||
if err != nil {
|
||||
@@ -187,7 +188,7 @@ func (web *Web) reorderLowerThird(id int, moveUp bool) error {
|
||||
// The one to move is already at the limit; return an error to prevent a page reload.
|
||||
return fmt.Errorf("Already at the limit.")
|
||||
}
|
||||
adjacentLowerThird, err := web.arena.Database.GetLowerThirdById(lowerThirds[lowerThirdIndex].Id)
|
||||
adjacentLowerThird := &lowerThirds[lowerThirdIndex]
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -54,18 +54,21 @@ func (web *Web) sponsorSlidesPostHandler(w http.ResponseWriter, r *http.Request)
|
||||
handleWebErr(w, err)
|
||||
return
|
||||
}
|
||||
if r.PostFormValue("action") == "delete" {
|
||||
switch r.PostFormValue("action") {
|
||||
case "delete":
|
||||
err := web.arena.Database.DeleteSponsorSlide(sponsorSlide)
|
||||
if err != nil {
|
||||
handleWebErr(w, err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
case "save":
|
||||
displayTimeSec, _ := strconv.Atoi(r.PostFormValue("displayTimeSec"))
|
||||
if sponsorSlide == nil {
|
||||
sponsorSlide = &model.SponsorSlide{Subtitle: r.PostFormValue("subtitle"),
|
||||
Line1: r.PostFormValue("line1"), Line2: r.PostFormValue("line2"),
|
||||
Image: r.PostFormValue("image"), DisplayTimeSec: displayTimeSec}
|
||||
Image: r.PostFormValue("image"), DisplayTimeSec: displayTimeSec,
|
||||
DisplayOrder: web.arena.Database.GetNextSponsorSlideDisplayOrder(),
|
||||
}
|
||||
err = web.arena.Database.CreateSponsorSlide(sponsorSlide)
|
||||
} else {
|
||||
sponsorSlide.Subtitle = r.PostFormValue("subtitle")
|
||||
@@ -79,7 +82,65 @@ func (web *Web) sponsorSlidesPostHandler(w http.ResponseWriter, r *http.Request)
|
||||
handleWebErr(w, err)
|
||||
return
|
||||
}
|
||||
case "reorderUp":
|
||||
if err = web.reorderSponsorSlide(sponsorSlideId, true); err != nil {
|
||||
handleWebErr(w, err)
|
||||
return
|
||||
}
|
||||
case "reorderDown":
|
||||
if err = web.reorderSponsorSlide(sponsorSlideId, false); err != nil {
|
||||
handleWebErr(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
http.Redirect(w, r, "/setup/sponsor_slides", 303)
|
||||
}
|
||||
|
||||
// Swaps the sponsor slide having the given ID with the one immediately above or below it.
|
||||
func (web *Web) reorderSponsorSlide(id int, moveUp bool) error {
|
||||
sponsorSlide, err := web.arena.Database.GetSponsorSlideById(id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Get the sponsor slide to swap positions with.
|
||||
sponsorSlides, err := web.arena.Database.GetAllSponsorSlides()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
var sponsorSlideIndex int
|
||||
for i, slide := range sponsorSlides {
|
||||
if slide.Id == sponsorSlide.Id {
|
||||
sponsorSlideIndex = i
|
||||
break
|
||||
}
|
||||
}
|
||||
if moveUp {
|
||||
sponsorSlideIndex--
|
||||
} else {
|
||||
sponsorSlideIndex++
|
||||
}
|
||||
if sponsorSlideIndex < 0 || sponsorSlideIndex == len(sponsorSlides) {
|
||||
// The one to move is already at the limit; do nothing.
|
||||
return nil
|
||||
}
|
||||
adjacentSponsorSlide := &sponsorSlides[sponsorSlideIndex]
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Swap their display orders and save.
|
||||
sponsorSlide.DisplayOrder, adjacentSponsorSlide.DisplayOrder =
|
||||
adjacentSponsorSlide.DisplayOrder, sponsorSlide.DisplayOrder
|
||||
err = web.arena.Database.SaveSponsorSlide(sponsorSlide)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = web.arena.Database.SaveSponsorSlide(adjacentSponsorSlide)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -12,8 +12,10 @@ import (
|
||||
func TestSetupSponsorSlides(t *testing.T) {
|
||||
web := setupTestWeb(t)
|
||||
|
||||
web.arena.Database.CreateSponsorSlide(&model.SponsorSlide{0, "Subtitle", "Sponsor Line 1", "Sponsor Line 2", "", 10})
|
||||
web.arena.Database.CreateSponsorSlide(&model.SponsorSlide{0, "Subtitle", "", "", "Image.gif", 10})
|
||||
web.arena.Database.CreateSponsorSlide(&model.SponsorSlide{0, "Subtitle", "Sponsor Line 1", "Sponsor Line 2", "", 10,
|
||||
0})
|
||||
web.arena.Database.CreateSponsorSlide(&model.SponsorSlide{0, "Subtitle", "", "", "Image.gif", 10,
|
||||
1})
|
||||
|
||||
recorder := web.getHttpResponse("/setup/sponsor_slides")
|
||||
assert.Equal(t, 200, recorder.Code)
|
||||
@@ -43,4 +45,20 @@ func TestSetupSponsorSlides(t *testing.T) {
|
||||
assert.Contains(t, recorder.Body.String(), "Image2.gif")
|
||||
sponsorSlide, _ = web.arena.Database.GetSponsorSlideById(3)
|
||||
assert.NotNil(t, sponsorSlide)
|
||||
|
||||
sponsorSlides1, _ := web.arena.Database.GetAllSponsorSlides()
|
||||
recorder = web.postHttpResponse("/setup/sponsor_slides", "action=reorderUp&id=3")
|
||||
assert.Equal(t, 303, recorder.Code)
|
||||
sponsorSlides2, _ := web.arena.Database.GetAllSponsorSlides()
|
||||
if assert.Equal(t, 2, len(sponsorSlides1)) && assert.Equal(t, 2, len(sponsorSlides2)) {
|
||||
assert.Equal(t, sponsorSlides1[0].Id, sponsorSlides2[1].Id)
|
||||
assert.Equal(t, sponsorSlides1[1].Id, sponsorSlides2[0].Id)
|
||||
}
|
||||
recorder = web.postHttpResponse("/setup/sponsor_slides", "action=reorderDown&id=3")
|
||||
assert.Equal(t, 303, recorder.Code)
|
||||
sponsorSlides3, _ := web.arena.Database.GetAllSponsorSlides()
|
||||
if assert.Equal(t, 2, len(sponsorSlides1)) && assert.Equal(t, 2, len(sponsorSlides2)) {
|
||||
assert.Equal(t, sponsorSlides1[0].Id, sponsorSlides3[0].Id)
|
||||
assert.Equal(t, sponsorSlides1[1].Id, sponsorSlides3[1].Id)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user