Add search terms to the moderation page

* Closes: #22
This commit is contained in:
Las Zenow 2017-02-04 01:28:10 +00:00
parent fcf9b1eb8d
commit 8e82ee3702
5 changed files with 26 additions and 15 deletions

View file

@ -127,12 +127,13 @@ type newBook struct {
B database.Book
}
type newData struct {
S Status
Found int
Books []newBook
Page int
Next string
Prev string
S Status
Found int
Books []newBook
Page int
Next string
Prev string
Search string
}
func newHandler(h handler) {
@ -146,6 +147,7 @@ func newHandler(h handler) {
http.Error(h.w, err.Error(), http.StatusInternalServerError)
return
}
req := strings.Join(h.r.Form["q"], " ")
page := 0
if len(h.r.Form["p"]) != 0 {
page, err = strconv.Atoi(h.r.Form["p"][0])
@ -153,7 +155,7 @@ func newHandler(h handler) {
page = 0
}
}
res, num, _ := h.db.GetNewBooks(newItemsPage, page*newItemsPage)
res, num, _ := h.db.GetNewBooks(req, newItemsPage, page*newItemsPage)
var data newData
data.S = GetStatus(h)
@ -176,6 +178,7 @@ func newHandler(h handler) {
if page > 0 {
data.Prev = "/new/?p=" + strconv.Itoa(page-1)
}
data.Search = req
h.template.load(h, "new", data)
}

View file

@ -91,11 +91,15 @@ func addBook(coll *mgo.Collection, book map[string]interface{}) error {
}
func getBooks(coll *mgo.Collection, query string, length int, start int) (books []Book, num int, err error) {
return _getBooks(coll, buildQuery(query), length, start)
q := buildQuery(query)
q["active"] = true
return _getBooks(coll, q, length, start)
}
func getNewBooks(coll *mgo.Collection, length int, start int) (books []Book, num int, err error) {
return _getBooks(coll, bson.M{"$nor": []bson.M{{"active": true}}}, length, start)
func getNewBooks(coll *mgo.Collection, query string, length int, start int) (books []Book, num int, err error) {
q := buildQuery(query)
q["$nor"] = []bson.M{{"active": true}}
return _getBooks(coll, q, length, start)
}
func getBooksIter(coll *mgo.Collection) Iter {
@ -193,7 +197,7 @@ func isBookActive(coll *mgo.Collection, id string) bool {
func buildQuery(q string) bson.M {
text := ""
query := bson.M{"active": true}
query := bson.M{}
words := strings.Split(q, " ")
for _, w := range words {
tag := strings.SplitN(w, ":", 2)

View file

@ -14,7 +14,7 @@ func TestAddBook(t *testing.T) {
tAddBook(t, db)
books, num, err := db.GetNewBooks(1, 0)
books, num, err := db.GetNewBooks("", 1, 0)
if err != nil {
t.Fatal("db.GetBooks() return an error: ", err)
}
@ -34,7 +34,7 @@ func TestActiveBook(t *testing.T) {
defer db.del()
tAddBook(t, db)
books, _, _ := db.GetNewBooks(1, 0)
books, _, _ := db.GetNewBooks("", 1, 0)
id := books[0].Id
err := db.ActiveBook(id)

View file

@ -75,9 +75,9 @@ func (db *DB) GetBooksIter() Iter {
return getBooksIter(booksColl)
}
func (db *DB) GetNewBooks(length int, start int) (books []Book, num int, err error) {
func (db *DB) GetNewBooks(query string, length int, start int) (books []Book, num int, err error) {
booksColl := db.session.DB(db.name).C(books_coll)
return getNewBooks(booksColl, length, start)
return getNewBooks(booksColl, query, length, start)
}
func (db *DB) GetBookId(id string) (Book, error) {

View file

@ -1,5 +1,9 @@
{{template "header.html" .S}}
<form class="centered" action="/new/">
<input type="search" class="search-query span8" name="q" {{if .Search}}value="{{.Search}}"{{else}}placeholder="Search"{{end}} />
</form>
{{if .Books}}
<div class="centered btn-group">
<a href="/store/{{range .Books}}{{.B.Id}}/{{end}}" class="btn btn-large btn-success"><i class="icon-ok"></i> Save All</a>