diff options
| author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2022-01-24 23:36:56 +0200 | 
|---|---|---|
| committer | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2022-01-24 23:37:21 +0200 | 
| commit | e129986a49a9e1ee3ffef8a98a3dc83a310c95c9 (patch) | |
| tree | afbe856540dc172f4718f897e42a950de8a7e882 | |
| parent | b6029c4c34782b8c423ea2625712e8b8604af442 (diff) | |
SL-3007 Ability to report abuse from chat
| -rw-r--r-- | indra/llui/llscrolllistctrl.cpp | 10 | ||||
| -rw-r--r-- | indra/llui/llscrolllistctrl.h | 1 | ||||
| -rw-r--r-- | indra/llui/lltextbase.cpp | 1 | ||||
| -rw-r--r-- | indra/llui/lltexteditor.h | 1 | ||||
| -rw-r--r-- | indra/llui/llurlaction.cpp | 9 | ||||
| -rw-r--r-- | indra/llui/llurlaction.h | 1 | ||||
| -rw-r--r-- | indra/newview/llchathistory.cpp | 15 | ||||
| -rw-r--r-- | indra/newview/llfloaterreporter.cpp | 53 | ||||
| -rw-r--r-- | indra/newview/llfloaterreporter.h | 6 | ||||
| -rw-r--r-- | indra/newview/llpanelprofile.cpp | 17 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_avatar_icon.xml | 7 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_url_agent.xml | 9 | 
12 files changed, 90 insertions, 40 deletions
| diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index de644185fd..07a455cee3 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -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 diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h index 0cc481b113..69ef7c5629 100644 --- a/indra/llui/llscrolllistctrl.h +++ b/indra/llui/llscrolllistctrl.h @@ -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); diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 05788f1b6c..5d57a7e75a 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -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)); diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h index 26702b2412..1a10d2fd1e 100644 --- a/indra/llui/lltexteditor.h +++ b/indra/llui/lltexteditor.h @@ -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; } diff --git a/indra/llui/llurlaction.cpp b/indra/llui/llurlaction.cpp index 84ea770a8d..8216046174 100644 --- a/indra/llui/llurlaction.cpp +++ b/indra/llui/llurlaction.cpp @@ -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); diff --git a/indra/llui/llurlaction.h b/indra/llui/llurlaction.h index 2d2a8dfef1..c2c576254d 100644 --- a/indra/llui/llurlaction.h +++ b/indra/llui/llurlaction.h @@ -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); diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index c110e0d815..dffd523b02 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -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; diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp index b73755cf4e..5b5af06e60 100644 --- a/indra/newview/llfloaterreporter.cpp +++ b/indra/newview/llfloaterreporter.cpp @@ -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); +    } +} diff --git a/indra/newview/llfloaterreporter.h b/indra/newview/llfloaterreporter.h index c678df7155..14ba4d6c58 100644 --- a/indra/newview/llfloaterreporter.h +++ b/indra/newview/llfloaterreporter.h @@ -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; diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp index 5f13b223fb..249f639ad2 100644 --- a/indra/newview/llpanelprofile.cpp +++ b/indra/newview/llpanelprofile.cpp @@ -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;  	}  }; diff --git a/indra/newview/skins/default/xui/en/menu_avatar_icon.xml b/indra/newview/skins/default/xui/en/menu_avatar_icon.xml index 05ab4d35a0..9f394a4c74 100644 --- a/indra/newview/skins/default/xui/en/menu_avatar_icon.xml +++ b/indra/newview/skins/default/xui/en/menu_avatar_icon.xml @@ -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" diff --git a/indra/newview/skins/default/xui/en/menu_url_agent.xml b/indra/newview/skins/default/xui/en/menu_url_agent.xml index e8b6116026..5ca8be2123 100644 --- a/indra/newview/skins/default/xui/en/menu_url_agent.xml +++ b/indra/newview/skins/default/xui/en/menu_url_agent.xml @@ -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 | 
