summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/newview/llfloaterexperienceprofile.cpp151
-rw-r--r--indra/newview/llfloaterexperienceprofile.h5
-rwxr-xr-xindra/newview/llviewerregion.cpp4
-rw-r--r--indra/newview/skins/default/xui/en/floater_experienceprofile.xml22
4 files changed, 169 insertions, 13 deletions
diff --git a/indra/newview/llfloaterexperienceprofile.cpp b/indra/newview/llfloaterexperienceprofile.cpp
index 8e5a7a7588..895fd5ee4d 100644
--- a/indra/newview/llfloaterexperienceprofile.cpp
+++ b/indra/newview/llfloaterexperienceprofile.cpp
@@ -57,6 +57,9 @@
#define PNL_MRKT "marketplace panel"
#define BTN_EDIT "edit_btn"
+#define BTN_ALLOW "allow_btn"
+#define BTN_FORGET "forget_btn"
+#define BTN_BLOCK "block_btn"
LLFloaterExperienceProfile::LLFloaterExperienceProfile(const LLSD& data)
@@ -75,6 +78,29 @@ LLFloaterExperienceProfile::~LLFloaterExperienceProfile()
}
+class ExperiencePreferencesResponder : public LLHTTPClient::Responder
+{
+public:
+ ExperiencePreferencesResponder(const LLHandle<LLFloaterExperienceProfile>& parent):mParent(parent)
+ {
+ }
+
+ LLHandle<LLFloaterExperienceProfile> mParent;
+
+ virtual void result(const LLSD& content)
+ {
+ LLFloaterExperienceProfile* parent=mParent.get();
+ if(parent)
+ {
+ parent->setPreferences(content);
+ }
+ }
+ virtual void error(U32 status, const std::string& reason)
+ {
+ lldebugs << "ExperiencePreferencesResponder failed with code: " << status<< ", reason: " << reason << llendl;
+ }
+};
+
class IsAdminResponder : public LLHTTPClient::Responder
{
@@ -90,8 +116,27 @@ public:
LLFloaterExperienceProfile* parent = mParent.get();
if(!parent)
return;
+
+ LLButton* edit=parent->getChild<LLButton>(BTN_EDIT);
- parent->getChild<LLButton>(BTN_EDIT)->setVisible(content["status"].asBoolean());
+ if(content.has("experience_ids"))
+ {
+ LLUUID id=parent->getKey().asUUID();
+ const LLSD& xp_ids = content["experience_ids"];
+ LLSD::array_const_iterator it = xp_ids.beginArray();
+ while(it != xp_ids.endArray())
+ {
+ if(it->asUUID() == id)
+ {
+ edit->setVisible(TRUE);
+ return;
+ }
+ ++it;
+ }
+ }
+ edit->setVisible(FALSE);
+
+ //parent->getChild<LLButton>(BTN_EDIT)->setVisible(content["status"].asBoolean());
}
virtual void error(U32 status, const std::string& reason)
{
@@ -115,10 +160,22 @@ BOOL LLFloaterExperienceProfile::postBuild()
LLViewerRegion* region = gAgent.getRegion();
if (region)
{
- std::string lookup_url=region->getCapability("IsExperienceAdmin");
+ // std::string lookup_url=region->getCapability("IsExperienceAdmin");
+ // if(!lookup_url.empty())
+ // {
+ // LLHTTPClient::get(lookup_url+"/"+mExperienceId.asString(), new IsAdminResponder(getDerivedHandle<LLFloaterExperienceProfile>()));
+ // }
+
+ std::string lookup_url=region->getCapability("GetAdminExperiences");
+ if(!lookup_url.empty())
+ {
+ LLHTTPClient::get(lookup_url, new IsAdminResponder(getDerivedHandle<LLFloaterExperienceProfile>()));
+ }
+
+ lookup_url=region->getCapability("ExperiencePreferences");
if(!lookup_url.empty())
{
- LLHTTPClient::get(lookup_url+"/"+mExperienceId.asString(), new IsAdminResponder(getDerivedHandle<LLFloaterExperienceProfile>()));
+ LLHTTPClient::get(lookup_url+"?"+mExperienceId.asString(), new ExperiencePreferencesResponder(getDerivedHandle<LLFloaterExperienceProfile>()));
}
}
}
@@ -127,6 +184,9 @@ BOOL LLFloaterExperienceProfile::postBuild()
childSetAction(BTN_EDIT, boost::bind(&LLFloaterExperienceProfile::onClickEdit, this));
+ childSetAction(BTN_ALLOW, boost::bind(&LLFloaterExperienceProfile::onClickPermission, this, "Allow"));
+ childSetAction(BTN_FORGET, boost::bind(&LLFloaterExperienceProfile::onClickForget, this));
+ childSetAction(BTN_BLOCK, boost::bind(&LLFloaterExperienceProfile::onClickPermission, this, "Block"));
return TRUE;
}
@@ -145,6 +205,39 @@ void LLFloaterExperienceProfile::onClickEdit()
}
+
+void LLFloaterExperienceProfile::onClickPermission(const char* perm)
+{
+ LLViewerRegion* region = gAgent.getRegion();
+ if (!region)
+ return;
+
+ std::string lookup_url=region->getCapability("ExperiencePreferences");
+ if(lookup_url.empty())
+ return;
+ LLSD permission;
+ LLSD data;
+ permission["permission"]=perm;
+
+ data[mExperienceId.asString()]=permission;
+ LLHTTPClient::put(lookup_url, data, new ExperiencePreferencesResponder(getDerivedHandle<LLFloaterExperienceProfile>()));
+
+}
+
+
+void LLFloaterExperienceProfile::onClickForget()
+{
+ LLViewerRegion* region = gAgent.getRegion();
+ if (!region)
+ return;
+
+ std::string lookup_url=region->getCapability("ExperiencePreferences");
+ if(lookup_url.empty())
+ return;
+
+ LLHTTPClient::del(lookup_url+"?"+mExperienceId.asString(), new ExperiencePreferencesResponder(getDerivedHandle<LLFloaterExperienceProfile>()));
+}
+
bool LLFloaterExperienceProfile::setMaturityString( U8 maturity, LLTextBox* child )
{
LLStyle::Params style;
@@ -258,4 +351,54 @@ void LLFloaterExperienceProfile::refreshExperience( const LLSD& experience )
-} \ No newline at end of file
+}
+
+void LLFloaterExperienceProfile::setPreferences( const LLSD& content )
+{
+ const LLSD& experiences = content["experiences"];
+ const LLSD& blocked = content["blocked"];
+ LLButton* button;
+
+
+ for(LLSD::array_const_iterator it = experiences.beginArray(); it != experiences.endArray() ; ++it)
+ {
+ if(it->asUUID()==mExperienceId)
+ {
+ button=getChild<LLButton>(BTN_ALLOW);
+ button->setEnabled(FALSE);
+
+ button=getChild<LLButton>(BTN_FORGET);
+ button->setEnabled(TRUE);
+
+ button=getChild<LLButton>(BTN_BLOCK);
+ button->setEnabled(TRUE);
+ return;
+ }
+ }
+
+ for(LLSD::array_const_iterator it = blocked.beginArray(); it != blocked.endArray() ; ++it)
+ {
+ if(it->asUUID()==mExperienceId)
+ {
+ button=getChild<LLButton>(BTN_ALLOW);
+ button->setEnabled(TRUE);
+
+ button=getChild<LLButton>(BTN_FORGET);
+ button->setEnabled(TRUE);
+
+ button=getChild<LLButton>(BTN_BLOCK);
+ button->setEnabled(FALSE);
+ return;
+ }
+ }
+
+
+ button=getChild<LLButton>(BTN_ALLOW);
+ button->setEnabled(TRUE);
+
+ button=getChild<LLButton>(BTN_FORGET);
+ button->setEnabled(FALSE);
+
+ button=getChild<LLButton>(BTN_BLOCK);
+ button->setEnabled(TRUE);
+}
diff --git a/indra/newview/llfloaterexperienceprofile.h b/indra/newview/llfloaterexperienceprofile.h
index e19a63aca7..c486ca5f30 100644
--- a/indra/newview/llfloaterexperienceprofile.h
+++ b/indra/newview/llfloaterexperienceprofile.h
@@ -44,9 +44,12 @@ public:
virtual ~LLFloaterExperienceProfile();
void setExperienceId( const LLUUID& experience_id );
+ void setPreferences( const LLSD& content );
protected:
- void onClickEdit();
+ void onClickEdit();
+ void onClickPermission(const char* permission);
+ void onClickForget();
static void experienceCallback(LLHandle<LLFloaterExperienceProfile> handle, const LLSD& experience);
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index e0eb8b5f46..af993943ce 100755
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -1601,7 +1601,11 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
capabilityNames.append("GetAdminExperiences");
capabilityNames.append("GetCreatorExperiences");
capabilityNames.append("ExperiencePreferences");
+/*
+ DMH - Does not work, needs a modified people api to take the experience UUID
capabilityNames.append("IsExperienceAdmin");
+ capabilityNames.append("IsExperienceContributor");
+*/
capabilityNames.append("GetMesh");
capabilityNames.append("GetMetadata");
capabilityNames.append("GetObjectCost");
diff --git a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml
index 668a3bcc2e..58c0ed70ef 100644
--- a/indra/newview/skins/default/xui/en/floater_experienceprofile.xml
+++ b/indra/newview/skins/default/xui/en/floater_experienceprofile.xml
@@ -26,10 +26,6 @@
name="maturity_icon_adult">
"Parcel_R_Light"
</floater.string>
- <floater.string
- name="forget_experience">
- "Forget"
- </floater.string>
<panel
background_visible="true"
follows="all"
@@ -218,7 +214,7 @@
</layout_panel>
<layout_panel
follows="left|top|right"
- height="69"
+ height="92"
left="0"
top="0"
auto_resize="false"
@@ -279,9 +275,9 @@
layout="topleft"
name="edit_btn"
top_pad="3"
- width="80"
- left="10"
- visible="false"/>
+ width="120"
+ left="73"
+ visible="true"/>
<button
follows="bottom|left"
height="23"
@@ -289,6 +285,16 @@
layout="topleft"
name="allow_btn"
width="80"
+ top_pad="3"
+ left="10"
+ enabled="false"/>
+ <button
+ follows="bottom|left"
+ height="23"
+ label="Forget"
+ layout="topleft"
+ name="forget_btn"
+ width="80"
top_pad="-23"
left_pad="3"
enabled="false"/>