c89e1ac050dc5d9bc2356b1c6b2f8efbde60a6db
[fms.git] / src / http / pages / forumcreatepostpage.cpp
1 #include "../../../include/http/pages/forumcreatepostpage.h"\r
2 #include "../../../include/stringfunctions.h"\r
3 #include "../../../include/message.h"\r
4 #include "../../../include/unicode/unicodeformatter.h"\r
5 \r
6 #ifdef XMEM\r
7         #include <xmem.h>\r
8 #endif\r
9 \r
10 const std::string ForumCreatePostPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)\r
11 {\r
12         int page=0;\r
13         std::string content="";\r
14         std::string boardidstr="";\r
15         std::string currentpagestr="";\r
16         std::string threadidstr="";\r
17         std::string replytomessageidstr="";\r
18         std::string error="";\r
19         std::string boardname="";\r
20         std::string subject="";\r
21         std::string body="";\r
22         std::string localidentityidstr="";\r
23 \r
24         if(queryvars.find("boardid")!=queryvars.end())\r
25         {\r
26                 boardidstr=(*queryvars.find("boardid")).second;\r
27         }\r
28         if(queryvars.find("currentpage")!=queryvars.end())\r
29         {\r
30                 currentpagestr=(*queryvars.find("currentpage")).second;\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("replytomessageid")!=queryvars.end())\r
37         {\r
38                 replytomessageidstr=(*queryvars.find("replytomessageid")).second;\r
39         }\r
40 \r
41         if(queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="send" && ValidateFormPassword(queryvars))\r
42         {\r
43                 if(queryvars.find("localidentityid")!=queryvars.end() && (*queryvars.find("localidentityid")).second!="")\r
44                 {\r
45                         localidentityidstr=(*queryvars.find("localidentityid")).second;\r
46                 }\r
47                 else\r
48                 {\r
49                         error="You must select a local identity as the sender<br />";\r
50                 }\r
51 \r
52                 if(queryvars.find("subject")!=queryvars.end() && (*queryvars.find("subject")).second!="")\r
53                 {\r
54                         subject=(*queryvars.find("subject")).second;\r
55                 }\r
56                 else\r
57                 {\r
58                         error+="You must enter a subject<br />";\r
59                 }\r
60 \r
61                 if(queryvars.find("body")!=queryvars.end() && (*queryvars.find("body")).second!="")\r
62                 {\r
63                         body=(*queryvars.find("body")).second;\r
64                         body=StringFunctions::Replace(body,"\r\n","\n");\r
65                         UnicodeFormatter::LineWrap(body,80,">",body);\r
66                 }\r
67                 else\r
68                 {\r
69                         error+="You must enter a message body</br />";\r
70                 }\r
71 \r
72                 if(error=="")\r
73                 {\r
74                         Message mess;\r
75                         \r
76                         long localidentityid=-1;\r
77                         long boardid=-1;\r
78                         std::string references="";\r
79 \r
80                         StringFunctions::Convert(localidentityidstr,localidentityid);\r
81                         StringFunctions::Convert(boardidstr,boardid);\r
82 \r
83                         if(replytomessageidstr!="")\r
84                         {\r
85                                 SQLite3DB::Statement st=m_db->Prepare("SELECT MessageUUID FROM tblMessage WHERE MessageID=?;");\r
86                                 st.Bind(0,replytomessageidstr);\r
87                                 st.Step();\r
88                                 if(st.RowReturned())\r
89                                 {\r
90                                         st.ResultText(0,references);\r
91                                 }\r
92                         }\r
93 \r
94                         if(mess.Create(localidentityid,boardid,subject,body,references))\r
95                         {\r
96                                 if(mess.PostedToAdministrationBoard()==true)\r
97                                 {\r
98                                         mess.HandleAdministrationMessage();\r
99                                 }\r
100                                 if(mess.StartFreenetInsert())\r
101                                 {\r
102                                         page=1;\r
103                                 }\r
104                         }\r
105                         else\r
106                         {\r
107                                 error="Could not create message";\r
108                         }\r
109                 }\r
110         }\r
111         else\r
112         {\r
113                 if(replytomessageidstr!="")\r
114                 {\r
115                         std::string fromname="";\r
116                         SQLite3DB::Statement replyst=m_db->Prepare("SELECT Subject, Body, FromName FROM tblMessage WHERE MessageID=?;");\r
117                         replyst.Bind(0,replytomessageidstr);\r
118                         replyst.Step();\r
119                         if(replyst.RowReturned())\r
120                         {\r
121                                 replyst.ResultText(0,subject);\r
122                                 replyst.ResultText(1,body);\r
123                                 replyst.ResultText(2,fromname);\r
124 \r
125                                 if(subject.size()<3 || (subject.substr(0,3)!="re:" && subject.substr(0,3)!="Re:"))\r
126                                 {\r
127                                         subject="Re: "+subject;\r
128                                 }\r
129 \r
130                                 if(body.size()>0)\r
131                                 {\r
132                                         if(body[0]=='>')\r
133                                         {\r
134                                                 body=">"+body;\r
135                                         }\r
136                                         else\r
137                                         {\r
138                                                 body="> "+body;\r
139                                         }\r
140                                         std::string::size_type pos=body.find("\n");\r
141                                         while(pos!=std::string::npos)\r
142                                         {\r
143                                                 if(pos+1<body.size() && body[pos+1]=='>')\r
144                                                 {\r
145                                                         body.insert(pos+1,">");\r
146                                                 }\r
147                                                 else\r
148                                                 {\r
149                                                         body.insert(pos+1,"> ");\r
150                                                 }\r
151                                                 pos=body.find("\n",pos+2);\r
152                                         }\r
153                                         body+="\n";\r
154                                 }\r
155                                 body=fromname+" wrote:\n"+body;\r
156 \r
157                         }\r
158                 }\r
159         }\r
160 \r
161         SQLite3DB::Statement boardnamest=m_db->Prepare("SELECT BoardName FROM tblBoard WHERE BoardID=?;");\r
162         boardnamest.Bind(0,boardidstr);\r
163         boardnamest.Step();\r
164         if(boardnamest.RowReturned())\r
165         {\r
166                 boardnamest.ResultText(0,boardname);\r
167         }\r
168 \r
169         content+=CreateForumHeader();\r
170 \r
171         content+="<table class=\"forumheader\">";\r
172         content+="<tr>";\r
173         content+="<td>Forum : <a href=\"forumthreads.htm?boardid="+boardidstr+"&currentpage="+currentpagestr+"\">"+SanitizeOutput(boardname)+"</a></td>";\r
174         content+="</tr>";\r
175         content+="</table>\r\n";\r
176 \r
177         if(error!="")\r
178         {\r
179                 content+="<div class=\"error\">"+error+"</div>\r\n";\r
180         }\r
181 \r
182         if(page==0)\r
183         {\r
184                 content+="<form name=\"frmcreatemessage\" method=\"post\" action=\"forumcreatepost.htm\">";\r
185                 content+="<input type=\"hidden\" name=\"boardid\" value=\""+boardidstr+"\">";\r
186                 content+="<input type=\"hidden\" name=\"currentpage\" value=\""+currentpagestr+"\">";\r
187                 content+="<input type=\"hidden\" name=\"threadid\" value=\""+threadidstr+"\">";\r
188                 content+="<input type=\"hidden\" name=\"replytomessageid\" value=\""+replytomessageidstr+"\">";\r
189                 content+="<input type=\"hidden\" name=\"formaction\" value=\"send\">";\r
190                 content+=CreateFormPassword();\r
191                 content+="<table class=\"createpost\">";\r
192                 content+="<tr><td class=\"identity\">From</td><td>"+LocalIdentityDropDown("localidentityid",localidentityidstr)+"</td></tr>";\r
193                 content+="<tr><td class=\"subject\">Subject</td><td><input type=\"text\" name=\"subject\" maxlength=\"60\" size=\"60\" value=\""+SanitizeOutput(subject)+"\"></td></tr>";\r
194                 content+="<tr><td class=\"body\">Message</td><td><textarea name=\"body\" cols=\"80\" rows=\"30\">"+SanitizeTextAreaOutput(body)+"</textarea></td></tr>";\r
195                 content+="<tr><td colspan=\"2\" class=\"send\"><input type=\"submit\" value=\"Send\"></td></tr>";\r
196                 content+="</table>\r\n";\r
197                 content+="</form>";\r
198         }\r
199         else if(page==1)\r
200         {\r
201                 content+="You have sent your message.  It will show up in the thread after it has been successfully inserted and retrieved by FMS.";\r
202         }\r
203 \r
204         return StringFunctions::Replace(m_template,"[CONTENT]",content);\r
205 }\r
206 \r
207 const std::string ForumCreatePostPage::LocalIdentityDropDown(const std::string &name, const std::string &selectedid)\r
208 {\r
209         std::string html="<select name=\""+name+"\">";\r
210         SQLite3DB::Statement st=m_db->Prepare("SELECT LocalIdentityID, Name FROM tblLocalIdentity ORDER BY Name COLLATE NOCASE ASC;");\r
211 \r
212         if(selectedid=="")\r
213         {\r
214                 html+="<option value=\"\" selected></option>";\r
215         }\r
216 \r
217         st.Step();\r
218         while(st.RowReturned())\r
219         {\r
220                 std::string id="";\r
221                 std::string name="";\r
222                 st.ResultText(0,id);\r
223                 st.ResultText(1,name);\r
224                 html+="<option value=\""+id+"\"";\r
225                 if(id==selectedid)\r
226                 {\r
227                         html+=" selected";\r
228                 }\r
229                 html+=">"+FixFromName(name)+"</option>";\r
230                 st.Step();\r
231         }\r
232         html+="</select>";\r
233         return html;\r
234 }\r