version 0.3.23
[fms.git] / src / http / pages / forumcreatepostpage.cpp
diff --git a/src/http/pages/forumcreatepostpage.cpp b/src/http/pages/forumcreatepostpage.cpp
new file mode 100644 (file)
index 0000000..ac9ed16
--- /dev/null
@@ -0,0 +1,227 @@
+#include "../../../include/http/pages/forumcreatepostpage.h"\r
+#include "../../../include/stringfunctions.h"\r
+#include "../../../include/message.h"\r
+\r
+#ifdef XMEM\r
+       #include <xmem.h>\r
+#endif\r
+\r
+const std::string ForumCreatePostPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)\r
+{\r
+       int page=0;\r
+       std::string content="";\r
+       std::string boardidstr="";\r
+       std::string currentpagestr="";\r
+       std::string threadidstr="";\r
+       std::string replytomessageidstr="";\r
+       std::string error="";\r
+       std::string boardname="";\r
+       std::string subject="";\r
+       std::string body="";\r
+       std::string localidentityidstr="";\r
+\r
+       if(queryvars.find("boardid")!=queryvars.end())\r
+       {\r
+               boardidstr=(*queryvars.find("boardid")).second;\r
+       }\r
+       if(queryvars.find("currentpage")!=queryvars.end())\r
+       {\r
+               currentpagestr=(*queryvars.find("currentpage")).second;\r
+       }\r
+       if(queryvars.find("threadid")!=queryvars.end())\r
+       {\r
+               threadidstr=(*queryvars.find("threadid")).second;\r
+       }\r
+       if(queryvars.find("replytomessageid")!=queryvars.end())\r
+       {\r
+               replytomessageidstr=(*queryvars.find("replytomessageid")).second;\r
+       }\r
+\r
+       if(queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="send")\r
+       {\r
+               if(queryvars.find("localidentityid")!=queryvars.end() && (*queryvars.find("localidentityid")).second!="")\r
+               {\r
+                       localidentityidstr=(*queryvars.find("localidentityid")).second;\r
+               }\r
+               else\r
+               {\r
+                       error="You must select a local identity as the sender<br />";\r
+               }\r
+\r
+               if(queryvars.find("subject")!=queryvars.end() && (*queryvars.find("subject")).second!="")\r
+               {\r
+                       subject=(*queryvars.find("subject")).second;\r
+               }\r
+               else\r
+               {\r
+                       error+="You must enter a subject<br />";\r
+               }\r
+\r
+               if(queryvars.find("body")!=queryvars.end() && (*queryvars.find("body")).second!="")\r
+               {\r
+                       body=(*queryvars.find("body")).second;\r
+                       body=StringFunctions::Replace(body,"\r\n","\n");\r
+               }\r
+               else\r
+               {\r
+                       error+="You must enter a message body</br />";\r
+               }\r
+\r
+               if(error=="")\r
+               {\r
+                       Message mess;\r
+                       \r
+                       long localidentityid=-1;\r
+                       long boardid=-1;\r
+                       std::string references="";\r
+\r
+                       StringFunctions::Convert(localidentityidstr,localidentityid);\r
+                       StringFunctions::Convert(boardidstr,boardid);\r
+\r
+                       if(replytomessageidstr!="")\r
+                       {\r
+                               SQLite3DB::Statement st=m_db->Prepare("SELECT MessageUUID FROM tblMessage WHERE MessageID=?;");\r
+                               st.Bind(0,replytomessageidstr);\r
+                               st.Step();\r
+                               if(st.RowReturned())\r
+                               {\r
+                                       st.ResultText(0,references);\r
+                               }\r
+                       }\r
+\r
+                       if(mess.Create(localidentityid,boardid,subject,body,references))\r
+                       {\r
+                               if(mess.PostedToAdministrationBoard()==true)\r
+                               {\r
+                                       mess.HandleAdministrationMessage();\r
+                               }\r
+                               if(mess.StartFreenetInsert())\r
+                               {\r
+                                       page=1;\r
+                               }\r
+                       }\r
+                       else\r
+                       {\r
+                               error="Could not create message";\r
+                       }\r
+               }\r
+       }\r
+       else\r
+       {\r
+               if(replytomessageidstr!="")\r
+               {\r
+                       SQLite3DB::Statement replyst=m_db->Prepare("SELECT Subject, Body FROM tblMessage WHERE MessageID=?;");\r
+                       replyst.Bind(0,replytomessageidstr);\r
+                       replyst.Step();\r
+                       if(replyst.RowReturned())\r
+                       {\r
+                               replyst.ResultText(0,subject);\r
+                               replyst.ResultText(1,body);\r
+\r
+                               if(subject.size()<3 || (subject.substr(0,2)!="re:" && subject.substr(0,2)!="Re:"))\r
+                               {\r
+                                       subject="Re: "+subject;\r
+                               }\r
+\r
+                               if(body.size()>0)\r
+                               {\r
+                                       if(body[0]=='>')\r
+                                       {\r
+                                               body=">"+body;\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               body="> "+body;\r
+                                       }\r
+                                       std::string::size_type pos=body.find("\n");\r
+                                       while(pos!=std::string::npos)\r
+                                       {\r
+                                               if(pos+1<body.size() && body[pos+1]=='>')\r
+                                               {\r
+                                                       body.insert(pos+1,">");\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       body.insert(pos+1,"> ");\r
+                                               }\r
+                                               pos=body.find("\n",pos+2);\r
+                                       }\r
+                                       body+="\n";\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       SQLite3DB::Statement boardnamest=m_db->Prepare("SELECT BoardName FROM tblBoard WHERE BoardID=?;");\r
+       boardnamest.Bind(0,boardidstr);\r
+       boardnamest.Step();\r
+       if(boardnamest.RowReturned())\r
+       {\r
+               boardnamest.ResultText(0,boardname);\r
+       }\r
+\r
+       content+=CreateForumHeader();\r
+\r
+       content+="<table class=\"forumheader\">";\r
+       content+="<tr>";\r
+       content+="<td>Forum : <a href=\"forumthreads.htm?boardid="+boardidstr+"&currentpage="+currentpagestr+"\">"+SanitizeOutput(boardname)+"</a></td>";\r
+       content+="</tr>";\r
+       content+="</table>\r\n";\r
+\r
+       if(error!="")\r
+       {\r
+               content+="<div class=\"error\">"+error+"</div>\r\n";\r
+       }\r
+\r
+       if(page==0)\r
+       {\r
+               content+="<form name=\"frmcreatemessage\" method=\"post\" action=\"forumcreatepost.htm\">";\r
+               content+="<input type=\"hidden\" name=\"boardid\" value=\""+boardidstr+"\">";\r
+               content+="<input type=\"hidden\" name=\"currentpage\" value=\""+currentpagestr+"\">";\r
+               content+="<input type=\"hidden\" name=\"threadid\" value=\""+threadidstr+"\">";\r
+               content+="<input type=\"hidden\" name=\"replytomessageid\" value=\""+replytomessageidstr+"\">";\r
+               content+="<input type=\"hidden\" name=\"formaction\" value=\"send\">";\r
+               content+="<table class=\"createpost\">";\r
+               content+="<tr><td class=\"identity\">From</td><td>"+LocalIdentityDropDown("localidentityid",localidentityidstr)+"</td></tr>";\r
+               content+="<tr><td class=\"subject\">Subject</td><td><input type=\"text\" name=\"subject\" maxlength=\"60\" size=\"60\" value=\""+SanitizeOutput(subject)+"\"></td></tr>";\r
+               content+="<tr><td class=\"body\">Message</td><td><textarea name=\"body\" cols=\"80\" rows=\"30\">"+SanitizeOutput(body)+"</textarea></td></tr>";\r
+               content+="<tr><td colspan=\"2\" class=\"send\"><input type=\"submit\" value=\"Send\"></td></tr>";\r
+               content+="</table>\r\n";\r
+               content+="</form>";\r
+       }\r
+       else if(page==1)\r
+       {\r
+               content+="You have sent your message.  It will show up in the thread after it has been successfully inserted and retrieved by FMS.";\r
+       }\r
+\r
+       return StringFunctions::Replace(m_template,"[CONTENT]",content);\r
+}\r
+\r
+const std::string ForumCreatePostPage::LocalIdentityDropDown(const std::string &name, const std::string &selectedid)\r
+{\r
+       std::string html="<select name=\""+name+"\">";\r
+       SQLite3DB::Statement st=m_db->Prepare("SELECT LocalIdentityID, Name FROM tblLocalIdentity ORDER BY Name COLLATE NOCASE ASC;");\r
+\r
+       if(selectedid=="")\r
+       {\r
+               html+="<option value=\"\" selected></option>";\r
+       }\r
+\r
+       st.Step();\r
+       while(st.RowReturned())\r
+       {\r
+               std::string id="";\r
+               std::string name="";\r
+               st.ResultText(0,id);\r
+               st.ResultText(1,name);\r
+               html+="<option value=\""+id+"\"";\r
+               if(id==selectedid)\r
+               {\r
+                       html+=" selected";\r
+               }\r
+               html+=">"+FixFromName(name)+"</option>";\r
+               st.Step();\r
+       }\r
+       html+="</select>";\r
+       return html;\r
+}\r