version 0.3.28
[fms.git] / src / http / pages / forumviewthreadpage.cpp
1 #include "../../../include/http/pages/forumviewthreadpage.h"\r
2 #include "../../../include/stringfunctions.h"\r
3 #include "../../../include/unicode/unicodeformatter.h"\r
4 \r
5 #ifdef XMEM\r
6         #include <xmem.h>\r
7 #endif\r
8 \r
9 const std::string ForumViewThreadPage::FixBody(const std::string &body)\r
10 {\r
11         std::string output=body;\r
12 \r
13         output=StringFunctions::Replace(output,"\r\n","\n");\r
14 \r
15         UnicodeFormatter::LineWrap(output,80,"",output);\r
16 \r
17         output=StringFunctions::Replace(output,"<","&lt;");\r
18         output=StringFunctions::Replace(output,">","&gt;");\r
19         output=StringFunctions::Replace(output,"\n","<br />");\r
20         return output;\r
21 }\r
22 \r
23 const std::string ForumViewThreadPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)\r
24 {\r
25         std::string content="";\r
26         std::string threadidstr="";\r
27         std::string boardidstr="";\r
28         std::string currentpagestr="";\r
29         std::string boardname="";\r
30         std::string firstunreadidstr="";\r
31 \r
32         if(queryvars.find("threadid")!=queryvars.end())\r
33         {\r
34                 threadidstr=(*queryvars.find("threadid")).second;\r
35         }\r
36         if(queryvars.find("currentpage")!=queryvars.end())\r
37         {\r
38                 currentpagestr=(*queryvars.find("currentpage")).second;\r
39         }\r
40         if(queryvars.find("boardid")!=queryvars.end())\r
41         {\r
42                 boardidstr=(*queryvars.find("boardid")).second;\r
43         }\r
44 \r
45         content+=CreateForumHeader();\r
46 \r
47         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
48         firstunreadst.Bind(0,threadidstr);\r
49         firstunreadst.Step();\r
50         if(firstunreadst.RowReturned())\r
51         {\r
52                 firstunreadst.ResultText(0,firstunreadidstr);\r
53         }\r
54 \r
55         if(queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="markunread")\r
56         {\r
57                 SQLite3DB::Statement updateread=m_db->Prepare("UPDATE tblMessage SET Read=0 WHERE tblMessage.MessageID IN (SELECT MessageID FROM tblThreadPost WHERE ThreadID=?);");\r
58                 updateread.Bind(0,threadidstr);\r
59                 updateread.Step();\r
60         }\r
61         else\r
62         {\r
63                 SQLite3DB::Statement updateread=m_db->Prepare("UPDATE tblMessage SET Read=1 WHERE tblMessage.MessageID IN (SELECT MessageID FROM tblThreadPost WHERE ThreadID=?);");\r
64                 updateread.Bind(0,threadidstr);\r
65                 updateread.Step();\r
66         }\r
67 \r
68         SQLite3DB::Statement trustst=m_db->Prepare("SELECT LocalMessageTrust, LocalTrustListTrust, PeerMessageTrust, PeerTrustListTrust, Name FROM tblIdentity WHERE IdentityID=?;");\r
69 \r
70         SQLite3DB::Statement boardnamest=m_db->Prepare("SELECT tblBoard.BoardName FROM tblBoard INNER JOIN tblThread ON tblBoard.BoardID=tblThread.BoardID WHERE tblThread.ThreadID=?;");\r
71         boardnamest.Bind(0,threadidstr);\r
72         boardnamest.Step();\r
73 \r
74         if(boardnamest.RowReturned())\r
75         {\r
76                 boardnamest.ResultText(0,boardname);\r
77         }\r
78 \r
79         content+="<table class=\"forumheader\">";\r
80         content+="<tr>";\r
81         content+="<td> Forum : <a href=\"forumthreads.htm?boardid="+boardidstr+"&currentpage="+currentpagestr+"\">"+SanitizeOutput(boardname)+"</a></td>";\r
82         if(firstunreadidstr!="")\r
83         {\r
84                 content+="<td>";\r
85                 content+="<a href=\"#"+firstunreadidstr+"\">First Unread Message</a>";\r
86                 content+="</td>";\r
87         }\r
88         content+="<td>";\r
89         content+="<a href=\""+m_pagename+"?formaction=markunread&threadid="+threadidstr+"&boardid="+boardidstr+"&currentpage="+currentpagestr+"\">Mark Unread</a>";\r
90         content+="</td>";\r
91         content+="</tr>";\r
92         content+="</table>\r\n";\r
93 \r
94         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
95         st.Bind(0,threadidstr);\r
96 \r
97         content+="<table class=\"thread\">";\r
98         st.Step();\r
99         while(st.RowReturned())\r
100         {\r
101                 std::string messageidstr="";\r
102                 std::string identityidstr="";\r
103                 std::string fromname="";\r
104                 std::string subject="";\r
105                 std::string datetime="";\r
106                 std::string body="";\r
107                 \r
108                 st.ResultText(0,messageidstr);\r
109                 st.ResultText(1,identityidstr);\r
110                 st.ResultText(2,fromname);\r
111                 st.ResultText(3,subject);\r
112                 st.ResultText(4,datetime);\r
113                 st.ResultText(5,body);\r
114 \r
115                 content+="<tr>";\r
116                 content+="<td rowspan=\"2\" class=\"from\">";\r
117                 content+="<a name=\""+messageidstr+"\"></a>";\r
118                 content+="<a href=\"peerdetails.htm?identityid="+identityidstr+"\">"+FixFromName(fromname)+"</a><br />";\r
119 \r
120                 trustst.Bind(0,identityidstr);\r
121                 trustst.Step();\r
122                 if(trustst.RowReturned())\r
123                 {\r
124                         std::string localmessagetrust="";\r
125                         std::string localtrustlisttrust="";\r
126                         std::string peermessagetrust="";\r
127                         std::string peertrustlisttrust="";\r
128                         std::string name="";\r
129 \r
130                         trustst.ResultText(0,localmessagetrust);\r
131                         trustst.ResultText(1,localtrustlisttrust);\r
132                         trustst.ResultText(2,peermessagetrust);\r
133                         trustst.ResultText(3,peertrustlisttrust);\r
134                         trustst.ResultText(4,name);\r
135 \r
136                         content+="<table class=\"trust\">";\r
137                         content+="<tr>";\r
138                         content+="<td colspan=\"3\" style=\"text-align:center;\"><a href=\"peertrust.htm?namesearch="+StringFunctions::UriEncode(name)+"\">Trust</a></td>";\r
139                         content+="</tr>";\r
140                         content+="<tr>";\r
141                         content+="<td></td><td>Local</td><td>Peer</td>";\r
142                         content+="</tr>";\r
143                         content+="<tr>";\r
144                         content+="<td>Message</td><td>"+localmessagetrust+"</td><td>"+peermessagetrust+"</td>";\r
145                         content+="</tr>";\r
146                         content+="<tr>";\r
147                         content+="<td>Trust List</td><td>"+localtrustlisttrust+"</td><td>"+peertrustlisttrust+"</td>";\r
148                         content+="</tr>";\r
149                         content+="</table>";\r
150                 }\r
151 \r
152                 content+="</td>";\r
153                 content+="<td class=\"subject\">";\r
154                 content+=SanitizeOutput(subject)+" on "+datetime;\r
155                 content+="</td>";\r
156                 content+="<td><a href=\"forumcreatepost.htm?replytomessageid="+messageidstr+"&threadid="+threadidstr+"&boardid="+boardidstr+"&currentpage="+currentpagestr+"\">Reply</a></td>";\r
157                 content+="</tr>\r\n";\r
158                 content+="<tr>";\r
159                 content+="<td class=\"body\" colspan=\"2\">";\r
160                 content+=FixBody(body);\r
161                 content+="</td>";\r
162                 content+="</tr>";\r
163                 trustst.Reset();\r
164 \r
165                 st.Step();\r
166         }\r
167         content+="</table>";\r
168 \r
169         return StringFunctions::Replace(m_template,"[CONTENT]",content);\r
170 }\r