[Opensim-dev] Proposed feature addition to OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs (patch included)
James Stallings II
james.stallings at gmail.com
Sat May 28 01:37:02 UTC 2011
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>
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> 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> 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> 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>> 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>>
> >>>>
> >>>> 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> 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
> >>>> 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
> >>
> >
> >
> >
> >
> >
> > _______________________________________________
> > Opensim-dev mailing list
> > Opensim-dev at lists.berlios.de
> > https://lists.berlios.de/mailman/listinfo/opensim-dev
> _______________________________________________
> 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/20110527/7b1556a2/attachment-0001.html>
More information about the Opensim-dev
mailing list