X-Git-Url: https://git.pterodactylus.net/?p=fms.git;a=blobdiff_plain;f=src%2Fmessage.cpp;h=eea0633477f6d423d609e0ff33f7aa4bd1fa12ee;hp=f95f541ec5ccce2c9490f9720a1b258e35cbced0;hb=b4f4686250878cdf4fcb2986a2ea6546cba867d1;hpb=107bd97018964d48425306026d06afd038e84db0 diff --git a/src/message.cpp b/src/message.cpp index f95f541..eea0633 100644 --- a/src/message.cpp +++ b/src/message.cpp @@ -42,6 +42,35 @@ const bool Message::CheckForAdministrationBoard(const std::vector & return false; } +const int Message::FindLocalIdentityID(const std::string &name) +{ + SQLite3DB::Statement st=m_db->Prepare("SELECT LocalIdentityID FROM tblLocalIdentity WHERE Name=?;"); + st.Bind(0,name); + st.Step(); + if(st.RowReturned()) + { + int result=-1; + st.ResultInt(0,result); + return result; + } + else + { + if(m_addnewpostfromidentities==true) + { + DateTime now; + now.SetToGMTime(); + st=m_db->Prepare("INSERT INTO tblLocalIdentity(Name) VALUES(?);"); + st.Bind(0,name); + st.Step(true); + return st.GetLastInsertRowID(); + } + else + { + return -1; + } + } +} + const std::string Message::GetNNTPArticleID() const { // old message - before 0.1.12 - doesn't have @domain so add @freenetproject.org @@ -112,6 +141,7 @@ void Message::HandleAdministrationMessage() // only continue if this message was actually a reply to another message if(m_inreplyto.size()>0) { + int localidentityid=-1; int boardid=0; std::string boardname=""; std::string identityname=""; @@ -123,7 +153,9 @@ void Message::HandleAdministrationMessage() SQLite3DB::Statement st=m_db->Prepare("SELECT tblBoard.BoardID,BoardName,ModifyLocalMessageTrust,ModifyLocalTrustListTrust FROM tblBoard INNER JOIN tblAdministrationBoard ON tblBoard.BoardID=tblAdministrationBoard.BoardID;"); st.Step(); - while(st.RowReturned()) + localidentityid=FindLocalIdentityID(m_fromname); + + while(st.RowReturned() && localidentityid!=-1) { st.ResultInt(0,boardid); st.ResultText(1,boardname); @@ -132,8 +164,9 @@ void Message::HandleAdministrationMessage() if(std::find(m_boards.begin(),m_boards.end(),boardname)!=m_boards.end()) { - SQLite3DB::Statement origmess=m_db->Prepare("SELECT tblIdentity.IdentityID,tblIdentity.Name,tblIdentity.LocalMessageTrust,tblIdentity.LocalTrustListTrust FROM tblIdentity INNER JOIN tblMessage ON tblIdentity.IdentityID=tblMessage.IdentityID WHERE tblMessage.MessageUUID=?;"); - origmess.Bind(0,m_inreplyto[0]); + SQLite3DB::Statement origmess=m_db->Prepare("SELECT tblIdentity.IdentityID,tblIdentity.Name,tblIdentityTrust.LocalMessageTrust,tblIdentityTrust.LocalTrustListTrust FROM tblIdentity INNER JOIN tblMessage ON tblIdentity.IdentityID=tblMessage.IdentityID LEFT JOIN (SELECT IdentityID,LocalMessageTrust,LocalTrustListTrust FROM tblIdentityTrust WHERE LocalIdentityID=?) AS 'tblIdentityTrust' ON tblIdentity.IdentityID=tblIdentityTrust.IdentityID WHERE tblMessage.MessageUUID=?;"); + origmess.Bind(0,localidentityid); + origmess.Bind(1,m_inreplyto[0]); origmess.Step(); if(origmess.RowReturned()) @@ -165,11 +198,18 @@ void Message::HandleAdministrationMessage() origtrustlisttrust<0 ? origtrustlisttrust=0 : false; origtrustlisttrust>100 ? origtrustlisttrust=100 : false; + // make sure we have a record in tblIdentityTrust + SQLite3DB::Statement ins=m_db->Prepare("INSERT INTO tblIdentityTrust(LocalIdentityID,IdentityID) VALUES(?,?);"); + ins.Bind(0,localidentityid); + ins.Bind(1,identityid); + ins.Step(); + // update new trust levels - SQLite3DB::Statement update=m_db->Prepare("UPDATE tblIdentity SET LocalMessageTrust=?, LocalTrustListTrust=? WHERE IdentityID=?;"); + SQLite3DB::Statement update=m_db->Prepare("UPDATE tblIdentityTrust SET LocalMessageTrust=?, LocalTrustListTrust=? WHERE IdentityID=? AND LocalIdentityID=?;"); update.Bind(0,origmessagetrust); update.Bind(1,origtrustlisttrust); update.Bind(2,identityid); + update.Bind(3,localidentityid); update.Step(); // insert message to show what id was changed and what current levels are @@ -182,6 +222,7 @@ void Message::HandleAdministrationMessage() now.SetToGMTime(); StringFunctions::Convert(origmessagetrust,messagetruststr); StringFunctions::Convert(origtrustlisttrust,trustlisttruststr); + messagebody="Trust List of "+m_fromname+"\r\n"; messagebody="Trust Changed for "+identityname+"\r\n"; messagebody+="Local Message Trust : "+messagetruststr+"\r\n"; messagebody+="Local Trust List Trust : "+trustlisttruststr+"\r\n"; @@ -215,39 +256,52 @@ void Message::HandleChangeTrust() { if(m_changemessagetrustonreply!=0 && m_inreplyto.size()>0) { - SQLite3DB::Statement st=m_db->Prepare("SELECT tblIdentity.IdentityID,tblIdentity.LocalMessageTrust FROM tblIdentity INNER JOIN tblMessage ON tblIdentity.IdentityID=tblMessage.IdentityID WHERE tblMessage.MessageUUID=?;"); - st.Bind(0,m_inreplyto[0]); - st.Step(); - if(st.RowReturned()) + int localidentityid=FindLocalIdentityID(m_fromname); + if(localidentityid!=-1) { - int identityid=0; - int localmessagetrust=0; + // make sure we have a record in tblIdentityTrust + SQLite3DB::Statement ins=m_db->Prepare("INSERT INTO tblIdentityTrust(LocalIdentityID,IdentityID) VALUES(?,?);"); - st.ResultInt(0,identityid); - if(st.ResultNull(1)==false) - { - st.ResultInt(1,localmessagetrust); - } - else + SQLite3DB::Statement st=m_db->Prepare("SELECT tblIdentity.IdentityID,tblIdentityTrust.LocalMessageTrust FROM tblIdentity INNER JOIN tblMessage ON tblIdentity.IdentityID=tblMessage.IdentityID LEFT JOIN (SELECT IdentityID,LocalMessageTrust FROM tblIdentityTrust WHERE LocalIdentityID=?) AS 'tblIdentityTrust' ON tblIdentity.IdentityID=tblIdentityTrust.IdentityID WHERE tblMessage.MessageUUID=?;"); + st.Bind(0,localidentityid); + st.Bind(1,m_inreplyto[0]); + st.Step(); + if(st.RowReturned()) { - localmessagetrust=m_minlocalmessagetrust; - } + int identityid=0; + int localmessagetrust=0; - localmessagetrust+=m_changemessagetrustonreply; - if(localmessagetrust<0) - { - localmessagetrust=0; - } - if(localmessagetrust>100) - { - localmessagetrust=100; - } + st.ResultInt(0,identityid); + if(st.ResultNull(1)==false) + { + st.ResultInt(1,localmessagetrust); + } + else + { + localmessagetrust=m_minlocalmessagetrust; + } + + localmessagetrust+=m_changemessagetrustonreply; + if(localmessagetrust<0) + { + localmessagetrust=0; + } + if(localmessagetrust>100) + { + localmessagetrust=100; + } - SQLite3DB::Statement st2=m_db->Prepare("UPDATE tblIdentity SET LocalMessageTrust=? WHERE IdentityID=?;"); - st2.Bind(0,localmessagetrust); - st2.Bind(1,identityid); - st2.Step(); + ins.Bind(0,localidentityid); + ins.Bind(1,identityid); + ins.Step(); + SQLite3DB::Statement st2=m_db->Prepare("UPDATE tblIdentityTrust SET LocalMessageTrust=? WHERE IdentityID=? AND LocalIdentityID=?;"); + st2.Bind(0,localmessagetrust); + st2.Bind(1,identityid); + st2.Bind(2,localidentityid); + st2.Step(); + + } } } } @@ -635,7 +689,9 @@ const bool Message::StartFreenetInsert() xml.AddInReplyTo((*j).first,(*j).second); } + // find identity to insert with + /* SQLite3DB::Statement st=m_db->Prepare("SELECT LocalIdentityID FROM tblLocalIdentity WHERE Name=?;"); st.Bind(0,m_fromname); st.Step(); @@ -661,8 +717,14 @@ const bool Message::StartFreenetInsert() { st.ResultInt(0,localidentityid); } + */ + localidentityid=FindLocalIdentityID(m_fromname); + if(localidentityid==-1) + { + return false; + } - st=m_db->Prepare("INSERT INTO tblMessageInserts(LocalIdentityID,MessageUUID,MessageXML) VALUES(?,?,?);"); + SQLite3DB::Statement st=m_db->Prepare("INSERT INTO tblMessageInserts(LocalIdentityID,MessageUUID,MessageXML) VALUES(?,?,?);"); st.Bind(0,localidentityid); st.Bind(1,m_messageuuid); st.Bind(2,xml.GetXML());