--- /dev/null
+#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+"¤tpage="+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