X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fhttp%2Fpages%2Fbrowseboardspage.cpp;fp=src%2Fhttp%2Fpages%2Fbrowseboardspage.cpp;h=e759cd66254e6fedfb28380e4abeac4eeabd9c80;hb=221236a4d3aac4144529d418ce368db5c98facb0;hp=0000000000000000000000000000000000000000;hpb=d5c9f7e6c1dd263dfc85a3cb5941a378a5ddd923;p=fms.git diff --git a/src/http/pages/browseboardspage.cpp b/src/http/pages/browseboardspage.cpp new file mode 100644 index 0000000..e759cd6 --- /dev/null +++ b/src/http/pages/browseboardspage.cpp @@ -0,0 +1,212 @@ +#include "../../../include/http/pages/browseboardspage.h" +#include "../../../include/stringfunctions.h" + +#ifdef XMEM + #include +#endif + +const std::string BrowseBoardsPage::BuildQueryString(const long startrow, const std::string &boardsearch, const std::string &sortby, const std::string &sortorder) +{ + std::string returnval=""; + std::string tempval=""; + + if(startrow>=0) + { + StringFunctions::Convert(startrow,tempval); + returnval+="startrow="+tempval; + } + + if(boardsearch!="") + { + if(returnval!="") + { + returnval+="&"; + } + returnval+="boardsearch="+boardsearch; + } + + if(sortby!="") + { + if(returnval!="") + { + returnval+="&"; + } + returnval+="sortby="+sortby; + if(sortorder=="ASC" || sortorder=="DESC") + { + if(returnval!="") + { + returnval+="&"; + } + returnval+="sortorder="+sortorder; + } + else + { + if(returnval!="") + { + returnval+="&"; + } + returnval+="sortorder=ASC"; + } + } + + return returnval; + +} + +const std::string BrowseBoardsPage::GeneratePage(const std::string &method, const std::map &queryvars) +{ + std::string content=""; + std::string sql=""; + std::string boardname=""; + int rowsperpage=25; + std::string rowsperpagestr="26"; // 1 more than rowsperpage so we know if there are more boards + long startrow=0; + std::string startrowstr="0"; + int messagecount=0; + std::string messagecountstr="0"; + std::string lastdate=""; + int count=0; + std::string boardsearch=""; + std::string sortby=""; + std::string sortorder=""; + + // if startrow is specified + if(queryvars.find("startrow")!=queryvars.end()) + { + startrowstr=(*queryvars.find("startrow")).second; + // convert back and forth, just in case a number wasn't passed in startrow + StringFunctions::Convert(startrowstr,startrow); + if(startrow<0) + { + startrow=0; + } + StringFunctions::Convert(startrow,startrowstr); + } + if(queryvars.find("boardsearch")!=queryvars.end()) + { + boardsearch=(*queryvars.find("boardsearch")).second; + } + if(queryvars.find("sortby")!=queryvars.end() && queryvars.find("sortorder")!=queryvars.end()) + { + sortby=(*queryvars.find("sortby")).second; + sortorder=(*queryvars.find("sortorder")).second; + if(sortby!="BoardName" && sortby!="MessageCount" && sortby!="LastMessage") + { + sortby="BoardName"; + } + if(sortorder!="ASC" && sortorder!="DESC") + { + sortorder="ASC"; + } + } + else + { + sortby="BoardName"; + sortorder="ASC"; + } + + content="

Browse Messages

"; + content+="
"; + content+=""; + content+=""; + content+="
"; + + content+=""; + content+=""; + content+=""; + content+=""; + content+=""; + content+=""; + + sql="SELECT tblBoard.BoardID, tblBoard.BoardName, COUNT(tblMessageBoard.MessageID) AS 'MessageCount', MAX(tblMessage.MessageDate || ' ' || tblMessage.MessageTime) AS 'LastMessage'"; + sql+="FROM tblBoard LEFT JOIN tblMessageBoard ON tblBoard.BoardID=tblMessageBoard.BoardID "; + sql+="LEFT JOIN tblMessage ON tblMessageBoard.MessageID=tblMessage.MessageID "; + sql+="WHERE (tblMessageBoard.MessageID>=0 OR tblMessageBoard.MessageID IS NULL) "; + if(boardsearch!="") + { + sql+="AND tblBoard.BoardName LIKE '%' || ? || '%' "; + } + sql+="GROUP BY tblBoard.BoardID "; + sql+="ORDER BY "+sortby+" COLLATE NOCASE "+sortorder+" "; + sql+="LIMIT "+startrowstr+","+rowsperpagestr+";"; + + SQLite3DB::Statement st=m_db->Prepare(sql); + if(boardsearch!="") + { + st.Bind(0,boardsearch); + } + + st.Step(); + while(st.RowReturned() && count++"+SanitizeOutput(boardname)+""; + content+=""; + content+=""; + content+="\r\n"; + st.Step(); + } + + if(startrow>0 || st.RowReturned()) + { + content+=""; + + if(startrow>0) + { + int thisstartrow=startrow-rowsperpage; + if(thisstartrow<0) + { + thisstartrow=0; + } + content+=""; + } + else + { + content+=""; + } + + content+=""; + + if(st.RowReturned()) + { + int thisstartrow=startrow+rowsperpage; + content+=""; + } + + content+=""; + } + content+="
BoardMessage CountLast Message
"+SanitizeOutput(messagecountstr)+""+SanitizeOutput(lastdate)+"
<---->
"; + + return StringFunctions::Replace(m_template,"[CONTENT]",content); +} + +const std::string BrowseBoardsPage::ReverseSort(const std::string &sortname, const std::string ¤tsortby, const std::string ¤tsortorder) +{ + if(sortname==currentsortby) + { + if(currentsortorder=="ASC") + { + return "DESC"; + } + else + { + return "ASC"; + } + } + else + { + return currentsortorder; + } +}