version 0.1.8
[fms.git] / src / http / pages / peertrustpage.cpp
index a9ac96f..4a451ed 100644 (file)
@@ -10,6 +10,13 @@ const std::string PeerTrustPage::GeneratePage(const std::string &method, const s
        int count=0;\r
        std::string countstr;\r
        std::string content="";\r
+       int identitycount=0;            // total number of ids we know\r
+       int rowsperpage=25;                     // how many ids to show per page\r
+       std::string rowsperpagestr;\r
+       int startrow=0;\r
+       std::string startrowstr="0";\r
+\r
+       StringFunctions::Convert(rowsperpage,rowsperpagestr);\r
 \r
        if(queryvars.find("formaction")!=queryvars.end() && (*queryvars.find("formaction")).second=="update")\r
        {\r
@@ -48,14 +55,33 @@ const std::string PeerTrustPage::GeneratePage(const std::string &method, const s
 \r
        }\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
+\r
        content+="<h2>Peer Trust</h2>";\r
        content+="Message Trust is how much you trust the identity to post good messages. Trust List Trust is how much weight you want the trust list of that identity to have when calculating the total. The local trust levels are set by you, and the peer trust levels are calculated by a weighted average using other identities trust lists.";\r
        content+="<form name=\"frmtrust\" method=\"POST\">";\r
        content+="<input type=\"hidden\" name=\"formaction\" value=\"update\">";\r
+       content+="<input type=\"hidden\" name=\"startrow\" value=\""+startrowstr+"\">";\r
        content+="<table>";\r
        content+="<tr><th>Name</th><th>Local Message Trust</th><th>Peer Message Trust</th><th>Local Trust List Trust</th><th>Peer Trust List Trust</th></tr>";\r
        \r
-       SQLite3DB::Statement st=m_db->Prepare("SELECT IdentityID,Name,LocalMessageTrust,PeerMessageTrust,LocalTrustListTrust,PeerTrustListTrust,PublicKey FROM tblIdentity ORDER BY Name;");\r
+       SQLite3DB::Statement st=m_db->Prepare("SELECT COUNT(*) FROM tblIdentity;");\r
+       st.Step();\r
+       st.ResultInt(0,identitycount);\r
+       st.Finalize();\r
+\r
+       st=m_db->Prepare("SELECT IdentityID,Name,LocalMessageTrust,PeerMessageTrust,LocalTrustListTrust,PeerTrustListTrust,PublicKey FROM tblIdentity ORDER BY Name COLLATE NOCASE LIMIT "+startrowstr+","+rowsperpagestr+";");\r
        st.Step();\r
 \r
        while(st.RowReturned())\r
@@ -90,18 +116,46 @@ const std::string PeerTrustPage::GeneratePage(const std::string &method, const s
                        content+="[Unknown Name]";\r
                }\r
                content+="</td>";\r
-               content+="<td>";\r
+               content+="<td "+GetClassString(localmessagetrust)+">";\r
                content+="<input type=\"hidden\" name=\"oldlocalmessagetrust["+countstr+"]\" value=\""+localmessagetrust+"\">";\r
                content+="<input type=\"text\" name=\"localmessagetrust["+countstr+"]\" value=\""+localmessagetrust+"\" size=\"2\" maxlength=\"3\"></td>";\r
-               content+="<td>"+peermessagetrust+"</td>";\r
-               content+="<td>";\r
+               content+="<td "+GetClassString(peermessagetrust)+">";\r
+               content+=peermessagetrust+"</td>";\r
+               content+="<td "+GetClassString(localtrustlisttrust)+">";\r
                content+="<input type=\"hidden\" name=\"oldlocaltrustlisttrust["+countstr+"]\" value=\""+localtrustlisttrust+"\">";\r
                content+="<input type=\"text\" name=\"localtrustlisttrust["+countstr+"]\" value=\""+localtrustlisttrust+"\" size=\"2\" maxlength=\"3\"></td>";\r
-               content+="<td>"+peertrustlisttrust+"</td>";\r
+               content+="<td "+GetClassString(peertrustlisttrust)+">";\r
+               content+=peertrustlisttrust+"</td>";\r
                content+="</tr>";\r
                st.Step();\r
                count++;\r
        }\r
+       \r
+       if(startrow>0 || startrow+rowsperpage<identitycount)\r
+       {\r
+               int tempint;\r
+               std::string tempstr;\r
+               int cols=0;\r
+\r
+               content+="<tr>";\r
+               if(startrow>0)\r
+               {\r
+                       StringFunctions::Convert(startrow-rowsperpage,tempstr);\r
+                       content+="<td colspan=\"2\" align=\"left\"><a href=\"peertrust.htm?startrow="+tempstr+"\"><-- Previous Page</a></td>";\r
+                       cols+=2;\r
+               }\r
+               if(startrow+rowsperpage<identitycount)\r
+               {\r
+                       StringFunctions::Convert(startrow+rowsperpage,tempstr);\r
+                       while(cols<3)\r
+                       {\r
+                               content+="<td></td>";\r
+                               cols++;\r
+                       }\r
+                       content+="<td colspan=\"2\" align=\"right\"><a href=\"peertrust.htm?startrow="+tempstr+"\">Next Page --></a></td>";\r
+               }\r
+               content+="</tr>";\r
+       }\r
 \r
        content+="<tr><td colspan=\"5\"><input type=\"submit\" value=\"Update Trust\"></td></tr>";\r
        content+="</table>";\r
@@ -110,6 +164,25 @@ const std::string PeerTrustPage::GeneratePage(const std::string &method, const s
        return "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n"+StringFunctions::Replace(m_template,"[CONTENT]",content);\r
 }\r
 \r
+const std::string PeerTrustPage::GetClassString(const std::string &trustlevel)\r
+{\r
+       int tempint=0;\r
+       std::string tempstr;\r
+\r
+       StringFunctions::Convert(trustlevel,tempint);\r
+       tempint/=10;\r
+       StringFunctions::Convert(tempint,tempstr);\r
+\r
+       if(trustlevel!="")\r
+       {\r
+               return "class=\"trust"+tempstr+"\"";\r
+       }\r
+       else\r
+       {\r
+               return "";\r
+       }\r
+}\r
+\r
 const bool PeerTrustPage::WillHandleURI(const std::string &uri)\r
 {\r
        if(uri.find("peertrust.")!=std::string::npos)\r