Massive overhaul, fixing menus and changing template engine. Added /month/ and /author/ filters
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"git.aiterp.net/gisle/wrouter/response"
|
||||
|
||||
@@ -24,10 +25,10 @@ func listIndex(path string, w http.ResponseWriter, req *http.Request, user *auth
|
||||
return false
|
||||
}
|
||||
|
||||
vm := viewmodel.PageList{}
|
||||
vm := viewmodel.IndexList{}
|
||||
vm.Headers, err = model.ListHeaders()
|
||||
vm.Categories = model.PageCategories
|
||||
vm.Setup(user)
|
||||
vm.Setup(user, req.URL.Path, "Index")
|
||||
|
||||
if err != nil {
|
||||
response.Text(w, 500, err.Error())
|
||||
@@ -49,7 +50,7 @@ func listFiltered(category model.PageCategory) wrouter.FunctionHandlerFunc {
|
||||
|
||||
tagName := strings.Replace(req.URL.Path[len(path):], "_", " ", -1)
|
||||
|
||||
vm := viewmodel.PageList{}
|
||||
vm := viewmodel.IndexList{}
|
||||
|
||||
if tagName != "" {
|
||||
tag, err := model.FindTag("name", tagName, "")
|
||||
@@ -66,7 +67,7 @@ func listFiltered(category model.PageCategory) wrouter.FunctionHandlerFunc {
|
||||
|
||||
vm.Categories = model.PageCategories
|
||||
vm.ActiveCategory = category
|
||||
vm.Setup(user)
|
||||
vm.Setup(user, path, category.Plural)
|
||||
|
||||
if err != nil {
|
||||
response.Text(w, 500, err.Error())
|
||||
@@ -89,7 +90,7 @@ func listTagged(tagType string) wrouter.FunctionHandlerFunc {
|
||||
|
||||
tagName := strings.Replace(req.URL.Path[len(path):], "_", " ", -1)
|
||||
|
||||
vm := viewmodel.PageList{}
|
||||
vm := viewmodel.IndexList{}
|
||||
|
||||
if tagName == "" {
|
||||
return false
|
||||
@@ -105,7 +106,7 @@ func listTagged(tagType string) wrouter.FunctionHandlerFunc {
|
||||
vm.Headers, err = model.ListHeadersByTag("", tag)
|
||||
|
||||
vm.Categories = model.PageCategories
|
||||
vm.Setup(user)
|
||||
vm.Setup(user, tag.Path(), tag.Name)
|
||||
|
||||
if err != nil {
|
||||
response.Text(w, 500, err.Error())
|
||||
@@ -118,11 +119,90 @@ func listTagged(tagType string) wrouter.FunctionHandlerFunc {
|
||||
}
|
||||
}
|
||||
|
||||
func tagList(path string, w http.ResponseWriter, req *http.Request, user *auth.User) bool {
|
||||
//var err error
|
||||
if (req.Method != "GET" && req.Method != "POST") || len(req.URL.Path) > len(path) {
|
||||
return false
|
||||
}
|
||||
|
||||
tl := viewmodel.IndexTags{}
|
||||
tl.Tags, _ = model.ListTags()
|
||||
tl.Setup(user, path)
|
||||
|
||||
view.Render(w, "tags", 200, tl)
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func listAuthor(path string, w http.ResponseWriter, req *http.Request, user *auth.User) bool {
|
||||
var err error
|
||||
|
||||
if req.Method != "GET" || strings.LastIndex(req.URL.Path, "/") >= len(path) {
|
||||
return false
|
||||
}
|
||||
|
||||
authorName := strings.Replace(req.URL.Path[len(path):], "_", " ", -1)
|
||||
|
||||
vm := viewmodel.IndexList{}
|
||||
vm.ActiveAuthor = authorName
|
||||
|
||||
vm.Headers, err = model.ListHeadersByAuthor(authorName)
|
||||
if err != nil {
|
||||
response.Text(w, 500, err.Error())
|
||||
return true
|
||||
}
|
||||
|
||||
if len(vm.Headers) > 0 {
|
||||
authorName = vm.Headers[0].Author
|
||||
}
|
||||
|
||||
vm.Categories = model.PageCategories
|
||||
vm.Setup(user, "/author/"+authorName, authorName)
|
||||
|
||||
view.Render(w, "index", 200, vm)
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func listDate(path string, w http.ResponseWriter, req *http.Request, user *auth.User) bool {
|
||||
var err error
|
||||
|
||||
if req.Method != "GET" || strings.LastIndex(req.URL.Path, "/") >= len(path) {
|
||||
return false
|
||||
}
|
||||
|
||||
date, err := time.Parse("2006-01", req.URL.Path[len(path):])
|
||||
if err != nil {
|
||||
response.Text(w, 400, "Invalid date")
|
||||
return true
|
||||
}
|
||||
|
||||
vm := viewmodel.IndexList{}
|
||||
vm.ActiveDate = date.Format("January 2006")
|
||||
vm.ActiveDatePath = "/month/" + date.Format("2006-01")
|
||||
|
||||
vm.Headers, err = model.ListHeadersByMonth(date.Year(), int(date.Month()))
|
||||
if err != nil {
|
||||
response.Text(w, 500, err.Error())
|
||||
return true
|
||||
}
|
||||
|
||||
vm.Categories = model.PageCategories
|
||||
vm.Setup(user, "/month/"+date.Format("2006-01"), vm.ActiveDate)
|
||||
|
||||
view.Render(w, "index", 200, vm)
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func init() {
|
||||
ListController.Function("/", listIndex)
|
||||
ListController.Function("/tags/", tagList)
|
||||
ListController.Function("/author/", listAuthor)
|
||||
ListController.Function("/month/", listDate)
|
||||
|
||||
for _, category := range model.PageCategories {
|
||||
ListController.Function(fmt.Sprintf("/%s/", strings.ToLower(category.Plural)), listFiltered(category))
|
||||
ListController.Function(category.Path, listFiltered(category))
|
||||
}
|
||||
|
||||
for _, tagType := range model.TagTypes {
|
||||
|
||||
@@ -25,9 +25,8 @@ func pageCreate(path string, w http.ResponseWriter, req *http.Request, user *aut
|
||||
return false
|
||||
}
|
||||
|
||||
pc := viewmodel.PageForm{}
|
||||
pc := viewmodel.PageCreate{}
|
||||
pc.Setup(user)
|
||||
pc.Operation = "Create"
|
||||
|
||||
// Make sure the user is logged in
|
||||
if user == nil {
|
||||
@@ -110,7 +109,7 @@ func pageCreate(path string, w http.ResponseWriter, req *http.Request, user *aut
|
||||
pc.TagInput = req.Form.Get("tags")
|
||||
}
|
||||
|
||||
view.Render(w, "page/create", 200, pc)
|
||||
view.Render(w, "create", 200, pc)
|
||||
|
||||
return true
|
||||
}
|
||||
@@ -137,6 +136,28 @@ func pageView(path string, w http.ResponseWriter, req *http.Request, user *auth.
|
||||
return true
|
||||
}
|
||||
|
||||
func pageSource(path string, w http.ResponseWriter, req *http.Request, user *auth.User) bool {
|
||||
if req.Method != "GET" || strings.LastIndex(req.URL.Path, "/") > len(path) {
|
||||
return false
|
||||
}
|
||||
|
||||
page, err := model.FindPage(req.URL.Path[len(path):])
|
||||
if err != nil {
|
||||
response.Text(w, 500, err.Error())
|
||||
return true
|
||||
} else if page == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
pv := viewmodel.PageSource{}
|
||||
pv.Page = page
|
||||
pv.Setup(user)
|
||||
|
||||
view.Render(w, "page/source", 200, pv)
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func pageDelete(path string, w http.ResponseWriter, req *http.Request, user *auth.User) bool {
|
||||
if (req.Method != "GET" && req.Method != "POST") || strings.LastIndex(req.URL.Path, "/") > len(path) {
|
||||
return false
|
||||
@@ -150,12 +171,12 @@ func pageDelete(path string, w http.ResponseWriter, req *http.Request, user *aut
|
||||
return false
|
||||
}
|
||||
|
||||
pv := viewmodel.PageView{}
|
||||
pv := viewmodel.PageDelete{}
|
||||
pv.Page = page
|
||||
pv.Setup(user)
|
||||
|
||||
if user == nil || user.FullID() != page.Author {
|
||||
view.Render(w, "message/error-access", http.StatusForbidden, path)
|
||||
view.Render(w, "message", http.StatusForbidden, viewmodel.NewMessage(user, "Access Denied", true, "You are not allowed to delete this page."))
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -164,7 +185,7 @@ func pageDelete(path string, w http.ResponseWriter, req *http.Request, user *aut
|
||||
|
||||
// Catch sneaky shenanigans
|
||||
if req.Form.Get("aft") != user.Session.ID {
|
||||
view.Render(w, "message/error-forgery", http.StatusForbidden, path)
|
||||
view.Render(w, "message", http.StatusForbidden, viewmodel.NewMessage(user, "Forgery Detected", true, "The server thinks something nasty is afoot. Try again if it is your page, and prod me on IRC if it still doesn't work."))
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -172,12 +193,12 @@ func pageDelete(path string, w http.ResponseWriter, req *http.Request, user *aut
|
||||
err := page.Delete()
|
||||
if err != nil {
|
||||
// It wasn't done D:
|
||||
view.Render(w, "message/error-internal", http.StatusInternalServerError, err)
|
||||
view.Render(w, "message", http.StatusInternalServerError, viewmodel.NewMessage(user, "Internal Server Error", true, err.Error()))
|
||||
return true
|
||||
}
|
||||
|
||||
// It has been done
|
||||
view.Render(w, "message/page-deleted", 200, pv)
|
||||
view.Render(w, "message", 200, viewmodel.NewMessage(user, "Deletion Successful", false, "The page has been deleted."))
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -198,12 +219,10 @@ func pageEdit(path string, w http.ResponseWriter, req *http.Request, user *auth.
|
||||
return false
|
||||
}
|
||||
|
||||
pf := viewmodel.PageForm{}
|
||||
pf := viewmodel.PageEdit{}
|
||||
pf.Page = page
|
||||
pf.Setup(user)
|
||||
|
||||
pf.Operation = "Edit"
|
||||
pf.Page = *page
|
||||
|
||||
if user == nil {
|
||||
pf.Error = "You are not logged in"
|
||||
}
|
||||
@@ -285,5 +304,6 @@ func init() {
|
||||
PageController.Function("/create", pageCreate)
|
||||
PageController.Function("/edit/", pageEdit)
|
||||
PageController.Function("/delete/", pageDelete)
|
||||
PageController.Function("/source/", pageSource)
|
||||
PageController.Function("/", pageView)
|
||||
}
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"git.aiterp.net/AiteRP/aitestory/view"
|
||||
"git.aiterp.net/AiteRP/aitestory/viewmodel"
|
||||
|
||||
"git.aiterp.net/AiteRP/aitestory/model"
|
||||
"git.aiterp.net/gisle/wrouter"
|
||||
"git.aiterp.net/gisle/wrouter/auth"
|
||||
)
|
||||
|
||||
// TagController serves and handles the tag managment pages
|
||||
var TagController = wrouter.Router{}
|
||||
|
||||
func tagList(path string, w http.ResponseWriter, req *http.Request, user *auth.User) bool {
|
||||
//var err error
|
||||
if (req.Method != "GET" && req.Method != "POST") || len(req.URL.Path) > len(path) {
|
||||
return false
|
||||
}
|
||||
|
||||
tl := viewmodel.TagList{}
|
||||
tl.Tags, _ = model.ListTags()
|
||||
tl.Setup(user)
|
||||
|
||||
view.Render(w, "tags/list", 200, tl)
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func init() {
|
||||
TagController.Function("/", tagList)
|
||||
}
|
||||
Reference in New Issue
Block a user