1 #include "../../../include/http/pages/browsemessagespage.h"
\r
2 #include "../../../include/stringfunctions.h"
\r
3 #include "../../../include/global.h"
\r
4 #include "../../../include/messagethread.h"
\r
10 const std::string BrowseMessagesPage::BuildQueryString(const long startrow, const std::string &boardidstr, const std::string &messageidstr)
\r
12 std::string returnval="";
\r
13 std::string tempval="";
\r
17 StringFunctions::Convert(startrow,tempval);
\r
18 returnval+="startrow="+tempval;
\r
27 returnval+="boardid="+boardidstr;
\r
30 if(messageidstr!="")
\r
36 returnval+="messageid="+messageidstr;
\r
43 const std::string BrowseMessagesPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)
\r
45 std::string content="";
\r
47 std::string boardidstr="";
\r
48 std::string messageidstr="";
\r
50 std::string startrowstr="0";
\r
52 std::string rowsperpagestr="51"; // one more than rowsperpage so we can know if there are more messages
\r
57 // if startrow is specified
\r
58 if(queryvars.find("startrow")!=queryvars.end())
\r
60 startrowstr=(*queryvars.find("startrow")).second;
\r
61 // convert back and forth, just in case a number wasn't passed in startrow
\r
62 StringFunctions::Convert(startrowstr,startrow);
\r
67 StringFunctions::Convert(startrow,startrowstr);
\r
69 if(queryvars.find("boardid")!=queryvars.end())
\r
71 boardidstr=(*queryvars.find("boardid")).second;
\r
72 StringFunctions::Convert(boardidstr,boardid);
\r
74 if(queryvars.find("messageid")!=queryvars.end())
\r
76 messageidstr=(*queryvars.find("messageid")).second;
\r
82 sql="SELECT Subject, FromName, MessageDate || ' ' || MessageTime, Body, tblMessage.MessageID ";
\r
83 sql+="FROM tblMessage INNER JOIN tblMessageBoard ON tblMessage.MessageID=tblMessageBoard.MessageID ";
\r
86 sql+="WHERE tblMessageBoard.BoardID=? ";
\r
88 sql+="ORDER BY MessageDate || ' ' || MessageTime DESC ";
\r
89 sql+="LIMIT "+startrowstr+","+rowsperpagestr+";";
\r
91 SQLite3DB::Statement st=m_db->Prepare(sql);
\r
94 st.Bind(0,boardidstr);
\r
98 content+="<table class=\"small90\">";
\r
99 content+="<tr><th>Subject</th><th>From</th><th>Date</th></tr>";
\r
102 while(st.RowReturned() && rowcount++<rowsperpage)
\r
104 std::string subject="";
\r
105 std::string fromname="";
\r
106 std::string messagedate="";
\r
107 std::string body="";
\r
108 std::string messageidstr="";
\r
110 st.ResultText(0,subject);
\r
111 st.ResultText(1,fromname);
\r
112 st.ResultText(2,messagedate);
\r
113 st.ResultText(3,body);
\r
114 st.ResultText(4,messageidstr);
\r
116 if(body.size()>400)
\r
123 content+="<td title=\""+StringFunctions::Replace(SanitizeOutput(body),"\n","\r\n")+"\"><a href=\""+m_pagename+"?"+BuildQueryString(startrow,boardidstr,messageidstr)+"\">"+SanitizeOutput(subject)+"</a></td>";
\r
124 content+="<td>"+fromname+"</td>";
\r
125 content+="<td>"+SanitizeOutput(messagedate)+"</td>";
\r
126 content+="</tr>\r\n";
\r
131 if(startrow>0 || st.RowReturned())
\r
137 int thisstartrow=startrow-rowsperpage;
\r
142 content+="<td><a href=\""+m_pagename+"?"+BuildQueryString(thisstartrow,boardidstr,"")+"\"><--</a></td>";
\r
146 content+="<td></td>";
\r
149 content+="<td></td>";
\r
151 if(st.RowReturned())
\r
153 int thisstartrow=startrow+rowsperpage;
\r
154 content+="<td><a href=\""+m_pagename+"?"+BuildQueryString(thisstartrow,boardidstr,"")+"\">--></a></td>";
\r
159 content+="</table>";
\r
163 sql="SELECT Body, FromName, MessageDate || ' ' || MessageTime, Subject FROM tblMessage WHERE MessageID=?;";
\r
164 SQLite3DB::Statement st=m_db->Prepare(sql);
\r
165 st.Bind(0,messageidstr);
\r
168 if(st.RowReturned())
\r
170 std::string body="";
\r
171 std::string fromname="";
\r
172 std::string messagedate="";
\r
173 std::string subject="";
\r
174 std::string boards="";
\r
176 st.ResultText(0,body);
\r
177 st.ResultText(1,fromname);
\r
178 st.ResultText(2,messagedate);
\r
179 st.ResultText(3,subject);
\r
181 // get boards message was posted to
\r
182 SQLite3DB::Statement st2=m_db->Prepare("SELECT tblBoard.BoardID, tblBoard.BoardName FROM tblBoard INNER JOIN tblMessageBoard ON tblBoard.BoardID=tblMessageBoard.BoardID WHERE tblMessageBoard.MessageID=?;");
\r
183 st2.Bind(0,messageidstr);
\r
185 while(st2.RowReturned())
\r
187 std::string boardname="";
\r
188 std::string innerboardidstr="";
\r
190 st2.ResultText(0,innerboardidstr);
\r
191 st2.ResultText(1,boardname);
\r
198 boards+="<a href=\""+m_pagename+"?"+BuildQueryString(0,innerboardidstr,"")+"\">"+SanitizeOutput(boardname)+"</a>";
\r
203 content+="<div class=\"post\">";
\r
204 content+="<div class=\"postboards\">";
\r
207 content+="<div class=\"postsubject\">";
\r
208 content+=SanitizeOutput(subject);
\r
210 content+="<div class=\"postfrom\">";
\r
211 content+=SanitizeOutput(fromname);
\r
213 content+="<div class=\"postdate\">";
\r
214 content+=SanitizeOutput(messagedate);
\r
216 content+="<div class=\"postbody\">";
\r
217 content+=SanitizeOutput(body);
\r
219 content+="</div>\r\n";
\r
221 long currentlevel=0;
\r
222 MessageThread thread;
\r
223 thread.Load(messageidstr,boardid);
\r
225 std::vector<MessageThread::threadnode> nodes=thread.GetNodes();
\r
228 content+="<ul class=\"messagethread\">";
\r
229 for(std::vector<MessageThread::threadnode>::const_iterator i=nodes.begin(); i!=nodes.end(); i++)
\r
231 if((*i).m_level>currentlevel)
\r
233 content+="<ul class=\"messagethread\">";
\r
235 else if((*i).m_level<currentlevel)
\r
239 currentlevel=(*i).m_level;
\r
241 std::string tempstr="";
\r
242 StringFunctions::Convert((*i).m_messageid,tempstr);
\r
245 if(tempstr!=messageidstr)
\r
247 content+="<a href=\""+m_pagename+"?"+BuildQueryString(0,boardidstr,tempstr)+"\">"+SanitizeOutput((*i).m_subject)+"</a> - "+SanitizeOutput((*i).m_fromname);
\r
251 content+=SanitizeOutput((*i).m_subject)+" - "+SanitizeOutput((*i).m_fromname);
\r
253 content+="</li>\r\n";
\r
255 while(currentlevel-->0)
\r
259 content+="</ul>\r\n";
\r
264 return StringFunctions::Replace(m_template,"[CONTENT]",content);
\r