59 lines
1.3 KiB
Lua
59 lines
1.3 KiB
Lua
local db = require("db")
|
|
local queries = require("queries")
|
|
local util = require("util")
|
|
local libtags = require("tags")
|
|
local pages = require("pages")
|
|
local config = require("config")
|
|
local search_parser = require("parser_search")
|
|
|
|
local function search_get(req)
|
|
http_request_populate_qs(req)
|
|
local searchq, _ = http_argument_get_string(req,"q")
|
|
if not searchq then
|
|
local ret = pages.search{
|
|
domain = config.domain,
|
|
results = {},
|
|
q = "",
|
|
}
|
|
http_response(req,200,ret)
|
|
return
|
|
end
|
|
log(LOG_DEBUG,string.format("search: %q",searchq))
|
|
local sqltxt, data = search_parser(searchq)
|
|
local stmnt = assert(db.conn:prepare(sqltxt), db.conn:errmsg())
|
|
local i = 1
|
|
for field,values in pairs(data) do
|
|
if field ~= "tags" then
|
|
for _, value in pairs(values) do
|
|
stmnt:bind(i,value[3])
|
|
i = i + 1
|
|
end
|
|
end
|
|
end
|
|
for _,value in pairs(data.tags) do
|
|
stmnt:bind(i,value[3])
|
|
i = i + 1
|
|
end
|
|
local results = {}
|
|
for row in stmnt:rows() do
|
|
table.insert(results,{
|
|
url = util.encode_id(row[1]),
|
|
title = row[2],
|
|
isanon = row[3] == 1,
|
|
author = row[4],
|
|
posted = os.date("%B %d %Y",tonumber(row[5])),
|
|
tags = libtags.get(row[1]),
|
|
hits = row[6],
|
|
ncomments = row[7]
|
|
})
|
|
end
|
|
local ret = pages.search{
|
|
domain = config.domain,
|
|
results = results,
|
|
q = searchq,
|
|
}
|
|
http_response(req,200,ret)
|
|
end
|
|
|
|
return search_get
|