Mel, Justin,<div><br></div><div>Here is the file I produced with the git show <commit id> <file> command, untouched.</div><div><br></div><div>When will I ever learn LOL</div><div><br></div><div>if this is the right stuff I'll get it into mantis at once.</div>
<div><br></div><div><br></div><div><br></div><div><div>commit dd47b8b94e74a8ec793196ce7f3133565bc300bb</div><div>Author: James Stallings aka Hiro Protagonist <<a href="mailto:james.stallings@gmail.com">james.stallings@gmail.com</a>></div>
<div>Date: Fri May 27 19:57:51 2011 -0500</div><div><br></div><div> Add functionality to GodMode that allows the operator to view 'hidden' groups in profile - Thanks BlueWall and Dan Banner for all your assistance</div>
<div><br></div><div>diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs</div><div>index 1c791b9..05223e0 100644</div><div>--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs</div>
<div>+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs</div><div>@@ -1231,20 +1231,36 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups</div><div> List<GroupMembershipData> membershipData = m_groupData.GetAgentGroupMemberships(requestingClient.AgentId, dataForAgentID);</div>
<div> GroupMembershipData[] membershipArray;</div><div> </div><div>- if (requestingClient.AgentId != dataForAgentID)</div><div>- {</div><div>+ // c_scene and property accessor 'is_god' are in support of the opertions to bypass 'hidden' group attributes for</div>
<div>+ // those with a GodLike aspect.</div><div>+ Scene c_scene = (Scene) requestingClient.Scene;</div><div>+ bool is_god = c_scene.Permissions.IsGod(requestingClient.AgentId);</div><div>
+</div><div>+ if(is_god) {</div><div> Predicate<GroupMembershipData> showInProfile = delegate(GroupMembershipData membership)</div><div> {</div><div> return membership.ListInProfile;</div>
<div> };</div><div> </div><div>- membershipArray = membershipData.FindAll(showInProfile).ToArray();</div><div>+ membershipArray = membershipData.ToArray();</div><div> }</div>
<div> else</div><div> {</div><div>- membershipArray = membershipData.ToArray();</div><div>- }</div><div> </div><div>+ if (requestingClient.AgentId != dataForAgentID)</div>
<div>+ {</div><div>+ Predicate<GroupMembershipData> showInProfile = delegate(GroupMembershipData membership)</div><div>+ {</div><div>+ return membership.ListInProfile;</div>
<div>+ };</div><div>+</div><div>+ membershipArray = membershipData.FindAll(showInProfile).ToArray();</div><div>+ }</div><div>+ else</div><div>+ {</div>
<div>+ membershipArray = membershipData.ToArray();</div><div>+ }</div><div>+ }</div><div> if (m_debugEnabled)</div><div> {</div><div> m_log.InfoFormat("[GROUPS]: Get group membership information for {0} requested by {1}", dataForAgentID, requestingClient.AgentId);</div>
<div>@@ -1257,6 +1273,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups</div><div> return membershipArray;</div><div> }</div><div> </div><div>+ </div><div> private void SendAgentDataUpdate(IClientAPI remoteClient, UUID dataForAgentID, UUID activeGroupID, string activeGroupName, ulong activeGroupPowers, string activeGroupTitle)</div>
<div> {</div><div> if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);</div></div><div><br></div><div><br></div><div><br></div>
<div><br></div><div><br></div><div>Cheers and much thanks :)</div><div><br></div><div>James</div><div><br></div><div><br><br><div class="gmail_quote">On Fri, May 27, 2011 at 8:08 PM, Melanie <span dir="ltr"><<a href="mailto:melanie@t-data.com">melanie@t-data.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">This patch can be applied but is without author info. Maybe you<br>
removed the author info lines?<br>
<br>
This is, however, a proper udiff. Thanks.<br>
<font color="#888888"><br>
Melanie<br>
</font><div><div></div><div class="h5"><br>
On 28/05/2011 03:07, James Stallings II wrote:<br>
> Justin,<br>
><br>
> I'm actually using a couple of repos locally, so it was fairly simple to<br>
> reset one to a point just before where I was working and simply update that<br>
> commit with my final changes, thus taking the failed work (and the patch to<br>
> the patch) out of the loop.<br>
><br>
> As per your secondary instructions in skype, I used git show <commit ID><br>
> <file> to produce the following patch for<br>
> OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs:<br>
><br>
> --- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs<br>
> +++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs<br>
> @@ -1231,20 +1231,36 @@ namespace<br>
> OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups<br>
> List<GroupMembershipData> membershipData =<br>
> m_groupData.GetAgentGroupMemberships(requestingClient.AgentId,<br>
> dataForAgentID);<br>
> GroupMembershipData[] membershipArray;<br>
><br>
> - if (requestingClient.AgentId != dataForAgentID)<br>
> - {<br>
> + // c_scene and property accessor 'is_god' are in support of<br>
> the opertions to bypass 'hidden' group attributes for<br>
> + // those with a GodLike aspect.<br>
> + Scene c_scene = (Scene) requestingClient.Scene;<br>
> + bool is_god =<br>
> c_scene.Permissions.IsGod(requestingClient.AgentId);<br>
> +<br>
> + if(is_god) {<br>
> Predicate<GroupMembershipData> showInProfile =<br>
> delegate(GroupMembershipData membership)<br>
> {<br>
> return membership.ListInProfile;<br>
> };<br>
><br>
> - membershipArray =<br>
> membershipData.FindAll(showInProfile).ToArray();<br>
> + membershipArray = membershipData.ToArray();<br>
> }<br>
> else<br>
> {<br>
> - membershipArray = membershipData.ToArray();<br>
> - }<br>
><br>
> + if (requestingClient.AgentId != dataForAgentID)<br>
> + {<br>
> + Predicate<GroupMembershipData> showInProfile =<br>
> delegate(GroupMembershipData membership)<br>
> + {<br>
> + return membership.ListInProfile;<br>
> + };<br>
> +<br>
> + membershipArray =<br>
> membershipData.FindAll(showInProfile).ToArray();<br>
> + }<br>
> + else<br>
> + {<br>
> + membershipArray = membershipData.ToArray();<br>
> + }<br>
> + }<br>
> if (m_debugEnabled)<br>
> {<br>
> m_log.InfoFormat("[GROUPS]: Get group membership<br>
> information for {0} requested by {1}", dataForAgentID,<br>
> requestingClient.AgentId);<br>
> @@ -1257,6 +1273,7 @@ namespace<br>
> OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups<br>
> return membershipArray;<br>
> }<br>
><br>
> +<br>
> private void SendAgentDataUpdate(IClientAPI remoteClient, UUID<br>
> dataForAgentID, UUID activeGroupID, string activeGroupName, ulong<br>
> activeGroupPowers, string activeGroupTitle)<br>
> {<br>
> if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called",<br>
> System.Reflection.MethodBase.GetCurrentMethod().Name);<br>
><br>
><br>
> Let me know if this is the right sort of thing. Note that I cut a few lines<br>
> from the top that git output to the patchfile, that I cut out. They may be<br>
> necessary Idk, but if so let me know and I'll save them before I make a<br>
> redux on the mantis site.<br>
><br>
> Cheers Justin!<br>
> James<br>
><br>
><br>
><br>
> On Fri, May 27, 2011 at 7:08 PM, James Stallings II <<br>
> <a href="mailto:james.stallings@gmail.com">james.stallings@gmail.com</a>> wrote:<br>
><br>
>> Thanks Justin,<br>
>><br>
>> Will do just shortly.<br>
>><br>
>> Cheers!<br>
>> James<br>
>><br>
>><br>
>> On Fri, May 27, 2011 at 7:08 PM, Justin Clark-Casey <<br>
>> <a href="mailto:jjustincc@googlemail.com">jjustincc@googlemail.com</a>> wrote:<br>
>><br>
>>> Yes, please could you consolidate the patches (from a brief look it<br>
>>> appears that later ones are now editing earlier ones) and attach to a<br>
>>> mantis, which should be in patch included state.<br>
>>><br>
>>> The best way to generate a suitable patch is to use<br>
>>><br>
>>> git am <commit uuid>^<br>
>>><br>
>>> on the command line.<br>
>>><br>
>>><br>
>>> On 27/05/11 02:01, James Stallings II wrote:<br>
>>><br>
>>>> Just a quick apology to the list for the oldskool diff, Melanie_T tells<br>
>>>> me I should use udiff, and next time, I will.<br>
>>>><br>
>>>> Cheers!<br>
>>>> James/Hiro<br>
>>>><br>
>>>> On Thu, May 26, 2011 at 6:19 PM, James Stallings II <<br>
>>>> <a href="mailto:james.stallings@gmail.com">james.stallings@gmail.com</a> <mailto:<a href="mailto:james.stallings@gmail.com">james.stallings@gmail.com</a>>> wrote:<br>
>>>><br>
>>>> My apologies, but the previous code was completely ineffective on<br>
>>>> testing. I know, it should be tested before<br>
>>>> submission. Mea Culpa, it looked really good.<br>
>>>><br>
>>>> This, however, actually works:<br>
>>>><br>
>>>> 1103d1102<br>
>>>> <<br>
>>>> 1117,1125c1116,1125<br>
>>>> <<br>
>>>> < if (GetRequestingAgentID(remoteClient) !=<br>
>>>> dataForAgentID)<br>
>>>> < {<br>
>>>> < if (!membership.ListInProfile)<br>
>>>> < {<br>
>>>> < // If we're sending group info to remoteclient<br>
>>>> about another agent,<br>
>>>> < // filter out groups the other agent doesn't<br>
>>>> want to share.<br>
>>>> < continue;<br>
>>>> < }<br>
>>>> ---<br>
>>>> > if<br>
>>>> (!remoteClient.Scene.Permissions.IsGod(remoteClient.AgentID))<br>
>>>> > if (GetRequestingAgentID(remoteClient) !=<br>
>>>> dataForAgentID)<br>
>>>> > {<br>
>>>> > if (!membership.ListInProfile)<br>
>>>> > {<br>
>>>> > // If we're sending group info to<br>
>>>> remoteclient about another agent,<br>
>>>> > // filter out groups the other agent<br>
>>>> doesn't want to share.<br>
>>>> > continue;<br>
>>>> > }<br>
>>>> > }<br>
>>>> 1128d1127<br>
>>>> <<br>
>>>> 1237,1242c1236,1237<br>
>>>> < // c_scene and property accessor 'is_god' are in<br>
>>>> support of the opertions to bypass 'hidden' group<br>
>>>> attributes for<br>
>>>> < // those with a GodLike aspect.<br>
>>>> < Scene c_scene = (Scene) requestingClient.Scene;<br>
>>>> < bool is_god =<br>
>>>> c_scene.Permissions.IsGod(requestingClient.AgentId);<br>
>>>> <<br>
>>>> < if(is_god) {<br>
>>>> ---<br>
>>>> > if (requestingClient.AgentId != dataForAgentID)<br>
>>>> > {<br>
>>>> 1248c1243<br>
>>>> < membershipArray = membershipData.ToArray();<br>
>>>> ---<br>
>>>> > membershipArray =<br>
>>>> membershipData.FindAll(showInProfile).ToArray();<br>
>>>> 1252,1265c1247<br>
>>>> <<br>
>>>> < if (requestingClient.AgentId != dataForAgentID)<br>
>>>> < {<br>
>>>> < Predicate<GroupMembershipData> showInProfile =<br>
>>>> delegate(GroupMembershipData membership)<br>
>>>> < {<br>
>>>> < return membership.ListInProfile;<br>
>>>> < };<br>
>>>> <<br>
>>>> < membershipArray =<br>
>>>> membershipData.FindAll(showInProfile).ToArray();<br>
>>>> < }<br>
>>>> < else<br>
>>>> < {<br>
>>>> < membershipArray = membershipData.ToArray();<br>
>>>> < }<br>
>>>> ---<br>
>>>> > membershipArray = membershipData.ToArray();<br>
>>>> 1266a1249<br>
>>>> ><br>
>>>><br>
>>>> On Thu, May 26, 2011 at 11:36 AM, James Stallings II <<br>
>>>> <a href="mailto:james.stallings@gmail.com">james.stallings@gmail.com</a> <mailto:<a href="mailto:james.stallings@gmail.com">james.stallings@gmail.com</a>>><br>
>>>><br>
>>>> wrote:<br>
>>>><br>
>>>> Greetings, OpenSimulator developers :)<br>
>>>><br>
>>>> I'm writing to propose the addition of certain functionality<br>
>>>> to<br>
>>>> OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs, to wit:<br>
>>>><br>
>>>> Present 'Hidden' groups and other related group detail to agents<br>
>>>> requesting such iniformation via CAPs as have<br>
>>>> assumed a 'godlike' aspect, or in other words, have successfully<br>
>>>> activated the administrative functionality in<br>
>>>> the client.<br>
>>>><br>
>>>> The changes to the substance of the code involve credits more than<br>
>>>> not; a diff is both attached and included for<br>
>>>> convenient review. A fork has been created on github at git://<br>
>>>> <a href="http://github.com/JamesStallings/opensim.git" target="_blank">github.com/JamesStallings/opensim.git</a><br>
>>>> <<a href="http://github.com/JamesStallings/opensim.git" target="_blank">http://github.com/JamesStallings/opensim.git</a>> which contains the<br>
>>>> changes for convenience should contribution of<br>
>>>><br>
>>>> source be accepted. I will also open a mantis on the topic for the<br>
>>>> sake of thoroughness and attach the diff there.<br>
>>>><br>
>>>><br>
>>>> Many thanks and cheers!<br>
>>>><br>
>>>> James Stallings aka Hiro Protagonist<br>
>>>><br>
>>>><br>
>>>> Diff follows:<br>
>>>><br>
>>>> 1103,1107d1102<br>
>>>> < // c_scene and property accessor 'is_god' are in<br>
>>>> support of the opertions to bypass 'hidden'<br>
>>>> group attributes for<br>
>>>> < // those with a GodLike aspect.<br>
>>>> < Scene c_scene = (Scene) remoteClient.Scene;<br>
>>>> < bool is_god =<br>
>>>> c_scene.Permissions.IsGod(remoteClient.AgentId);<br>
>>>> <<br>
>>>> 1121,1138c1116,1126<br>
>>>> < // bypass the 'hidden' attributes of groups for<br>
>>>> those who have<br>
>>>> < // a GodLike aspect<br>
>>>> < //<br>
>>>> < // Big shout out to Dan Banner for showing me his<br>
>>>> running proof-of-concept and endorsing this<br>
>>>> idea as meaningful work<br>
>>>> < // Another big shout out to BlueWall Slade for<br>
>>>> helping me chase down all the elements required to<br>
>>>> properly access<br>
>>>> < // Scene and IClientAPI properties. JS aka HP<br>
>>>> < if (!is_god)<br>
>>>> < {<br>
>>>> < if (GetRequestingAgentID(remoteClient) !=<br>
>>>> dataForAgentID)<br>
>>>> < {<br>
>>>> < if (!membership.ListInProfile)<br>
>>>> < {<br>
>>>> < // If we're sending group info to remoteclient<br>
>>>> about another agent,<br>
>>>> < // filter out groups the other agent doesn't want to<br>
>>>> share.<br>
>>>> < continue;<br>
>>>> < }<br>
>>>> < }<br>
>>>> < }<br>
>>>> ---<br>
>>>> > if<br>
>>>> (!remoteClient.Scene.Permissions.IsGod(remoteClient.AgentID))<br>
>>>> > if (GetRequestingAgentID(remoteClient) !=<br>
>>>> dataForAgentID)<br>
>>>> > {<br>
>>>> > if (!membership.ListInProfile)<br>
>>>> > {<br>
>>>> > // If we're sending group info to<br>
>>>> remoteclient about another agent,<br>
>>>> > // filter out groups the other<br>
>>>> agent doesn't want to share.<br>
>>>> > continue;<br>
>>>> > }<br>
>>>> > }<br>
>>>> > }<br>
>>>><br>
>>>><br>
>>>> --<br>
>>>> ===================================<br>
>>>> <a href="http://simhost.com" target="_blank">http://simhost.com</a> <a href="http://osgrid.org" target="_blank">http://osgrid.org</a><br>
>>>> <a href="http://twitter.com/jstallings2" target="_blank">http://twitter.com/jstallings2</a><br>
>>>> <a href="http://www.linkedin.com/pub/5/770/a49" target="_blank">http://www.linkedin.com/pub/5/770/a49</a><br>
>>>><br>
>>>><br>
>>>><br>
>>>><br>
>>>> --<br>
>>>> ===================================<br>
>>>> <a href="http://simhost.com" target="_blank">http://simhost.com</a> <a href="http://osgrid.org" target="_blank">http://osgrid.org</a><br>
>>>> <a href="http://twitter.com/jstallings2" target="_blank">http://twitter.com/jstallings2</a><br>
>>>> <a href="http://www.linkedin.com/pub/5/770/a49" target="_blank">http://www.linkedin.com/pub/5/770/a49</a><br>
>>>><br>
>>>><br>
>>>><br>
>>>><br>
>>>> --<br>
>>>> ===================================<br>
>>>> <a href="http://simhost.com" target="_blank">http://simhost.com</a> <a href="http://osgrid.org" target="_blank">http://osgrid.org</a><br>
>>>> <a href="http://twitter.com/jstallings2" target="_blank">http://twitter.com/jstallings2</a><br>
>>>> <a href="http://www.linkedin.com/pub/5/770/a49" target="_blank">http://www.linkedin.com/pub/5/770/a49</a><br>
>>>><br>
>>>><br>
>>>><br>
>>>> _______________________________________________<br>
>>>> Opensim-dev mailing list<br>
>>>> <a href="mailto:Opensim-dev@lists.berlios.de">Opensim-dev@lists.berlios.de</a><br>
>>>> <a href="https://lists.berlios.de/mailman/listinfo/opensim-dev" target="_blank">https://lists.berlios.de/mailman/listinfo/opensim-dev</a><br>
>>>><br>
>>><br>
>>><br>
>>> --<br>
>>> Justin Clark-Casey (justincc)<br>
>>> <a href="http://justincc.org/blog" target="_blank">http://justincc.org/blog</a><br>
>>> <a href="http://twitter.com/justincc" target="_blank">http://twitter.com/justincc</a><br>
>>> _______________________________________________<br>
>>> Opensim-dev mailing list<br>
>>> <a href="mailto:Opensim-dev@lists.berlios.de">Opensim-dev@lists.berlios.de</a><br>
>>> <a href="https://lists.berlios.de/mailman/listinfo/opensim-dev" target="_blank">https://lists.berlios.de/mailman/listinfo/opensim-dev</a><br>
>>><br>
>><br>
>><br>
>><br>
>> --<br>
>> ===================================<br>
>> <a href="http://simhost.com" target="_blank">http://simhost.com</a> <a href="http://osgrid.org" target="_blank">http://osgrid.org</a><br>
>> <a href="http://twitter.com/jstallings2" target="_blank">http://twitter.com/jstallings2</a><br>
>> <a href="http://www.linkedin.com/pub/5/770/a49" target="_blank">http://www.linkedin.com/pub/5/770/a49</a><br>
>><br>
><br>
><br>
><br>
><br>
><br>
> _______________________________________________<br>
> Opensim-dev mailing list<br>
> <a href="mailto:Opensim-dev@lists.berlios.de">Opensim-dev@lists.berlios.de</a><br>
> <a href="https://lists.berlios.de/mailman/listinfo/opensim-dev" target="_blank">https://lists.berlios.de/mailman/listinfo/opensim-dev</a><br>
_______________________________________________<br>
Opensim-dev mailing list<br>
<a href="mailto:Opensim-dev@lists.berlios.de">Opensim-dev@lists.berlios.de</a><br>
<a href="https://lists.berlios.de/mailman/listinfo/opensim-dev" target="_blank">https://lists.berlios.de/mailman/listinfo/opensim-dev</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>===================================<br><a href="http://simhost.com" target="_blank">http://simhost.com</a> <a href="http://osgrid.org" target="_blank">http://osgrid.org</a><br>
<a href="http://twitter.com/jstallings2" target="_blank">http://twitter.com/jstallings2</a><br><a href="http://www.linkedin.com/pub/5/770/a49" target="_blank">http://www.linkedin.com/pub/5/770/a49</a><br>
</div>