1 #include "../../../include/http/pages/boardspage.h"
\r
2 #include "../../../include/stringfunctions.h"
\r
4 #include <Poco/DateTime.h>
\r
5 #include <Poco/DateTimeFormatter.h>
\r
11 const std::string BoardsPage::BuildQueryString(const long startrow, const std::string &boardsearch)
\r
13 std::string returnval="";
\r
14 std::string tempval="";
\r
18 StringFunctions::Convert(startrow,tempval);
\r
19 returnval+="startrow="+tempval;
\r
28 returnval+="boardsearch="+boardsearch;
\r
35 const std::string BoardsPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)
\r
38 std::string content="";
\r
41 std::string rowsperpagestr="25";
\r
43 std::string startrowstr="0";
\r
44 std::string boardsearch="";
\r
48 if(queryvars.find("formaction")!=queryvars.end())
\r
50 if((*queryvars.find("formaction")).second=="addboard" && queryvars.find("boardname")!=queryvars.end() && queryvars.find("boarddescription")!=queryvars.end() && ValidateFormPassword(queryvars))
\r
52 std::string boardname="";
\r
53 std::string boarddescription="";
\r
55 boardname=(*queryvars.find("boardname")).second;
\r
56 StringFunctions::LowerCase(boardname,boardname);
\r
57 boarddescription=(*queryvars.find("boarddescription")).second;
\r
59 SQLite3DB::Statement addst=m_db->Prepare("INSERT INTO tblBoard(BoardName,BoardDescription,DateAdded,AddedMethod) VALUES(?,?,?,?);");
\r
60 addst.Bind(0,boardname);
\r
61 addst.Bind(1,boarddescription);
\r
62 addst.Bind(2,Poco::DateTimeFormatter::format(now,"%Y-%m-%d %H:%M:%S"));
\r
63 addst.Bind(3,"Added manually");
\r
66 if((*queryvars.find("formaction")).second=="remove0messages" && ValidateFormPassword(queryvars))
\r
68 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
70 if((*queryvars.find("formaction")).second=="update" && ValidateFormPassword(queryvars))
\r
73 std::vector<std::string> boardids;
\r
74 std::vector<std::string> olddescriptions;
\r
75 std::vector<std::string> descriptions;
\r
76 std::vector<std::string> oldsavemessages;
\r
77 std::vector<std::string> savemessages;
\r
78 std::vector<std::string> oldforums;
\r
79 std::vector<std::string> forums;
\r
81 CreateArgArray(queryvars,"boardid",boardids);
\r
82 CreateArgArray(queryvars,"oldboarddescription",olddescriptions);
\r
83 CreateArgArray(queryvars,"boarddescription",descriptions);
\r
84 CreateArgArray(queryvars,"oldsavereceivedmessages",oldsavemessages);
\r
85 CreateArgArray(queryvars,"savereceivedmessages",savemessages);
\r
86 CreateArgArray(queryvars,"oldforum",oldforums);
\r
87 CreateArgArray(queryvars,"forum",forums);
\r
89 olddescriptions.resize(boardids.size(),"");
\r
90 descriptions.resize(boardids.size(),"");
\r
91 oldsavemessages.resize(boardids.size(),"");
\r
92 savemessages.resize(boardids.size(),"");
\r
93 oldforums.resize(boardids.size(),"");
\r
94 forums.resize(boardids.size(),"");
\r
96 SQLite3DB::Statement updatest=m_db->Prepare("UPDATE tblBoard SET BoardDescription=?, SaveReceivedMessages=?, Forum=? WHERE BoardID=?;");
\r
98 for(int i=0; i<boardids.size(); i++)
\r
100 if(olddescriptions[i]!=descriptions[i] || oldsavemessages[i]!=savemessages[i] || oldforums[i]!=forums[i])
\r
102 updatest.Bind(0,descriptions[i]);
\r
103 if(savemessages[i]!="true")
\r
105 updatest.Bind(1,"false");
\r
109 updatest.Bind(1,"true");
\r
111 if(forums[i]!="true")
\r
113 updatest.Bind(2,"false");
\r
117 updatest.Bind(2,"true");
\r
120 StringFunctions::Convert(boardids[i],boardid);
\r
121 updatest.Bind(3,boardid);
\r
130 // if startrow is specified
\r
131 if(queryvars.find("startrow")!=queryvars.end())
\r
133 startrowstr=(*queryvars.find("startrow")).second;
\r
134 // convert back and forth, just in case a number wasn't passed in startrow
\r
135 StringFunctions::Convert(startrowstr,startrow);
\r
140 StringFunctions::Convert(startrow,startrowstr);
\r
143 // if we are searching by name
\r
144 if(queryvars.find("boardsearch")!=queryvars.end())
\r
146 boardsearch=(*queryvars.find("boardsearch")).second;
\r
149 content+="<h2>Boards</h2>";
\r
151 sql="SELECT COUNT(*) FROM tblBoard WHERE BoardID NOT IN (SELECT BoardID FROM tblAdministrationBoard)";
\r
152 if(boardsearch!="")
\r
154 sql+=" AND (BoardName LIKE '%' || ? || '%' OR BoardDescription LIKE '%' || ? || '%')";
\r
157 SQLite3DB::Statement st=m_db->Prepare(sql);
\r
158 if(boardsearch!="")
\r
160 st.Bind(0,boardsearch);
\r
161 st.Bind(1,boardsearch);
\r
164 if(st.RowReturned())
\r
166 st.ResultInt(0,boardcount);
\r
171 sql="SELECT BoardID,BoardName,BoardDescription,SaveReceivedMessages,AddedMethod,Forum FROM tblBoard WHERE BoardID NOT IN (SELECT BoardID FROM tblAdministrationBoard)";
\r
172 if(boardsearch!="")
\r
174 sql+=" AND (BoardName LIKE '%' || ? || '%' OR BoardDescription LIKE '%' || ? || '%')";
\r
176 sql+=" ORDER BY BoardName COLLATE NOCASE";
\r
177 sql+=" LIMIT "+startrowstr+","+rowsperpagestr+";";
\r
179 st=m_db->Prepare(sql);
\r
180 if(boardsearch!="")
\r
182 st.Bind(0,boardsearch);
\r
183 st.Bind(1,boardsearch);
\r
187 content+="<table class=\"small90\">";
\r
190 content+="<td colspan=\"3\"><center>";
\r
191 content+="<form name=\"frmboardsearch\" action=\"boards.htm\" method=\"POST\"><input type=\"text\" name=\"boardsearch\" value=\""+SanitizeOutput(boardsearch)+"\">"+CreateFormPassword()+"<input type=\"submit\" value=\"Search\"></form>";
\r
192 content+="</center></td>";
\r
196 content+="<td colspan=\"3\"><center>";
\r
197 content+="<form name=\"frmremoveboard\" action=\"boards.htm\" method=\"POST\">"+CreateFormPassword()+"<input type=\"hidden\" name=\"formaction\" value=\"remove0messages\">Remove boards with 0 messages<input type=\"submit\" value=\"Remove\"></form>";
\r
198 content+="</center></td>";
\r
202 content+="<td><form name=\"frmaddboard\" method=\"POST\">"+CreateFormPassword()+"<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
205 content+="<tr><td colspan=\"4\"><hr><form name=\"frmboards\" method=\"POST\"><input type=\"hidden\" name=\"formaction\" value=\"update\">"+CreateFormPassword()+"</td></tr>";
\r
207 content+="<th>Name</th><th>Description</th><th>Save Received Messages *</th><th>Forum</th><th>Added Method</th>";
\r
209 while(st.RowReturned() && rownum<rowsperpage)
\r
211 std::string rownumstr="";
\r
212 std::string boardidstr="";
\r
213 std::string boardname="";
\r
214 std::string boarddescription="";
\r
215 std::string savereceivedmessages="";
\r
216 std::string addedmethod="";
\r
217 std::string forum="";
\r
219 st.ResultText(0,boardidstr);
\r
220 st.ResultText(1,boardname);
\r
221 st.ResultText(2,boarddescription);
\r
222 st.ResultText(3,savereceivedmessages);
\r
223 st.ResultText(4,addedmethod);
\r
224 st.ResultText(5,forum);
\r
226 StringFunctions::Convert(rownum,rownumstr);
\r
229 content+="<td>"+SanitizeOutput(boardname)+"</td>";
\r
230 content+="<td><input type=\"hidden\" name=\"boardid["+rownumstr+"]\" value=\""+boardidstr+"\">";
\r
231 content+="<input type=\"hidden\" name=\"oldboarddescription["+rownumstr+"]\" value=\""+StringFunctions::Replace(SanitizeOutput(boarddescription)," "," ")+"\">";
\r
232 content+="<input type=\"text\" name=\"boarddescription["+rownumstr+"]\" value=\""+SanitizeOutput(boarddescription)+"\" size=\"40\" maxlength=\"50\"></td>";
\r
234 content+="<input type=\"hidden\" name=\"oldsavereceivedmessages["+rownumstr+"]\" value=\""+savereceivedmessages+"\">";
\r
235 content+="<input type=\"checkbox\" name=\"savereceivedmessages["+rownumstr+"]\" value=\"true\"";
\r
236 if(savereceivedmessages=="true")
\r
238 content+=" CHECKED";
\r
243 content+="<input type=\"hidden\" name=\"oldforum["+rownumstr+"]\" value=\""+forum+"\">";
\r
244 content+="<input type=\"checkbox\" name=\"forum["+rownumstr+"]\" value=\"true\"";
\r
247 content+=" CHECKED";
\r
251 content+="<td>"+SanitizeOutput(addedmethod)+"</td>";
\r
252 content+="</tr>\r\n";
\r
257 if(startrow>0 || startrow+rowsperpage<boardcount)
\r
259 std::string tempstr;
\r
265 StringFunctions::Convert(startrow-rowsperpage,tempstr);
\r
266 content+="<td colspan=\"2\" style=\"text-align:left;\"><a href=\"boards.htm?"+BuildQueryString(startrow-rowsperpage,boardsearch)+"\"><-- Previous Page</a></td>";
\r
269 if(startrow+rowsperpage<boardcount)
\r
273 content+="<td></td>";
\r
276 content+="<td colspan=\"1\" style=\"text-align:left;\"><a href=\"boards.htm?"+BuildQueryString(startrow+rowsperpage,boardsearch)+"\">Next Page --></a></td>";
\r
282 content+="<td colspan=\"4\"><center><input type=\"submit\" value=\"Update\"></center></form></td>";
\r
284 content+="</table>";
\r
285 content+="<p class=\"paragraph\">";
\r
286 content+="* If you uncheck this box, any new messages you download that are posted to this board will be discarded. When multiple local identities are used, it is best not to discard messages from any boards, as identifying which identities are the same person is much easier when their message lists are missing messages from the same boards.";
\r
289 return StringFunctions::Replace(m_template,"[CONTENT]",content);
\r
292 const bool BoardsPage::WillHandleURI(const std::string &uri)
\r
294 if(uri.find("boards.")!=std::string::npos)
\r