package main import ( "html/template" "strings" "net/http" . "git.1750studios.com/gronkhDE/gogronkh/gserver/utlis" "git.1750studios.com/gronkhDE/gogronkh/database" "github.com/gin-gonic/gin" ) func GetIndex(c *gin.Context) { var EPs []database.Episode database.Db.Order("aired desc").Limit(50).Find(&EPs) var data []gin.H for _, EP := range EPs { var LP database.LetsPlay var AT database.Author database.Db.Model(&EP).Related(&LP).Related(&AT) data = append(data, gin.H{"EP": EP, "LP": LP, "AT": AT}) } c.HTML(http.StatusOK, "index.html", gin.H{ "title": "Neue Episoden", "data": data, }) } func GetLps(c *gin.Context) { var LPs []database.LetsPlay database.Db.Where("aired IS NOT NULL").Order("name asc").Find(&LPs) var data []gin.H for _, LP := range LPs { var AT database.Author database.Db.Model(&LP).Related(&AT) data = append(data, gin.H{"LP": LP, "AT": AT}) } c.HTML(http.StatusOK, "lps.html", gin.H{ "title": "Let's Plays", "data": data, }) } func GetLt(c *gin.Context) { if tslug, ok := CleanParam(c.Param("tslug")); ok { //LT in URL var LT database.LetsTest if database.Db.Where("slug = ?", tslug).First(<).Error == nil { //LT found var AT database.Author database.Db.Model(<).Related(&AT) LT.Descr.String = descRegEx.ReplaceAllString(LT.Descr.String, "
") LT.Descr.String = strings.Replace(LT.Descr.String, "\n", "
", -1) c.HTML(http.StatusOK, "lt.html", gin.H{ "title": LT.Name.String, "data": gin.H{"LT": LT, "AT": AT, "DESC": template.HTML(LT.Descr.String)}, }) } else { //LT not found c.AbortWithStatus(404) } } else { var LTs []database.LetsTest database.Db.Order("name asc").Find(<s) var data []gin.H for _, LT := range LTs { var AT database.Author database.Db.Model(<).Related(&AT) data = append(data, gin.H{"LT": LT, "AT": AT}) } c.HTML(http.StatusOK, "lts.html", gin.H{ "title": "Let's Tests", "data": data, }) } } func GetAt(c *gin.Context) { if aslug, ok := CleanParam(c.Param("aslug")); ok { //AT in URL var AT database.Author if database.Db.Where("slug = ?", aslug).First(&AT).Error == nil { //AT found var LPs []database.LetsPlay var LTs []database.LetsTest var EPs []database.Episode var DEPs []gin.H database.Db.Model(&AT).Where("aired IS NOT NULL").Limit(5).Order("aired desc").Related(&LPs).Related(<s).Related(&EPs) for _, EP := range EPs { var ELP database.LetsPlay database.Db.Model(&EP).Related(&ELP) DEPs = append(DEPs, gin.H{"LP": ELP, "EP": EP}) } var data gin.H = gin.H{"AT": AT, "LPs": LPs, "LTs": LTs, "EPs": DEPs,} c.HTML(http.StatusOK, "at.html", gin.H{ "title": AT.Name.String, "data": data, }) } else { //LT not found c.AbortWithStatus(404) } } else { var ATs []database.Author var data []gin.H database.Db.Order("name asc").Find(&ATs) for _, AT := range ATs { data = append(data, gin.H{"AT": AT}) } c.HTML(http.StatusOK, "ats.html", gin.H{ "title": "Sprecher", "data": data, }) } } func GetLEpisode(c *gin.Context) { if lslug, ok := CleanParam(c.Param("lslug")); ok { //LP in URL var LP database.LetsPlay if database.Db.Where("slug = ?", lslug).First(&LP).Error == nil { //LP found if eslug, ok := CleanParam(c.Param("eslug")); ok { //EP in URL var EP database.Episode var AT database.Author if database.Db.Where("slug = ?", eslug).First(&EP).Error == nil { database.Db.Model(&EP).Related(&AT) EP.Descr.String = descRegEx.ReplaceAllString(EP.Descr.String, "
") EP.Descr.String = strings.Replace(EP.Descr.String, "\n", "
", -1) var next database.Episode var previous database.Episode database.Db.Where("aired::date > ?::date and lets_play_id = ?", EP.Aired, EP.LetsPlayID).Order("aired asc").First(&next) database.Db.Where("aired::date < ?::date and lets_play_id = ?", EP.Aired, EP.LetsPlayID).Order("aired desc").First(&previous) c.HTML(http.StatusOK, "episode.html", gin.H{ "title": EP.Name.String, "data": gin.H{"EP": EP, "LP": LP, "AT": AT, "DESC": template.HTML(EP.Descr.String), "NEXT": next, "PREV": previous}, }) } else { //EP not found var EPs []database.Episode var AT database.Author database.Db.Model(&LP).Order("episode asc").Related(&EPs) database.Db.Model(&LP).Related(&AT) var DEP []gin.H for _, EP := range EPs { if len(EP.Descr.String) > 230 { ints := []rune(EP.Descr.String) EP.Descr.String = string(ints[:230]) + "…" } DEP = append(DEP, gin.H{"EP": EP, "LP": LP,}) } var data gin.H = gin.H{"LP": LP, "AT": AT, "EPs": DEP} c.HTML(http.StatusNotFound, "lp.html", gin.H{ "title": LP.Name.String, "data": data, "message": Message{Type: "alert", String: "Fehler 404: Episode nicht gefunden!"}, }) } } else { //No EP in URL var EPs []database.Episode var AT database.Author database.Db.Model(&LP).Order("episode asc").Related(&EPs) database.Db.Model(&LP).Related(&AT) var DEP []gin.H for _, EP := range EPs { if len(EP.Descr.String) > 230 { ints := []rune(EP.Descr.String) EP.Descr.String = string(ints[:230]) + "…" } DEP = append(DEP, gin.H{"EP": EP, "LP": LP,}) } var data gin.H = gin.H{"LP": LP, "AT": AT, "EPs": DEP} c.HTML(http.StatusOK, "lp.html", gin.H{ "title": LP.Name.String, "data": data, }) } } else { if eslug, ok := CleanParam(c.Param("eslug")); ok { var EP database.Episode var LP database.LetsPlay if database.Db.Where("slug = ?", eslug).First(&EP).Error == nil { database.Db.Model(&EP).Related(&LP) c.Redirect(301, "/lets-play/" + LP.Slug.String + "/" + EP.Slug.String) } else { c.AbortWithStatus(404) } } else { c.AbortWithStatus(404) } } } }