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())
\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")
\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")
\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
79 CreateArgArray(queryvars,"boardid",boardids);
\r
80 CreateArgArray(queryvars,"oldboarddescription",olddescriptions);
\r
81 CreateArgArray(queryvars,"boarddescription",descriptions);
\r
82 CreateArgArray(queryvars,"oldsavereceivedmessages",oldsavemessages);
\r
83 CreateArgArray(queryvars,"savereceivedmessages",savemessages);
\r
85 olddescriptions.resize(boardids.size(),"");
\r
86 descriptions.resize(boardids.size(),"");
\r
87 oldsavemessages.resize(boardids.size(),"");
\r
88 savemessages.resize(boardids.size(),"");
\r
90 SQLite3DB::Statement updatest=m_db->Prepare("UPDATE tblBoard SET BoardDescription=?, SaveReceivedMessages=? WHERE BoardID=?;");
\r
92 for(int i=0; i<boardids.size(); i++)
\r
94 if(olddescriptions[i]!=descriptions[i] || oldsavemessages[i]!=savemessages[i])
\r
96 updatest.Bind(0,descriptions[i]);
\r
97 if(savemessages[i]!="true")
\r
99 updatest.Bind(1,"false");
\r
103 updatest.Bind(1,"true");
\r
106 StringFunctions::Convert(boardids[i],boardid);
\r
107 updatest.Bind(2,boardid);
\r
116 // if startrow is specified
\r
117 if(queryvars.find("startrow")!=queryvars.end())
\r
119 startrowstr=(*queryvars.find("startrow")).second;
\r
120 // convert back and forth, just in case a number wasn't passed in startrow
\r
121 StringFunctions::Convert(startrowstr,startrow);
\r
126 StringFunctions::Convert(startrow,startrowstr);
\r
129 // if we are searching by name
\r
130 if(queryvars.find("boardsearch")!=queryvars.end())
\r
132 boardsearch=(*queryvars.find("boardsearch")).second;
\r
135 content+="<h2>Boards</h2>";
\r
137 sql="SELECT COUNT(*) FROM tblBoard WHERE BoardID NOT IN (SELECT BoardID FROM tblAdministrationBoard)";
\r
138 if(boardsearch!="")
\r
140 sql+=" AND (BoardName LIKE '%' || ? || '%' OR BoardDescription LIKE '%' || ? || '%')";
\r
143 SQLite3DB::Statement st=m_db->Prepare(sql);
\r
144 if(boardsearch!="")
\r
146 st.Bind(0,boardsearch);
\r
147 st.Bind(1,boardsearch);
\r
150 if(st.RowReturned())
\r
152 st.ResultInt(0,boardcount);
\r
157 sql="SELECT BoardID,BoardName,BoardDescription,SaveReceivedMessages,AddedMethod FROM tblBoard WHERE BoardID NOT IN (SELECT BoardID FROM tblAdministrationBoard)";
\r
158 if(boardsearch!="")
\r
160 sql+=" AND (BoardName LIKE '%' || ? || '%' OR BoardDescription LIKE '%' || ? || '%')";
\r
162 sql+=" ORDER BY BoardName COLLATE NOCASE";
\r
163 sql+=" LIMIT "+startrowstr+","+rowsperpagestr+";";
\r
165 st=m_db->Prepare(sql);
\r
166 if(boardsearch!="")
\r
168 st.Bind(0,boardsearch);
\r
169 st.Bind(1,boardsearch);
\r
173 content+="<table>";
\r
176 content+="<td colspan=\"3\"><center>";
\r
177 content+="<form name=\"frmboardsearch\" action=\"boards.htm\" method=\"POST\"><input type=\"text\" name=\"boardsearch\" value=\""+SanitizeOutput(boardsearch)+"\"><input type=\"submit\" value=\"Search\"></form>";
\r
178 content+="</center></td>";
\r
182 content+="<td colspan=\"3\"><center>";
\r
183 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
184 content+="</center></td>";
\r
188 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
191 content+="<tr><td colspan=\"4\"><hr><form name=\"frmboards\" method=\"POST\"><input type=\"hidden\" name=\"formaction\" value=\"update\"></td></tr>";
\r
193 content+="<th>Name</th><th>Description</th><th>Save Received Messages *</th><th>Added Method</th>";
\r
195 while(st.RowReturned() && rownum<rowsperpage)
\r
197 std::string rownumstr="";
\r
198 std::string boardidstr="";
\r
199 std::string boardname="";
\r
200 std::string boarddescription="";
\r
201 std::string savereceivedmessages="";
\r
202 std::string addedmethod="";
\r
204 st.ResultText(0,boardidstr);
\r
205 st.ResultText(1,boardname);
\r
206 st.ResultText(2,boarddescription);
\r
207 st.ResultText(3,savereceivedmessages);
\r
208 st.ResultText(4,addedmethod);
\r
210 StringFunctions::Convert(rownum,rownumstr);
\r
213 content+="<td>"+SanitizeOutput(boardname)+"</td>";
\r
214 content+="<td><input type=\"hidden\" name=\"boardid["+rownumstr+"]\" value=\""+boardidstr+"\">";
\r
215 content+="<input type=\"hidden\" name=\"oldboarddescription["+rownumstr+"]\" value=\""+StringFunctions::Replace(SanitizeOutput(boarddescription)," "," ")+"\">";
\r
216 content+="<input type=\"text\" name=\"boarddescription["+rownumstr+"]\" value=\""+SanitizeOutput(boarddescription)+"\" size=\"40\" maxlength=\"50\"></td>";
\r
218 content+="<input type=\"hidden\" name=\"oldsavereceivedmessages["+rownumstr+"]\" value=\""+savereceivedmessages+"\">";
\r
219 content+="<input type=\"checkbox\" name=\"savereceivedmessages["+rownumstr+"]\" value=\"true\"";
\r
220 if(savereceivedmessages=="true")
\r
222 content+=" CHECKED";
\r
226 content+="<td class=\"smaller\">"+SanitizeOutput(addedmethod)+"</td>";
\r
227 content+="</tr>\r\n";
\r
232 if(startrow>0 || startrow+rowsperpage<boardcount)
\r
234 std::string tempstr;
\r
240 StringFunctions::Convert(startrow-rowsperpage,tempstr);
\r
241 content+="<td colspan=\"1\" align=\"left\"><a href=\"boards.htm?"+BuildQueryString(startrow-rowsperpage,boardsearch)+"\"><-- Previous Page</a></td>";
\r
244 if(startrow+rowsperpage<boardcount)
\r
248 content+="<td></td>";
\r
251 content+="<td colspan=\"1\" align=\"right\"><a href=\"boards.htm?"+BuildQueryString(startrow+rowsperpage,boardsearch)+"\">Next Page --></a></td>";
\r
257 content+="<td colspan=\"4\"><center><input type=\"submit\" value=\"Update\"></center></form></td>";
\r
259 content+="</table>";
\r
260 content+="<p class=\"paragraph\">";
\r
261 content+="* If you uncheck this box, any new messages you download that are posted to this board will be discarded.";
\r
264 return StringFunctions::Replace(m_template,"[CONTENT]",content);
\r
267 const bool BoardsPage::WillHandleURI(const std::string &uri)
\r
269 if(uri.find("boards.")!=std::string::npos)
\r