SL-3007 Ability to report abuse from chat
parent
b6029c4c34
commit
e129986a49
|
|
@ -1903,6 +1903,7 @@ BOOL LLScrollListCtrl::handleRightMouseDown(S32 x, S32 y, MASK mask)
|
|||
registrar.add("Url.SendIM", boost::bind(&LLScrollListCtrl::sendIM, id));
|
||||
registrar.add("Url.AddFriend", boost::bind(&LLScrollListCtrl::addFriend, id));
|
||||
registrar.add("Url.RemoveFriend", boost::bind(&LLScrollListCtrl::removeFriend, id));
|
||||
registrar.add("Url.ReportAbuse", boost::bind(&LLScrollListCtrl::reportAbuse, id, is_group));
|
||||
registrar.add("Url.Execute", boost::bind(&LLScrollListCtrl::showNameDetails, id, is_group));
|
||||
registrar.add("Url.CopyLabel", boost::bind(&LLScrollListCtrl::copyNameToClipboard, id, is_group));
|
||||
registrar.add("Url.CopyUrl", boost::bind(&LLScrollListCtrl::copySLURLToClipboard, id, is_group));
|
||||
|
|
@ -1966,6 +1967,15 @@ void LLScrollListCtrl::removeFriend(std::string id)
|
|||
LLUrlAction::removeFriend(slurl);
|
||||
}
|
||||
|
||||
void LLScrollListCtrl::reportAbuse(std::string id, bool is_group)
|
||||
{
|
||||
if (!is_group)
|
||||
{
|
||||
std::string slurl = "secondlife:///app/agent/" + id + "/about";
|
||||
LLUrlAction::reportAbuse(slurl);
|
||||
}
|
||||
}
|
||||
|
||||
void LLScrollListCtrl::showNameDetails(std::string id, bool is_group)
|
||||
{
|
||||
// open the resident's details or the group details
|
||||
|
|
|
|||
|
|
@ -458,6 +458,7 @@ private:
|
|||
static void sendIM(std::string id);
|
||||
static void addFriend(std::string id);
|
||||
static void removeFriend(std::string id);
|
||||
static void reportAbuse(std::string id, bool is_group);
|
||||
static void showNameDetails(std::string id, bool is_group);
|
||||
static void copyNameToClipboard(std::string id, bool is_group);
|
||||
static void copySLURLToClipboard(std::string id, bool is_group);
|
||||
|
|
|
|||
|
|
@ -2007,6 +2007,7 @@ void LLTextBase::createUrlContextMenu(S32 x, S32 y, const std::string &in_url)
|
|||
registrar.add("Url.ShowProfile", boost::bind(&LLUrlAction::showProfile, url));
|
||||
registrar.add("Url.AddFriend", boost::bind(&LLUrlAction::addFriend, url));
|
||||
registrar.add("Url.RemoveFriend", boost::bind(&LLUrlAction::removeFriend, url));
|
||||
registrar.add("Url.ReportAbuse", boost::bind(&LLUrlAction::reportAbuse, url));
|
||||
registrar.add("Url.SendIM", boost::bind(&LLUrlAction::sendIM, url));
|
||||
registrar.add("Url.ShowOnMap", boost::bind(&LLUrlAction::showLocationOnMap, url));
|
||||
registrar.add("Url.CopyLabel", boost::bind(&LLUrlAction::copyLabelToClipboard, url));
|
||||
|
|
|
|||
|
|
@ -196,6 +196,7 @@ public:
|
|||
const LLUUID& getSourceID() const { return mSourceID; }
|
||||
|
||||
const LLTextSegmentPtr getPreviousSegment() const;
|
||||
const LLTextSegmentPtr getLastSegment() const;
|
||||
void getSelectedSegments(segment_vec_t& segments) const;
|
||||
|
||||
void setShowContextMenu(bool show) { mShowContextMenu = show; }
|
||||
|
|
|
|||
|
|
@ -222,6 +222,15 @@ void LLUrlAction::removeFriend(std::string url)
|
|||
}
|
||||
}
|
||||
|
||||
void LLUrlAction::reportAbuse(std::string url)
|
||||
{
|
||||
std::string id_str = getUserID(url);
|
||||
if (LLUUID::validate(id_str))
|
||||
{
|
||||
executeSLURL("secondlife:///app/agent/" + id_str + "/reportAbuse");
|
||||
}
|
||||
}
|
||||
|
||||
void LLUrlAction::blockObject(std::string url)
|
||||
{
|
||||
std::string object_id = getObjectId(url);
|
||||
|
|
|
|||
|
|
@ -82,6 +82,7 @@ public:
|
|||
static void sendIM(std::string url);
|
||||
static void addFriend(std::string url);
|
||||
static void removeFriend(std::string url);
|
||||
static void reportAbuse(std::string url);
|
||||
static void blockObject(std::string url);
|
||||
static void unblockObject(std::string url);
|
||||
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@
|
|||
#include "llspeakers.h" //for LLIMSpeakerMgr
|
||||
#include "lltrans.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "llfloaterreporter.h"
|
||||
#include "llfloatersidepanelcontainer.h"
|
||||
#include "llmutelist.h"
|
||||
#include "llstylemap.h"
|
||||
|
|
@ -403,6 +404,10 @@ public:
|
|||
{
|
||||
LLAvatarActions::pay(getAvatarId());
|
||||
}
|
||||
else if (level == "report_abuse")
|
||||
{
|
||||
LLFloaterReporter::showFromChat(mAvatarID, mFrom, getChild<LLTextBox>("time_box")->getValue().asString(), mText);
|
||||
}
|
||||
else if(level == "block_unblock")
|
||||
{
|
||||
LLAvatarActions::toggleMute(getAvatarId(), LLMute::flagVoiceChat);
|
||||
|
|
@ -477,6 +482,10 @@ public:
|
|||
{
|
||||
return canModerate(userdata);
|
||||
}
|
||||
else if (level == "report_abuse")
|
||||
{
|
||||
return gAgentID != mAvatarID;
|
||||
}
|
||||
else if (level == "can_ban_member")
|
||||
{
|
||||
return canBanGroupMember(getAvatarId());
|
||||
|
|
@ -628,6 +637,11 @@ public:
|
|||
mSessionID = chat.mSessionID;
|
||||
mSourceType = chat.mSourceType;
|
||||
|
||||
// To be able to report a message, we need a copy of it's text
|
||||
// and it's easier to store text directly than trying to get
|
||||
// it from a lltextsegment or chat's mEditor
|
||||
mText = chat.mText;
|
||||
|
||||
//*TODO overly defensive thing, source type should be maintained out there
|
||||
if((chat.mFromID.isNull() && chat.mFromName.empty()) || (chat.mFromName == SYSTEM_FROM && chat.mFromID.isNull()))
|
||||
{
|
||||
|
|
@ -977,6 +991,7 @@ protected:
|
|||
EChatSourceType mSourceType;
|
||||
std::string mFrom;
|
||||
LLUUID mSessionID;
|
||||
std::string mText;
|
||||
|
||||
S32 mMinUserNameWidth;
|
||||
const LLFontGL* mUserNameFont;
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@
|
|||
#include "llbutton.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "lltexturectrl.h"
|
||||
#include "lltexteditor.h"
|
||||
#include "llscrolllistctrl.h"
|
||||
#include "lldispatcher.h"
|
||||
#include "llviewerobject.h"
|
||||
|
|
@ -250,9 +251,6 @@ LLFloaterReporter::~LLFloaterReporter()
|
|||
|
||||
mPosition.setVec(0.0f, 0.0f, 0.0f);
|
||||
|
||||
std::for_each(mMCDList.begin(), mMCDList.end(), DeletePointer() );
|
||||
mMCDList.clear();
|
||||
|
||||
delete mResourceDatap;
|
||||
}
|
||||
|
||||
|
|
@ -661,6 +659,13 @@ void LLFloaterReporter::showFromAvatar(const LLUUID& avatar_id, const std::strin
|
|||
show(avatar_id, avatar_name);
|
||||
}
|
||||
|
||||
// static
|
||||
void LLFloaterReporter::showFromChat(const LLUUID& avatar_id, const std::string& avatar_name, std::string& time, std::string& description)
|
||||
{
|
||||
show(avatar_id, avatar_name);
|
||||
setDescription(time + "\n" + description);
|
||||
}
|
||||
|
||||
void LLFloaterReporter::setPickedObjectProperties(const std::string& object_name, const std::string& owner_name, const LLUUID owner_id)
|
||||
{
|
||||
getChild<LLUICtrl>("object_name")->setValue(object_name);
|
||||
|
|
@ -1029,36 +1034,12 @@ void LLFloaterReporter::onClose(bool app_quitting)
|
|||
gSavedPerAccountSettings.setBOOL("PreviousScreenshotForReport", app_quitting);
|
||||
}
|
||||
|
||||
|
||||
// void LLFloaterReporter::setDescription(const std::string& description, LLMeanCollisionData *mcd)
|
||||
// {
|
||||
// LLFloaterReporter *self = LLFloaterReg::findTypedInstance<LLFloaterReporter>("reporter");
|
||||
// if (self)
|
||||
// {
|
||||
// self->getChild<LLUICtrl>("details_edit")->setValue(description);
|
||||
|
||||
// for_each(self->mMCDList.begin(), self->mMCDList.end(), DeletePointer());
|
||||
// self->mMCDList.clear();
|
||||
// if (mcd)
|
||||
// {
|
||||
// self->mMCDList.push_back(new LLMeanCollisionData(mcd));
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// void LLFloaterReporter::addDescription(const std::string& description, LLMeanCollisionData *mcd)
|
||||
// {
|
||||
// LLFloaterReporter *self = LLFloaterReg::findTypedInstance<LLFloaterReporter>("reporter");
|
||||
// if (self)
|
||||
// {
|
||||
// LLTextEditor* text = self->getChild<LLTextEditor>("details_edit");
|
||||
// if (text)
|
||||
// {
|
||||
// text->insertText(description);
|
||||
// }
|
||||
// if (mcd)
|
||||
// {
|
||||
// self->mMCDList.push_back(new LLMeanCollisionData(mcd));
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// static
|
||||
void LLFloaterReporter::setDescription(const std::string& description)
|
||||
{
|
||||
LLFloaterReporter *self = LLFloaterReg::findTypedInstance<LLFloaterReporter>("reporter");
|
||||
if (self)
|
||||
{
|
||||
self->getChild<LLUICtrl>("details_edit")->setValue(description);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -93,6 +93,7 @@ public:
|
|||
|
||||
static void showFromObject(const LLUUID& object_id, const LLUUID& experience_id = LLUUID::null);
|
||||
static void showFromAvatar(const LLUUID& avatar_id, const std::string avatar_name);
|
||||
static void showFromChat(const LLUUID& avatar_id, const std::string& avatar_name, std::string& time, std::string& description);
|
||||
static void showFromExperience(const LLUUID& experience_id);
|
||||
|
||||
static void onClickSend (void *userdata);
|
||||
|
|
@ -101,8 +102,6 @@ public:
|
|||
void onClickSelectAbuser ();
|
||||
static void closePickTool (void *userdata);
|
||||
static void uploadDoneCallback(const LLUUID &uuid, void* user_data, S32 result, LLExtStat ext_status);
|
||||
static void addDescription(const std::string& description, LLMeanCollisionData *mcd = NULL);
|
||||
static void setDescription(const std::string& description, LLMeanCollisionData *mcd = NULL);
|
||||
|
||||
void setPickedObjectProperties(const std::string& object_name, const std::string& owner_name, const LLUUID owner_id);
|
||||
|
||||
|
|
@ -129,6 +128,8 @@ private:
|
|||
void setFromAvatarID(const LLUUID& avatar_id);
|
||||
void onAvatarNameCache(const LLUUID& avatar_id, const LLAvatarName& av_name);
|
||||
|
||||
static void setDescription(const std::string& description);
|
||||
|
||||
static void requestAbuseCategoriesCoro(std::string url, LLHandle<LLFloater> handle);
|
||||
static void finishedARPost(const LLSD &);
|
||||
|
||||
|
|
@ -144,7 +145,6 @@ private:
|
|||
BOOL mPicking;
|
||||
LLVector3 mPosition;
|
||||
BOOL mCopyrightWarningSeen;
|
||||
std::list<LLMeanCollisionData*> mMCDList;
|
||||
std::string mDefaultSummary;
|
||||
LLResourceData* mResourceDatap;
|
||||
boost::signals2::connection mAvatarNameCacheConnection;
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@
|
|||
#include "llagent.h"
|
||||
#include "llavataractions.h"
|
||||
#include "llfloaterreg.h"
|
||||
#include "llfloaterreporter.h"
|
||||
#include "llcommandhandler.h"
|
||||
#include "llnotificationsutil.h"
|
||||
#include "llpanelpicks.h"
|
||||
|
|
@ -178,6 +179,22 @@ public:
|
|||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// reportAbuse is here due to convoluted avatar handling
|
||||
// in LLScrollListCtrl and LLTextBase
|
||||
if (verb == "reportAbuse" && web == NULL)
|
||||
{
|
||||
LLAvatarName av_name;
|
||||
if (LLAvatarNameCache::get(avatar_id, &av_name))
|
||||
{
|
||||
LLFloaterReporter::showFromAvatar(avatar_id, av_name.getCompleteName());
|
||||
}
|
||||
else
|
||||
{
|
||||
LLFloaterReporter::showFromAvatar(avatar_id, "not avaliable");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -96,6 +96,13 @@
|
|||
name="Pay">
|
||||
<on_click function="AvatarIcon.Action" parameter="pay" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Report Abuse"
|
||||
layout="topleft"
|
||||
name="Report Abuse">
|
||||
<on_click function="AvatarIcon.Action" parameter="report_abuse" />
|
||||
<on_enable function="AvatarIcon.Enable" parameter="report_abuse" />
|
||||
</menu_item_call>
|
||||
<menu_item_check
|
||||
label="Block Voice"
|
||||
layout="topleft"
|
||||
|
|
|
|||
|
|
@ -29,7 +29,14 @@
|
|||
name="remove_friend">
|
||||
<menu_item_call.on_click
|
||||
function="Url.RemoveFriend" />
|
||||
</menu_item_call>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Report Abuse"
|
||||
layout="topleft"
|
||||
name="report_abuse">
|
||||
<menu_item_call.on_click
|
||||
function="Url.ReportAbuse" />
|
||||
</menu_item_call>
|
||||
<menu_item_separator
|
||||
layout="topleft" />
|
||||
<menu_item_call
|
||||
|
|
|
|||
Loading…
Reference in New Issue