diff options
Diffstat (limited to 'indra/newview/llviewermessage.cpp')
| -rwxr-xr-x | indra/newview/llviewermessage.cpp | 83 | 
1 files changed, 71 insertions, 12 deletions
| diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index df5c7d5c2e..c7d3fe948d 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -117,6 +117,7 @@  #include <boost/regex.hpp>  #include "llnotificationmanager.h" // +#include "llexperiencecache.h"  #if LL_MSVC  // disable boost::lexical_cast warning @@ -6367,6 +6368,12 @@ bool script_question_cb(const LLSD& notification, const LLSD& response)  		return false;  	} +	LLUUID experience; +	if(notification["payload"].has("experience")) +	{ +		experience = notification["payload"]["experience"].asUUID(); +	} +  	// check whether permissions were granted or denied  	BOOL allowed = TRUE;  	// the "yes/accept" button is the first button in the template, making it button 0 @@ -6375,7 +6382,17 @@ bool script_question_cb(const LLSD& notification, const LLSD& response)  	{  		new_questions = 0;  		allowed = FALSE; -	}	 +	} +	else if(experience.notNull()) +	{ +		LLSD permission; +		LLSD data; +		permission["permission"]="Allow"; + +		data[experience.asString()]=permission; +		data["experience"]=experience; +		LLEventPumps::instance().obtain("experience_permission").post(data); +	}  	LLUUID task_id = notification["payload"]["task_id"].asUUID();  	LLUUID item_id = notification["payload"]["item_id"].asUUID(); @@ -6402,7 +6419,27 @@ bool script_question_cb(const LLSD& notification, const LLSD& response)  	{  		script_question_mute(task_id,notification["payload"]["object_name"].asString());  	} +	if ( response["BlockExperience"] ) +	{ +		if(experience.notNull()) +		{ +			LLViewerRegion* region = gAgent.getRegion(); +			if (!region) +			    return false; +			 +			std::string lookup_url=region->getCapability("ExperiencePreferences");  +			if(lookup_url.empty()) +			    return false; +			LLSD permission; +			LLSD data; +			permission["permission"]="Block"; +			data[experience.asString()]=permission; +			LLHTTPClient::put(lookup_url, data, NULL); +			data["experience"]=experience; +			LLEventPumps::instance().obtain("experience_permission").post(data); +		} +	}  	return false;  } @@ -6435,8 +6472,24 @@ void script_question_mute(const LLUUID& task_id, const std::string& object_name)  static LLNotificationFunctorRegistration script_question_cb_reg_1("ScriptQuestion", script_question_cb);  static LLNotificationFunctorRegistration script_question_cb_reg_2("ScriptQuestionCaution", script_question_cb); +static LLNotificationFunctorRegistration script_question_cb_reg_3("ScriptQuestionExperience", script_question_cb);  static LLNotificationFunctorRegistration unknown_script_question_cb_reg("UnknownScriptQuestion", unknown_script_question_cb); +void process_script_experience_details(const LLSD& experience_details, LLSD args, LLSD payload) +{ +	if(experience_details[LLExperienceCache::PROPERTIES].asInteger() & LLExperienceCache::PROPERTY_GRID) +	{ +		args["GRID_WIDE"] = LLTrans::getString("GRID_WIDE")+ " "; +	} +	else +	{ +		args["GRID_WIDE"] = ""; +	} +	args["EXPERIENCE"] = LLSLURL("experience", experience_details[LLExperienceCache::EXPERIENCE_ID].asUUID(), "profile").getSLURLString(); + +	LLNotificationsUtil::add("ScriptQuestionExperience", args, payload); +} +  void process_script_question(LLMessageSystem *msg, void **user_data)  {  	// *TODO: Translate owner name -> [FIRST] [LAST] @@ -6448,6 +6501,7 @@ void process_script_question(LLMessageSystem *msg, void **user_data)  	S32		questions;  	std::string object_name;  	std::string owner_name; +	LLUUID experienceid;  	// taskid -> object key of object requesting permissions  	msg->getUUIDFast(_PREHASH_Data, _PREHASH_TaskID, taskid ); @@ -6457,6 +6511,11 @@ void process_script_question(LLMessageSystem *msg, void **user_data)  	msg->getStringFast(_PREHASH_Data, _PREHASH_ObjectOwner, owner_name);  	msg->getS32Fast(_PREHASH_Data, _PREHASH_Questions, questions ); +	if(msg->has(_PREHASH_Experience)) +	{ +		msg->getUUIDFast(_PREHASH_Experience, _PREHASH_ExperienceID, experienceid); +	} +  	// Special case. If the objects are owned by this agent, throttle per-object instead  	// of per-owner. It's common for residents to reset a ton of scripts that re-request  	// permissions, as with tier boxes. UUIDs can't be valid agent names and vice-versa, @@ -6542,21 +6601,21 @@ void process_script_question(LLMessageSystem *msg, void **user_data)  			payload["object_name"] = object_name;  			payload["owner_name"] = owner_name; -			// check whether cautions are even enabled or not -			if (gSavedSettings.getBOOL("PermissionsCautionEnabled")) +			const char* notification = "ScriptQuestion"; + +			if(caution && gSavedSettings.getBOOL("PermissionsCautionEnabled"))  			{ -				if (caution) -				{ -					args["FOOTERTEXT"] = (count > 1) ? LLTrans::getString("AdditionalPermissionsRequestHeader") + "\n\n" + script_question : ""; -				} -				// display the caution permissions prompt -				LLNotificationsUtil::add(caution ? "ScriptQuestionCaution" : "ScriptQuestion", args, payload); +				args["FOOTERTEXT"] = (count > 1) ? LLTrans::getString("AdditionalPermissionsRequestHeader") + "\n\n" + script_question : ""; +				notification = "ScriptQuestionCaution";  			} -			else +			else if(experienceid.notNull())  			{ -				// fall back to default behavior if cautions are entirely disabled -				LLNotificationsUtil::add("ScriptQuestion", args, payload); +				payload["experience"]=experienceid; +				LLExperienceCache::get(experienceid, boost::bind(process_script_experience_details, _1, args, payload)); +				return;  			} + +			LLNotificationsUtil::add(notification, args, payload);  		}  	}  } | 
