+++ /dev/null
-#include "../../../include/http/pages/browseboardspage.h"\r
-#include "../../../include/stringfunctions.h"\r
-\r
-#ifdef XMEM\r
- #include <xmem.h>\r
-#endif\r
-\r
-const std::string BrowseBoardsPage::BuildQueryString(const long startrow, const std::string &boardsearch, const std::string &sortby, const std::string &sortorder)\r
-{\r
- std::string returnval="";\r
- std::string tempval="";\r
-\r
- if(startrow>=0)\r
- {\r
- StringFunctions::Convert(startrow,tempval);\r
- returnval+="startrow="+tempval;\r
- }\r
-\r
- if(boardsearch!="")\r
- {\r
- if(returnval!="")\r
- {\r
- returnval+="&";\r
- }\r
- returnval+="boardsearch="+boardsearch;\r
- }\r
-\r
- if(sortby!="")\r
- {\r
- if(returnval!="")\r
- {\r
- returnval+="&";\r
- }\r
- returnval+="sortby="+sortby;\r
- if(sortorder=="ASC" || sortorder=="DESC")\r
- {\r
- if(returnval!="")\r
- {\r
- returnval+="&";\r
- }\r
- returnval+="sortorder="+sortorder;\r
- }\r
- else\r
- {\r
- if(returnval!="")\r
- {\r
- returnval+="&";\r
- }\r
- returnval+="sortorder=ASC";\r
- }\r
- }\r
-\r
- return returnval;\r
-\r
-}\r
-\r
-const std::string BrowseBoardsPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)\r
-{\r
- std::string content="";\r
- std::string sql="";\r
- std::string boardname="";\r
- int rowsperpage=25;\r
- std::string rowsperpagestr="26"; // 1 more than rowsperpage so we know if there are more boards\r
- long startrow=0;\r
- std::string startrowstr="0";\r
- int messagecount=0;\r
- std::string messagecountstr="0";\r
- std::string lastdate="";\r
- int count=0;\r
- std::string boardsearch="";\r
- std::string sortby="";\r
- std::string sortorder="";\r
-\r
- // if startrow is specified\r
- if(queryvars.find("startrow")!=queryvars.end())\r
- {\r
- startrowstr=(*queryvars.find("startrow")).second;\r
- // convert back and forth, just in case a number wasn't passed in startrow\r
- StringFunctions::Convert(startrowstr,startrow);\r
- if(startrow<0)\r
- {\r
- startrow=0;\r
- }\r
- StringFunctions::Convert(startrow,startrowstr);\r
- }\r
- if(queryvars.find("boardsearch")!=queryvars.end())\r
- {\r
- boardsearch=(*queryvars.find("boardsearch")).second;\r
- }\r
- if(queryvars.find("sortby")!=queryvars.end() && queryvars.find("sortorder")!=queryvars.end())\r
- {\r
- sortby=(*queryvars.find("sortby")).second;\r
- sortorder=(*queryvars.find("sortorder")).second;\r
- if(sortby!="BoardName" && sortby!="MessageCount" && sortby!="LastMessage")\r
- {\r
- sortby="BoardName";\r
- }\r
- if(sortorder!="ASC" && sortorder!="DESC")\r
- {\r
- sortorder="ASC";\r
- }\r
- }\r
- else\r
- {\r
- sortby="BoardName";\r
- sortorder="ASC";\r
- }\r
-\r
- content="<h2>Browse Messages</h2>";\r
- content+="<form name=\"frmfilter\" method=\"post\" action=\""+m_pagename+"\">";\r
- content+="<input type=\"text\" name=\"boardsearch\" value=\""+SanitizeOutput(boardsearch)+"\">";\r
- content+="<input type=\"submit\" value=\"Filter\">";\r
- content+="</form>";\r
-\r
- content+="<table class=\"small90\">";\r
- content+="<tr>";\r
- content+="<th><a href=\""+m_pagename+"?"+BuildQueryString(startrow,boardsearch,"BoardName",ReverseSort("BoardName",sortby,sortorder))+"\">Board</a></th>";\r
- content+="<th><a href=\""+m_pagename+"?"+BuildQueryString(startrow,boardsearch,"MessageCount",ReverseSort("MessageCount",sortby,sortorder))+"\">Message Count</a></th>";\r
- content+="<th><a href=\""+m_pagename+"?"+BuildQueryString(startrow,boardsearch,"LastMessage",ReverseSort("LastMessage",sortby,sortorder))+"\">Last Message</a></th>";\r
- content+="</tr>";\r
-\r
- sql="SELECT tblBoard.BoardID, tblBoard.BoardName, COUNT(tblMessageBoard.MessageID) AS 'MessageCount', MAX(tblMessage.MessageDate || ' ' || tblMessage.MessageTime) AS 'LastMessage'";\r
- sql+="FROM tblBoard LEFT JOIN tblMessageBoard ON tblBoard.BoardID=tblMessageBoard.BoardID ";\r
- sql+="LEFT JOIN tblMessage ON tblMessageBoard.MessageID=tblMessage.MessageID ";\r
- sql+="WHERE (tblMessageBoard.MessageID>=0 OR tblMessageBoard.MessageID IS NULL) ";\r
- if(boardsearch!="")\r
- {\r
- sql+="AND tblBoard.BoardName LIKE '%' || ? || '%' ";\r
- }\r
- sql+="GROUP BY tblBoard.BoardID ";\r
- sql+="ORDER BY "+sortby+" COLLATE NOCASE "+sortorder+" ";\r
- sql+="LIMIT "+startrowstr+","+rowsperpagestr+";";\r
- \r
- SQLite3DB::Statement st=m_db->Prepare(sql);\r
- if(boardsearch!="")\r
- {\r
- st.Bind(0,boardsearch);\r
- }\r
- \r
- st.Step();\r
- while(st.RowReturned() && count++<rowsperpage)\r
- {\r
- boardname="";\r
- messagecount=0;\r
- lastdate="";\r
- std::string boardidstr="0";\r
- st.ResultText(0,boardidstr);\r
- st.ResultText(1,boardname);\r
- st.ResultInt(2,messagecount);\r
- st.ResultText(3,lastdate);\r
-\r
- StringFunctions::Convert(messagecount,messagecountstr);\r
-\r
- content+="<tr>";\r
- content+="<td><a href=\"browsemessages.htm?boardid="+boardidstr+"\">"+SanitizeOutput(boardname)+"</a></td>";\r
- content+="<td>"+SanitizeOutput(messagecountstr)+"</td>";\r
- content+="<td>"+SanitizeOutput(lastdate)+"</td>";\r
- content+="</tr>\r\n";\r
- st.Step();\r
- }\r
-\r
- if(startrow>0 || st.RowReturned())\r
- {\r
- content+="<tr>";\r
-\r
- if(startrow>0)\r
- {\r
- int thisstartrow=startrow-rowsperpage;\r
- if(thisstartrow<0)\r
- {\r
- thisstartrow=0;\r
- }\r
- content+="<td><a href=\"boardsbrowse.htm?"+BuildQueryString(thisstartrow,boardsearch,sortby,sortorder)+"\"><--</a></td>";\r
- }\r
- else\r
- {\r
- content+="<td></td>";\r
- }\r
-\r
- content+="<td></td>";\r
-\r
- if(st.RowReturned())\r
- {\r
- int thisstartrow=startrow+rowsperpage;\r
- content+="<td><a href=\"boardsbrowse.htm?"+BuildQueryString(thisstartrow,boardsearch,sortby,sortorder)+"\">--></a></td>";\r
- }\r
-\r
- content+="</tr>";\r
- }\r
- content+="</table>";\r
- \r
- return StringFunctions::Replace(m_template,"[CONTENT]",content);\r
-}\r
-\r
-const std::string BrowseBoardsPage::ReverseSort(const std::string &sortname, const std::string ¤tsortby, const std::string ¤tsortorder)\r
-{\r
- if(sortname==currentsortby)\r
- {\r
- if(currentsortorder=="ASC")\r
- {\r
- return "DESC";\r
- }\r
- else\r
- {\r
- return "ASC";\r
- }\r
- }\r
- else\r
- {\r
- return currentsortorder;\r
- }\r
-}\r