version 0.2.2
[fms.git] / src / http / pages / peertrustpage.cpp
index 4a451ed..0cb0d42 100644 (file)
@@ -5,6 +5,48 @@
        #include <xmem.h>\r
 #endif\r
 \r
+const std::string PeerTrustPage::BuildQueryString(const long startrow, const std::string &namesearch, const std::string &sortby, const std::string &sortorder)\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(namesearch!="")\r
+       {\r
+               if(returnval!="")\r
+               {\r
+                       returnval+="&";\r
+               }\r
+               returnval+="namesearch="+namesearch;\r
+       }\r
+\r
+       if(sortby!="")\r
+       {\r
+               if(returnval!="")\r
+               {\r
+                       returnval+="&";\r
+               }\r
+               returnval+="sortby="+sortby;\r
+       }\r
+\r
+       if(sortorder!="")\r
+       {\r
+               if(returnval!="")\r
+               {\r
+                       returnval+="&";\r
+               }\r
+               returnval+="sortorder="+sortorder;\r
+       }\r
+\r
+       return returnval;\r
+\r
+}\r
+\r
 const std::string PeerTrustPage::GeneratePage(const std::string &method, const std::map<std::string,std::string> &queryvars)\r
 {\r
        int count=0;\r
@@ -15,6 +57,10 @@ const std::string PeerTrustPage::GeneratePage(const std::string &method, const s
        std::string rowsperpagestr;\r
        int startrow=0;\r
        std::string startrowstr="0";\r
+       std::string namesearch="";\r
+       std::string sql;\r
+       std::string sortby="";\r
+       std::string sortorder="";\r
 \r
        StringFunctions::Convert(rowsperpage,rowsperpagestr);\r
 \r
@@ -25,6 +71,10 @@ const std::string PeerTrustPage::GeneratePage(const std::string &method, const s
                std::vector<std::string> lmt;\r
                std::vector<std::string> oldltlt;\r
                std::vector<std::string> ltlt;\r
+               std::vector<std::string> oldmtc;\r
+               std::vector<std::string> mtc;\r
+               std::vector<std::string> oldtltc;\r
+               std::vector<std::string> tltc;\r
                int localmessagetrust=0;\r
                int localtrustlisttrust=0;\r
                int identityid;\r
@@ -34,20 +84,40 @@ const std::string PeerTrustPage::GeneratePage(const std::string &method, const s
                CreateArgArray(queryvars,"localmessagetrust",lmt);\r
                CreateArgArray(queryvars,"oldlocaltrustlisttrust",oldltlt);\r
                CreateArgArray(queryvars,"localtrustlisttrust",ltlt);\r
+               CreateArgArray(queryvars,"oldmessagetrustcomment",oldmtc);\r
+               CreateArgArray(queryvars,"messagetrustcomment",mtc);\r
+               CreateArgArray(queryvars,"oldtrustlisttrustcomment",oldtltc);\r
+               CreateArgArray(queryvars,"trustlisttrustcomment",tltc);\r
                \r
-               SQLite3DB::Statement update=m_db->Prepare("UPDATE tblIdentity SET LocalMessageTrust=?, LocalTrustListTrust=? WHERE IdentityID=?;");\r
+               SQLite3DB::Statement update=m_db->Prepare("UPDATE tblIdentity SET LocalMessageTrust=?, LocalTrustListTrust=?, MessageTrustComment=?, TrustListTrustComment=? WHERE IdentityID=?;");\r
 \r
                for(int i=0; i<identityids.size(); i++)\r
                {\r
-                       if(oldlmt[i]!=lmt[i] || oldltlt[i]!=ltlt[i])\r
+                       if(oldlmt[i]!=lmt[i] || oldltlt[i]!=ltlt[i] || oldmtc[i]!=mtc[i] || oldtltc[i]!=tltc[i])\r
                        {\r
                                StringFunctions::Convert(lmt[i],localmessagetrust);\r
                                StringFunctions::Convert(ltlt[i],localtrustlisttrust);\r
                                StringFunctions::Convert(identityids[i],identityid);\r
 \r
-                               update.Bind(0,localmessagetrust);\r
-                               update.Bind(1,localtrustlisttrust);\r
-                               update.Bind(2,identityid);\r
+                               if(lmt[i]!="")\r
+                               {\r
+                                       update.Bind(0,localmessagetrust);\r
+                               }\r
+                               else\r
+                               {\r
+                                       update.Bind(0);\r
+                               }\r
+                               if(ltlt[i]!="")\r
+                               {\r
+                                       update.Bind(1,localtrustlisttrust);\r
+                               }\r
+                               else\r
+                               {\r
+                                       update.Bind(1);\r
+                               }\r
+                               update.Bind(2,mtc[i]);\r
+                               update.Bind(3,tltc[i]);\r
+                               update.Bind(4,identityid);\r
                                update.Step();\r
                                update.Reset();\r
                        }\r
@@ -68,20 +138,96 @@ const std::string PeerTrustPage::GeneratePage(const std::string &method, const s
                StringFunctions::Convert(startrow,startrowstr);\r
        }\r
 \r
+       // sort by\r
+       if(queryvars.find("sortby")!=queryvars.end())\r
+       {\r
+               sortby=(*queryvars.find("sortby")).second;\r
+       }\r
+       else\r
+       {\r
+               sortby="Name";\r
+       }\r
+\r
+       // sort order\r
+       if(queryvars.find("sortorder")!=queryvars.end())\r
+       {\r
+               sortorder=(*queryvars.find("sortorder")).second;\r
+       }\r
+       else\r
+       {\r
+               sortorder="ASC";\r
+       }\r
+\r
+       // if we are searching by name\r
+       if(queryvars.find("namesearch")!=queryvars.end())\r
+       {\r
+               namesearch=(*queryvars.find("namesearch")).second;\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+="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+="<div style=\"text-align:center;\">";\r
+       content+="<form name=\"frmsearch\" method=\"POST\" action=\"peertrust.htm\">";\r
+       content+="<input type=\"text\" name=\"namesearch\" value=\""+SanitizeOutput(namesearch)+"\">";\r
+       content+="<input type=\"submit\" value=\"Search\">";\r
+       content+="</form>";\r
+       content+="</div>";\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
+       if(namesearch!="")\r
+       {\r
+               content+="<input type=\"hidden\" name=\"namesearch\" value=\""+SanitizeOutput(namesearch)+"\">";\r
+       }\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
+       content+="<tr><th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"Name",ReverseSort("Name",sortby,sortorder))+"\">Name</a></th>";\r
+       content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"LocalMessageTrust",ReverseSort("LocalMessageTrust",sortby,sortorder))+"\">Local Message Trust</a></th>";\r
+       content+="<th>Message Comment</th>";\r
+       content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"PeerMessageTrust",ReverseSort("PeerMessageTrust",sortby,sortorder))+"\">Peer Message Trust</a></th>";\r
+       content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"LocalTrustListTrust",ReverseSort("LocalTrustListTrust",sortby,sortorder))+"\">Local Trust List Trust</a></th>";\r
+       content+="<th>Trust Comment</th>";\r
+       content+="<th><a href=\"peertrust.htm?"+BuildQueryString(startrow,namesearch,"PeerTrustListTrust",ReverseSort("PeerTrustListTrust",sortby,sortorder))+"\">Peer Trust List Trust</a></th></tr>";\r
        \r
-       SQLite3DB::Statement st=m_db->Prepare("SELECT COUNT(*) FROM tblIdentity;");\r
+       // get count of identities we are showing\r
+       sql="SELECT COUNT(*) FROM tblIdentity";\r
+       if(namesearch!="")\r
+       {\r
+               sql+=" WHERE Name LIKE '%' || ? || '%'";\r
+       }\r
+       sql+=";";\r
+       SQLite3DB::Statement st=m_db->Prepare(sql);\r
+       if(namesearch!="")\r
+       {\r
+               st.Bind(0,namesearch);\r
+       }\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
+       sql="SELECT IdentityID,Name,LocalMessageTrust,PeerMessageTrust,LocalTrustListTrust,PeerTrustListTrust,PublicKey,MessageTrustComment,TrustListTrustComment FROM tblIdentity";\r
+       if(namesearch!="")\r
+       {\r
+               sql+=" WHERE Name LIKE  '%' || ? || '%'";\r
+       }\r
+       sql+=" ORDER BY";\r
+       if(sortby=="Name")\r
+       {\r
+               sql+=" Name COLLATE NOCASE";\r
+       }\r
+       else\r
+       {\r
+               sql+=" "+sortby;\r
+       }\r
+       if(sortorder!="")\r
+       {\r
+               sql+=" "+sortorder;\r
+       }\r
+       sql+=" LIMIT "+startrowstr+","+rowsperpagestr+";";\r
+       st=m_db->Prepare(sql);\r
+       if(namesearch!="")\r
+       {\r
+               st.Bind(0,namesearch);\r
+       }\r
        st.Step();\r
 \r
        while(st.RowReturned())\r
@@ -93,6 +239,9 @@ const std::string PeerTrustPage::GeneratePage(const std::string &method, const s
                std::string localtrustlisttrust;\r
                std::string peertrustlisttrust;\r
                std::string publickey;\r
+               std::string keypart="";\r
+               std::string messagetrustcomment="";\r
+               std::string trustlisttrustcomment="";\r
 \r
                StringFunctions::Convert(count,countstr);\r
 \r
@@ -103,27 +252,44 @@ const std::string PeerTrustPage::GeneratePage(const std::string &method, const s
                st.ResultText(4,localtrustlisttrust);\r
                st.ResultText(5,peertrustlisttrust);\r
                st.ResultText(6,publickey);\r
+               st.ResultText(7,messagetrustcomment);\r
+               st.ResultText(8,trustlisttrustcomment);\r
+\r
+               if(publickey.size()>8)\r
+               {\r
+                       keypart=publickey.substr(3,5);\r
+               }\r
 \r
                content+="<tr>";\r
                content+="<td title=\""+publickey+"\">";\r
                content+="<input type=\"hidden\" name=\"identityid["+countstr+"]\" value=\""+identityid+"\">";\r
+               content+="<a href=\"peerdetails.htm?identityid="+identityid+"\">";\r
                if(name!="")\r
                {\r
-                       content+=name;\r
+                       content+=SanitizeOutput(name+keypart)+"...";\r
                }\r
                else\r
                {\r
                        content+="[Unknown Name]";\r
                }\r
+               content+="</a>";\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 "+GetClassString(localmessagetrust)+">";\r
+               content+="<input type=\"hidden\" name=\"oldmessagetrustcomment["+countstr+"]\" value=\""+SanitizeOutput(messagetrustcomment)+"\">";\r
+               content+="<input type=\"text\" name=\"messagetrustcomment["+countstr+"]\" value=\""+SanitizeOutput(messagetrustcomment)+"\" maxlength=\"50\">";\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 "+GetClassString(localtrustlisttrust)+">";\r
+               content+="<input type=\"hidden\" name=\"oldtrustlisttrustcomment["+countstr+"]\" value=\""+SanitizeOutput(trustlisttrustcomment)+"\">";\r
+               content+="<input type=\"text\" name=\"trustlisttrustcomment["+countstr+"]\" value=\""+SanitizeOutput(trustlisttrustcomment)+"\" maxlength=\"50\">";\r
+               content+="</td>";\r
                content+="<td "+GetClassString(peertrustlisttrust)+">";\r
                content+=peertrustlisttrust+"</td>";\r
                content+="</tr>";\r
@@ -133,7 +299,6 @@ const std::string PeerTrustPage::GeneratePage(const std::string &method, const s
        \r
        if(startrow>0 || startrow+rowsperpage<identitycount)\r
        {\r
-               int tempint;\r
                std::string tempstr;\r
                int cols=0;\r
 \r
@@ -141,23 +306,22 @@ const std::string PeerTrustPage::GeneratePage(const std::string &method, const s
                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
+                       content+="<td colspan=\"3\" align=\"left\"><a href=\"peertrust.htm?"+BuildQueryString(startrow-rowsperpage,namesearch,sortby,sortorder)+"\"><-- Previous Page</a></td>";\r
+                       cols+=3;\r
                }\r
                if(startrow+rowsperpage<identitycount)\r
                {\r
-                       StringFunctions::Convert(startrow+rowsperpage,tempstr);\r
-                       while(cols<3)\r
+                       while(cols<4)\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
+                       content+="<td colspan=\"3\" align=\"right\"><a href=\"peertrust.htm?"+BuildQueryString(startrow+rowsperpage,namesearch,sortby,sortorder)+"\">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+="<tr><td colspan=\"5\"><center><input type=\"submit\" value=\"Update Trust\"></center></td></tr>";\r
        content+="</table>";\r
        content+="</form>";\r
 \r
@@ -183,6 +347,25 @@ const std::string PeerTrustPage::GetClassString(const std::string &trustlevel)
        }\r
 }\r
 \r
+const std::string PeerTrustPage::ReverseSort(const std::string &sortname, const std::string &currentsortby, const std::string &currentsortorder)\r
+{\r
+       if(sortname==currentsortby)\r
+       {\r
+               if(currentsortorder=="ASC")\r
+               {\r
+                       return "DESC";\r
+               }\r
+               else\r
+               {\r
+                       return "ASC";\r
+               }\r
+       }\r
+       else\r
+       {\r
+               return currentsortorder;\r
+       }\r
+}\r
+\r
 const bool PeerTrustPage::WillHandleURI(const std::string &uri)\r
 {\r
        if(uri.find("peertrust.")!=std::string::npos)\r