diff options
Diffstat (limited to 'system/admin/handlers.go')
-rw-r--r-- | system/admin/handlers.go | 128 |
1 files changed, 70 insertions, 58 deletions
diff --git a/system/admin/handlers.go b/system/admin/handlers.go index 742b898..12750e2 100644 --- a/system/admin/handlers.go +++ b/system/admin/handlers.go @@ -7,6 +7,7 @@ import ( "fmt" "log" "net/http" + "strconv" "strings" "time" @@ -535,10 +536,11 @@ func postsHandler(res http.ResponseWriter, req *http.Request) { } order := strings.ToLower(q.Get("order")) - status := q.Get("status") + if order != "asc" { + order = "desc" + } - posts := db.ContentAll(t + "_sorted") - b := &bytes.Buffer{} + status := q.Get("status") if _, ok := content.Types[t]; !ok { res.WriteHeader(http.StatusBadRequest) @@ -571,6 +573,47 @@ func postsHandler(res http.ResponseWriter, req *http.Request) { hasExt = true } + count, err := strconv.Atoi(q.Get("count")) // int: determines number of posts to return (10 default, -1 is all) + if err != nil { + if q.Get("count") == "" { + count = 10 + } else { + res.WriteHeader(http.StatusInternalServerError) + errView, err := Error500() + if err != nil { + return + } + + res.Write(errView) + return + } + } + + offset, err := strconv.Atoi(q.Get("offset")) // int: multiplier of count for pagination (0 default) + if err != nil { + if q.Get("offset") == "" { + offset = 0 + } else { + res.WriteHeader(http.StatusInternalServerError) + errView, err := Error500() + if err != nil { + return + } + + res.Write(errView) + return + } + } + + opts := db.QueryOptions{ + Count: count, + Offset: offset, + Order: order, + } + + posts := db.Query(t+"_sorted", opts) + b := &bytes.Buffer{} + html := `<div class="col s9 card"> <div class="card-content"> <div class="row"> @@ -634,40 +677,6 @@ func postsHandler(res http.ResponseWriter, req *http.Request) { <a href="` + pendingURL + `">Pending</a> </div>` - case "pending": - // get _pending posts of type t from the db - posts = db.ContentAll(t + "_pending") - - html += `<div class="row externalable"> - <span class="description">Status:</span> - <a href="` + publicURL + `">Public</a> - | - <span class="active">Pending</span> - </div>` - } - - } - html += `<ul class="posts row">` - - switch order { - case "desc", "": - if hasExt { - // reverse the order of posts slice - for i := len(posts) - 1; i >= 0; i-- { - err := json.Unmarshal(posts[i], &p) - if err != nil { - log.Println("Error unmarshal json into", t, err, posts[i]) - - post := `<li class="col s12">Error decoding data. Possible file corruption.</li>` - b.Write([]byte(post)) - continue - } - - post := adminPostListItem(p, t, status) - b.Write(post) - } - } else { - // keep natural order of posts slice, as returned from sorted bucket for i := range posts { err := json.Unmarshal(posts[i], &p) if err != nil { @@ -681,26 +690,18 @@ func postsHandler(res http.ResponseWriter, req *http.Request) { post := adminPostListItem(p, t, status) b.Write(post) } - } - case "asc": - if hasExt { - // keep natural order of posts slice, as returned from sorted bucket - for i := range posts { - err := json.Unmarshal(posts[i], &p) - if err != nil { - log.Println("Error unmarshal json into", t, err, posts[i]) + case "pending": + // get _pending posts of type t from the db + posts = db.Query(t+"_pending", opts) - post := `<li class="col s12">Error decoding data. Possible file corruption.</li>` - b.Write([]byte(post)) - continue - } + html += `<div class="row externalable"> + <span class="description">Status:</span> + <a href="` + publicURL + `">Public</a> + | + <span class="active">Pending</span> + </div>` - post := adminPostListItem(p, t, status) - b.Write(post) - } - } else { - // reverse the order of posts slice for i := len(posts) - 1; i >= 0; i-- { err := json.Unmarshal(posts[i], &p) if err != nil { @@ -715,7 +716,9 @@ func postsHandler(res http.ResponseWriter, req *http.Request) { b.Write(post) } } + } + html += `<ul class="posts row">` b.Write([]byte(`</ul></div></div>`)) @@ -765,9 +768,10 @@ func adminPostListItem(p editor.Editable, t, status string) []byte { cid := fmt.Sprintf("%d", p.ContentID()) - if status == "public" { + switch status { + case "public", "": status = "" - } else { + default: status = "_" + status } @@ -1046,8 +1050,16 @@ func editHandler(res http.ResponseWriter, req *http.Request) { host := req.URL.Host path := req.URL.Path sid := fmt.Sprintf("%d", id) - desURL := scheme + host + path + "?type=" + t + "&id=" + sid - http.Redirect(res, req, desURL, http.StatusFound) + if strings.Contains(t, "_") { + t = strings.Split(t, "_")[0] + } + redir := scheme + host + path + "?type=" + t + "&id=" + sid + + if req.URL.Query().Get("status") == "pending" { + redir += "&status=pending" + } + + http.Redirect(res, req, redir, http.StatusFound) default: res.WriteHeader(http.StatusMethodNotAllowed) |