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 boarddescription=(*queryvars.find("boarddescription")).second;
\r
57 SQLite3DB::Statement addst=m_db->Prepare("INSERT INTO tblBoard(BoardName,BoardDescription,DateAdded) VALUES(?,?,?);");
\r
58 addst.Bind(0,boardname);
\r
59 addst.Bind(1,boarddescription);
\r
60 addst.Bind(2,now.Format("%Y-%m-%d %H:%M:%S"));
\r
63 if((*queryvars.find("formaction")).second=="update")
\r
66 std::vector<std::string> boardids;
\r
67 std::vector<std::string> olddescriptions;
\r
68 std::vector<std::string> descriptions;
\r
69 std::vector<std::string> oldsavemessages;
\r
70 std::vector<std::string> savemessages;
\r
72 CreateArgArray(queryvars,"boardid",boardids);
\r
73 CreateArgArray(queryvars,"oldboarddescription",olddescriptions);
\r
74 CreateArgArray(queryvars,"boarddescription",descriptions);
\r
75 CreateArgArray(queryvars,"oldsavereceivedmessages",oldsavemessages);
\r
76 CreateArgArray(queryvars,"savereceivedmessages",savemessages);
\r
78 olddescriptions.resize(boardids.size(),"");
\r
79 descriptions.resize(boardids.size(),"");
\r
80 oldsavemessages.resize(boardids.size(),"");
\r
81 savemessages.resize(boardids.size(),"");
\r
83 SQLite3DB::Statement updatest=m_db->Prepare("UPDATE tblBoard SET BoardDescription=?, SaveReceivedMessages=? WHERE BoardID=?;");
\r
85 for(int i=0; i<boardids.size(); i++)
\r
87 if(olddescriptions[i]!=descriptions[i] || oldsavemessages[i]!=savemessages[i])
\r
89 updatest.Bind(0,descriptions[i]);
\r
90 if(savemessages[i]!="true")
\r
92 updatest.Bind(1,"false");
\r
96 updatest.Bind(1,"true");
\r
99 StringFunctions::Convert(boardids[i],boardid);
\r
100 updatest.Bind(2,boardid);
\r
109 // if startrow is specified
\r
110 if(queryvars.find("startrow")!=queryvars.end())
\r
112 startrowstr=(*queryvars.find("startrow")).second;
\r
113 // convert back and forth, just in case a number wasn't passed in startrow
\r
114 StringFunctions::Convert(startrowstr,startrow);
\r
119 StringFunctions::Convert(startrow,startrowstr);
\r
122 // if we are searching by name
\r
123 if(queryvars.find("boardsearch")!=queryvars.end())
\r
125 boardsearch=(*queryvars.find("boardsearch")).second;
\r
128 content+="<h2>Boards</h2>";
\r
130 sql="SELECT COUNT(*) FROM tblBoard WHERE BoardID NOT IN (SELECT BoardID FROM tblAdministrationBoard)";
\r
131 if(boardsearch!="")
\r
133 sql+=" AND (BoardName LIKE '%' || ? || '%' OR BoardDescription LIKE '%' || ? || '%')";
\r
136 SQLite3DB::Statement st=m_db->Prepare(sql);
\r
137 if(boardsearch!="")
\r
139 st.Bind(0,boardsearch);
\r
140 st.Bind(1,boardsearch);
\r
143 if(st.RowReturned())
\r
145 st.ResultInt(0,boardcount);
\r
150 sql="SELECT BoardID,BoardName,BoardDescription,SaveReceivedMessages FROM tblBoard WHERE BoardID NOT IN (SELECT BoardID FROM tblAdministrationBoard)";
\r
151 if(boardsearch!="")
\r
153 sql+=" AND (BoardName LIKE '%' || ? || '%' OR BoardDescription LIKE '%' || ? || '%')";
\r
155 sql+=" ORDER BY BoardName COLLATE NOCASE";
\r
156 sql+=" LIMIT "+startrowstr+","+rowsperpagestr+";";
\r
158 st=m_db->Prepare(sql);
\r
159 if(boardsearch!="")
\r
161 st.Bind(0,boardsearch);
\r
162 st.Bind(1,boardsearch);
\r
166 content+="<table>";
\r
169 content+="<td colspan=\"3\"><center>";
\r
170 content+="<form name=\"frmboardsearch\" action=\"boards.htm\" method=\"POST\"><input type=\"text\" name=\"boardsearch\" value=\""+SanitizeOutput(boardsearch)+"\"><input type=\"submit\" value=\"Search\"></form>";
\r
171 content+="</center></td>";
\r
175 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\"></td><td><input type=\"submit\" value=\"Add Board\"></form></td>";
\r
178 content+="<tr><td colspan=\"3\"><hr><form name=\"frmboards\" method=\"POST\"><input type=\"hidden\" name=\"formaction\" value=\"update\"></td></tr>";
\r
180 content+="<th>Name</th><th>Description</th><th>Save Received Messages</th>";
\r
182 while(st.RowReturned() && rownum<rowsperpage)
\r
184 std::string rownumstr="";
\r
185 std::string boardidstr="";
\r
186 std::string boardname="";
\r
187 std::string boarddescription="";
\r
188 std::string savereceivedmessages="";
\r
190 st.ResultText(0,boardidstr);
\r
191 st.ResultText(1,boardname);
\r
192 st.ResultText(2,boarddescription);
\r
193 st.ResultText(3,savereceivedmessages);
\r
195 StringFunctions::Convert(rownum,rownumstr);
\r
198 content+="<td>"+SanitizeOutput(boardname)+"</td>";
\r
199 content+="<td><input type=\"hidden\" name=\"boardid["+rownumstr+"]\" value=\""+boardidstr+"\">";
\r
200 content+="<input type=\"hidden\" name=\"oldboarddescription["+rownumstr+"]\" value=\""+StringFunctions::Replace(SanitizeOutput(boarddescription)," "," ")+"\">";
\r
201 content+="<input type=\"text\" name=\"boarddescription["+rownumstr+"]\" value=\""+SanitizeOutput(boarddescription)+"\" size=\"40\"></td>";
\r
203 content+="<input type=\"hidden\" name=\"oldsavereceivedmessages["+rownumstr+"]\" value=\""+savereceivedmessages+"\">";
\r
204 content+="<input type=\"checkbox\" name=\"savereceivedmessages["+rownumstr+"]\" value=\"true\"";
\r
205 if(savereceivedmessages=="true")
\r
207 content+=" CHECKED";
\r
211 content+="</tr>\r\n";
\r
216 if(startrow>0 || startrow+rowsperpage<boardcount)
\r
218 std::string tempstr;
\r
224 StringFunctions::Convert(startrow-rowsperpage,tempstr);
\r
225 content+="<td colspan=\"1\" align=\"left\"><a href=\"boards.htm?"+BuildQueryString(startrow-rowsperpage,boardsearch)+"\"><-- Previous Page</a></td>";
\r
228 if(startrow+rowsperpage<boardcount)
\r
232 content+="<td></td>";
\r
235 content+="<td colspan=\"1\" align=\"right\"><a href=\"boards.htm?"+BuildQueryString(startrow+rowsperpage,boardsearch)+"\">Next Page --></a></td>";
\r
241 content+="<td colspan=\"3\"><center><input type=\"submit\" value=\"Update\"></center></form></td>";
\r
243 content+="</table>";
\r
245 return "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"+StringFunctions::Replace(m_template,"[CONTENT]",content);
\r
248 const bool BoardsPage::WillHandleURI(const std::string &uri)
\r
250 if(uri.find("boards.")!=std::string::npos)
\r