summaryrefslogtreecommitdiff
path: root/system/admin/handlers.go
diff options
context:
space:
mode:
Diffstat (limited to 'system/admin/handlers.go')
-rw-r--r--system/admin/handlers.go128
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>
- &nbsp;&vert;&nbsp;
- <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>
+ &nbsp;&vert;&nbsp;
+ <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)