diff options
-rw-r--r-- | indra/newview/llfloaterexperienceprofile.cpp | 151 | ||||
-rw-r--r-- | indra/newview/llfloaterexperienceprofile.h | 5 | ||||
-rwxr-xr-x | indra/newview/llviewerregion.cpp | 4 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/floater_experienceprofile.xml | 22 |
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"/> |