#include "../../../include/http/pages/forumviewthreadpage.h"\r
#include "../../../include/stringfunctions.h"\r
+#include "../../../include/unicode/unicodeformatter.h"\r
\r
#ifdef XMEM\r
#include <xmem.h>\r
\r
const std::string ForumViewThreadPage::FixBody(const std::string &body)\r
{\r
- static std::string whitespace=" \t\r\n";\r
std::string output=body;\r
\r
- // put \n after 80 contiguous characters in the body\r
- std::string::size_type prevpos=0;\r
- std::string::size_type pos=output.find_first_of(whitespace);\r
- while(pos!=std::string::npos)\r
- {\r
- while(pos-prevpos>80)\r
- {\r
- output.insert(prevpos+80,"\n");\r
- prevpos+=81; // 81 because of the extra newline we just inserted\r
- }\r
- prevpos=pos;\r
- pos=output.find_first_of(whitespace,pos+1);\r
- }\r
- while(output.size()-prevpos>80) // check the last line of the message (no whitespace after it)\r
- {\r
- output.insert(prevpos+80,"\n");\r
- prevpos+=81;\r
- }\r
+ output=StringFunctions::Replace(output,"\r\n","\n");\r
+\r
+ UnicodeFormatter::LineWrap(output,80,"",output);\r
\r
output=StringFunctions::Replace(output,"<","<");\r
output=StringFunctions::Replace(output,">",">");\r
std::string boardidstr="";\r
std::string currentpagestr="";\r
std::string boardname="";\r
+ std::string firstunreadidstr="";\r
\r
if(queryvars.find("threadid")!=queryvars.end())\r
{\r
\r
content+=CreateForumHeader();\r
\r
- SQLite3DB::Statement updateread=m_db->Prepare("UPDATE tblMessage SET Read=1 WHERE tblMessage.MessageID IN (SELECT MessageID FROM tblThreadPost WHERE ThreadID=?);");\r
- updateread.Bind(0,threadidstr);\r
- updateread.Step();\r
+ SQLite3DB::Statement firstunreadst=m_db->Prepare("SELECT tblMessage.MessageID FROM tblThreadPost INNER JOIN tblMessage ON tblThreadPost.MessageID=tblMessage.MessageID WHERE ThreadID=? AND tblMessage.Read=0;");\r
+ firstunreadst.Bind(0,threadidstr);\r
+ firstunreadst.Step();\r
+ if(firstunreadst.RowReturned())\r
+ {\r
+ firstunreadst.ResultText(0,firstunreadidstr);\r
+ }\r
+\r
+ if(queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="markunread")\r
+ {\r
+ SQLite3DB::Statement updateread=m_db->Prepare("UPDATE tblMessage SET Read=0 WHERE tblMessage.MessageID IN (SELECT MessageID FROM tblThreadPost WHERE ThreadID=?);");\r
+ updateread.Bind(0,threadidstr);\r
+ updateread.Step();\r
+ }\r
+ else\r
+ {\r
+ SQLite3DB::Statement updateread=m_db->Prepare("UPDATE tblMessage SET Read=1 WHERE tblMessage.MessageID IN (SELECT MessageID FROM tblThreadPost WHERE ThreadID=?);");\r
+ updateread.Bind(0,threadidstr);\r
+ updateread.Step();\r
+ }\r
\r
SQLite3DB::Statement trustst=m_db->Prepare("SELECT LocalMessageTrust, LocalTrustListTrust, PeerMessageTrust, PeerTrustListTrust, Name FROM tblIdentity WHERE IdentityID=?;");\r
\r
content+="<table class=\"forumheader\">";\r
content+="<tr>";\r
content+="<td> Forum : <a href=\"forumthreads.htm?boardid="+boardidstr+"¤tpage="+currentpagestr+"\">"+SanitizeOutput(boardname)+"</a></td>";\r
+ if(firstunreadidstr!="")\r
+ {\r
+ content+="<td>";\r
+ content+="<a href=\"#"+firstunreadidstr+"\">First Unread Message</a>";\r
+ content+="</td>";\r
+ }\r
+ content+="<td>";\r
+ content+="<a href=\""+m_pagename+"?formaction=markunread&threadid="+threadidstr+"&boardid="+boardidstr+"¤tpage="+currentpagestr+"\">Mark Unread</a>";\r
+ content+="</td>";\r
content+="</tr>";\r
content+="</table>\r\n";\r
\r
\r
content+="<table class=\"trust\">";\r
content+="<tr>";\r
- content+="<td colspan=\"3\" style=\"text-align:center;\"><a href=\"peertrust.htm?namesearch="+name+"\">Trust</a></td>";\r
+ content+="<td colspan=\"3\" style=\"text-align:center;\"><a href=\"peertrust.htm?namesearch="+StringFunctions::UriEncode(name)+"\">Trust</a></td>";\r
content+="</tr>";\r
content+="<tr>";\r
content+="<td></td><td>Local</td><td>Peer</td>";\r