X-Git-Url: https://git.pterodactylus.net/?p=fms.git;a=blobdiff_plain;f=src%2Fhttp%2Fpages%2Fforumthreadspage.cpp;fp=src%2Fhttp%2Fpages%2Fforumthreadspage.cpp;h=0777fe12cdaf79efb47ebd07793aca1faf050147;hp=0000000000000000000000000000000000000000;hb=221236a4d3aac4144529d418ce368db5c98facb0;hpb=d5c9f7e6c1dd263dfc85a3cb5941a378a5ddd923 diff --git a/src/http/pages/forumthreadspage.cpp b/src/http/pages/forumthreadspage.cpp new file mode 100644 index 0000000..0777fe1 --- /dev/null +++ b/src/http/pages/forumthreadspage.cpp @@ -0,0 +1,197 @@ +#include "../../../include/http/pages/forumthreadspage.h" +#include "../../../include/stringfunctions.h" +#include + +const std::string ForumThreadsPage::GeneratePage(const std::string &method, const std::map &queryvars) +{ + int currentpage=1; + std::string currentpagestr="1"; + std::string content=""; + int startrow=0; + std::string startrowstr="0"; + int rowsperpage=25; + std::string rowsperpagestr="25"; + std::string sql=""; + int boardid=-1; + std::string boardidstr="-1"; + int count=0; + int threadcount=0; + SQLite3DB::Statement newthreadpostst=m_db->Prepare("SELECT tblMessage.MessageID FROM tblThreadPost INNER JOIN tblMessage ON tblThreadPost.MessageID=tblMessage.MessageID WHERE tblThreadPost.ThreadID=? AND tblMessage.Read=0 LIMIT 0,1;"); + SQLite3DB::Statement replycountst=m_db->Prepare("SELECT COUNT(*)-1 FROM tblThreadPost WHERE ThreadID=?;"); + SQLite3DB::Statement boardnamest=m_db->Prepare("SELECT tblBoard.BoardName FROM tblBoard WHERE BoardID=?;"); + SQLite3DB::Statement threadcountst=m_db->Prepare("SELECT COUNT(*) FROM tblThread WHERE BoardID=?;"); + + if(queryvars.find("boardid")!=queryvars.end()) + { + boardidstr=(*queryvars.find("boardid")).second; + StringFunctions::Convert(boardidstr,boardid); + } + if(queryvars.find("currentpage")!=queryvars.end()) + { + currentpagestr=(*queryvars.find("currentpage")).second; + StringFunctions::Convert(currentpagestr,currentpage); + if(currentpage<0) + { + currentpage=0; + } + StringFunctions::Convert(currentpage,currentpagestr); + } + if(queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="markallread" && boardid!=-1) + { + SQLite3DB::Statement markst=m_db->Prepare("UPDATE tblMessage SET Read=1 WHERE tblMessage.Read=0 AND tblMessage.MessageID IN (SELECT MessageID FROM tblThread INNER JOIN tblThreadPost ON tblThread.ThreadID=tblThreadPost.ThreadID WHERE tblThread.BoardID=?);"); + markst.Bind(0,boardid); + markst.Step(); + } + + startrow=(currentpage-1)*rowsperpage; + StringFunctions::Convert(startrow,startrowstr); + + content+=CreateForumHeader(); + + content+=""; + content+=""; + + boardnamest.Bind(0,boardid); + boardnamest.Step(); + if(boardnamest.RowReturned()) + { + std::string boardname=""; + boardnamest.ResultText(0,boardname); + content+=""; + } + content+=""; + content+=""; + content+=""; + content+="
Forum : "+SanitizeOutput(boardname)+"Mark All ReadNew Post
\r\n"; + + content+=""; + content+="\r\n"; + + sql="SELECT tblThread.ThreadID, tblThread.LastMessageID, tblLastMessage.FromName, tblLastMessage.MessageDate || ' ' || tblLastMessage.MessageTime, tblFirstMessage.Subject, tblFirstMessage.FromName, tblFirstMessage.IdentityID, tblLastMessage.IdentityID"; + sql+=" FROM tblThread INNER JOIN tblMessage AS tblLastMessage ON tblThread.LastMessageID=tblLastMessage.MessageID INNER JOIN tblMessage AS tblFirstMessage ON tblThread.FirstMessageID=tblFirstMessage.MessageID"; + sql+=" WHERE tblThread.BoardID=?"; + sql+=" ORDER BY tblLastMessage.MessageDate || tblLastMessage.MessageTime DESC"; + sql+=" LIMIT "+startrowstr+","+rowsperpagestr+";"; + + SQLite3DB::Statement threadst=m_db->Prepare(sql); + threadst.Bind(0,boardid); + threadst.Step(); + count=0; + while(threadst.RowReturned() && count++"; + + newthreadpostst.Bind(0,threadidstr); + newthreadpostst.Step(); + if(newthreadpostst.RowReturned()) + { + content+=""; + } + else + { + content+=""; + } + newthreadpostst.Reset(); + + content+=""; + content+=""; + content+=""; + + content+=""; + + content+=""; + + content+="\r\n"; + + threadst.Step(); + } + + threadcountst.Bind(0,boardid); + threadcountst.Step(); + if(threadcountst.RowReturned()) + { + threadcountst.ResultInt(0,threadcount); + } + + if(threadcount>=rowsperpage) + { + int totalpages=ceil(static_cast(threadcount)/static_cast(rowsperpage)); + int lastwrote=0; + content+=""; + + content+=""; + + content+="\r\n"; + } + + content+="
NewSubjectStarted ByRepliesLast Post
"; + content+=""+SanitizeOutput(firstmessagesubject)+""; + content+=""; + content+=""+FixFromName(firstmessagefromname)+""; + content+=""; + + replycountst.Bind(0,threadidstr); + replycountst.Step(); + if(replycountst.RowReturned()) + { + std::string count="0"; + replycountst.ResultText(0,count); + content+=count; + } + else + { + content+="0"; + } + replycountst.Reset(); + + content+=""; + content+=lastmessagedate+"
by "+FixFromName(lastmessagefromname)+""; + content+="
Pages : "; + + for(int i=1; i<=totalpages; i++) + { + if(i==1 || (i>currentpage-3 && i"+pagestr+""; + } + else + { + content+=" "+pagestr; + } + lastwrote=i; + } + } + + content+="
"; + + content+="
\r\n"; + + return StringFunctions::Replace(m_template,"[CONTENT]",content); +}