X-Git-Url: https://git.pterodactylus.net/?p=fms.git;a=blobdiff_plain;f=src%2Fhttp%2Fpages%2Fforumviewthreadpage.cpp;fp=src%2Fhttp%2Fpages%2Fforumviewthreadpage.cpp;h=0b69926bffc3baabe58a61f87fed81b72bd7a45d;hp=0000000000000000000000000000000000000000;hb=221236a4d3aac4144529d418ce368db5c98facb0;hpb=d5c9f7e6c1dd263dfc85a3cb5941a378a5ddd923 diff --git a/src/http/pages/forumviewthreadpage.cpp b/src/http/pages/forumviewthreadpage.cpp new file mode 100644 index 0000000..0b69926 --- /dev/null +++ b/src/http/pages/forumviewthreadpage.cpp @@ -0,0 +1,158 @@ +#include "../../../include/http/pages/forumviewthreadpage.h" +#include "../../../include/stringfunctions.h" + +#ifdef XMEM + #include +#endif + +const std::string ForumViewThreadPage::FixBody(const std::string &body) +{ + static std::string whitespace=" \t\r\n"; + std::string output=body; + + // put \n after 80 contiguous characters in the body + std::string::size_type prevpos=0; + std::string::size_type pos=output.find_first_of(whitespace); + while(pos!=std::string::npos) + { + while(pos-prevpos>80) + { + output.insert(prevpos+80,"\n"); + prevpos+=81; // 81 because of the extra newline we just inserted + } + prevpos=pos; + pos=output.find_first_of(whitespace,pos+1); + } + while(output.size()-prevpos>80) // check the last line of the message (no whitespace after it) + { + output.insert(prevpos+80,"\n"); + prevpos+=81; + } + + output=StringFunctions::Replace(output,"<","<"); + output=StringFunctions::Replace(output,">",">"); + output=StringFunctions::Replace(output,"\n","
"); + return output; +} + +const std::string ForumViewThreadPage::GeneratePage(const std::string &method, const std::map &queryvars) +{ + std::string content=""; + std::string threadidstr=""; + std::string boardidstr=""; + std::string currentpagestr=""; + std::string boardname=""; + + if(queryvars.find("threadid")!=queryvars.end()) + { + threadidstr=(*queryvars.find("threadid")).second; + } + if(queryvars.find("currentpage")!=queryvars.end()) + { + currentpagestr=(*queryvars.find("currentpage")).second; + } + if(queryvars.find("boardid")!=queryvars.end()) + { + boardidstr=(*queryvars.find("boardid")).second; + } + + content+=CreateForumHeader(); + + SQLite3DB::Statement updateread=m_db->Prepare("UPDATE tblMessage SET Read=1 WHERE tblMessage.MessageID IN (SELECT MessageID FROM tblThreadPost WHERE ThreadID=?);"); + updateread.Bind(0,threadidstr); + updateread.Step(); + + SQLite3DB::Statement trustst=m_db->Prepare("SELECT LocalMessageTrust, LocalTrustListTrust, PeerMessageTrust, PeerTrustListTrust, Name FROM tblIdentity WHERE IdentityID=?;"); + + SQLite3DB::Statement boardnamest=m_db->Prepare("SELECT tblBoard.BoardName FROM tblBoard INNER JOIN tblThread ON tblBoard.BoardID=tblThread.BoardID WHERE tblThread.ThreadID=?;"); + boardnamest.Bind(0,threadidstr); + boardnamest.Step(); + + if(boardnamest.RowReturned()) + { + boardnamest.ResultText(0,boardname); + } + + content+=""; + content+=""; + content+=""; + content+=""; + content+="
Forum : "+SanitizeOutput(boardname)+"
\r\n"; + + 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;"); + st.Bind(0,threadidstr); + + content+=""; + st.Step(); + while(st.RowReturned()) + { + std::string messageidstr=""; + std::string identityidstr=""; + std::string fromname=""; + std::string subject=""; + std::string datetime=""; + std::string body=""; + + st.ResultText(0,messageidstr); + st.ResultText(1,identityidstr); + st.ResultText(2,fromname); + st.ResultText(3,subject); + st.ResultText(4,datetime); + st.ResultText(5,body); + + content+=""; + content+=""; + content+=""; + content+=""; + content+="\r\n"; + content+=""; + content+=""; + content+=""; + trustst.Reset(); + + st.Step(); + } + content+="
"; + content+=""; + content+=""+FixFromName(fromname)+"
"; + + trustst.Bind(0,identityidstr); + trustst.Step(); + if(trustst.RowReturned()) + { + std::string localmessagetrust=""; + std::string localtrustlisttrust=""; + std::string peermessagetrust=""; + std::string peertrustlisttrust=""; + std::string name=""; + + trustst.ResultText(0,localmessagetrust); + trustst.ResultText(1,localtrustlisttrust); + trustst.ResultText(2,peermessagetrust); + trustst.ResultText(3,peertrustlisttrust); + trustst.ResultText(4,name); + + content+=""; + content+=""; + content+=""; + content+=""; + content+=""; + content+=""; + content+=""; + content+=""; + content+=""; + content+=""; + content+=""; + content+=""; + content+=""; + content+="
Trust
LocalPeer
Message"+localmessagetrust+""+peermessagetrust+"
Trust List"+localtrustlisttrust+""+peertrustlisttrust+"
"; + } + + content+="
"; + content+=SanitizeOutput(subject)+" on "+datetime; + content+="Reply
"; + content+=FixBody(body); + content+="
"; + + return StringFunctions::Replace(m_template,"[CONTENT]",content); +}