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