Modernize and improve upon LLFloaterReporter to fix Issue 822: Report Abuse does not populate Region Name or screenshot correctly
Cleans up related bits in xmls/translations
This commit is contained in:
@@ -1,12 +1,11 @@
|
|||||||
/**
|
/**
|
||||||
* @file llfloaterreporter.cpp
|
* @file llfloaterreporter.cpp
|
||||||
* @brief Bug and abuse reports.
|
* @brief Abuse reports.
|
||||||
*
|
*
|
||||||
* $LicenseInfo:firstyear=2002&license=viewergpl$
|
* $LicenseInfo:firstyear=2002&license=viewergpl$
|
||||||
*
|
* Second Life Viewer Source Code
|
||||||
* Copyright (c) 2002-2009, Linden Research, Inc.
|
* Copyright (c) 2002-2009, Linden Research, Inc.
|
||||||
*
|
*
|
||||||
* Second Life Viewer Source Code
|
|
||||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||||
* to you under the terms of the GNU General Public License, version 2.0
|
* to you under the terms of the GNU General Public License, version 2.0
|
||||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||||
@@ -39,30 +38,23 @@
|
|||||||
|
|
||||||
// linden library includes
|
// linden library includes
|
||||||
#include "llassetstorage.h"
|
#include "llassetstorage.h"
|
||||||
|
#include "llavatarnamecache.h"
|
||||||
#include "llcachename.h"
|
#include "llcachename.h"
|
||||||
#include "llfontgl.h"
|
#include "llfontgl.h"
|
||||||
#include "llgl.h" // for renderer
|
|
||||||
#include "llimagej2c.h"
|
#include "llimagej2c.h"
|
||||||
#include "llinventory.h"
|
#include "llinventory.h"
|
||||||
#include "llnotificationsutil.h"
|
#include "llnotificationsutil.h"
|
||||||
#include "llstring.h"
|
#include "llstring.h"
|
||||||
#include "llsys.h"
|
#include "llsys.h"
|
||||||
#include "sgversion.h"
|
|
||||||
#include "message.h"
|
#include "message.h"
|
||||||
#include "v3math.h"
|
#include "v3math.h"
|
||||||
|
|
||||||
// viewer project includes
|
// viewer project includes
|
||||||
#include "llagent.h"
|
#include "llagent.h"
|
||||||
#include "llbutton.h"
|
#include "llbutton.h"
|
||||||
#include "llcheckboxctrl.h"
|
|
||||||
#include "llinventorypanel.h"
|
|
||||||
#include "lllineeditor.h"
|
|
||||||
#include "lltexturectrl.h"
|
#include "lltexturectrl.h"
|
||||||
#include "llscrolllistctrl.h"
|
#include "llscrolllistctrl.h"
|
||||||
#include "llimview.h"
|
|
||||||
#include "lltextbox.h"
|
|
||||||
#include "lldispatcher.h"
|
#include "lldispatcher.h"
|
||||||
#include "llviewertexteditor.h"
|
|
||||||
#include "llviewerobject.h"
|
#include "llviewerobject.h"
|
||||||
#include "llviewerregion.h"
|
#include "llviewerregion.h"
|
||||||
#include "llcombobox.h"
|
#include "llcombobox.h"
|
||||||
@@ -80,7 +72,7 @@
|
|||||||
#include "llfloateravatarpicker.h"
|
#include "llfloateravatarpicker.h"
|
||||||
#include "lldir.h"
|
#include "lldir.h"
|
||||||
#include "llselectmgr.h"
|
#include "llselectmgr.h"
|
||||||
#include "llviewerbuild.h"
|
#include "sgversion.h"
|
||||||
#include "lluictrlfactory.h"
|
#include "lluictrlfactory.h"
|
||||||
#include "llviewernetwork.h"
|
#include "llviewernetwork.h"
|
||||||
|
|
||||||
@@ -88,10 +80,6 @@
|
|||||||
|
|
||||||
#include "lltrans.h"
|
#include "lltrans.h"
|
||||||
|
|
||||||
// [RLVa:KB]
|
|
||||||
#include "rlvhandler.h"
|
|
||||||
// [/RLVa:KB]
|
|
||||||
|
|
||||||
const U32 INCLUDE_SCREENSHOT = 0x01 << 0;
|
const U32 INCLUDE_SCREENSHOT = 0x01 << 0;
|
||||||
|
|
||||||
class AIHTTPTimeoutPolicy;
|
class AIHTTPTimeoutPolicy;
|
||||||
@@ -101,125 +89,23 @@ extern AIHTTPTimeoutPolicy userReportResponder_timeout;
|
|||||||
// Globals
|
// Globals
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
// this map keeps track of current reporter instances
|
|
||||||
// there can only be one instance of each reporter type
|
|
||||||
LLMap< EReportType, LLFloaterReporter* > gReporterInstances;
|
|
||||||
|
|
||||||
// keeps track of where email is going to - global to avoid a pile
|
|
||||||
// of static/non-static access outside my control
|
|
||||||
namespace {
|
|
||||||
static BOOL gDialogVisible = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Member functions
|
// Member functions
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
LLFloaterReporter::LLFloaterReporter(
|
LLFloaterReporter::LLFloaterReporter()
|
||||||
const std::string& name,
|
: LLFloater(),
|
||||||
const LLRect& rect,
|
mReportType(COMPLAINT_REPORT),
|
||||||
const std::string& title,
|
|
||||||
EReportType report_type)
|
|
||||||
:
|
|
||||||
LLFloater(name, rect, title),
|
|
||||||
mReportType(report_type),
|
|
||||||
mObjectID(),
|
mObjectID(),
|
||||||
mScreenID(),
|
mScreenID(),
|
||||||
mAbuserID(),
|
mAbuserID(),
|
||||||
|
mOwnerName(),
|
||||||
mDeselectOnClose( FALSE ),
|
mDeselectOnClose( FALSE ),
|
||||||
mPicking( FALSE),
|
mPicking( FALSE),
|
||||||
mPosition(),
|
mPosition(),
|
||||||
mCopyrightWarningSeen( FALSE ),
|
mCopyrightWarningSeen( FALSE ),
|
||||||
mResourceDatap(new LLResourceData())
|
mResourceDatap(new LLResourceData())
|
||||||
{
|
{
|
||||||
if (report_type == BUG_REPORT)
|
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_report_abuse.xml");
|
||||||
{
|
|
||||||
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_report_bug.xml");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_report_abuse.xml");
|
|
||||||
}
|
|
||||||
|
|
||||||
childSetText("abuse_location_edit", gAgent.getSLURL() );
|
|
||||||
|
|
||||||
// [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Modified: RLVa-1.0.0a
|
|
||||||
if (rlv_handler_t::isEnabled())
|
|
||||||
{
|
|
||||||
// Can't filter these since they get sent as part of the report so just hide them instead
|
|
||||||
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC))
|
|
||||||
{
|
|
||||||
childSetVisible("abuse_location_edit", false);
|
|
||||||
childSetVisible("pos_field", false);
|
|
||||||
}
|
|
||||||
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES))
|
|
||||||
{
|
|
||||||
childSetVisible("owner_name", false);
|
|
||||||
childSetVisible("abuser_name_edit", false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// [/RLVa:KB]
|
|
||||||
|
|
||||||
LLButton* pick_btn = getChild<LLButton>("pick_btn");
|
|
||||||
if (pick_btn)
|
|
||||||
{
|
|
||||||
// XUI: Why aren't these in viewerart.ini?
|
|
||||||
pick_btn->setImages( std::string("UIImgFaceUUID"),
|
|
||||||
std::string("UIImgFaceSelectedUUID") );
|
|
||||||
childSetAction("pick_btn", onClickObjPicker, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (report_type != BUG_REPORT)
|
|
||||||
{
|
|
||||||
// abuser name is selected from a list
|
|
||||||
LLLineEditor* le = getChild<LLLineEditor>("abuser_name_edit");
|
|
||||||
le->setEnabled( FALSE );
|
|
||||||
}
|
|
||||||
|
|
||||||
childSetAction("select_abuser", onClickSelectAbuser, this);
|
|
||||||
|
|
||||||
childSetAction("send_btn", onClickSend, this);
|
|
||||||
childSetAction("cancel_btn", onClickCancel, this);
|
|
||||||
|
|
||||||
enableControls(TRUE);
|
|
||||||
|
|
||||||
// convert the position to a string
|
|
||||||
LLVector3d pos = gAgent.getPositionGlobal();
|
|
||||||
LLViewerRegion *regionp = gAgent.getRegion();
|
|
||||||
if (regionp)
|
|
||||||
{
|
|
||||||
pos -= regionp->getOriginGlobal();
|
|
||||||
}
|
|
||||||
setPosBox(pos);
|
|
||||||
|
|
||||||
gReporterInstances.addData(report_type, this);
|
|
||||||
|
|
||||||
// Take a screenshot, but don't draw this floater.
|
|
||||||
setVisible(FALSE);
|
|
||||||
takeScreenshot();
|
|
||||||
setVisible(TRUE);
|
|
||||||
|
|
||||||
// Default text to be blank
|
|
||||||
childSetText("object_name", LLStringUtil::null);
|
|
||||||
childSetText("owner_name", LLStringUtil::null);
|
|
||||||
|
|
||||||
childSetFocus("summary_edit");
|
|
||||||
|
|
||||||
mDefaultSummary = childGetText("details_edit");
|
|
||||||
|
|
||||||
gDialogVisible = TRUE;
|
|
||||||
|
|
||||||
// only request details for abuse reports (not BUG reports)
|
|
||||||
if (report_type != BUG_REPORT)
|
|
||||||
{
|
|
||||||
// send a message and ask for information about this region -
|
|
||||||
// result comes back in processRegionInfo(..)
|
|
||||||
LLMessageSystem* msg = gMessageSystem;
|
|
||||||
msg->newMessage("RequestRegionInfo");
|
|
||||||
msg->nextBlock("AgentData");
|
|
||||||
msg->addUUID("AgentID", gAgent.getID());
|
|
||||||
msg->addUUID("SessionID", gAgent.getSessionID());
|
|
||||||
gAgent.sendReliableMessage();
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
@@ -228,16 +114,77 @@ void LLFloaterReporter::processRegionInfo(LLMessageSystem* msg)
|
|||||||
U32 region_flags;
|
U32 region_flags;
|
||||||
msg->getU32("RegionInfo", "RegionFlags", region_flags);
|
msg->getU32("RegionInfo", "RegionFlags", region_flags);
|
||||||
|
|
||||||
if ( gDialogVisible )
|
if (LLFloaterReporter::instanceExists() && LLFloaterReporter::getInstance()->getVisible())
|
||||||
{
|
{
|
||||||
LLNotificationsUtil::add("HelpReportAbuseEmailLL");
|
LLNotificationsUtil::add("HelpReportAbuseEmailLL");
|
||||||
};
|
}
|
||||||
}
|
}
|
||||||
|
// virtual
|
||||||
|
BOOL LLFloaterReporter::postBuild()
|
||||||
|
{
|
||||||
|
getChild<LLUICtrl>("abuse_location_edit")->setValue(gAgent.getSLURL());
|
||||||
|
|
||||||
|
enableControls(TRUE);
|
||||||
|
|
||||||
|
// convert the position to a string
|
||||||
|
LLVector3d pos = gAgent.getPositionGlobal();
|
||||||
|
LLViewerRegion *regionp = gAgent.getRegion();
|
||||||
|
if (regionp)
|
||||||
|
{
|
||||||
|
getChild<LLUICtrl>("sim_field")->setValue(regionp->getName());
|
||||||
|
pos -= regionp->getOriginGlobal();
|
||||||
|
}
|
||||||
|
setPosBox(pos);
|
||||||
|
|
||||||
|
// Take a screenshot, but don't draw this floater.
|
||||||
|
setVisible(FALSE);
|
||||||
|
takeScreenshot();
|
||||||
|
setVisible(TRUE);
|
||||||
|
|
||||||
|
// Default text to be blank
|
||||||
|
getChild<LLUICtrl>("object_name")->setValue(LLStringUtil::null);
|
||||||
|
getChild<LLUICtrl>("owner_name")->setValue(LLStringUtil::null);
|
||||||
|
mOwnerName = LLStringUtil::null;
|
||||||
|
|
||||||
|
getChild<LLUICtrl>("summary_edit")->setFocus(TRUE);
|
||||||
|
|
||||||
|
mDefaultSummary = getChild<LLUICtrl>("details_edit")->getValue().asString();
|
||||||
|
|
||||||
|
// send a message and ask for information about this region -
|
||||||
|
// result comes back in processRegionInfo(..)
|
||||||
|
LLMessageSystem* msg = gMessageSystem;
|
||||||
|
msg->newMessage("RequestRegionInfo");
|
||||||
|
msg->nextBlock("AgentData");
|
||||||
|
msg->addUUID("AgentID", gAgent.getID());
|
||||||
|
msg->addUUID("SessionID", gAgent.getSessionID());
|
||||||
|
gAgent.sendReliableMessage();
|
||||||
|
|
||||||
|
|
||||||
|
// abuser name is selected from a list
|
||||||
|
LLUICtrl* le = getChild<LLUICtrl>("abuser_name_edit");
|
||||||
|
le->setEnabled( false );
|
||||||
|
|
||||||
|
LLButton* pick_btn = getChild<LLButton>("pick_btn");
|
||||||
|
// XUI: Why aren't these in viewerart.ini?
|
||||||
|
pick_btn->setImages(std::string("UIImgFaceUUID"),
|
||||||
|
std::string("UIImgFaceSelectedUUID") );
|
||||||
|
childSetAction("pick_btn", onClickObjPicker, this);
|
||||||
|
childSetAction("select_abuser", boost::bind(&LLFloaterReporter::onClickSelectAbuser, this));
|
||||||
|
|
||||||
|
childSetAction("send_btn", onClickSend, this);
|
||||||
|
childSetAction("cancel_btn", onClickCancel, this);
|
||||||
|
// grab the user's name
|
||||||
|
std::string reporter;
|
||||||
|
gAgent.buildFullname(reporter);
|
||||||
|
getChild<LLUICtrl>("reporter_field")->setValue(reporter);
|
||||||
|
|
||||||
|
center();
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
// virtual
|
// virtual
|
||||||
LLFloaterReporter::~LLFloaterReporter()
|
LLFloaterReporter::~LLFloaterReporter()
|
||||||
{
|
{
|
||||||
gReporterInstances.removeData(mReportType);
|
|
||||||
// child views automatically deleted
|
// child views automatically deleted
|
||||||
mObjectID = LLUUID::null;
|
mObjectID = LLUUID::null;
|
||||||
|
|
||||||
@@ -252,27 +199,26 @@ LLFloaterReporter::~LLFloaterReporter()
|
|||||||
mMCDList.clear();
|
mMCDList.clear();
|
||||||
|
|
||||||
delete mResourceDatap;
|
delete mResourceDatap;
|
||||||
gDialogVisible = FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// virtual
|
// virtual
|
||||||
void LLFloaterReporter::draw()
|
void LLFloaterReporter::draw()
|
||||||
{
|
{
|
||||||
childSetEnabled("screen_check", TRUE );
|
getChildView("screen_check")->setEnabled(TRUE );
|
||||||
|
|
||||||
LLFloater::draw();
|
LLFloater::draw();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLFloaterReporter::enableControls(BOOL enable)
|
void LLFloaterReporter::enableControls(BOOL enable)
|
||||||
{
|
{
|
||||||
childSetEnabled("category_combo", enable);
|
getChildView("category_combo")->setEnabled(enable);
|
||||||
childSetEnabled("screen_check", enable);
|
getChildView("screen_check")->setEnabled(enable);
|
||||||
childDisable("screenshot");
|
getChildView("screenshot")->setEnabled(false);
|
||||||
childSetEnabled("pick_btn", enable);
|
getChildView("pick_btn")->setEnabled(enable);
|
||||||
childSetEnabled("summary_edit", enable);
|
getChildView("summary_edit")->setEnabled(enable);
|
||||||
childSetEnabled("details_edit", enable);
|
getChildView("details_edit")->setEnabled(enable);
|
||||||
childSetEnabled("send_btn", enable);
|
getChildView("send_btn")->setEnabled(enable);
|
||||||
childSetEnabled("cancel_btn", enable);
|
getChildView("cancel_btn")->setEnabled(enable);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLFloaterReporter::getObjectInfo(const LLUUID& object_id)
|
void LLFloaterReporter::getObjectInfo(const LLUUID& object_id)
|
||||||
@@ -287,28 +233,29 @@ void LLFloaterReporter::getObjectInfo(const LLUUID& object_id)
|
|||||||
|
|
||||||
mObjectID = object_id;
|
mObjectID = object_id;
|
||||||
|
|
||||||
if (LLUUID::null != mObjectID)
|
if (mObjectID.notNull())
|
||||||
{
|
{
|
||||||
// get object info for the user's benefit
|
// get object info for the user's benefit
|
||||||
LLViewerObject* objectp = NULL;
|
if (LLViewerObject* objectp = gObjectList.findObject(mObjectID))
|
||||||
objectp = gObjectList.findObject( mObjectID );
|
|
||||||
if (objectp)
|
|
||||||
{
|
{
|
||||||
if ( objectp->isAttachment() )
|
if ( objectp->isAttachment() )
|
||||||
{
|
{
|
||||||
objectp = (LLViewerObject*)objectp->getRoot();
|
objectp = (LLViewerObject*)objectp->getRoot();
|
||||||
|
mObjectID = objectp->getID();
|
||||||
}
|
}
|
||||||
|
|
||||||
// correct the region and position information
|
// correct the region and position information
|
||||||
LLViewerRegion *regionp = objectp->getRegion();
|
LLViewerRegion *regionp = objectp->getRegion();
|
||||||
if (regionp)
|
if (regionp)
|
||||||
{
|
{
|
||||||
childSetText("sim_field", regionp->getName());
|
getChild<LLUICtrl>("sim_field")->setValue(regionp->getName());
|
||||||
// [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a)
|
// [RLVa:KB] - Checked: 2009-07-04 (RLVa-1.0.0a)
|
||||||
|
/*
|
||||||
if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) )
|
if ( (rlv_handler_t::isEnabled()) && (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) )
|
||||||
{
|
{
|
||||||
childSetText("sim_field", RlvStrings::getString(RLV_STRING_HIDDEN_REGION));
|
childSetText("sim_field", RlvStrings::getString(RLV_STRING_HIDDEN_REGION));
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
// [/RLVa:KB]
|
// [/RLVa:KB]
|
||||||
LLVector3d global_pos;
|
LLVector3d global_pos;
|
||||||
global_pos.setVec(objectp->getPositionRegion());
|
global_pos.setVec(objectp->getPositionRegion());
|
||||||
@@ -317,38 +264,14 @@ void LLFloaterReporter::getObjectInfo(const LLUUID& object_id)
|
|||||||
|
|
||||||
if (objectp->isAvatar())
|
if (objectp->isAvatar())
|
||||||
{
|
{
|
||||||
// we have the information we need
|
setFromAvatarID(mObjectID);
|
||||||
std::string object_owner;
|
|
||||||
|
|
||||||
LLNameValue* firstname = objectp->getNVPair("FirstName");
|
|
||||||
LLNameValue* lastname = objectp->getNVPair("LastName");
|
|
||||||
if (firstname && lastname)
|
|
||||||
{
|
|
||||||
object_owner.append(firstname->getString());
|
|
||||||
object_owner.append(1, ' ');
|
|
||||||
object_owner.append(lastname->getString());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
object_owner.append("Unknown");
|
|
||||||
}
|
|
||||||
childSetText("object_name", object_owner);
|
|
||||||
// [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Added: RVLa-1.0.0e
|
|
||||||
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES))
|
|
||||||
{
|
|
||||||
childSetVisible("object_name", false); // Hide the object name if the picked object represents an avataz
|
|
||||||
}
|
|
||||||
// [/RLVa:KB]
|
|
||||||
childSetText("owner_name", object_owner);
|
|
||||||
childSetText("abuser_name_edit", object_owner);
|
|
||||||
mAbuserID = object_id;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// we have to query the simulator for information
|
// we have to query the simulator for information
|
||||||
// about this object
|
// about this object
|
||||||
LLMessageSystem* msg = gMessageSystem;
|
LLMessageSystem* msg = gMessageSystem;
|
||||||
U32 request_flags = (mReportType == BUG_REPORT) ? BUG_REPORT_REQUEST : COMPLAINT_REPORT_REQUEST;
|
U32 request_flags = COMPLAINT_REPORT_REQUEST;
|
||||||
msg->newMessageFast(_PREHASH_RequestObjectPropertiesFamily);
|
msg->newMessageFast(_PREHASH_RequestObjectPropertiesFamily);
|
||||||
msg->nextBlockFast(_PREHASH_AgentData);
|
msg->nextBlockFast(_PREHASH_AgentData);
|
||||||
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
|
msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
|
||||||
@@ -363,28 +286,50 @@ void LLFloaterReporter::getObjectInfo(const LLUUID& object_id)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LLFloaterReporter::onClickSelectAbuser()
|
||||||
// static
|
|
||||||
void LLFloaterReporter::onClickSelectAbuser(void *userdata)
|
|
||||||
{
|
{
|
||||||
LLFloaterReporter *self = (LLFloaterReporter *)userdata;
|
LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show(boost::bind(&LLFloaterReporter::callbackAvatarID, this, _1, _2), FALSE, TRUE );
|
||||||
|
if (picker)
|
||||||
gFloaterView->getParentFloater(self)->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&LLFloaterReporter::callbackAvatarID, self, _1, _2), FALSE, TRUE ));
|
{
|
||||||
|
gFloaterView->getParentFloater(this)->addDependentFloater(picker);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLFloaterReporter::callbackAvatarID(const uuid_vec_t& ids, const std::vector<LLAvatarName>& names)
|
void LLFloaterReporter::callbackAvatarID(const uuid_vec_t& ids, const std::vector<LLAvatarName>& names)
|
||||||
{
|
{
|
||||||
if (ids.empty() || names.empty()) return;
|
if (ids.empty() || names.empty()) return;
|
||||||
|
|
||||||
// this should never be called in a bug report but here for safety.
|
getChild<LLUICtrl>("abuser_name_edit")->setValue(names[0].getCompleteName());
|
||||||
if ( mReportType != BUG_REPORT )
|
|
||||||
|
mAbuserID = ids[0];
|
||||||
|
|
||||||
|
refresh();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void LLFloaterReporter::setFromAvatarID(const LLUUID& avatar_id)
|
||||||
|
{
|
||||||
|
mAbuserID = mObjectID = avatar_id;
|
||||||
|
std::string avatar_link;
|
||||||
|
|
||||||
|
if (LLAvatarNameCache::getPNSName(avatar_id, avatar_link))
|
||||||
{
|
{
|
||||||
childSetText("abuser_name_edit", names[0].getCompleteName() );
|
getChild<LLUICtrl>("owner_name")->setValue(avatar_link);
|
||||||
|
getChild<LLUICtrl>("object_name")->setValue(avatar_link);
|
||||||
|
getChild<LLUICtrl>("abuser_name_edit")->setValue(avatar_link);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
mAbuserID = ids[0];
|
LLAvatarNameCache::get(avatar_id, boost::bind(&LLFloaterReporter::onAvatarNameCache, this, _1, _2));
|
||||||
|
}
|
||||||
|
|
||||||
refresh();
|
void LLFloaterReporter::onAvatarNameCache(const LLUUID& avatar_id, const LLAvatarName& av_name)
|
||||||
};
|
{
|
||||||
|
std::string avatar_link;
|
||||||
|
LLAvatarNameCache::getPNSName(av_name, avatar_link);
|
||||||
|
getChild<LLUICtrl>("owner_name")->setValue(avatar_link);
|
||||||
|
getChild<LLUICtrl>("object_name")->setValue(avatar_link);
|
||||||
|
getChild<LLUICtrl>("abuser_name_edit")->setValue(avatar_link);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -400,39 +345,34 @@ void LLFloaterReporter::onClickSend(void *userdata)
|
|||||||
|
|
||||||
if(self->validateReport())
|
if(self->validateReport())
|
||||||
{
|
{
|
||||||
// only show copyright alert for abuse reports
|
const int IP_CONTENT_REMOVAL = 66;
|
||||||
if ( self->mReportType != BUG_REPORT )
|
const int IP_PERMISSONS_EXPLOIT = 37;
|
||||||
|
LLComboBox* combo = self->getChild<LLComboBox>( "category_combo");
|
||||||
|
int category_value = combo->getSelectedValue().asInteger();
|
||||||
|
|
||||||
|
if ( ! self->mCopyrightWarningSeen )
|
||||||
{
|
{
|
||||||
const int IP_CONTENT_REMOVAL = 66;
|
std::string details_lc = self->getChild<LLUICtrl>("details_edit")->getValue().asString();
|
||||||
const int IP_PERMISSONS_EXPLOIT = 37;
|
LLStringUtil::toLower( details_lc );
|
||||||
LLComboBox* combo = self->getChild<LLComboBox>( "category_combo");
|
std::string summary_lc = self->getChild<LLUICtrl>("summary_edit")->getValue().asString();
|
||||||
int category_value = combo->getSelectedValue().asInteger();
|
LLStringUtil::toLower( summary_lc );
|
||||||
|
if ( details_lc.find( "copyright" ) != std::string::npos ||
|
||||||
if ( ! self->mCopyrightWarningSeen )
|
summary_lc.find( "copyright" ) != std::string::npos ||
|
||||||
|
category_value == IP_CONTENT_REMOVAL ||
|
||||||
|
category_value == IP_PERMISSONS_EXPLOIT)
|
||||||
{
|
{
|
||||||
|
|
||||||
std::string details_lc = self->childGetText("details_edit");
|
|
||||||
LLStringUtil::toLower( details_lc );
|
|
||||||
std::string summary_lc = self->childGetText("summary_edit");
|
|
||||||
LLStringUtil::toLower( summary_lc );
|
|
||||||
if ( details_lc.find( "copyright" ) != std::string::npos ||
|
|
||||||
summary_lc.find( "copyright" ) != std::string::npos ||
|
|
||||||
category_value == IP_CONTENT_REMOVAL ||
|
|
||||||
category_value == IP_PERMISSONS_EXPLOIT)
|
|
||||||
{
|
|
||||||
LLNotificationsUtil::add("HelpReportAbuseContainsCopyright");
|
|
||||||
self->mCopyrightWarningSeen = TRUE;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (category_value == IP_CONTENT_REMOVAL)
|
|
||||||
{
|
|
||||||
// IP_CONTENT_REMOVAL *always* shows the dialog -
|
|
||||||
// ergo you can never send that abuse report type.
|
|
||||||
LLNotificationsUtil::add("HelpReportAbuseContainsCopyright");
|
LLNotificationsUtil::add("HelpReportAbuseContainsCopyright");
|
||||||
|
self->mCopyrightWarningSeen = TRUE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (category_value == IP_CONTENT_REMOVAL)
|
||||||
|
{
|
||||||
|
// IP_CONTENT_REMOVAL *always* shows the dialog -
|
||||||
|
// ergo you can never send that abuse report type.
|
||||||
|
LLNotificationsUtil::add("HelpReportAbuseContainsCopyright");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
LLUploadDialog::modalUploadDialog(LLTrans::getString("uploading_abuse_report"));
|
LLUploadDialog::modalUploadDialog(LLTrans::getString("uploading_abuse_report"));
|
||||||
// *TODO don't upload image if checkbox isn't checked
|
// *TODO don't upload image if checkbox isn't checked
|
||||||
@@ -445,10 +385,10 @@ void LLFloaterReporter::onClickSend(void *userdata)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(self->childGetValue("screen_check"))
|
if(self->getChild<LLUICtrl>("screen_check")->getValue())
|
||||||
{
|
{
|
||||||
self->childDisable("send_btn");
|
self->getChildView("send_btn")->setEnabled(FALSE);
|
||||||
self->childDisable("cancel_btn");
|
self->getChildView("cancel_btn")->setEnabled(FALSE);
|
||||||
// the callback from uploading the image calls sendReportViaLegacy()
|
// the callback from uploading the image calls sendReportViaLegacy()
|
||||||
self->uploadImage();
|
self->uploadImage();
|
||||||
}
|
}
|
||||||
@@ -486,8 +426,9 @@ void LLFloaterReporter::onClickObjPicker(void *userdata)
|
|||||||
LLToolObjPicker::getInstance()->setExitCallback(LLFloaterReporter::closePickTool, self);
|
LLToolObjPicker::getInstance()->setExitCallback(LLFloaterReporter::closePickTool, self);
|
||||||
LLToolMgr::getInstance()->setTransientTool(LLToolObjPicker::getInstance());
|
LLToolMgr::getInstance()->setTransientTool(LLToolObjPicker::getInstance());
|
||||||
self->mPicking = TRUE;
|
self->mPicking = TRUE;
|
||||||
self->childSetText("object_name", LLStringUtil::null);
|
self->getChild<LLUICtrl>("object_name")->setValue(LLStringUtil::null);
|
||||||
self->childSetText("owner_name", LLStringUtil::null);
|
self->getChild<LLUICtrl>("owner_name")->setValue(LLStringUtil::null);
|
||||||
|
self->mOwnerName = LLStringUtil::null;
|
||||||
LLButton* pick_btn = self->getChild<LLButton>("pick_btn");
|
LLButton* pick_btn = self->getChild<LLButton>("pick_btn");
|
||||||
if (pick_btn) pick_btn->setToggleState(TRUE);
|
if (pick_btn) pick_btn->setToggleState(TRUE);
|
||||||
}
|
}
|
||||||
@@ -511,62 +452,34 @@ void LLFloaterReporter::closePickTool(void *userdata)
|
|||||||
// static
|
// static
|
||||||
void LLFloaterReporter::showFromMenu(EReportType report_type)
|
void LLFloaterReporter::showFromMenu(EReportType report_type)
|
||||||
{
|
{
|
||||||
if (gReporterInstances.checkData(report_type))
|
if (COMPLAINT_REPORT != report_type)
|
||||||
{
|
{
|
||||||
// ...bring that window to front
|
llwarns << "Unknown LLViewerReporter type : " << report_type << llendl;
|
||||||
LLFloaterReporter *f = gReporterInstances.getData(report_type);
|
return;
|
||||||
f->open(); /* Flawfinder: ignore */
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
LLFloaterReporter* f = getInstance();
|
||||||
|
if (f)
|
||||||
{
|
{
|
||||||
LLFloaterReporter *f;
|
f->setReportType(report_type);
|
||||||
if (BUG_REPORT == report_type)
|
|
||||||
{
|
|
||||||
f = LLFloaterReporter::createNewBugReporter();
|
|
||||||
}
|
|
||||||
else if (COMPLAINT_REPORT == report_type)
|
|
||||||
{
|
|
||||||
f = LLFloaterReporter::createNewAbuseReporter();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
llwarns << "Unknown LLViewerReporter type : " << report_type << llendl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
f->center();
|
|
||||||
|
|
||||||
if (report_type == BUG_REPORT)
|
|
||||||
{
|
|
||||||
LLNotificationsUtil::add("HelpReportBug");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// popup for abuse reports is triggered elsewhere
|
|
||||||
}
|
|
||||||
|
|
||||||
// grab the user's name
|
|
||||||
std::string fullname;
|
|
||||||
gAgent.buildFullname(fullname);
|
|
||||||
f->childSetText("reporter_field", fullname);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// static
|
// static
|
||||||
void LLFloaterReporter::showFromObject(const LLUUID& object_id)
|
void LLFloaterReporter::show(const LLUUID& object_id, const std::string& avatar_name)
|
||||||
{
|
{
|
||||||
LLFloaterReporter* f = createNewAbuseReporter();
|
LLFloaterReporter* f = getInstance();
|
||||||
f->center();
|
|
||||||
f->setFocus(TRUE);
|
|
||||||
|
|
||||||
// grab the user's name
|
if (avatar_name.empty())
|
||||||
std::string fullname;
|
{
|
||||||
gAgent.buildFullname(fullname);
|
// Request info for this object
|
||||||
f->childSetText("reporter_field", fullname);
|
f->getObjectInfo(object_id);
|
||||||
|
}
|
||||||
// Request info for this object
|
else
|
||||||
f->getObjectInfo(object_id);
|
{
|
||||||
|
f->setFromAvatarID(object_id);
|
||||||
|
}
|
||||||
|
|
||||||
// Need to deselect on close
|
// Need to deselect on close
|
||||||
f->mDeselectOnClose = TRUE;
|
f->mDeselectOnClose = TRUE;
|
||||||
@@ -576,55 +489,33 @@ void LLFloaterReporter::showFromObject(const LLUUID& object_id)
|
|||||||
|
|
||||||
|
|
||||||
// static
|
// static
|
||||||
LLFloaterReporter* LLFloaterReporter::getReporter(EReportType report_type)
|
void LLFloaterReporter::showFromObject(const LLUUID& object_id)
|
||||||
{
|
{
|
||||||
LLFloaterReporter *self = NULL;
|
show(object_id);
|
||||||
if (gReporterInstances.checkData(report_type))
|
|
||||||
{
|
|
||||||
// ...bring that window to front
|
|
||||||
self = gReporterInstances.getData(report_type);
|
|
||||||
}
|
|
||||||
return self;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LLFloaterReporter* LLFloaterReporter::createNewAbuseReporter()
|
// static
|
||||||
|
void LLFloaterReporter::showFromAvatar(const LLUUID& avatar_id, const std::string avatar_name)
|
||||||
{
|
{
|
||||||
return new LLFloaterReporter("complaint_reporter",
|
show(avatar_id, avatar_name);
|
||||||
LLRect(),
|
|
||||||
"Report Abuse",
|
|
||||||
COMPLAINT_REPORT);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//static
|
|
||||||
LLFloaterReporter* LLFloaterReporter::createNewBugReporter()
|
|
||||||
{
|
|
||||||
return new LLFloaterReporter("bug_reporter",
|
|
||||||
LLRect(),
|
|
||||||
"Report Bug",
|
|
||||||
BUG_REPORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void LLFloaterReporter::setPickedObjectProperties(const std::string& object_name, const std::string& owner_name, const LLUUID owner_id)
|
void LLFloaterReporter::setPickedObjectProperties(const std::string& object_name, const std::string& owner_name, const LLUUID owner_id)
|
||||||
{
|
{
|
||||||
childSetText("object_name", object_name);
|
getChild<LLUICtrl>("object_name")->setValue(object_name);
|
||||||
// [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Added: RVLa-1.0.0e
|
|
||||||
if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES))
|
|
||||||
{
|
getChild<LLUICtrl>("owner_name")->setValue(owner_name);
|
||||||
childSetVisible("object_name", true); // Show the object name if the picked object is actually an object
|
getChild<LLUICtrl>("abuser_name_edit")->setValue(owner_name);
|
||||||
}
|
|
||||||
// [/RLVa:KB]
|
|
||||||
childSetText("owner_name", owner_name);
|
|
||||||
childSetText("abuser_name_edit", owner_name);
|
|
||||||
mAbuserID = owner_id;
|
mAbuserID = owner_id;
|
||||||
|
mOwnerName = owner_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool LLFloaterReporter::validateReport()
|
bool LLFloaterReporter::validateReport()
|
||||||
{
|
{
|
||||||
// Ensure user selected a category from the list
|
// Ensure user selected a category from the list
|
||||||
LLSD category_sd = childGetValue("category_combo");
|
LLSD category_sd = getChild<LLUICtrl>("category_combo")->getValue();
|
||||||
U8 category = (U8)category_sd.asInteger();
|
U8 category = (U8)category_sd.asInteger();
|
||||||
if(category >= 100) //This is here for reasons (like shenanigans)
|
if(category >= 100) //This is here for reasons (like shenanigans)
|
||||||
{
|
{
|
||||||
@@ -633,55 +524,39 @@ bool LLFloaterReporter::validateReport()
|
|||||||
}
|
}
|
||||||
if (category == 0)
|
if (category == 0)
|
||||||
{
|
{
|
||||||
if ( mReportType != BUG_REPORT )
|
LLNotificationsUtil::add("HelpReportAbuseSelectCategory");
|
||||||
{
|
|
||||||
LLNotificationsUtil::add("HelpReportAbuseSelectCategory");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LLNotificationsUtil::add("HelpReportAbuseAbuserNameEmpty");
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( mReportType != BUG_REPORT )
|
|
||||||
{
|
|
||||||
if ( childGetText("abuser_name_edit").empty() )
|
|
||||||
{
|
|
||||||
LLNotificationsUtil::add("HelpReportAbuseAbuserLocationEmpty");
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
|
|
||||||
if ( childGetText("abuse_location_edit").empty() )
|
if ( getChild<LLUICtrl>("abuser_name_edit")->getValue().asString().empty() )
|
||||||
{
|
|
||||||
LLNotificationsUtil::add("HelpReportAbuseAbuserLocationEmpty");
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
if ( childGetText("summary_edit").empty() )
|
|
||||||
{
|
{
|
||||||
if ( mReportType != BUG_REPORT )
|
LLNotificationsUtil::add("HelpReportAbuseAbuserNameEmpty");
|
||||||
{
|
return false;
|
||||||
LLNotificationsUtil::add("HelpReportAbuseSummaryEmpty");
|
}
|
||||||
}
|
|
||||||
else
|
if ( getChild<LLUICtrl>("abuse_location_edit")->getValue().asString().empty() )
|
||||||
{
|
{
|
||||||
LLNotificationsUtil::add("HelpReportBugSummaryEmpty");
|
LLNotificationsUtil::add("HelpReportAbuseAbuserLocationEmpty");
|
||||||
}
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( getChild<LLUICtrl>("abuse_location_edit")->getValue().asString().empty() )
|
||||||
|
{
|
||||||
|
LLNotificationsUtil::add("HelpReportAbuseAbuserLocationEmpty");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ( getChild<LLUICtrl>("summary_edit")->getValue().asString().empty() )
|
||||||
|
{
|
||||||
|
LLNotificationsUtil::add("HelpReportAbuseSummaryEmpty");
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
if ( childGetText("details_edit") == mDefaultSummary )
|
if ( getChild<LLUICtrl>("details_edit")->getValue().asString() == mDefaultSummary )
|
||||||
{
|
{
|
||||||
if ( mReportType != BUG_REPORT )
|
|
||||||
{
|
|
||||||
LLNotificationsUtil::add("HelpReportAbuseDetailsEmpty");
|
LLNotificationsUtil::add("HelpReportAbuseDetailsEmpty");
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LLNotificationsUtil::add("HelpReportBugDetailsEmpty");
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
return true;
|
return true;
|
||||||
@@ -710,65 +585,45 @@ LLSD LLFloaterReporter::gatherReport()
|
|||||||
|
|
||||||
#if LL_WINDOWS
|
#if LL_WINDOWS
|
||||||
const char* platform = "Win";
|
const char* platform = "Win";
|
||||||
const char* short_platform = "O:W";
|
|
||||||
#elif LL_DARWIN
|
#elif LL_DARWIN
|
||||||
const char* platform = "Mac";
|
const char* platform = "Mac";
|
||||||
const char* short_platform = "O:M";
|
|
||||||
#elif LL_LINUX
|
#elif LL_LINUX
|
||||||
const char* platform = "Lnx";
|
const char* platform = "Lnx";
|
||||||
const char* short_platform = "O:L";
|
|
||||||
#elif LL_SOLARIS
|
#elif LL_SOLARIS
|
||||||
const char* platform = "Sol";
|
const char* platform = "Sol";
|
||||||
const char* short_platform = "O:S";
|
|
||||||
#else
|
#else
|
||||||
const char* platform = "???";
|
const char* platform = "???";
|
||||||
const char* short_platform = "O:?";
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
if ( mReportType == BUG_REPORT)
|
|
||||||
{
|
summary << ""
|
||||||
summary << short_platform << " V" << gVersionMajor << "."
|
<< " |" << regionp->getName() << "|" // region reporter is currently in.
|
||||||
<< gVersionMinor << "."
|
<< " (" << getChild<LLUICtrl>("abuse_location_edit")->getValue().asString() << ")" // region abuse occured in (freeform text - no LLRegionPicker tool)
|
||||||
<< gVersionPatch << "."
|
<< " [" << category_name << "] " // updated category
|
||||||
<< gVersionBuild
|
<< " {" << getChild<LLUICtrl>("abuser_name_edit")->getValue().asString() << "} " // name of abuse entered in report (chosen using LLAvatarPicker)
|
||||||
<< " (" << regionp->getName() << ")"
|
<< " \"" << getChild<LLUICtrl>("summary_edit")->getValue().asString() << "\""; // summary as entered
|
||||||
<< "[" << category_name << "] "
|
|
||||||
<< "\"" << childGetValue("summary_edit").asString() << "\"";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
summary << ""
|
|
||||||
<< " |" << regionp->getName() << "|" // region reporter is currently in.
|
|
||||||
<< " (" << childGetText("abuse_location_edit") << ")" // region abuse occured in (freeform text - no LLRegionPicker tool)
|
|
||||||
<< " [" << category_name << "] " // updated category
|
|
||||||
<< " {" << childGetText("abuser_name_edit") << "} " // name of abuse entered in report (chosen using LLAvatarPicker)
|
|
||||||
<< " \"" << childGetValue("summary_edit").asString() << "\""; // summary as entered
|
|
||||||
};
|
|
||||||
|
|
||||||
std::ostringstream details;
|
std::ostringstream details;
|
||||||
if (mReportType != BUG_REPORT)
|
|
||||||
{
|
details << "V" << gVersionMajor << "." // client version moved to body of email for abuse reports
|
||||||
details << "V" << gVersionMajor << "." // client version moved to body of email for abuse reports
|
<< gVersionMinor << "."
|
||||||
<< gVersionMinor << "."
|
<< gVersionPatch << "."
|
||||||
<< gVersionPatch << "."
|
<< gVersionBuild << std::endl << std::endl;
|
||||||
<< gVersionBuild << std::endl << std::endl;
|
|
||||||
}
|
std::string object_name = getChild<LLUICtrl>("object_name")->getValue().asString();
|
||||||
std::string object_name = childGetText("object_name");
|
if (!object_name.empty() && !mOwnerName.empty())
|
||||||
std::string owner_name = childGetText("owner_name");
|
|
||||||
if (!object_name.empty() && !owner_name.empty())
|
|
||||||
{
|
{
|
||||||
details << "Object: " << object_name << "\n";
|
details << "Object: " << object_name << "\n";
|
||||||
details << "Owner: " << owner_name << "\n";
|
details << "Owner: " << mOwnerName << "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( mReportType != BUG_REPORT )
|
|
||||||
{
|
|
||||||
details << "Abuser name: " << childGetText("abuser_name_edit") << " \n";
|
|
||||||
details << "Abuser location: " << childGetText("abuse_location_edit") << " \n";
|
|
||||||
};
|
|
||||||
|
|
||||||
details << childGetValue("details_edit").asString();
|
details << "Abuser name: " << getChild<LLUICtrl>("abuser_name_edit")->getValue().asString() << " \n";
|
||||||
|
details << "Abuser location: " << getChild<LLUICtrl>("abuse_location_edit")->getValue().asString() << " \n";
|
||||||
|
|
||||||
|
details << getChild<LLUICtrl>("details_edit")->getValue().asString();
|
||||||
|
|
||||||
std::string version_string;
|
std::string version_string;
|
||||||
version_string = llformat(
|
version_string = llformat(
|
||||||
@@ -784,14 +639,14 @@ LLSD LLFloaterReporter::gatherReport()
|
|||||||
// only send a screenshot ID if we're asked to and the email is
|
// only send a screenshot ID if we're asked to and the email is
|
||||||
// going to LL - Estate Owners cannot see the screenshot asset
|
// going to LL - Estate Owners cannot see the screenshot asset
|
||||||
LLUUID screenshot_id = LLUUID::null;
|
LLUUID screenshot_id = LLUUID::null;
|
||||||
if (childGetValue("screen_check"))
|
if (getChild<LLUICtrl>("screen_check")->getValue())
|
||||||
{
|
{
|
||||||
screenshot_id = childGetValue("screenshot");
|
screenshot_id = getChild<LLUICtrl>("screenshot")->getValue();
|
||||||
};
|
}
|
||||||
|
|
||||||
LLSD report = LLSD::emptyMap();
|
LLSD report = LLSD::emptyMap();
|
||||||
report["report-type"] = (U8) mReportType;
|
report["report-type"] = (U8) mReportType;
|
||||||
report["category"] = childGetValue("category_combo");
|
report["category"] = getChild<LLUICtrl>("category_combo")->getValue();
|
||||||
report["position"] = mPosition.getValue();
|
report["position"] = mPosition.getValue();
|
||||||
report["check-flags"] = (U8)0; // this is not used
|
report["check-flags"] = (U8)0; // this is not used
|
||||||
report["screenshot-id"] = screenshot_id;
|
report["screenshot-id"] = screenshot_id;
|
||||||
@@ -877,7 +732,7 @@ public:
|
|||||||
|
|
||||||
void LLFloaterReporter::sendReportViaCaps(std::string url, std::string sshot_url, const LLSD& report)
|
void LLFloaterReporter::sendReportViaCaps(std::string url, std::string sshot_url, const LLSD& report)
|
||||||
{
|
{
|
||||||
if(childGetValue("screen_check").asBoolean() && !sshot_url.empty())
|
if(getChild<LLUICtrl>("screen_check")->getValue().asBoolean() && !sshot_url.empty())
|
||||||
{
|
{
|
||||||
// try to upload screenshot
|
// try to upload screenshot
|
||||||
LLHTTPClient::post(sshot_url, report, new LLUserReportScreenshotResponder(report,
|
LLHTTPClient::post(sshot_url, report, new LLUserReportScreenshotResponder(report,
|
||||||
@@ -893,11 +748,11 @@ void LLFloaterReporter::sendReportViaCaps(std::string url, std::string sshot_url
|
|||||||
|
|
||||||
void LLFloaterReporter::takeScreenshot()
|
void LLFloaterReporter::takeScreenshot()
|
||||||
{
|
{
|
||||||
const S32 IMAGE_WIDTH = 1024;
|
// Warning: This crops left and right in case of wide-screen monitor:
|
||||||
const S32 IMAGE_HEIGHT = 768;
|
const S32 IMAGE_WIDTH = 1024; //gViewerWindow->getWindowWidthRaw();
|
||||||
|
const S32 IMAGE_HEIGHT = 768; //gViewerWindow->getWindowHeightRaw();
|
||||||
|
|
||||||
LLPointer<LLImageRaw> raw = new LLImageRaw;
|
LLPointer<LLImageRaw> raw = new LLImageRaw;
|
||||||
// Warning: This crops left and right in case of wide-screen monitor:
|
|
||||||
if( !gViewerWindow->rawSnapshot(raw, IMAGE_WIDTH, IMAGE_HEIGHT, (F32)IMAGE_WIDTH / IMAGE_HEIGHT, TRUE, FALSE))
|
if( !gViewerWindow->rawSnapshot(raw, IMAGE_WIDTH, IMAGE_HEIGHT, (F32)IMAGE_WIDTH / IMAGE_HEIGHT, TRUE, FALSE))
|
||||||
{
|
{
|
||||||
llwarns << "Unable to take screenshot" << llendl;
|
llwarns << "Unable to take screenshot" << llendl;
|
||||||
@@ -911,15 +766,11 @@ void LLFloaterReporter::takeScreenshot()
|
|||||||
mResourceDatap->mExpectedUploadCost = 0; // we expect that abuse screenshots are free
|
mResourceDatap->mExpectedUploadCost = 0; // we expect that abuse screenshots are free
|
||||||
mResourceDatap->mAssetInfo.mTransactionID.generate();
|
mResourceDatap->mAssetInfo.mTransactionID.generate();
|
||||||
mResourceDatap->mAssetInfo.mUuid = mResourceDatap->mAssetInfo.mTransactionID.makeAssetID(gAgent.getSecureSessionID());
|
mResourceDatap->mAssetInfo.mUuid = mResourceDatap->mAssetInfo.mTransactionID.makeAssetID(gAgent.getSecureSessionID());
|
||||||
if (BUG_REPORT == mReportType)
|
|
||||||
|
if (COMPLAINT_REPORT == mReportType)
|
||||||
{
|
{
|
||||||
mResourceDatap->mAssetInfo.mType = LLAssetType::AT_TEXTURE;
|
mResourceDatap->mAssetInfo.mType = LLAssetType::AT_TEXTURE;
|
||||||
mResourceDatap->mPreferredLocation = LLFolderType::EType(-1);
|
mResourceDatap->mPreferredLocation = LLFolderType::EType(LLResourceData::INVALID_LOCATION);
|
||||||
}
|
|
||||||
else if (COMPLAINT_REPORT == mReportType)
|
|
||||||
{
|
|
||||||
mResourceDatap->mAssetInfo.mType = LLAssetType::AT_TEXTURE;
|
|
||||||
mResourceDatap->mPreferredLocation = LLFolderType::EType(-2);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -987,11 +838,7 @@ void LLFloaterReporter::uploadDoneCallback(const LLUUID &uuid, void *user_data,
|
|||||||
}
|
}
|
||||||
|
|
||||||
EReportType report_type = UNKNOWN_REPORT;
|
EReportType report_type = UNKNOWN_REPORT;
|
||||||
if (data->mPreferredLocation == -1)
|
if (data->mPreferredLocation == LLResourceData::INVALID_LOCATION)
|
||||||
{
|
|
||||||
report_type = BUG_REPORT;
|
|
||||||
}
|
|
||||||
else if (data->mPreferredLocation == -2)
|
|
||||||
{
|
{
|
||||||
report_type = COMPLAINT_REPORT;
|
report_type = COMPLAINT_REPORT;
|
||||||
}
|
}
|
||||||
@@ -1000,7 +847,7 @@ void LLFloaterReporter::uploadDoneCallback(const LLUUID &uuid, void *user_data,
|
|||||||
llwarns << "Unknown report type : " << data->mPreferredLocation << llendl;
|
llwarns << "Unknown report type : " << data->mPreferredLocation << llendl;
|
||||||
}
|
}
|
||||||
|
|
||||||
LLFloaterReporter *self = getReporter(report_type);
|
LLFloaterReporter *self = getInstance();
|
||||||
if (self)
|
if (self)
|
||||||
{
|
{
|
||||||
self->mScreenID = uuid;
|
self->mScreenID = uuid;
|
||||||
@@ -1018,38 +865,38 @@ void LLFloaterReporter::setPosBox(const LLVector3d &pos)
|
|||||||
mPosition.mV[VX],
|
mPosition.mV[VX],
|
||||||
mPosition.mV[VY],
|
mPosition.mV[VY],
|
||||||
mPosition.mV[VZ]);
|
mPosition.mV[VZ]);
|
||||||
childSetText("pos_field", pos_string);
|
getChild<LLUICtrl>("pos_field")->setValue(pos_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLFloaterReporter::setDescription(const std::string& description, LLMeanCollisionData *mcd)
|
//void LLFloaterReporter::setDescription(const std::string& description, LLMeanCollisionData *mcd)
|
||||||
{
|
//{
|
||||||
LLFloaterReporter *self = gReporterInstances[COMPLAINT_REPORT];
|
// LLFloaterReporter *self = getInstance();
|
||||||
if (self)
|
// if (self)
|
||||||
{
|
// {
|
||||||
self->childSetText("details_edit", description);
|
// self->getChild<LLUICtrl>("details_edit")->setValue(description);
|
||||||
|
|
||||||
for_each(self->mMCDList.begin(), self->mMCDList.end(), DeletePointer());
|
// for_each(self->mMCDList.begin(), self->mMCDList.end(), DeletePointer());
|
||||||
self->mMCDList.clear();
|
// self->mMCDList.clear();
|
||||||
if (mcd)
|
// if (mcd)
|
||||||
{
|
// {
|
||||||
self->mMCDList.push_back(new LLMeanCollisionData(mcd));
|
// self->mMCDList.push_back(new LLMeanCollisionData(mcd));
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
|
||||||
void LLFloaterReporter::addDescription(const std::string& description, LLMeanCollisionData *mcd)
|
//void LLFloaterReporter::addDescription(const std::string& description, LLMeanCollisionData *mcd)
|
||||||
{
|
//{
|
||||||
LLFloaterReporter *self = gReporterInstances[COMPLAINT_REPORT];
|
// LLFloaterReporter *self = getInstance();
|
||||||
if (self)
|
// if (self)
|
||||||
{
|
// {
|
||||||
LLTextEditor* text = self->getChild<LLTextEditor>("details_edit");
|
// LLTextEditor* text = self->getChild<LLTextEditor>("details_edit");
|
||||||
if (text)
|
// if (text)
|
||||||
{
|
// {
|
||||||
text->insertText(description);
|
// text->insertText(description);
|
||||||
}
|
// }
|
||||||
if (mcd)
|
// if (mcd)
|
||||||
{
|
// {
|
||||||
self->mMCDList.push_back(new LLMeanCollisionData(mcd));
|
// self->mMCDList.push_back(new LLMeanCollisionData(mcd));
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
/**
|
/**
|
||||||
* @file llfloaterreporter.h
|
* @file llfloaterreporter.h
|
||||||
* @author Andrew Meadows
|
* @author Andrew Meadows
|
||||||
* @brief Bug and abuse reports.
|
* @brief Abuse reports.
|
||||||
*
|
*
|
||||||
* $LicenseInfo:firstyear=2006&license=viewergpl$
|
* $LicenseInfo:firstyear=2006&license=viewergpl$
|
||||||
*
|
* Second Life Viewer Source Code
|
||||||
* Copyright (c) 2006-2009, Linden Research, Inc.
|
* Copyright (c) 2006-2009, Linden Research, Inc.
|
||||||
*
|
*
|
||||||
* Second Life Viewer Source Code
|
|
||||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||||
* to you under the terms of the GNU General Public License, version 2.0
|
* to you under the terms of the GNU General Public License, version 2.0
|
||||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||||
@@ -49,7 +48,7 @@ class LLMeanCollisionData;
|
|||||||
struct LLResourceData;
|
struct LLResourceData;
|
||||||
|
|
||||||
// these flags are used to label info requests to the server
|
// these flags are used to label info requests to the server
|
||||||
const U32 BUG_REPORT_REQUEST = 0x01 << 0;
|
//const U32 BUG_REPORT_REQUEST = 0x01 << 0; // DEPRECATED
|
||||||
const U32 COMPLAINT_REPORT_REQUEST = 0x01 << 1;
|
const U32 COMPLAINT_REPORT_REQUEST = 0x01 << 1;
|
||||||
const U32 OBJECT_PAY_REQUEST = 0x01 << 2;
|
const U32 OBJECT_PAY_REQUEST = 0x01 << 2;
|
||||||
|
|
||||||
@@ -74,48 +73,45 @@ enum EReportType
|
|||||||
{
|
{
|
||||||
NULL_REPORT = 0, // don't use this value anywhere
|
NULL_REPORT = 0, // don't use this value anywhere
|
||||||
UNKNOWN_REPORT = 1,
|
UNKNOWN_REPORT = 1,
|
||||||
BUG_REPORT = 2,
|
//BUG_REPORT = 2, // DEPRECATED
|
||||||
COMPLAINT_REPORT = 3,
|
COMPLAINT_REPORT = 3,
|
||||||
CS_REQUEST_REPORT = 4
|
CS_REQUEST_REPORT = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
class LLFloaterReporter
|
class LLFloaterReporter
|
||||||
: public LLFloater
|
: public LLFloater, public LLSingleton<LLFloaterReporter>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LLFloaterReporter(const std::string& name,
|
LLFloaterReporter();
|
||||||
const LLRect &rect,
|
|
||||||
const std::string& title,
|
|
||||||
EReportType = UNKNOWN_REPORT);
|
|
||||||
/*virtual*/ ~LLFloaterReporter();
|
/*virtual*/ ~LLFloaterReporter();
|
||||||
|
/*virtual*/ BOOL postBuild();
|
||||||
virtual void draw();
|
virtual void draw();
|
||||||
|
|
||||||
|
void setReportType(EReportType type) { mReportType = type; }
|
||||||
|
|
||||||
// Enables all buttons
|
// Enables all buttons
|
||||||
static void showFromMenu(EReportType report_type);
|
static void showFromMenu(EReportType report_type);
|
||||||
|
|
||||||
static void showFromObject(const LLUUID& object_id);
|
static void showFromObject(const LLUUID& object_id);
|
||||||
|
static void showFromAvatar(const LLUUID& avatar_id, const std::string avatar_name);
|
||||||
|
|
||||||
static void onClickSend (void *userdata);
|
static void onClickSend (void *userdata);
|
||||||
static void onClickCancel (void *userdata);
|
static void onClickCancel (void *userdata);
|
||||||
static void onClickObjPicker (void *userdata);
|
static void onClickObjPicker (void *userdata);
|
||||||
static void onClickSelectAbuser (void *userdata);
|
void onClickSelectAbuser ();
|
||||||
static void closePickTool (void *userdata);
|
static void closePickTool (void *userdata);
|
||||||
static void uploadDoneCallback(const LLUUID &uuid, void* user_data, S32 result, LLExtStat ext_status);
|
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 addDescription(const std::string& description, LLMeanCollisionData *mcd = NULL);
|
||||||
static void setDescription(const std::string& description, LLMeanCollisionData *mcd = NULL);
|
static void setDescription(const std::string& description, LLMeanCollisionData *mcd = NULL);
|
||||||
|
|
||||||
// returns a pointer to reporter of report_type
|
|
||||||
static LLFloaterReporter* getReporter(EReportType report_type);
|
|
||||||
static LLFloaterReporter* createNewAbuseReporter();
|
|
||||||
static LLFloaterReporter* createNewBugReporter();
|
|
||||||
|
|
||||||
// static
|
// static
|
||||||
static void processRegionInfo(LLMessageSystem* msg);
|
static void processRegionInfo(LLMessageSystem* msg);
|
||||||
|
|
||||||
void setPickedObjectProperties(const std::string& object_name, const std::string& owner_name, const LLUUID owner_id);
|
void setPickedObjectProperties(const std::string& object_name, const std::string& owner_name, const LLUUID owner_id);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
static void show(const LLUUID& object_id, const std::string& avatar_name = LLStringUtil::null);
|
||||||
|
|
||||||
void takeScreenshot();
|
void takeScreenshot();
|
||||||
void sendReportViaCaps(std::string url);
|
void sendReportViaCaps(std::string url);
|
||||||
void uploadImage();
|
void uploadImage();
|
||||||
@@ -128,12 +124,16 @@ private:
|
|||||||
void enableControls(BOOL own_avatar);
|
void enableControls(BOOL own_avatar);
|
||||||
void getObjectInfo(const LLUUID& object_id);
|
void getObjectInfo(const LLUUID& object_id);
|
||||||
void callbackAvatarID(const uuid_vec_t& ids, const std::vector<LLAvatarName>& names);
|
void callbackAvatarID(const uuid_vec_t& ids, const std::vector<LLAvatarName>& names);
|
||||||
|
void setFromAvatarID(const LLUUID& avatar_id);
|
||||||
|
void onAvatarNameCache(const LLUUID& avatar_id, const LLAvatarName& av_name);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
EReportType mReportType;
|
EReportType mReportType;
|
||||||
LLUUID mObjectID;
|
LLUUID mObjectID;
|
||||||
LLUUID mScreenID;
|
LLUUID mScreenID;
|
||||||
LLUUID mAbuserID;
|
LLUUID mAbuserID;
|
||||||
|
// Store the real name, not the link, for upstream reporting
|
||||||
|
std::string mOwnerName;
|
||||||
BOOL mDeselectOnClose;
|
BOOL mDeselectOnClose;
|
||||||
BOOL mPicking;
|
BOOL mPicking;
|
||||||
LLVector3 mPosition;
|
LLVector3 mPosition;
|
||||||
|
|||||||
@@ -5144,10 +5144,9 @@ void LLSelectMgr::processObjectPropertiesFamily(LLMessageSystem* msg, void** use
|
|||||||
msg->getStringFast(_PREHASH_ObjectData, _PREHASH_Description, desc);
|
msg->getStringFast(_PREHASH_ObjectData, _PREHASH_Description, desc);
|
||||||
|
|
||||||
// the reporter widget askes the server for info about picked objects
|
// the reporter widget askes the server for info about picked objects
|
||||||
if (request_flags & (COMPLAINT_REPORT_REQUEST | BUG_REPORT_REQUEST))
|
if (request_flags & COMPLAINT_REPORT_REQUEST)
|
||||||
{
|
{
|
||||||
EReportType report_type = (COMPLAINT_REPORT_REQUEST & request_flags) ? COMPLAINT_REPORT : BUG_REPORT;
|
LLFloaterReporter *reporterp = LLFloaterReporter::getInstance();
|
||||||
LLFloaterReporter *reporterp = LLFloaterReporter::getReporter(report_type);
|
|
||||||
if (reporterp)
|
if (reporterp)
|
||||||
{
|
{
|
||||||
std::string fullname;
|
std::string fullname;
|
||||||
|
|||||||
@@ -6501,12 +6501,6 @@ class LLShowFloater : public view_listener_t
|
|||||||
{
|
{
|
||||||
LLFloaterLagMeter::showInstance();
|
LLFloaterLagMeter::showInstance();
|
||||||
}
|
}
|
||||||
else if (floater_name == "bug reporter")
|
|
||||||
{
|
|
||||||
// Prevent menu from appearing in screen shot.
|
|
||||||
gMenuHolder->hideMenus();
|
|
||||||
LLFloaterReporter::showFromMenu(BUG_REPORT);
|
|
||||||
}
|
|
||||||
else if (floater_name == "buy currency")
|
else if (floater_name == "buy currency")
|
||||||
{
|
{
|
||||||
LLFloaterBuyCurrency::buyCurrency();
|
LLFloaterBuyCurrency::buyCurrency();
|
||||||
|
|||||||
@@ -1,176 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
|
||||||
<floater can_close="true" can_drag_on_left="false" can_minimize="true"
|
|
||||||
can_resize="false" height="455" min_height="100" min_width="100"
|
|
||||||
name="bug_reporter" title="Report Bug" width="390">
|
|
||||||
<texture_picker allow_no_texture="true" bottom="-150" default_image_name="None"
|
|
||||||
follows="left|top" height="114" label="" left="238" mouse_opaque="true"
|
|
||||||
name="screenshot" width="134" />
|
|
||||||
<check_box bottom_delta="-16" follows="left|top" font="SansSerifSmall" height="16"
|
|
||||||
initial_value="false" label="Include screenshot" left="234"
|
|
||||||
mouse_opaque="true" name="screen_check" width="116" />
|
|
||||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
|
||||||
bottom="-48" drop_shadow_visible="true" follows="left|top"
|
|
||||||
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="16"
|
|
||||||
mouse_opaque="true" name="reporter_title" v_pad="0" width="50">
|
|
||||||
Reporter:
|
|
||||||
</text>
|
|
||||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
|
||||||
bottom="-48" drop_shadow_visible="true" follows="left|top"
|
|
||||||
font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="62"
|
|
||||||
mouse_opaque="true" name="reporter_field" v_pad="0" width="120" />
|
|
||||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
|
||||||
bottom="-64" drop_shadow_visible="true" follows="left|top"
|
|
||||||
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="16"
|
|
||||||
mouse_opaque="true" name="sim_title" v_pad="0" width="50">
|
|
||||||
Region:
|
|
||||||
</text>
|
|
||||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
|
||||||
bottom="-64" drop_shadow_visible="true" follows="left|top"
|
|
||||||
font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="62"
|
|
||||||
mouse_opaque="true" name="sim_field" v_pad="0" width="120" />
|
|
||||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
|
||||||
bottom="-80" drop_shadow_visible="true" follows="left|top"
|
|
||||||
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="16"
|
|
||||||
mouse_opaque="true" name="pos_title" v_pad="0" width="50">
|
|
||||||
Position:
|
|
||||||
</text>
|
|
||||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
|
||||||
bottom="-80" drop_shadow_visible="true" follows="left|top"
|
|
||||||
font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="62"
|
|
||||||
mouse_opaque="true" name="pos_field" v_pad="0" width="120" />
|
|
||||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
|
||||||
bottom_delta="-22" drop_shadow_visible="true" follows="left|top"
|
|
||||||
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="16"
|
|
||||||
mouse_opaque="true" name="select_object_label" v_pad="0" width="200">
|
|
||||||
Click the button then the object:
|
|
||||||
</text>
|
|
||||||
<button bottom_delta="-32" font="SansSerif" halign="center" height="32" label=""
|
|
||||||
label_selected="" left="16" mouse_opaque="true" name="pick_btn"
|
|
||||||
tool_tip="Object Picker - Identify an object as the subject of this report"
|
|
||||||
width="32" />
|
|
||||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
|
||||||
bottom_delta="16" drop_shadow_visible="true" follows="left|top"
|
|
||||||
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="53"
|
|
||||||
mouse_opaque="true" name="object_name_label" v_pad="0" width="60">
|
|
||||||
Name:
|
|
||||||
</text>
|
|
||||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
|
||||||
bottom_delta="0" drop_shadow_visible="true" follows="left|top"
|
|
||||||
font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="66"
|
|
||||||
mouse_opaque="true" name="object_name" v_pad="0" width="109">
|
|
||||||
Consetetur Sadipscing
|
|
||||||
</text>
|
|
||||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
|
||||||
bottom_delta="-16" drop_shadow_visible="true" follows="left|top"
|
|
||||||
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="53"
|
|
||||||
mouse_opaque="true" name="owner_name_label" v_pad="0" width="60">
|
|
||||||
Owner:
|
|
||||||
</text>
|
|
||||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
|
||||||
bottom_delta="0" drop_shadow_visible="true" follows="left|top"
|
|
||||||
font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="66"
|
|
||||||
mouse_opaque="true" name="owner_name" v_pad="0" width="109">
|
|
||||||
Hendrerit Vulputate
|
|
||||||
</text>
|
|
||||||
<combo_box bottom_delta="-28" follows="left|top" height="20" left="16" mouse_opaque="true"
|
|
||||||
name="category_combo"
|
|
||||||
tool_tip="Category -- select the category that best describes this report"
|
|
||||||
width="180">
|
|
||||||
<combo_item name="Selectcategory" value="0">
|
|
||||||
Select category
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Building" value="9">
|
|
||||||
Building
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Character" value="8">
|
|
||||||
Character
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Chat/IM" value="3">
|
|
||||||
Chat/IM
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Documentation" value="10">
|
|
||||||
Documentation
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Exploit" value="22">
|
|
||||||
Exploit
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Graphics" value="11">
|
|
||||||
Graphics
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Inventory" value="12">
|
|
||||||
Inventory
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Lag" value="13">
|
|
||||||
Lag
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="MissingContent" value="21">
|
|
||||||
Missing Content
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="LindenDollars(L$)" value="14">
|
|
||||||
Linden Dollars (L$)
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Permissions" value="15">
|
|
||||||
Permissions
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Physics" value="16">
|
|
||||||
Physics
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Script" value="17">
|
|
||||||
Script
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Sound" value="6">
|
|
||||||
Sound
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Stipends" value="18">
|
|
||||||
Stipends
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Userinterface" value="19">
|
|
||||||
User interface
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Miscellaneous" value="20">
|
|
||||||
Miscellaneous
|
|
||||||
</combo_item>
|
|
||||||
</combo_box>
|
|
||||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
|
||||||
bottom_delta="-25" drop_shadow_visible="true" follows="left|top"
|
|
||||||
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="16"
|
|
||||||
mouse_opaque="true" name="sum_title" v_pad="0" width="180">
|
|
||||||
Summary:
|
|
||||||
</text>
|
|
||||||
<line_editor bevel_style="in" border_style="line"
|
|
||||||
border_thickness="1" bottom_delta="-16" follows="left|top"
|
|
||||||
font="SansSerifSmall" height="16" left="16" max_length="64"
|
|
||||||
mouse_opaque="true" name="summary_edit"
|
|
||||||
width="356" spell_check="true" />
|
|
||||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
|
||||||
bottom_delta="-20" drop_shadow_visible="true" follows="left|top"
|
|
||||||
font="SansSerifSmall" h_pad="0" halign="left" height="16" left="16"
|
|
||||||
mouse_opaque="true" name="dscr_title" v_pad="0" width="342">
|
|
||||||
Details: (Please provide as much information as possible)
|
|
||||||
</text>
|
|
||||||
<text_editor bottom_delta="-112" embedded_items="false"
|
|
||||||
follows="left|top" font="SansSerifSmall" height="112" left="16"
|
|
||||||
max_length="900" mouse_opaque="false" name="details_edit"
|
|
||||||
width="356" word_wrap="true" spell_check="true">
|
|
||||||
Steps to reproduce the bug:
|
|
||||||
|
|
||||||
Observed results:
|
|
||||||
|
|
||||||
Expected results:
|
|
||||||
</text_editor>
|
|
||||||
<text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
|
|
||||||
bottom_delta="-40" drop_shadow_visible="true" follows="left|top"
|
|
||||||
font="SansSerifSmall" h_pad="0" halign="left" height="32" left="16"
|
|
||||||
mouse_opaque="true" name="bug_aviso" v_pad="0" width="342">
|
|
||||||
Note: Incomplete reports will not be investigated
|
|
||||||
If this bug allows you to do something you should not be able
|
|
||||||
to do, especially if it impacts performance or security, please
|
|
||||||
select the 'Exploit' category. Thank you!
|
|
||||||
</text>
|
|
||||||
<button bottom="10" follows="right|bottom" font="SansSerif" halign="center" height="20"
|
|
||||||
label="Cancel" label_selected="Cancel" mouse_opaque="true"
|
|
||||||
name="cancel_btn" right="380" width="150" />
|
|
||||||
<button bottom="10" follows="right|bottom" font="SansSerif" halign="center" height="20"
|
|
||||||
label="Report Bug" label_selected="Report Bug" mouse_opaque="true"
|
|
||||||
name="send_btn" right="224" width="150" />
|
|
||||||
</floater>
|
|
||||||
@@ -4848,22 +4848,6 @@ The region owner will resolve reports based on the local rules of this region as
|
|||||||
The resolution of this report applies only to this Region; Residents access to other areas of the [SECOND_LIFE_GRID] will not be affected by the outcome of this report. Only [GRID_OWNER] can restrict access to the entirety of the [SECOND_LIFE_GRID].
|
The resolution of this report applies only to this Region; Residents access to other areas of the [SECOND_LIFE_GRID] will not be affected by the outcome of this report. Only [GRID_OWNER] can restrict access to the entirety of the [SECOND_LIFE_GRID].
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification
|
|
||||||
icon="alertmodal.tga"
|
|
||||||
name="HelpReportBug"
|
|
||||||
type="alertmodal">
|
|
||||||
Use this tool to *only* report technical features that do not perform as described or expected, please provide as much detail as possible.
|
|
||||||
You may reply to the auto-response email to add more details to your report.
|
|
||||||
|
|
||||||
All bug reports are investigated and assessed. No email response will be sent.
|
|
||||||
|
|
||||||
If you are having a technical difficulty, please contact Support at:
|
|
||||||
|
|
||||||
http://secondlife.com/community/support.php
|
|
||||||
|
|
||||||
Note: Incomplete reports will not be investigated
|
|
||||||
</notification>
|
|
||||||
|
|
||||||
<notification
|
<notification
|
||||||
icon="alertmodal.tga"
|
icon="alertmodal.tga"
|
||||||
name="HelpReportAbuseSelectCategory"
|
name="HelpReportAbuseSelectCategory"
|
||||||
@@ -4872,14 +4856,6 @@ Please select a category for this abuse report.
|
|||||||
Selecting a category helps us file and process abuse reports.
|
Selecting a category helps us file and process abuse reports.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification
|
|
||||||
icon="alertmodal.tga"
|
|
||||||
name="HelpReportBugSelectCategory"
|
|
||||||
type="alertmodal">
|
|
||||||
Please select a category for this bug.
|
|
||||||
Selecting a category helps us file and process bug reports.
|
|
||||||
</notification>
|
|
||||||
|
|
||||||
<notification
|
<notification
|
||||||
icon="alertmodal.tga"
|
icon="alertmodal.tga"
|
||||||
name="HelpReportAbuseAbuserNameEmpty"
|
name="HelpReportAbuseAbuserNameEmpty"
|
||||||
@@ -4904,14 +4880,6 @@ Please enter a summary of the abuse that took place.
|
|||||||
Entering an accurate summary helps us file and process abuse reports.
|
Entering an accurate summary helps us file and process abuse reports.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification
|
|
||||||
icon="alertmodal.tga"
|
|
||||||
name="HelpReportBugSummaryEmpty"
|
|
||||||
type="alertmodal">
|
|
||||||
Please enter a summary of the bug.
|
|
||||||
Entering an accurate summary helps us file and process bug reports.
|
|
||||||
</notification>
|
|
||||||
|
|
||||||
<notification
|
<notification
|
||||||
icon="alertmodal.tga"
|
icon="alertmodal.tga"
|
||||||
name="HelpReportAbuseDetailsEmpty"
|
name="HelpReportAbuseDetailsEmpty"
|
||||||
@@ -4921,15 +4889,6 @@ Be as specific as you can, including names and the details of the incident you a
|
|||||||
Entering an accurate description helps us file and process abuse reports.
|
Entering an accurate description helps us file and process abuse reports.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification
|
|
||||||
icon="alertmodal.tga"
|
|
||||||
name="HelpReportBugDetailsEmpty"
|
|
||||||
type="alertmodal">
|
|
||||||
Please enter a detailed description of the bug.
|
|
||||||
Be as specific as you can, including steps to reproduce the bug if possible.
|
|
||||||
Entering an accurate description helps us file and process bug reports.
|
|
||||||
</notification>
|
|
||||||
|
|
||||||
<notification
|
<notification
|
||||||
icon="alertmodal.tga"
|
icon="alertmodal.tga"
|
||||||
name="HelpReportNope"
|
name="HelpReportNope"
|
||||||
|
|||||||
@@ -1,107 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
|
||||||
<floater name="bug_reporter" title="Reportar Fallo">
|
|
||||||
<texture_picker label="" name="screenshot"/>
|
|
||||||
<check_box label="Incluir captura de pantalla" name="screen_check"/>
|
|
||||||
<text name="reporter_title">
|
|
||||||
Informante:
|
|
||||||
</text>
|
|
||||||
<text name="sim_title">
|
|
||||||
Región:
|
|
||||||
</text>
|
|
||||||
<text name="pos_title">
|
|
||||||
Posición:
|
|
||||||
</text>
|
|
||||||
<text name="select_object_label">
|
|
||||||
Haz clic en el botón y en el objeto para seleccionar:
|
|
||||||
</text>
|
|
||||||
<button label="" label_selected="" name="pick_btn" tool_tip="Selector de Objetos - Identifica un objeto como el sujeto de este reporte"/>
|
|
||||||
<text name="object_name_label">
|
|
||||||
Nombre:
|
|
||||||
</text>
|
|
||||||
<text name="object_name">
|
|
||||||
Consetetur Sadipscing
|
|
||||||
</text>
|
|
||||||
<text name="owner_name_label">
|
|
||||||
Propietario:
|
|
||||||
</text>
|
|
||||||
<text name="owner_name">
|
|
||||||
Hendrerit Vulputate
|
|
||||||
</text>
|
|
||||||
<combo_box name="category_combo" tool_tip="Categoría -- Elige la categoría que mejor describe este reporte">
|
|
||||||
<combo_item name="Selectcategory">
|
|
||||||
Elegir categoría
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Building">
|
|
||||||
Construcción
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Character" value="8">
|
|
||||||
Personaje
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Chat/IM">
|
|
||||||
Chat/MI
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Documentation">
|
|
||||||
Documentación
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Exploit">
|
|
||||||
Exploit
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Graphics" value="11">
|
|
||||||
Gráficos
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Inventory">
|
|
||||||
Inventario
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Lag">
|
|
||||||
Lag
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="MissingContent">
|
|
||||||
Contenido Perdido
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="LindenDollars(L$)">
|
|
||||||
Linden Dollars (L$)
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Permissions">
|
|
||||||
Permisos
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Physics">
|
|
||||||
Física
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Script">
|
|
||||||
Script
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Sound">
|
|
||||||
Sonidos
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Stipends">
|
|
||||||
Salario
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Userinterface">
|
|
||||||
Interfaz de usuario
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Miscellaneous">
|
|
||||||
Misceláneo
|
|
||||||
</combo_item>
|
|
||||||
</combo_box>
|
|
||||||
<text name="sum_title">
|
|
||||||
Sumario:
|
|
||||||
</text>
|
|
||||||
<text name="dscr_title">
|
|
||||||
Detalles: (Por favor, proporciona toda la información que sea posible)
|
|
||||||
</text>
|
|
||||||
<text_editor name="details_edit">
|
|
||||||
Pasos para reproducir el fallo:
|
|
||||||
|
|
||||||
Resultados observados:
|
|
||||||
|
|
||||||
Resultados esperados:
|
|
||||||
</text_editor>
|
|
||||||
<text name="bug_aviso">
|
|
||||||
Nota: los informes incompletos no serán investigados
|
|
||||||
Si el fallo te permite hacer algo que no deberías poder hacer,
|
|
||||||
especialmente si éste impacta en el rendimiento o seguridad,
|
|
||||||
por favor seleeciona la categoría 'Exploit' ¡Gracias!
|
|
||||||
</text>
|
|
||||||
<button label="Cancelar" label_selected="Cancelar" name="cancel_btn"/>
|
|
||||||
<button label="Reportar Fallo" label_selected="Reportar Fallo" name="send_btn"/>
|
|
||||||
</floater>
|
|
||||||
@@ -2736,29 +2736,11 @@ El propietario de la región resolverá las denuncias basándose en las reglas l
|
|||||||
La resolución de esta denuncia se aplica exclusivamente a esta región; el acceso de los residentes a otras áreas de [SECOND_LIFE_GRID] no se verá afectado por el resultado de esta denuncia. Únicamente [GRID_OWNER] puede impedir el acceso a la totalidad de [SECOND_LIFE_GRID].
|
La resolución de esta denuncia se aplica exclusivamente a esta región; el acceso de los residentes a otras áreas de [SECOND_LIFE_GRID] no se verá afectado por el resultado de esta denuncia. Únicamente [GRID_OWNER] puede impedir el acceso a la totalidad de [SECOND_LIFE_GRID].
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification name="HelpReportBug">
|
|
||||||
Usa esta herramienta *sólo* para informar de cuestiones técnicas que no se comportan como se describe o era esperable. Por favor, aporta todos los detalles que puedas.
|
|
||||||
Deberás responder al correo electrónico de auto respuesta para añadir más detalles a tu informe.
|
|
||||||
|
|
||||||
Todos los informes de fallos serán investigados y evaluados. No se contestará por correo electrónico.
|
|
||||||
|
|
||||||
Si tienes algún problema técnico, por favor, contacta con Soporte en:
|
|
||||||
|
|
||||||
http://secondlife.com/community/support.php
|
|
||||||
|
|
||||||
Nota: no se investigarán los informes incompletos.
|
|
||||||
</notification>
|
|
||||||
|
|
||||||
<notification name="HelpReportAbuseSelectCategory">
|
<notification name="HelpReportAbuseSelectCategory">
|
||||||
Por favor, elige una categoría para esta denuncia de infracción.
|
Por favor, elige una categoría para esta denuncia de infracción.
|
||||||
Seleccionar una categoría nos ayuda a clasificar y procesar las denuncias de infracciones.
|
Seleccionar una categoría nos ayuda a clasificar y procesar las denuncias de infracciones.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification name="HelpReportBugSelectCategory">
|
|
||||||
Por favor, elige una categoría para este fallo.
|
|
||||||
Seleccionar una categoría nos ayuda a clasificar y procesar los informes de fallos.
|
|
||||||
</notification>
|
|
||||||
|
|
||||||
<notification name="HelpReportAbuseAbuserNameEmpty">
|
<notification name="HelpReportAbuseAbuserNameEmpty">
|
||||||
Por favor, escribe el nombre del infractor.
|
Por favor, escribe el nombre del infractor.
|
||||||
Aportar el dato preciso nos ayuda a clasificar y procesar las denuncias de infracciones.
|
Aportar el dato preciso nos ayuda a clasificar y procesar las denuncias de infracciones.
|
||||||
@@ -2774,23 +2756,12 @@ Aportar el dato preciso nos ayuda a clasificar y procesar las denuncias de infra
|
|||||||
Aportar un resumen preciso nos ayuda a clasificar y procesar las denuncias de infracciones.
|
Aportar un resumen preciso nos ayuda a clasificar y procesar las denuncias de infracciones.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification name="HelpReportBugSummaryEmpty">
|
|
||||||
Por favor, escribe un resumen del fallo.
|
|
||||||
Aportar un resumen preciso nos ayuda a clasificar y procesar los informes de fallos.
|
|
||||||
</notification>
|
|
||||||
|
|
||||||
<notification name="HelpReportAbuseDetailsEmpty">
|
<notification name="HelpReportAbuseDetailsEmpty">
|
||||||
Por favor, escribe una descripción minuciosa de la infracción que ha habido.
|
Por favor, escribe una descripción minuciosa de la infracción que ha habido.
|
||||||
Se tan específico como puedas, incluyendo los nombres y los detalles implicados en el incidente que denuncias.
|
Se tan específico como puedas, incluyendo los nombres y los detalles implicados en el incidente que denuncias.
|
||||||
Aportar una descripción precisa nos ayuda a clasificar y procesar las denuncias de infracciones.
|
Aportar una descripción precisa nos ayuda a clasificar y procesar las denuncias de infracciones.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification name="HelpReportBugDetailsEmpty">
|
|
||||||
Por favor, escribe una descripción minuciosa del fallo.
|
|
||||||
Se tan específico como puedas, incluyendo -si es posible- los pasos que permitan reproducir el fallo.
|
|
||||||
Aportar una descripción precisa nos ayuda a clasificar y procesar los informes de fallos.
|
|
||||||
</notification>
|
|
||||||
|
|
||||||
<notification name="HelpReportNope">
|
<notification name="HelpReportNope">
|
||||||
No te entrometas en los asuntos de los magos, ya que son sutiles y rápidos para la ira. - J.R.R. Tolkien
|
No te entrometas en los asuntos de los magos, ya que son sutiles y rápidos para la ira. - J.R.R. Tolkien
|
||||||
|
|
||||||
|
|||||||
@@ -1,108 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
|
||||||
<floater name="bug_reporter" title="Signaler un bug">
|
|
||||||
<text name="reporter_title">
|
|
||||||
Signalant:
|
|
||||||
</text>
|
|
||||||
<text name="sim_title">
|
|
||||||
Sim:
|
|
||||||
</text>
|
|
||||||
<text name="pos_title">
|
|
||||||
Position:
|
|
||||||
</text>
|
|
||||||
<text name="select_object_label">
|
|
||||||
Cliquer sur le bouton puis l'objet:
|
|
||||||
</text>
|
|
||||||
<button label="" label_selected="" name="pick_btn" tool_tip="Le sélecteur d'objet vous permet d'identifier un objet comme sujet du rapport."/>
|
|
||||||
<text name="object_name_label">
|
|
||||||
Nom:
|
|
||||||
</text>
|
|
||||||
<text name="object_name">
|
|
||||||
Consetetur Sadipscing
|
|
||||||
</text>
|
|
||||||
<text name="owner_name_label">
|
|
||||||
Propriétaire :
|
|
||||||
</text>
|
|
||||||
<check_box label="Inclure une capture d'écran" name="screen_check"/>
|
|
||||||
<texture_picker label="Instantané en cours" name="screenshot"/>
|
|
||||||
<text name="category_label">
|
|
||||||
Catégorie :
|
|
||||||
</text>
|
|
||||||
<text name="owner_name">
|
|
||||||
Hendrerit Vulputate
|
|
||||||
</text>
|
|
||||||
<combo_box name="category_combo" tool_tip="Choisissez la catégorie qui décrit le mieux ce rapport">
|
|
||||||
<combo_item name="Selectcategory">
|
|
||||||
Sélectionner une catégorie
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Building">
|
|
||||||
Construire
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Character">
|
|
||||||
Personnage
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Chat/IM">
|
|
||||||
Chat/IM
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Documentation">
|
|
||||||
Documentation
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Exploit">
|
|
||||||
Exploit
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Graphics">
|
|
||||||
Graphiques
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Inventory">
|
|
||||||
Inventaire
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Lag">
|
|
||||||
Lag
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="MissingContent">
|
|
||||||
Contenu manquant
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="LindenDollars(L$)">
|
|
||||||
Dollar Linden (L$)
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Permissions">
|
|
||||||
Autorisations
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Physics">
|
|
||||||
Propriétés physiques
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Script">
|
|
||||||
Script
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Sound">
|
|
||||||
Son
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Stipends">
|
|
||||||
Subsides
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Userinterface">
|
|
||||||
Interface utilisateur
|
|
||||||
</combo_item>
|
|
||||||
<combo_item name="Miscellaneous">
|
|
||||||
Divers
|
|
||||||
</combo_item>
|
|
||||||
</combo_box>
|
|
||||||
<text name="sum_title">
|
|
||||||
Récapitulatif:
|
|
||||||
</text>
|
|
||||||
<text name="dscr_title">
|
|
||||||
Détails (soyez aussi précis que possible):
|
|
||||||
</text>
|
|
||||||
<text_editor name="details_edit">
|
|
||||||
Étapes pour reproduire le bug:
|
|
||||||
|
|
||||||
Résultats observés:
|
|
||||||
|
|
||||||
Résultats attendus:
|
|
||||||
</text_editor>
|
|
||||||
<text name="bug_aviso">
|
|
||||||
Remarque : les rapports incomplets ne feront pas l'objet d'une enquête.
|
|
||||||
Si ce bug vous permet de faire quelque chose que vous ne devriez pas pouvoir faire, surtout s'il a des conséquences sur la sécurité et la performance, veuillez sélectionner la catégorie Exploit. Merci!
|
|
||||||
</text>
|
|
||||||
<button label="Signaler un bug" label_selected="Signaler un bug" name="send_btn"/>
|
|
||||||
<button label="Annuler" label_selected="Annuler" name="cancel_btn"/>
|
|
||||||
</floater>
|
|
||||||
@@ -2390,29 +2390,11 @@ Le propriétaire de la région traitera les rapports en fonction des règles de
|
|||||||
La résolution de ce rapport ne s'applique qu'à cette région ; L'accès aux autres endroits de Second Life ne sera pas affecté par les résultats de cette enquête. Seul Linden Lab peut interdire l'accès à l'ensemble de Second Life.
|
La résolution de ce rapport ne s'applique qu'à cette région ; L'accès aux autres endroits de Second Life ne sera pas affecté par les résultats de cette enquête. Seul Linden Lab peut interdire l'accès à l'ensemble de Second Life.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification name="HelpReportBug">
|
|
||||||
N'utilisez cet outil que pour signaler des problèmes techniques et soyez aussi précis que possible.
|
|
||||||
Vous pouvez répondre à l'e-mail automatique pour ajouter des détails à votre rapport.
|
|
||||||
|
|
||||||
Tous les bugs signalés sont reproduits et évalués. Aucune réponse ne sera envoyée par e-mail.
|
|
||||||
|
|
||||||
Si vous avez un problème technique, veuillez contacter le service clientèle à :
|
|
||||||
|
|
||||||
http://secondlife.com/community/support.php
|
|
||||||
|
|
||||||
Remarque : les rapports incomplets ne feront pas l'objet d'une enquête.
|
|
||||||
</notification>
|
|
||||||
|
|
||||||
<notification name="HelpReportAbuseSelectCategory">
|
<notification name="HelpReportAbuseSelectCategory">
|
||||||
Veuillez choisir une catégorie pour ce rapport d'infraction.
|
Veuillez choisir une catégorie pour ce rapport d'infraction.
|
||||||
Le choix d'une catégorie nous permet de traiter les rapports d'infraction plus rapidement.
|
Le choix d'une catégorie nous permet de traiter les rapports d'infraction plus rapidement.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification name="HelpReportBugSelectCategory">
|
|
||||||
Veuillez choisir une catégorie pour ce bug.
|
|
||||||
Le choix d'une catégorie nous permet de traiter les bugs plus rapidement.
|
|
||||||
</notification>
|
|
||||||
|
|
||||||
<notification name="HelpReportAbuseAbuserNameEmpty">
|
<notification name="HelpReportAbuseAbuserNameEmpty">
|
||||||
Veuillez saisir le nom du contrevenant.
|
Veuillez saisir le nom du contrevenant.
|
||||||
Lorsque nous avons le nom du contrevenant, nous sommes en mesure de traiter les rapports plus rapidement.
|
Lorsque nous avons le nom du contrevenant, nous sommes en mesure de traiter les rapports plus rapidement.
|
||||||
@@ -2428,23 +2410,12 @@ Veuillez saisir un récapitulatif de l'infraction.
|
|||||||
Les récapitulatifs précis nous permettent de traiter les rapports plus rapidement.
|
Les récapitulatifs précis nous permettent de traiter les rapports plus rapidement.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification name="HelpReportBugSummaryEmpty">
|
|
||||||
Veuillez saisir un récapitulatif du bug.
|
|
||||||
Les récapitulatifs précis nous permettent de résoudre les bugs plus rapidement.
|
|
||||||
</notification>
|
|
||||||
|
|
||||||
<notification name="HelpReportAbuseDetailsEmpty">
|
<notification name="HelpReportAbuseDetailsEmpty">
|
||||||
Veuillez saisir une description détaillée de l'infraction.
|
Veuillez saisir une description détaillée de l'infraction.
|
||||||
Soyez aussi précis que possible et essayez de fournir des noms ainsi que des détails sur l'incident que vous signalez.
|
Soyez aussi précis que possible et essayez de fournir des noms ainsi que des détails sur l'incident que vous signalez.
|
||||||
Les descriptions précises nous permettent de traiter les rapports plus rapidement.
|
Les descriptions précises nous permettent de traiter les rapports plus rapidement.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification name="HelpReportBugDetailsEmpty">
|
|
||||||
Veuillez saisir une description détaillée du bug.
|
|
||||||
Soyez aussi spécifique que possible et essayez d'indiquer les étapes à suivre pour reproduire le bug.
|
|
||||||
Les descriptions précises nous permettent de résoudre les bugs plus rapidement.
|
|
||||||
</notification>
|
|
||||||
|
|
||||||
<notification name="HelpReportAbuseContainsCopyright">
|
<notification name="HelpReportAbuseContainsCopyright">
|
||||||
Cher résident,
|
Cher résident,
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
|
||||||
<floater name="bug_reporter" title="Reportar Bug">
|
|
||||||
<text name="sim_title">
|
|
||||||
Região:
|
|
||||||
</text>
|
|
||||||
<text name="select_object_label">
|
|
||||||
Clique no botão e depois no objeto:
|
|
||||||
</text>
|
|
||||||
<texture_picker label="" name="screenshot"/>
|
|
||||||
</floater>
|
|
||||||
@@ -2297,29 +2297,11 @@ O dono da região resolverá as reportagens baseado nas regras locais desta regi
|
|||||||
A resolução desta reportagem se aplica apenas a esta região; o acesso de Residentes às outras áreas do [SECOND_LIFE_GRID] não será afetado pelas decisões desta reportagem. Apenas a [GRID_OWNER] pode restringir acesso a todo o [SECOND_LIFE_GRID].
|
A resolução desta reportagem se aplica apenas a esta região; o acesso de Residentes às outras áreas do [SECOND_LIFE_GRID] não será afetado pelas decisões desta reportagem. Apenas a [GRID_OWNER] pode restringir acesso a todo o [SECOND_LIFE_GRID].
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification name="HelpReportBug">
|
|
||||||
Use esta ferramenta para reportar *apenas* características técnicas que não atuem como descrito ou esperado.
|
|
||||||
Por favor, forneça tantos detalhes quanto possível. Você pode responder ao e-mail de resposta automática para adicionar mais detalhes à sua reportagem.
|
|
||||||
|
|
||||||
Todas as reportagens de bugs são investigadas e avaliadas. Nenhum e-mail de resposta será enviado.
|
|
||||||
|
|
||||||
Se você estiver tendo uma dificuldade técnica, por favor contate o Suporte em:
|
|
||||||
|
|
||||||
http://secondlife.com/community/support.php
|
|
||||||
|
|
||||||
Nota: reportagens incompletas não serão investigadas
|
|
||||||
</notification>
|
|
||||||
|
|
||||||
<notification name="HelpReportAbuseSelectCategory">
|
<notification name="HelpReportAbuseSelectCategory">
|
||||||
Por favor, selecione uma categoria para a reportagem deste abuso.
|
Por favor, selecione uma categoria para a reportagem deste abuso.
|
||||||
A seleção de uma categoria nos ajuda a arquivar e processar as reportagens de abuso.
|
A seleção de uma categoria nos ajuda a arquivar e processar as reportagens de abuso.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification name="HelpReportBugSelectCategory">
|
|
||||||
Por favor, selecione uma categoria para este bug.
|
|
||||||
A seleção de uma categoria nos ajuda a arquivar e processar as reportagens de bugs.
|
|
||||||
</notification>
|
|
||||||
|
|
||||||
<notification name="HelpReportAbuseAbuserNameEmpty">
|
<notification name="HelpReportAbuseAbuserNameEmpty">
|
||||||
Por favor, entre com o nome do perturbador.
|
Por favor, entre com o nome do perturbador.
|
||||||
Entrando com um valor preciso, nos ajuda a arquivar e processar as reportagens de abuso.
|
Entrando com um valor preciso, nos ajuda a arquivar e processar as reportagens de abuso.
|
||||||
@@ -2335,22 +2317,12 @@ Entrando com um valor preciso, nos ajuda a arquivar e processar as reportagens d
|
|||||||
Fazer um resumo detalhado nos ajuda a arquivar e processar as reportagens de abuso.
|
Fazer um resumo detalhado nos ajuda a arquivar e processar as reportagens de abuso.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification name="HelpReportBugSummaryEmpty">
|
|
||||||
Por favor, digite um resumo do bug. Realizar um resumo detalhado nos ajuda a arquivar e processar as reportagens de abuso.
|
|
||||||
</notification>
|
|
||||||
|
|
||||||
<notification name="HelpReportAbuseDetailsEmpty">
|
<notification name="HelpReportAbuseDetailsEmpty">
|
||||||
Por favor, digite uma descrição detalhada do abuso que ocorreu.
|
Por favor, digite uma descrição detalhada do abuso que ocorreu.
|
||||||
Seja tão específico quanto você puder, incluindo nomes e os detalhes do incidente que está denunciando.
|
Seja tão específico quanto você puder, incluindo nomes e os detalhes do incidente que está denunciando.
|
||||||
Fazer uma descrição precisa nos ajuda a arquivar e processar as reportagens de abuso.
|
Fazer uma descrição precisa nos ajuda a arquivar e processar as reportagens de abuso.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
<notification name="HelpReportBugDetailsEmpty">
|
|
||||||
Por favor, digite uma descrição detalhada do bug.
|
|
||||||
Seja tão específico quanto você puder, incluindo as etapas para reproduzir o bug, se possível.
|
|
||||||
Fazer uma descrição precisa nos ajuda a arquivar e processar os relatórios de bugs.
|
|
||||||
</notification>
|
|
||||||
|
|
||||||
<notification name="HelpReportAbuseContainsCopyright">
|
<notification name="HelpReportAbuseContainsCopyright">
|
||||||
Caro Residente,
|
Caro Residente,
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user