diff options
author | Cho <cho@lindenlab.com> | 2014-05-31 00:12:14 +0100 |
---|---|---|
committer | Cho <cho@lindenlab.com> | 2014-05-31 00:12:14 +0100 |
commit | 099ed7065591b4716c08ed9f6ffc8edfcaacfae0 (patch) | |
tree | 94fc5da2557da90bbbdcdb936c5808885f341904 | |
parent | 526c11cfaf665eabf6167bbbd139bce024bf1798 (diff) |
Fixed ACME-1436 and ACME-1501
-rwxr-xr-x | indra/newview/llfloaterregioninfo.cpp | 74 | ||||
-rwxr-xr-x | indra/newview/llfloaterregioninfo.h | 3 |
2 files changed, 75 insertions, 2 deletions
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index d2e8a4907b..2249088b24 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -3642,6 +3642,76 @@ public: }; +// Used for both access add and remove operations, depending on the flag +// passed in (ESTATE_EXPERIENCE_ALLOWED_ADD, ESTATE_EXPERIENCE_ALLOWED_REMOVE, etc.) +// static +bool LLPanelRegionExperiences::experienceCoreConfirm(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + const U32 originalFlags = (U32)notification["payload"]["operation"].asInteger(); + + LLViewerRegion* region = gAgent.getRegion(); + + LLSD::array_const_iterator end_it = notification["payload"]["allowed_ids"].endArray(); + + for (LLSD::array_const_iterator iter = notification["payload"]["allowed_ids"].beginArray(); + iter != end_it; + iter++) + { + U32 flags = originalFlags; + if (iter + 1 != end_it) + flags |= ESTATE_ACCESS_NO_REPLY; + + const LLUUID id = iter->asUUID(); + switch(option) + { + case 0: + // This estate + sendEstateExperienceDelta(flags, id); + break; + case 1: + { + // All estates, either than I own or manage for this owner. + // This will be verified on simulator. JC + if (!region) break; + if (region->getOwner() == gAgent.getID() + || gAgent.isGodlike()) + { + flags |= ESTATE_ACCESS_APPLY_TO_ALL_ESTATES; + sendEstateExperienceDelta(flags, id); + } + else if (region->isEstateManager()) + { + flags |= ESTATE_ACCESS_APPLY_TO_MANAGED_ESTATES; + sendEstateExperienceDelta(flags, id); + } + break; + } + case 2: + default: + break; + } + } + return false; +} + + +// Send the actual "estateexperiencedelta" message +void LLPanelRegionExperiences::sendEstateExperienceDelta(U32 flags, const LLUUID& experience_id) +{ + strings_t str(3, std::string()); + gAgent.getID().toString(str[0]); + str[1] = llformat("%u", flags); + experience_id.toString(str[2]); + + LLPanelRegionExperiences* panel = LLFloaterRegionInfo::getPanelExperiences(); + if (panel) + { + panel->sendEstateOwnerMessage(gMessageSystem, "estateexperiencedelta", LLFloaterRegionInfo::getLastInvoice(), str); + } +} + + void LLPanelRegionExperiences::infoCallback(LLHandle<LLPanelRegionExperiences> handle, const LLSD& content) { if(handle.isDead()) @@ -3744,7 +3814,7 @@ void LLPanelRegionExperiences::itemChanged( U32 event_type, const LLUUID& id ) break; case ESTATE_EXPERIENCE_BLOCKED_REMOVE: - dialog_name = "EstateAllowedExperienceAdd"; + dialog_name = "EstateBlockedExperienceRemove"; break; default: @@ -3762,7 +3832,7 @@ void LLPanelRegionExperiences::itemChanged( U32 event_type, const LLUUID& id ) LLNotification::Params params(dialog_name); params.payload(payload) .substitutions(args) - .functor.function(LLPanelEstateInfo::accessCoreConfirm); + .functor.function(LLPanelRegionExperiences::experienceCoreConfirm); if (LLPanelEstateInfo::isLindenEstate()) { LLNotifications::instance().forceResponse(params, 0); diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index 7bba183ed2..15eeb5ed7e 100755 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -463,6 +463,9 @@ public: LLPanelRegionExperiences(){} /*virtual*/ BOOL postBuild(); virtual BOOL sendUpdate(); + + static bool experienceCoreConfirm(const LLSD& notification, const LLSD& response); + static void sendEstateExperienceDelta(U32 flags, const LLUUID& agent_id); static void infoCallback(LLHandle<LLPanelRegionExperiences> handle, const LLSD& content); bool refreshFromRegion(LLViewerRegion* region); |