1 #include "../../../include/http/pages/boardspage.h"
\r
2 #include "../../../include/stringfunctions.h"
\r
3 #include "../../../include/datetime.h"
\r
9 const std::string BoardsPage::BuildQueryString(const long startrow, const std::string &boardsearch)
\r
11 std::string returnval="";
\r
12 std::string tempval="";
\r
16 StringFunctions::Convert(startrow,tempval);
\r
17 returnval+="startrow="+tempval;
\r
26 returnval+="boardsearch="+boardsearch;
\r
33 const std::string BoardsPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)
\r
36 std::string content="";
\r
39 std::string rowsperpagestr="25";
\r
41 std::string startrowstr="0";
\r
42 std::string boardsearch="";
\r
47 if(queryvars.find("formaction")!=queryvars.end())
\r
49 if((*queryvars.find("formaction")).second=="addboard" && queryvars.find("boardname")!=queryvars.end() && queryvars.find("boarddescription")!=queryvars.end())
\r
51 std::string boardname="";
\r
52 std::string boarddescription="";
\r
54 boardname=(*queryvars.find("boardname")).second;
\r
55 StringFunctions::LowerCase(boardname,boardname);
\r
56 boarddescription=(*queryvars.find("boarddescription")).second;
\r
58 SQLite3DB::Statement addst=m_db->Prepare("INSERT INTO tblBoard(BoardName,BoardDescription,DateAdded,AddedMethod) VALUES(?,?,?,?);");
\r
59 addst.Bind(0,boardname);
\r
60 addst.Bind(1,boarddescription);
\r
61 addst.Bind(2,now.Format("%Y-%m-%d %H:%M:%S"));
\r
62 addst.Bind(3,"Added manually");
\r
65 if((*queryvars.find("formaction")).second=="remove0messages")
\r
67 m_db->Execute("DELETE FROM tblBoard WHERE BoardID IN (SELECT BoardID FROM vwBoardStats WHERE MessageCount=0 AND BoardID NOT IN (SELECT BoardID FROM tblAdministrationBoard));");
\r
69 if((*queryvars.find("formaction")).second=="update")
\r
72 std::vector<std::string> boardids;
\r
73 std::vector<std::string> olddescriptions;
\r
74 std::vector<std::string> descriptions;
\r
75 std::vector<std::string> oldsavemessages;
\r
76 std::vector<std::string> savemessages;
\r
78 CreateArgArray(queryvars,"boardid",boardids);
\r
79 CreateArgArray(queryvars,"oldboarddescription",olddescriptions);
\r
80 CreateArgArray(queryvars,"boarddescription",descriptions);
\r
81 CreateArgArray(queryvars,"oldsavereceivedmessages",oldsavemessages);
\r
82 CreateArgArray(queryvars,"savereceivedmessages",savemessages);
\r
84 olddescriptions.resize(boardids.size(),"");
\r
85 descriptions.resize(boardids.size(),"");
\r
86 oldsavemessages.resize(boardids.size(),"");
\r
87 savemessages.resize(boardids.size(),"");
\r
89 SQLite3DB::Statement updatest=m_db->Prepare("UPDATE tblBoard SET BoardDescription=?, SaveReceivedMessages=? WHERE BoardID=?;");
\r
91 for(int i=0; i<boardids.size(); i++)
\r
93 if(olddescriptions[i]!=descriptions[i] || oldsavemessages[i]!=savemessages[i])
\r
95 updatest.Bind(0,descriptions[i]);
\r
96 if(savemessages[i]!="true")
\r
98 updatest.Bind(1,"false");
\r
102 updatest.Bind(1,"true");
\r
105 StringFunctions::Convert(boardids[i],boardid);
\r
106 updatest.Bind(2,boardid);
\r
115 // if startrow is specified
\r
116 if(queryvars.find("startrow")!=queryvars.end())
\r
118 startrowstr=(*queryvars.find("startrow")).second;
\r
119 // convert back and forth, just in case a number wasn't passed in startrow
\r
120 StringFunctions::Convert(startrowstr,startrow);
\r
125 StringFunctions::Convert(startrow,startrowstr);
\r
128 // if we are searching by name
\r
129 if(queryvars.find("boardsearch")!=queryvars.end())
\r
131 boardsearch=(*queryvars.find("boardsearch")).second;
\r
134 content+="<h2>Boards</h2>";
\r
136 sql="SELECT COUNT(*) FROM tblBoard WHERE BoardID NOT IN (SELECT BoardID FROM tblAdministrationBoard)";
\r
137 if(boardsearch!="")
\r
139 sql+=" AND (BoardName LIKE '%' || ? || '%' OR BoardDescription LIKE '%' || ? || '%')";
\r
142 SQLite3DB::Statement st=m_db->Prepare(sql);
\r
143 if(boardsearch!="")
\r
145 st.Bind(0,boardsearch);
\r
146 st.Bind(1,boardsearch);
\r
149 if(st.RowReturned())
\r
151 st.ResultInt(0,boardcount);
\r
156 sql="SELECT BoardID,BoardName,BoardDescription,SaveReceivedMessages,AddedMethod FROM tblBoard WHERE BoardID NOT IN (SELECT BoardID FROM tblAdministrationBoard)";
\r
157 if(boardsearch!="")
\r
159 sql+=" AND (BoardName LIKE '%' || ? || '%' OR BoardDescription LIKE '%' || ? || '%')";
\r
161 sql+=" ORDER BY BoardName COLLATE NOCASE";
\r
162 sql+=" LIMIT "+startrowstr+","+rowsperpagestr+";";
\r
164 st=m_db->Prepare(sql);
\r
165 if(boardsearch!="")
\r
167 st.Bind(0,boardsearch);
\r
168 st.Bind(1,boardsearch);
\r
172 content+="<table>";
\r
175 content+="<td colspan=\"3\"><center>";
\r
176 content+="<form name=\"frmboardsearch\" action=\"boards.htm\" method=\"POST\"><input type=\"text\" name=\"boardsearch\" value=\""+SanitizeOutput(boardsearch)+"\"><input type=\"submit\" value=\"Search\"></form>";
\r
177 content+="</center></td>";
\r
181 content+="<td colspan=\"3\"><center>";
\r
182 content+="<form name=\"frmremoveboard\" action=\"boards.htm\" method=\"POST\"><input type=\"hidden\" name=\"formaction\" value=\"remove0messages\">Remove boards with 0 messages<input type=\"submit\" value=\"Remove\"></form>";
\r
183 content+="</center></td>";
\r
187 content+="<td><form name=\"frmaddboard\" method=\"POST\"><input type=\"hidden\" name=\"formaction\" value=\"addboard\"><input type=\"text\" name=\"boardname\"></td><td><input type=\"text\" name=\"boarddescription\" size=\"40\" maxlength=\"50\"></td><td><input type=\"submit\" value=\"Add Board\"></form></td>";
\r
190 content+="<tr><td colspan=\"4\"><hr><form name=\"frmboards\" method=\"POST\"><input type=\"hidden\" name=\"formaction\" value=\"update\"></td></tr>";
\r
192 content+="<th>Name</th><th>Description</th><th>Save Received Messages *</th><th>Added Method</th>";
\r
194 while(st.RowReturned() && rownum<rowsperpage)
\r
196 std::string rownumstr="";
\r
197 std::string boardidstr="";
\r
198 std::string boardname="";
\r
199 std::string boarddescription="";
\r
200 std::string savereceivedmessages="";
\r
201 std::string addedmethod="";
\r
203 st.ResultText(0,boardidstr);
\r
204 st.ResultText(1,boardname);
\r
205 st.ResultText(2,boarddescription);
\r
206 st.ResultText(3,savereceivedmessages);
\r
207 st.ResultText(4,addedmethod);
\r
209 StringFunctions::Convert(rownum,rownumstr);
\r
212 content+="<td>"+SanitizeOutput(boardname)+"</td>";
\r
213 content+="<td><input type=\"hidden\" name=\"boardid["+rownumstr+"]\" value=\""+boardidstr+"\">";
\r
214 content+="<input type=\"hidden\" name=\"oldboarddescription["+rownumstr+"]\" value=\""+StringFunctions::Replace(SanitizeOutput(boarddescription)," "," ")+"\">";
\r
215 content+="<input type=\"text\" name=\"boarddescription["+rownumstr+"]\" value=\""+SanitizeOutput(boarddescription)+"\" size=\"40\" maxlength=\"50\"></td>";
\r
217 content+="<input type=\"hidden\" name=\"oldsavereceivedmessages["+rownumstr+"]\" value=\""+savereceivedmessages+"\">";
\r
218 content+="<input type=\"checkbox\" name=\"savereceivedmessages["+rownumstr+"]\" value=\"true\"";
\r
219 if(savereceivedmessages=="true")
\r
221 content+=" CHECKED";
\r
225 content+="<td class=\"smaller\">"+SanitizeOutput(addedmethod)+"</td>";
\r
226 content+="</tr>\r\n";
\r
231 if(startrow>0 || startrow+rowsperpage<boardcount)
\r
233 std::string tempstr;
\r
239 StringFunctions::Convert(startrow-rowsperpage,tempstr);
\r
240 content+="<td colspan=\"1\" align=\"left\"><a href=\"boards.htm?"+BuildQueryString(startrow-rowsperpage,boardsearch)+"\"><-- Previous Page</a></td>";
\r
243 if(startrow+rowsperpage<boardcount)
\r
247 content+="<td></td>";
\r
250 content+="<td colspan=\"1\" align=\"right\"><a href=\"boards.htm?"+BuildQueryString(startrow+rowsperpage,boardsearch)+"\">Next Page --></a></td>";
\r
256 content+="<td colspan=\"4\"><center><input type=\"submit\" value=\"Update\"></center></form></td>";
\r
258 content+="</table>";
\r
259 content+="<p class=\"paragraph\">";
\r
260 content+="* If you uncheck this box, any new messages you download that are posted to this board will be discarded.";
\r
263 return "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"+StringFunctions::Replace(m_template,"[CONTENT]",content);
\r
266 const bool BoardsPage::WillHandleURI(const std::string &uri)
\r
268 if(uri.find("boards.")!=std::string::npos)
\r