1 #include "../../../include/http/pages/forumviewthreadpage.h"
\r
2 #include "../../../include/stringfunctions.h"
\r
8 const std::string ForumViewThreadPage::FixBody(const std::string &body)
\r
10 static std::string whitespace=" \t\r\n";
\r
11 std::string output=body;
\r
13 output=StringFunctions::Replace(output,"\r\n","\n");
\r
15 // put \n after 80 contiguous characters in the body
\r
16 std::string::size_type prevpos=0;
\r
17 std::string::size_type pos=output.find_first_of(whitespace);
\r
18 while(pos!=std::string::npos)
\r
20 while(pos-prevpos>80)
\r
22 output.insert(prevpos+80,"\n");
\r
23 prevpos+=81; // 81 because of the extra newline we just inserted
\r
26 pos=output.find_first_of(whitespace,pos+1);
\r
28 while(output.size()-prevpos>80) // check the last line of the message (no whitespace after it)
\r
30 output.insert(prevpos+80,"\n");
\r
34 output=StringFunctions::Replace(output,"<","<");
\r
35 output=StringFunctions::Replace(output,">",">");
\r
36 output=StringFunctions::Replace(output,"\n","<br />");
\r
40 const std::string ForumViewThreadPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)
\r
42 std::string content="";
\r
43 std::string threadidstr="";
\r
44 std::string boardidstr="";
\r
45 std::string currentpagestr="";
\r
46 std::string boardname="";
\r
47 std::string firstunreadidstr="";
\r
49 if(queryvars.find("threadid")!=queryvars.end())
\r
51 threadidstr=(*queryvars.find("threadid")).second;
\r
53 if(queryvars.find("currentpage")!=queryvars.end())
\r
55 currentpagestr=(*queryvars.find("currentpage")).second;
\r
57 if(queryvars.find("boardid")!=queryvars.end())
\r
59 boardidstr=(*queryvars.find("boardid")).second;
\r
62 content+=CreateForumHeader();
\r
64 SQLite3DB::Statement firstunreadst=m_db->Prepare("SELECT tblMessage.MessageID FROM tblThreadPost INNER JOIN tblMessage ON tblThreadPost.MessageID=tblMessage.MessageID WHERE ThreadID=? AND tblMessage.Read=0;");
\r
65 firstunreadst.Bind(0,threadidstr);
\r
66 firstunreadst.Step();
\r
67 if(firstunreadst.RowReturned())
\r
69 firstunreadst.ResultText(0,firstunreadidstr);
\r
72 SQLite3DB::Statement updateread=m_db->Prepare("UPDATE tblMessage SET Read=1 WHERE tblMessage.MessageID IN (SELECT MessageID FROM tblThreadPost WHERE ThreadID=?);");
\r
73 updateread.Bind(0,threadidstr);
\r
76 SQLite3DB::Statement trustst=m_db->Prepare("SELECT LocalMessageTrust, LocalTrustListTrust, PeerMessageTrust, PeerTrustListTrust, Name FROM tblIdentity WHERE IdentityID=?;");
\r
78 SQLite3DB::Statement boardnamest=m_db->Prepare("SELECT tblBoard.BoardName FROM tblBoard INNER JOIN tblThread ON tblBoard.BoardID=tblThread.BoardID WHERE tblThread.ThreadID=?;");
\r
79 boardnamest.Bind(0,threadidstr);
\r
82 if(boardnamest.RowReturned())
\r
84 boardnamest.ResultText(0,boardname);
\r
87 content+="<table class=\"forumheader\">";
\r
89 content+="<td> Forum : <a href=\"forumthreads.htm?boardid="+boardidstr+"¤tpage="+currentpagestr+"\">"+SanitizeOutput(boardname)+"</a></td>";
\r
90 if(firstunreadidstr!="")
\r
93 content+="<a href=\"#"+firstunreadidstr+"\">First Unread Message</a>";
\r
97 content+="</table>\r\n";
\r
99 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
100 st.Bind(0,threadidstr);
\r
102 content+="<table class=\"thread\">";
\r
104 while(st.RowReturned())
\r
106 std::string messageidstr="";
\r
107 std::string identityidstr="";
\r
108 std::string fromname="";
\r
109 std::string subject="";
\r
110 std::string datetime="";
\r
111 std::string body="";
\r
113 st.ResultText(0,messageidstr);
\r
114 st.ResultText(1,identityidstr);
\r
115 st.ResultText(2,fromname);
\r
116 st.ResultText(3,subject);
\r
117 st.ResultText(4,datetime);
\r
118 st.ResultText(5,body);
\r
121 content+="<td rowspan=\"2\" class=\"from\">";
\r
122 content+="<a name=\""+messageidstr+"\"></a>";
\r
123 content+="<a href=\"peerdetails.htm?identityid="+identityidstr+"\">"+FixFromName(fromname)+"</a><br />";
\r
125 trustst.Bind(0,identityidstr);
\r
127 if(trustst.RowReturned())
\r
129 std::string localmessagetrust="";
\r
130 std::string localtrustlisttrust="";
\r
131 std::string peermessagetrust="";
\r
132 std::string peertrustlisttrust="";
\r
133 std::string name="";
\r
135 trustst.ResultText(0,localmessagetrust);
\r
136 trustst.ResultText(1,localtrustlisttrust);
\r
137 trustst.ResultText(2,peermessagetrust);
\r
138 trustst.ResultText(3,peertrustlisttrust);
\r
139 trustst.ResultText(4,name);
\r
141 content+="<table class=\"trust\">";
\r
143 content+="<td colspan=\"3\" style=\"text-align:center;\"><a href=\"peertrust.htm?namesearch="+StringFunctions::UriEncode(name)+"\">Trust</a></td>";
\r
146 content+="<td></td><td>Local</td><td>Peer</td>";
\r
149 content+="<td>Message</td><td>"+localmessagetrust+"</td><td>"+peermessagetrust+"</td>";
\r
152 content+="<td>Trust List</td><td>"+localtrustlisttrust+"</td><td>"+peertrustlisttrust+"</td>";
\r
154 content+="</table>";
\r
158 content+="<td class=\"subject\">";
\r
159 content+=SanitizeOutput(subject)+" on "+datetime;
\r
161 content+="<td><a href=\"forumcreatepost.htm?replytomessageid="+messageidstr+"&threadid="+threadidstr+"&boardid="+boardidstr+"¤tpage="+currentpagestr+"\">Reply</a></td>";
\r
162 content+="</tr>\r\n";
\r
164 content+="<td class=\"body\" colspan=\"2\">";
\r
165 content+=FixBody(body);
\r
172 content+="</table>";
\r
174 return StringFunctions::Replace(m_template,"[CONTENT]",content);
\r