--- /dev/null
+#include "../../../include/http/pages/forumviewthreadpage.h"\r
+#include "../../../include/stringfunctions.h"\r
+\r
+#ifdef XMEM\r
+ #include <xmem.h>\r
+#endif\r
+\r
+const std::string ForumViewThreadPage::FixBody(const std::string &body)\r
+{\r
+ static std::string whitespace=" \t\r\n";\r
+ std::string output=body;\r
+\r
+ // put \n after 80 contiguous characters in the body\r
+ std::string::size_type prevpos=0;\r
+ std::string::size_type pos=output.find_first_of(whitespace);\r
+ while(pos!=std::string::npos)\r
+ {\r
+ while(pos-prevpos>80)\r
+ {\r
+ output.insert(prevpos+80,"\n");\r
+ prevpos+=81; // 81 because of the extra newline we just inserted\r
+ }\r
+ prevpos=pos;\r
+ pos=output.find_first_of(whitespace,pos+1);\r
+ }\r
+ while(output.size()-prevpos>80) // check the last line of the message (no whitespace after it)\r
+ {\r
+ output.insert(prevpos+80,"\n");\r
+ prevpos+=81;\r
+ }\r
+\r
+ output=StringFunctions::Replace(output,"<","<");\r
+ output=StringFunctions::Replace(output,">",">");\r
+ output=StringFunctions::Replace(output,"\n","<br />");\r
+ return output;\r
+}\r
+\r
+const std::string ForumViewThreadPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)\r
+{\r
+ std::string content="";\r
+ std::string threadidstr="";\r
+ std::string boardidstr="";\r
+ std::string currentpagestr="";\r
+ std::string boardname="";\r
+\r
+ if(queryvars.find("threadid")!=queryvars.end())\r
+ {\r
+ threadidstr=(*queryvars.find("threadid")).second;\r
+ }\r
+ if(queryvars.find("currentpage")!=queryvars.end())\r
+ {\r
+ currentpagestr=(*queryvars.find("currentpage")).second;\r
+ }\r
+ if(queryvars.find("boardid")!=queryvars.end())\r
+ {\r
+ boardidstr=(*queryvars.find("boardid")).second;\r
+ }\r
+\r
+ content+=CreateForumHeader();\r
+\r
+ SQLite3DB::Statement updateread=m_db->Prepare("UPDATE tblMessage SET Read=1 WHERE tblMessage.MessageID IN (SELECT MessageID FROM tblThreadPost WHERE ThreadID=?);");\r
+ updateread.Bind(0,threadidstr);\r
+ updateread.Step();\r
+\r
+ SQLite3DB::Statement trustst=m_db->Prepare("SELECT LocalMessageTrust, LocalTrustListTrust, PeerMessageTrust, PeerTrustListTrust, Name FROM tblIdentity WHERE IdentityID=?;");\r
+\r
+ SQLite3DB::Statement boardnamest=m_db->Prepare("SELECT tblBoard.BoardName FROM tblBoard INNER JOIN tblThread ON tblBoard.BoardID=tblThread.BoardID WHERE tblThread.ThreadID=?;");\r
+ boardnamest.Bind(0,threadidstr);\r
+ boardnamest.Step();\r
+\r
+ if(boardnamest.RowReturned())\r
+ {\r
+ boardnamest.ResultText(0,boardname);\r
+ }\r
+\r
+ content+="<table class=\"forumheader\">";\r
+ content+="<tr>";\r
+ content+="<td> Forum : <a href=\"forumthreads.htm?boardid="+boardidstr+"¤tpage="+currentpagestr+"\">"+SanitizeOutput(boardname)+"</a></td>";\r
+ content+="</tr>";\r
+ content+="</table>\r\n";\r
+\r
+ SQLite3DB::Statement st=m_db->Prepare("SELECT tblMessage.MessageID, tblMessage.IdentityID, tblMessage.FromName, tblMessage.Subject, tblMessage.MessageDate || ' ' || tblMessage.MessageTime, tblMessage.Body FROM tblMessage INNER JOIN tblThreadPost ON tblMessage.MessageID=tblThreadPost.MessageID WHERE tblThreadPost.ThreadID=? ORDER BY tblThreadPost.PostOrder;");\r
+ st.Bind(0,threadidstr);\r
+\r
+ content+="<table class=\"thread\">";\r
+ st.Step();\r
+ while(st.RowReturned())\r
+ {\r
+ std::string messageidstr="";\r
+ std::string identityidstr="";\r
+ std::string fromname="";\r
+ std::string subject="";\r
+ std::string datetime="";\r
+ std::string body="";\r
+ \r
+ st.ResultText(0,messageidstr);\r
+ st.ResultText(1,identityidstr);\r
+ st.ResultText(2,fromname);\r
+ st.ResultText(3,subject);\r
+ st.ResultText(4,datetime);\r
+ st.ResultText(5,body);\r
+\r
+ content+="<tr>";\r
+ content+="<td rowspan=\"2\" class=\"from\">";\r
+ content+="<a name=\""+messageidstr+"\"></a>";\r
+ content+="<a href=\"peerdetails.htm?identityid="+identityidstr+"\">"+FixFromName(fromname)+"</a><br />";\r
+\r
+ trustst.Bind(0,identityidstr);\r
+ trustst.Step();\r
+ if(trustst.RowReturned())\r
+ {\r
+ std::string localmessagetrust="";\r
+ std::string localtrustlisttrust="";\r
+ std::string peermessagetrust="";\r
+ std::string peertrustlisttrust="";\r
+ std::string name="";\r
+\r
+ trustst.ResultText(0,localmessagetrust);\r
+ trustst.ResultText(1,localtrustlisttrust);\r
+ trustst.ResultText(2,peermessagetrust);\r
+ trustst.ResultText(3,peertrustlisttrust);\r
+ trustst.ResultText(4,name);\r
+\r
+ content+="<table class=\"trust\">";\r
+ content+="<tr>";\r
+ content+="<td colspan=\"3\" style=\"text-align:center;\"><a href=\"peertrust.htm?namesearch="+name+"\">Trust</a></td>";\r
+ content+="</tr>";\r
+ content+="<tr>";\r
+ content+="<td></td><td>Local</td><td>Peer</td>";\r
+ content+="</tr>";\r
+ content+="<tr>";\r
+ content+="<td>Message</td><td>"+localmessagetrust+"</td><td>"+peermessagetrust+"</td>";\r
+ content+="</tr>";\r
+ content+="<tr>";\r
+ content+="<td>Trust List</td><td>"+localtrustlisttrust+"</td><td>"+peertrustlisttrust+"</td>";\r
+ content+="</tr>";\r
+ content+="</table>";\r
+ }\r
+\r
+ content+="</td>";\r
+ content+="<td class=\"subject\">";\r
+ content+=SanitizeOutput(subject)+" on "+datetime;\r
+ content+="</td>";\r
+ content+="<td><a href=\"forumcreatepost.htm?replytomessageid="+messageidstr+"&threadid="+threadidstr+"&boardid="+boardidstr+"¤tpage="+currentpagestr+"\">Reply</a></td>";\r
+ content+="</tr>\r\n";\r
+ content+="<tr>";\r
+ content+="<td class=\"body\" colspan=\"2\">";\r
+ content+=FixBody(body);\r
+ content+="</td>";\r
+ content+="</tr>";\r
+ trustst.Reset();\r
+\r
+ st.Step();\r
+ }\r
+ content+="</table>";\r
+\r
+ return StringFunctions::Replace(m_template,"[CONTENT]",content);\r
+}\r