00001
00033 #include "linden_common.h"
00034
00035 #include "lltransactionflags.h"
00036 #include "lltransactiontypes.h"
00037 #include "lluuid.h"
00038
00039 const U8 TRANSACTION_FLAGS_NONE = 0;
00040 const U8 TRANSACTION_FLAG_SOURCE_GROUP = 1;
00041 const U8 TRANSACTION_FLAG_DEST_GROUP = 2;
00042 const U8 TRANSACTION_FLAG_OWNER_GROUP = 4;
00043 const U8 TRANSACTION_FLAG_SIMULTANEOUS_CONTRIBUTION = 8;
00044 const U8 TRANSACTION_FLAG_SIMULTANEOUS_CONTRIBUTION_REMOVAL = 16;
00045
00046 U8 pack_transaction_flags(BOOL is_source_group, BOOL is_dest_group)
00047 {
00048 U8 rv = 0;
00049 if(is_source_group) rv |= TRANSACTION_FLAG_SOURCE_GROUP;
00050 if(is_dest_group) rv |= TRANSACTION_FLAG_DEST_GROUP;
00051 return rv;
00052 }
00053
00054 BOOL is_tf_source_group(TransactionFlags flags)
00055 {
00056 return ((flags & TRANSACTION_FLAG_SOURCE_GROUP) == TRANSACTION_FLAG_SOURCE_GROUP);
00057 }
00058
00059 BOOL is_tf_dest_group(TransactionFlags flags)
00060 {
00061 return ((flags & TRANSACTION_FLAG_DEST_GROUP) == TRANSACTION_FLAG_DEST_GROUP);
00062 }
00063
00064 BOOL is_tf_owner_group(TransactionFlags flags)
00065 {
00066 return ((flags & TRANSACTION_FLAG_OWNER_GROUP) == TRANSACTION_FLAG_OWNER_GROUP);
00067 }
00068
00069 void append_reason(
00070 std::ostream& ostr,
00071 S32 transaction_type,
00072 const char* description)
00073 {
00074 switch( transaction_type )
00075 {
00076 case TRANS_OBJECT_SALE:
00077 ostr << " for " << (description ? description : "<unknown>");
00078 break;
00079 case TRANS_LAND_SALE:
00080 ostr << " for a parcel of land";
00081 break;
00082 case TRANS_LAND_PASS_SALE:
00083 ostr << " for a land access pass";
00084 break;
00085 case TRANS_GROUP_LAND_DEED:
00086 ostr << " for deeding land";
00087 default:
00088 break;
00089 }
00090 }
00091
00092 std::string build_transfer_message_to_source(
00093 S32 amount,
00094 const LLUUID& source_id,
00095 const LLUUID& dest_id,
00096 const std::string& dest_name,
00097 S32 transaction_type,
00098 const char* description)
00099 {
00100 lldebugs << "build_transfer_message_to_source: " << amount << " "
00101 << source_id << " " << dest_id << " " << dest_name << " "
00102 << (description?description:"(no desc)") << llendl;
00103 if((0 == amount) || source_id.isNull()) return ll_safe_string(description);
00104 std::ostringstream ostr;
00105 if(dest_id.isNull())
00106 {
00107 ostr << "You paid L$" << amount;
00108 switch(transaction_type)
00109 {
00110 case TRANS_GROUP_CREATE:
00111 ostr << " to create a group";
00112 break;
00113 case TRANS_GROUP_JOIN:
00114 ostr << " to join a group";
00115 break;
00116 case TRANS_UPLOAD_CHARGE:
00117 ostr << " to upload";
00118 break;
00119 default:
00120 break;
00121 }
00122 }
00123 else
00124 {
00125 ostr << "You paid " << dest_name << " L$" << amount;
00126 append_reason(ostr, transaction_type, description);
00127 }
00128 ostr << ".";
00129 return ostr.str();
00130 }
00131
00132 std::string build_transfer_message_to_destination(
00133 S32 amount,
00134 const LLUUID& dest_id,
00135 const LLUUID& source_id,
00136 const std::string& source_name,
00137 S32 transaction_type,
00138 const char* description)
00139 {
00140 lldebugs << "build_transfer_message_to_dest: " << amount << " "
00141 << dest_id << " " << source_id << " " << source_name << " "
00142 << (description?description:"(no desc)") << llendl;
00143 if(0 == amount) return std::string();
00144 if(dest_id.isNull()) return ll_safe_string(description);
00145 std::ostringstream ostr;
00146 ostr << source_name << " paid you L$" << amount;
00147 append_reason(ostr, transaction_type, description);
00148 ostr << ".";
00149 return ostr.str();
00150 }