1 #include "../../../include/http/pages/browseboardspage.h"
\r
2 #include "../../../include/stringfunctions.h"
\r
8 const std::string BrowseBoardsPage::BuildQueryString(const long startrow, const std::string &boardsearch, const std::string &sortby, const std::string &sortorder)
\r
10 std::string returnval="";
\r
11 std::string tempval="";
\r
15 StringFunctions::Convert(startrow,tempval);
\r
16 returnval+="startrow="+tempval;
\r
25 returnval+="boardsearch="+boardsearch;
\r
34 returnval+="sortby="+sortby;
\r
35 if(sortorder=="ASC" || sortorder=="DESC")
\r
41 returnval+="sortorder="+sortorder;
\r
49 returnval+="sortorder=ASC";
\r
57 const std::string BrowseBoardsPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)
\r
59 std::string content="";
\r
61 std::string boardname="";
\r
63 std::string rowsperpagestr="26"; // 1 more than rowsperpage so we know if there are more boards
\r
65 std::string startrowstr="0";
\r
67 std::string messagecountstr="0";
\r
68 std::string lastdate="";
\r
70 std::string boardsearch="";
\r
71 std::string sortby="";
\r
72 std::string sortorder="";
\r
74 // if startrow is specified
\r
75 if(queryvars.find("startrow")!=queryvars.end())
\r
77 startrowstr=(*queryvars.find("startrow")).second;
\r
78 // convert back and forth, just in case a number wasn't passed in startrow
\r
79 StringFunctions::Convert(startrowstr,startrow);
\r
84 StringFunctions::Convert(startrow,startrowstr);
\r
86 if(queryvars.find("boardsearch")!=queryvars.end())
\r
88 boardsearch=(*queryvars.find("boardsearch")).second;
\r
90 if(queryvars.find("sortby")!=queryvars.end() && queryvars.find("sortorder")!=queryvars.end())
\r
92 sortby=(*queryvars.find("sortby")).second;
\r
93 sortorder=(*queryvars.find("sortorder")).second;
\r
94 if(sortby!="BoardName" && sortby!="MessageCount" && sortby!="LastMessage")
\r
98 if(sortorder!="ASC" && sortorder!="DESC")
\r
105 sortby="BoardName";
\r
109 content="<h2>Browse Messages</h2>";
\r
110 content+="<form name=\"frmfilter\" method=\"post\" action=\""+m_pagename+"\">";
\r
111 content+="<input type=\"text\" name=\"boardsearch\" value=\""+SanitizeOutput(boardsearch)+"\">";
\r
112 content+="<input type=\"submit\" value=\"Filter\">";
\r
113 content+="</form>";
\r
115 content+="<table class=\"small90\">";
\r
117 content+="<th><a href=\""+m_pagename+"?"+BuildQueryString(startrow,boardsearch,"BoardName",ReverseSort("BoardName",sortby,sortorder))+"\">Board</a></th>";
\r
118 content+="<th><a href=\""+m_pagename+"?"+BuildQueryString(startrow,boardsearch,"MessageCount",ReverseSort("MessageCount",sortby,sortorder))+"\">Message Count</a></th>";
\r
119 content+="<th><a href=\""+m_pagename+"?"+BuildQueryString(startrow,boardsearch,"LastMessage",ReverseSort("LastMessage",sortby,sortorder))+"\">Last Message</a></th>";
\r
122 sql="SELECT tblBoard.BoardID, tblBoard.BoardName, COUNT(tblMessageBoard.MessageID) AS 'MessageCount', MAX(tblMessage.MessageDate || ' ' || tblMessage.MessageTime) AS 'LastMessage'";
\r
123 sql+="FROM tblBoard LEFT JOIN tblMessageBoard ON tblBoard.BoardID=tblMessageBoard.BoardID ";
\r
124 sql+="LEFT JOIN tblMessage ON tblMessageBoard.MessageID=tblMessage.MessageID ";
\r
125 sql+="WHERE (tblMessageBoard.MessageID>=0 OR tblMessageBoard.MessageID IS NULL) ";
\r
126 if(boardsearch!="")
\r
128 sql+="AND tblBoard.BoardName LIKE '%' || ? || '%' ";
\r
130 sql+="GROUP BY tblBoard.BoardID ";
\r
131 sql+="ORDER BY "+sortby+" COLLATE NOCASE "+sortorder+" ";
\r
132 sql+="LIMIT "+startrowstr+","+rowsperpagestr+";";
\r
134 SQLite3DB::Statement st=m_db->Prepare(sql);
\r
135 if(boardsearch!="")
\r
137 st.Bind(0,boardsearch);
\r
141 while(st.RowReturned() && count++<rowsperpage)
\r
146 std::string boardidstr="0";
\r
147 st.ResultText(0,boardidstr);
\r
148 st.ResultText(1,boardname);
\r
149 st.ResultInt(2,messagecount);
\r
150 st.ResultText(3,lastdate);
\r
152 StringFunctions::Convert(messagecount,messagecountstr);
\r
155 content+="<td><a href=\"browsemessages.htm?boardid="+boardidstr+"\">"+SanitizeOutput(boardname)+"</a></td>";
\r
156 content+="<td>"+SanitizeOutput(messagecountstr)+"</td>";
\r
157 content+="<td>"+SanitizeOutput(lastdate)+"</td>";
\r
158 content+="</tr>\r\n";
\r
162 if(startrow>0 || st.RowReturned())
\r
168 int thisstartrow=startrow-rowsperpage;
\r
173 content+="<td><a href=\"boardsbrowse.htm?"+BuildQueryString(thisstartrow,boardsearch,sortby,sortorder)+"\"><--</a></td>";
\r
177 content+="<td></td>";
\r
180 content+="<td></td>";
\r
182 if(st.RowReturned())
\r
184 int thisstartrow=startrow+rowsperpage;
\r
185 content+="<td><a href=\"boardsbrowse.htm?"+BuildQueryString(thisstartrow,boardsearch,sortby,sortorder)+"\">--></a></td>";
\r
190 content+="</table>";
\r
192 return StringFunctions::Replace(m_template,"[CONTENT]",content);
\r
195 const std::string BrowseBoardsPage::ReverseSort(const std::string &sortname, const std::string ¤tsortby, const std::string ¤tsortorder)
\r
197 if(sortname==currentsortby)
\r
199 if(currentsortorder=="ASC")
\r
210 return currentsortorder;
\r