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>