+++ /dev/null
-#include "../../../include/http/pages/browsemessagespage.h"\r
-#include "../../../include/stringfunctions.h"\r
-#include "../../../include/global.h"\r
-#include "../../../include/messagethread.h"\r
-\r
-#ifdef XMEM\r
- #include <xmem.h>\r
-#endif\r
-\r
-const std::string BrowseMessagesPage::BuildQueryString(const long startrow, const std::string &boardidstr, const std::string &messageidstr)\r
-{\r
- std::string returnval="";\r
- std::string tempval="";\r
-\r
- if(startrow>=0)\r
- {\r
- StringFunctions::Convert(startrow,tempval);\r
- returnval+="startrow="+tempval;\r
- }\r
-\r
- if(boardidstr!="")\r
- {\r
- if(returnval!="")\r
- {\r
- returnval+="&";\r
- }\r
- returnval+="boardid="+boardidstr;\r
- }\r
-\r
- if(messageidstr!="")\r
- {\r
- if(returnval!="")\r
- {\r
- returnval+="&";\r
- } \r
- returnval+="messageid="+messageidstr;\r
- }\r
-\r
- return returnval;\r
-\r
-}\r
-\r
-const std::string BrowseMessagesPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)\r
-{\r
- std::string content="";\r
- long boardid=-1;\r
- std::string boardidstr="";\r
- std::string messageidstr="";\r
- int startrow=0;\r
- std::string startrowstr="0";\r
- int rowsperpage=50;\r
- std::string rowsperpagestr="51"; // one more than rowsperpage so we can know if there are more messages\r
- std::string sql="";\r
- int rowcount=0;\r
- int page=0;\r
-\r
- // if startrow is specified\r
- if(queryvars.find("startrow")!=queryvars.end())\r
- {\r
- startrowstr=(*queryvars.find("startrow")).second;\r
- // convert back and forth, just in case a number wasn't passed in startrow\r
- StringFunctions::Convert(startrowstr,startrow);\r
- if(startrow<0)\r
- {\r
- startrow=0;\r
- }\r
- StringFunctions::Convert(startrow,startrowstr);\r
- }\r
- if(queryvars.find("boardid")!=queryvars.end())\r
- {\r
- boardidstr=(*queryvars.find("boardid")).second;\r
- StringFunctions::Convert(boardidstr,boardid);\r
- }\r
- if(queryvars.find("messageid")!=queryvars.end())\r
- {\r
- messageidstr=(*queryvars.find("messageid")).second;\r
- page=1;\r
- }\r
-\r
- if(page==0)\r
- {\r
- sql="SELECT Subject, FromName, MessageDate || ' ' || MessageTime, Body, tblMessage.MessageID ";\r
- sql+="FROM tblMessage INNER JOIN tblMessageBoard ON tblMessage.MessageID=tblMessageBoard.MessageID ";\r
- if(boardidstr!="")\r
- {\r
- sql+="WHERE tblMessageBoard.BoardID=? ";\r
- }\r
- sql+="ORDER BY MessageDate || ' ' || MessageTime DESC ";\r
- sql+="LIMIT "+startrowstr+","+rowsperpagestr+";";\r
-\r
- SQLite3DB::Statement st=m_db->Prepare(sql);\r
- if(boardidstr!="")\r
- {\r
- st.Bind(0,boardidstr);\r
- }\r
- st.Step();\r
-\r
- content+="<table class=\"small90\">";\r
- content+="<tr><th>Subject</th><th>From</th><th>Date</th></tr>";\r
-\r
- rowcount=0;\r
- while(st.RowReturned() && rowcount++<rowsperpage)\r
- {\r
- std::string subject="";\r
- std::string fromname="";\r
- std::string messagedate="";\r
- std::string body="";\r
- std::string messageidstr="";\r
-\r
- st.ResultText(0,subject);\r
- st.ResultText(1,fromname);\r
- st.ResultText(2,messagedate);\r
- st.ResultText(3,body);\r
- st.ResultText(4,messageidstr);\r
-\r
- if(body.size()>400)\r
- {\r
- body.erase(400);\r
- body+="...";\r
- }\r
-\r
- content+="<tr>";\r
- content+="<td title=\""+StringFunctions::Replace(SanitizeOutput(body),"\n","\r\n")+"\"><a href=\""+m_pagename+"?"+BuildQueryString(startrow,boardidstr,messageidstr)+"\">"+SanitizeOutput(subject)+"</a></td>";\r
- content+="<td>"+fromname+"</td>";\r
- content+="<td>"+SanitizeOutput(messagedate)+"</td>";\r
- content+="</tr>\r\n";\r
-\r
- st.Step();\r
- }\r
- \r
- if(startrow>0 || st.RowReturned())\r
- {\r
- content+="<tr>";\r
-\r
- if(startrow>0)\r
- {\r
- int thisstartrow=startrow-rowsperpage;\r
- if(thisstartrow<0)\r
- {\r
- thisstartrow=0;\r
- }\r
- content+="<td><a href=\""+m_pagename+"?"+BuildQueryString(thisstartrow,boardidstr,"")+"\"><--</a></td>";\r
- }\r
- else\r
- {\r
- content+="<td></td>";\r
- }\r
-\r
- content+="<td></td>";\r
-\r
- if(st.RowReturned())\r
- {\r
- int thisstartrow=startrow+rowsperpage;\r
- content+="<td><a href=\""+m_pagename+"?"+BuildQueryString(thisstartrow,boardidstr,"")+"\">--></a></td>";\r
- }\r
- content+="</tr>";\r
- }\r
-\r
- content+="</table>";\r
- }\r
- else if(page==1)\r
- {\r
- sql="SELECT Body, FromName, MessageDate || ' ' || MessageTime, Subject FROM tblMessage WHERE MessageID=?;";\r
- SQLite3DB::Statement st=m_db->Prepare(sql);\r
- st.Bind(0,messageidstr);\r
-\r
- st.Step();\r
- if(st.RowReturned())\r
- {\r
- std::string body="";\r
- std::string fromname="";\r
- std::string messagedate="";\r
- std::string subject="";\r
- std::string boards="";\r
-\r
- st.ResultText(0,body);\r
- st.ResultText(1,fromname);\r
- st.ResultText(2,messagedate);\r
- st.ResultText(3,subject);\r
-\r
- // get boards message was posted to\r
- SQLite3DB::Statement st2=m_db->Prepare("SELECT tblBoard.BoardID, tblBoard.BoardName FROM tblBoard INNER JOIN tblMessageBoard ON tblBoard.BoardID=tblMessageBoard.BoardID WHERE tblMessageBoard.MessageID=?;");\r
- st2.Bind(0,messageidstr);\r
- st2.Step();\r
- while(st2.RowReturned())\r
- {\r
- std::string boardname="";\r
- std::string innerboardidstr="";\r
-\r
- st2.ResultText(0,innerboardidstr);\r
- st2.ResultText(1,boardname);\r
- \r
- if(boards!="")\r
- {\r
- boards+=", ";\r
- }\r
-\r
- boards+="<a href=\""+m_pagename+"?"+BuildQueryString(0,innerboardidstr,"")+"\">"+SanitizeOutput(boardname)+"</a>";\r
-\r
- st2.Step();\r
- }\r
-\r
- content+="<div class=\"post\">";\r
- content+="<div class=\"postboards\">";\r
- content+=boards;\r
- content+="</div>";\r
- content+="<div class=\"postsubject\">";\r
- content+=SanitizeOutput(subject);\r
- content+="</div>";\r
- content+="<div class=\"postfrom\">";\r
- content+=SanitizeOutput(fromname);\r
- content+="</div>";\r
- content+="<div class=\"postdate\">";\r
- content+=SanitizeOutput(messagedate);\r
- content+="</div>";\r
- content+="<div class=\"postbody\">";\r
- content+=SanitizeOutput(body);\r
- content+="</div>";\r
- content+="</div>\r\n";\r
-\r
- long currentlevel=0;\r
- MessageThread thread;\r
- thread.Load(messageidstr,boardid);\r
-\r
- std::vector<MessageThread::threadnode> nodes=thread.GetNodes();\r
- if(nodes.size()>1)\r
- {\r
- content+="<ul class=\"messagethread\">";\r
- for(std::vector<MessageThread::threadnode>::const_iterator i=nodes.begin(); i!=nodes.end(); i++)\r
- {\r
- if((*i).m_level>currentlevel)\r
- {\r
- content+="<ul class=\"messagethread\">";\r
- }\r
- else if((*i).m_level<currentlevel)\r
- {\r
- content+="</ul>";\r
- }\r
- currentlevel=(*i).m_level;\r
-\r
- std::string tempstr="";\r
- StringFunctions::Convert((*i).m_messageid,tempstr);\r
-\r
- content+="<li>";\r
- if(tempstr!=messageidstr)\r
- {\r
- content+="<a href=\""+m_pagename+"?"+BuildQueryString(0,boardidstr,tempstr)+"\">"+SanitizeOutput((*i).m_subject)+"</a> - "+SanitizeOutput((*i).m_fromname);\r
- }\r
- else\r
- {\r
- content+=SanitizeOutput((*i).m_subject)+" - "+SanitizeOutput((*i).m_fromname);\r
- }\r
- content+="</li>\r\n";\r
- }\r
- while(currentlevel-->0)\r
- {\r
- content+="</ul>";\r
- }\r
- content+="</ul>\r\n";\r
- }\r
- }\r
- }\r
-\r
- return StringFunctions::Replace(m_template,"[CONTENT]",content);\r
-}\r