[Opensim-dev] Proposed feature addition to OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs (patch included)

James Stallings II james.stallings at gmail.com
Tue May 31 01:45:25 UTC 2011


New mantis on the site with a unified diff, my apologies do not have the url
on hand atm; comments are not only welcome but solicited XD

Thanks!
James


On Mon, May 30, 2011 at 5:20 PM, Justin Clark-Casey <
jjustincc at googlemail.com> wrote:

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



-- 
===================================
http://simhost.com http://osgrid.org
http://twitter.com/jstallings2
http://www.linkedin.com/pub/5/770/a49
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://opensimulator.org/pipermail/opensim-dev/attachments/20110530/0561638d/attachment-0001.html>


More information about the Opensim-dev mailing list