1 #include "../../../include/http/pages/forumthreadspage.h"
\r
2 #include "../../../include/stringfunctions.h"
\r
5 const std::string ForumThreadsPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)
\r
8 std::string currentpagestr="1";
\r
9 std::string content="";
\r
11 std::string startrowstr="0";
\r
13 std::string rowsperpagestr="25";
\r
16 std::string boardidstr="-1";
\r
19 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;");
\r
20 SQLite3DB::Statement replycountst=m_db->Prepare("SELECT COUNT(*)-1 FROM tblThreadPost WHERE ThreadID=?;");
\r
21 SQLite3DB::Statement boardnamest=m_db->Prepare("SELECT tblBoard.BoardName FROM tblBoard WHERE BoardID=?;");
\r
22 SQLite3DB::Statement threadcountst=m_db->Prepare("SELECT COUNT(*) FROM tblThread WHERE BoardID=?;");
\r
24 if(queryvars.find("boardid")!=queryvars.end())
\r
26 boardidstr=(*queryvars.find("boardid")).second;
\r
27 StringFunctions::Convert(boardidstr,boardid);
\r
29 if(queryvars.find("currentpage")!=queryvars.end())
\r
31 currentpagestr=(*queryvars.find("currentpage")).second;
\r
32 StringFunctions::Convert(currentpagestr,currentpage);
\r
37 StringFunctions::Convert(currentpage,currentpagestr);
\r
39 if(queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="markallread" && boardid!=-1)
\r
41 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=?);");
\r
42 markst.Bind(0,boardid);
\r
46 startrow=(currentpage-1)*rowsperpage;
\r
47 StringFunctions::Convert(startrow,startrowstr);
\r
49 content+=CreateForumHeader();
\r
51 content+="<table class=\"forumheader\">";
\r
54 boardnamest.Bind(0,boardid);
\r
56 if(boardnamest.RowReturned())
\r
58 std::string boardname="";
\r
59 boardnamest.ResultText(0,boardname);
\r
60 content+="<td>Forum : <a href=\"forumthreads.htm?boardid="+boardidstr+"\">"+SanitizeOutput(boardname)+"</a></td>";
\r
62 content+="<td><a href=\"forumthreads.htm?boardid="+boardidstr+"¤tpage="+currentpagestr+"&formaction=markallread\">Mark All Read</a></td>";
\r
63 content+="<td><a href=\"forumcreatepost.htm?boardid="+boardidstr+"¤tpage="+currentpagestr+"\">New Post</a></td>";
\r
65 content+="</table>\r\n";
\r
67 content+="<table class=\"threadinfo\">";
\r
68 content+="<thead><tr><th>New</th><th>Subject</th><th>Started By</th><th>Replies</th><th>Last Post</th></tr></thread>\r\n";
\r
70 sql="SELECT tblThread.ThreadID, tblThread.LastMessageID, tblLastMessage.FromName, tblLastMessage.MessageDate || ' ' || tblLastMessage.MessageTime, tblFirstMessage.Subject, tblFirstMessage.FromName, tblFirstMessage.IdentityID, tblLastMessage.IdentityID";
\r
71 sql+=" FROM tblThread INNER JOIN tblMessage AS tblLastMessage ON tblThread.LastMessageID=tblLastMessage.MessageID INNER JOIN tblMessage AS tblFirstMessage ON tblThread.FirstMessageID=tblFirstMessage.MessageID";
\r
72 sql+=" WHERE tblThread.BoardID=?";
\r
73 sql+=" ORDER BY tblLastMessage.MessageDate || tblLastMessage.MessageTime DESC";
\r
74 sql+=" LIMIT "+startrowstr+","+rowsperpagestr+";";
\r
76 SQLite3DB::Statement threadst=m_db->Prepare(sql);
\r
77 threadst.Bind(0,boardid);
\r
80 while(threadst.RowReturned() && count++<rowsperpage)
\r
82 std::string threadidstr="";
\r
83 std::string lastmessageidstr="";
\r
84 std::string lastmessagefromname="";
\r
85 std::string lastmessagedate="";
\r
86 std::string firstmessagesubject="";
\r
87 std::string firstmessagefromname="";
\r
88 std::string firstmessageidentityidstr="";
\r
89 std::string lastmessageidentityidstr="";
\r
91 threadst.ResultText(0,threadidstr);
\r
92 threadst.ResultText(1,lastmessageidstr);
\r
93 threadst.ResultText(2,lastmessagefromname);
\r
94 threadst.ResultText(3,lastmessagedate);
\r
95 threadst.ResultText(4,firstmessagesubject);
\r
96 threadst.ResultText(5,firstmessagefromname);
\r
97 threadst.ResultText(6,firstmessageidentityidstr);
\r
98 threadst.ResultText(7,lastmessageidentityidstr);
\r
101 content+="<td class=\"newposts\">";
\r
103 newthreadpostst.Bind(0,threadidstr);
\r
104 newthreadpostst.Step();
\r
105 if(newthreadpostst.RowReturned())
\r
107 content+="<img src=\"showimage.htm?image=images/new_posts.png\" title=\"New Posts\">";
\r
111 content+="<img src=\"showimage.htm?image=images/no_new_posts.png\" title=\"No New Posts\">";
\r
113 newthreadpostst.Reset();
\r
116 content+="<td class=\"threadsubject\">";
\r
117 content+="<a href=\"forumviewthread.htm?threadid="+threadidstr+"¤tpage="+currentpagestr+"&boardid="+boardidstr+"\">"+SanitizeOutput(firstmessagesubject)+"</a>";
\r
119 content+="<td class=\"threadauthor\">";
\r
120 content+="<a href=\"peerdetails.htm?identityid="+firstmessageidentityidstr+"\">"+FixFromName(firstmessagefromname)+"</a>";
\r
123 content+="<td class=\"threadreplies\">";
\r
125 replycountst.Bind(0,threadidstr);
\r
126 replycountst.Step();
\r
127 if(replycountst.RowReturned())
\r
129 std::string count="0";
\r
130 replycountst.ResultText(0,count);
\r
137 replycountst.Reset();
\r
141 content+="<td class=\"threadlastpost\">";
\r
142 content+=lastmessagedate+"<br />by <a href=\"peerdetails.htm?identityid="+lastmessageidentityidstr+"\">"+FixFromName(lastmessagefromname)+"</a>";
\r
145 content+="</tr>\r\n";
\r
150 threadcountst.Bind(0,boardid);
\r
151 threadcountst.Step();
\r
152 if(threadcountst.RowReturned())
\r
154 threadcountst.ResultInt(0,threadcount);
\r
157 if(threadcount>=rowsperpage)
\r
159 int totalpages=ceil(static_cast<float>(threadcount)/static_cast<float>(rowsperpage));
\r
163 content+="<td class=\"pages\" colspan=\"7\">Pages : ";
\r
165 for(int i=1; i<=totalpages; i++)
\r
167 if(i==1 || (i>currentpage-3 && i<currentpage+3) || i==totalpages)
\r
169 std::string pagestr="";
\r
170 StringFunctions::Convert(i,pagestr);
\r
173 content+=" ...";
\r
177 content+=" <a href=\"forumthreads.htm?boardid="+boardidstr+"¤tpage="+pagestr+"\">"+pagestr+"</a>";
\r
181 content+=" "+pagestr;
\r
187 content+="<form><input type=\"hidden\" name=\"boardid\" value=\""+boardidstr+"\"><input type=\"text\" name=\"currentpage\"><input type=\"submit\" value=\"Go\"></form>";
\r
191 content+="</tr>\r\n";
\r
194 content+="</table>\r\n";
\r
196 return StringFunctions::Replace(m_template,"[CONTENT]",content);
\r