diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm
index c658c906fd8..c216acc6ba1 100644
--- a/code/modules/library/lib_machines.dm
+++ b/code/modules/library/lib_machines.dm
@@ -25,11 +25,11 @@
var/title
var/category = "Any"
var/author
- var/SQLquery
+ var/search_page = 0
/obj/machinery/computer/libraryconsole/ui_interact(mob/user)
. = ..()
- var/dat = "" //
+ var/list/dat = list() //
switch(screenstate)
if(0)
dat += "
Search Settings
"
@@ -42,13 +42,38 @@
dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance.
"
else if(QDELETED(user))
return
- else if(!SQLquery)
- dat += "ERROR: Malformed search request. Please contact your system administrator for assistance.
"
else
dat += ""
dat += "| AUTHOR | TITLE | CATEGORY | SS13BN |
"
-
- var/datum/DBQuery/query_library_list_books = SSdbcore.NewQuery(SQLquery)
+ author = sanitizeSQL(author)
+ title = sanitizeSQL(title)
+ category = sanitizeSQL(category)
+ var/SQLsearch = "isnull(deleted) AND "
+ if(category == "Any")
+ SQLsearch += "author LIKE '%[author]%' AND title LIKE '%[title]%'"
+ else
+ SQLsearch += "author LIKE '%[author]%' AND title LIKE '%[title]%' AND category='[category]'"
+ var/bookcount = 0
+ var/booksperpage = 20
+ var/datum/DBQuery/query_library_count_books = SSdbcore.NewQuery("SELECT COUNT(id) FROM [format_table_name("library")] WHERE [SQLsearch]")
+ if(!query_library_count_books.warn_execute())
+ qdel(query_library_count_books)
+ return
+ if(query_library_count_books.NextRow())
+ bookcount = text2num(query_library_count_books.item[1])
+ qdel(query_library_count_books)
+ if(bookcount > booksperpage)
+ dat += "Page: "
+ var/pagecount = 1
+ var/list/pagelist = list()
+ while(bookcount > 0)
+ pagelist += "[pagecount == search_page + 1 ? "\[[pagecount]\]" : "\[[pagecount]\]"]"
+ bookcount -= booksperpage
+ pagecount++
+ dat += pagelist.Join(" | ")
+ search_page = text2num(sanitizeSQL(search_page))
+ var/limit = " LIMIT [booksperpage * search_page], [booksperpage]"
+ var/datum/DBQuery/query_library_list_books = SSdbcore.NewQuery("SELECT author, title, category, id FROM [format_table_name("library")] WHERE [SQLsearch][limit]")
if(!query_library_list_books.Execute())
dat += "ERROR: Unable to retrieve book listings. Please contact your system administrator for assistance.
"
else
@@ -64,7 +89,7 @@
dat += "
"
dat += "\[Go Back\]
"
var/datum/browser/popup = new(user, "publiclibrary", name, 600, 400)
- popup.set_content(dat)
+ popup.set_content(jointext(dat, ""))
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.open()
@@ -81,29 +106,24 @@
title = sanitize(newtitle)
else
title = null
- title = sanitizeSQL(title)
if(href_list["setcategory"])
var/newcategory = input("Choose a category to search for:") in list("Any", "Fiction", "Non-Fiction", "Adult", "Reference", "Religion")
if(newcategory)
category = sanitize(newcategory)
else
category = "Any"
- category = sanitizeSQL(category)
if(href_list["setauthor"])
var/newauthor = input("Enter an author to search for:") as text|null
if(newauthor)
author = sanitize(newauthor)
else
author = null
- author = sanitizeSQL(author)
if(href_list["search"])
- SQLquery = "SELECT author, title, category, id FROM [format_table_name("library")] WHERE isnull(deleted) AND "
- if(category == "Any")
- SQLquery += "author LIKE '%[author]%' AND title LIKE '%[title]%'"
- else
- SQLquery += "author LIKE '%[author]%' AND title LIKE '%[title]%' AND category='[category]'"
screenstate = 1
+ if(href_list["bookpagecount"])
+ search_page = text2num(href_list["bookpagecount"])
+
if(href_list["back"])
screenstate = 0