diff options
6 files changed, 88 insertions, 2 deletions
diff --git a/OpenSim/Addons/Groups/GroupsExtendedData.cs b/OpenSim/Addons/Groups/GroupsExtendedData.cs index 6f4db28..1632aee 100644 --- a/OpenSim/Addons/Groups/GroupsExtendedData.cs +++ b/OpenSim/Addons/Groups/GroupsExtendedData.cs | |||
@@ -504,6 +504,30 @@ namespace OpenSim.Groups | |||
504 | 504 | ||
505 | return notice; | 505 | return notice; |
506 | } | 506 | } |
507 | |||
508 | public static Dictionary<string, object> DirGroupsReplyData(DirGroupsReplyData g) | ||
509 | { | ||
510 | Dictionary<string, object> dict = new Dictionary<string, object>(); | ||
511 | |||
512 | dict["GroupID"] = g.groupID; | ||
513 | dict["Name"] = g.groupName; | ||
514 | dict["NMembers"] = g.members; | ||
515 | dict["SearchOrder"] = g.searchOrder; | ||
516 | |||
517 | return dict; | ||
518 | } | ||
519 | |||
520 | public static DirGroupsReplyData DirGroupsReplyData(Dictionary<string, object> dict) | ||
521 | { | ||
522 | DirGroupsReplyData g; | ||
523 | |||
524 | g.groupID = new UUID(dict["GroupID"].ToString()); | ||
525 | g.groupName = dict["Name"].ToString(); | ||
526 | Int32.TryParse(dict["NMembers"].ToString(), out g.members); | ||
527 | float.TryParse(dict["SearchOrder"].ToString(), out g.searchOrder); | ||
528 | |||
529 | return g; | ||
530 | } | ||
507 | } | 531 | } |
508 | 532 | ||
509 | } | 533 | } |
diff --git a/OpenSim/Addons/Groups/GroupsModule.cs b/OpenSim/Addons/Groups/GroupsModule.cs index a14dc6a..7d3c064 100644 --- a/OpenSim/Addons/Groups/GroupsModule.cs +++ b/OpenSim/Addons/Groups/GroupsModule.cs | |||
@@ -313,6 +313,10 @@ namespace OpenSim.Groups | |||
313 | m_log.DebugFormat( | 313 | m_log.DebugFormat( |
314 | "[Groups]: {0} called with queryText({1}) queryFlags({2}) queryStart({3})", | 314 | "[Groups]: {0} called with queryText({1}) queryFlags({2}) queryStart({3})", |
315 | System.Reflection.MethodBase.GetCurrentMethod().Name, queryText, (DirFindFlags)queryFlags, queryStart); | 315 | System.Reflection.MethodBase.GetCurrentMethod().Name, queryText, (DirFindFlags)queryFlags, queryStart); |
316 | |||
317 | |||
318 | if (string.IsNullOrEmpty(queryText)) | ||
319 | remoteClient.SendDirGroupsReply(queryID, new DirGroupsReplyData[0]); | ||
316 | 320 | ||
317 | // TODO: This currently ignores pretty much all the query flags including Mature and sort order | 321 | // TODO: This currently ignores pretty much all the query flags including Mature and sort order |
318 | remoteClient.SendDirGroupsReply(queryID, m_groupData.FindGroups(GetRequestingAgentIDStr(remoteClient), queryText).ToArray()); | 322 | remoteClient.SendDirGroupsReply(queryID, m_groupData.FindGroups(GetRequestingAgentIDStr(remoteClient), queryText).ToArray()); |
diff --git a/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnector.cs b/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnector.cs index 04328c9..9a3e125 100644 --- a/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnector.cs +++ b/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnector.cs | |||
@@ -133,6 +133,36 @@ namespace OpenSim.Groups | |||
133 | return GroupsDataUtils.GroupRecord((Dictionary<string, object>)ret["RESULT"]); | 133 | return GroupsDataUtils.GroupRecord((Dictionary<string, object>)ret["RESULT"]); |
134 | } | 134 | } |
135 | 135 | ||
136 | public List<DirGroupsReplyData> FindGroups(string RequestingAgentID, string query) | ||
137 | { | ||
138 | List<DirGroupsReplyData> hits = new List<DirGroupsReplyData>(); | ||
139 | if (string.IsNullOrEmpty(query)) | ||
140 | return hits; | ||
141 | |||
142 | Dictionary<string, object> sendData = new Dictionary<string, object>(); | ||
143 | sendData["Query"] = query; | ||
144 | sendData["RequestingAgentID"] = RequestingAgentID; | ||
145 | |||
146 | Dictionary<string, object> ret = MakeRequest("FINDGROUPS", sendData); | ||
147 | |||
148 | if (ret == null) | ||
149 | return hits; | ||
150 | |||
151 | if (!ret.ContainsKey("RESULT")) | ||
152 | return hits; | ||
153 | |||
154 | if (ret["RESULT"].ToString() == "NULL") | ||
155 | return hits; | ||
156 | |||
157 | foreach (object v in ((Dictionary<string, object>)ret["RESULT"]).Values) | ||
158 | { | ||
159 | DirGroupsReplyData m = GroupsDataUtils.DirGroupsReplyData((Dictionary<string, object>)v); | ||
160 | hits.Add(m); | ||
161 | } | ||
162 | |||
163 | return hits; | ||
164 | } | ||
165 | |||
136 | public GroupMembershipData AddAgentToGroup(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID, string token, out string reason) | 166 | public GroupMembershipData AddAgentToGroup(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID, string token, out string reason) |
137 | { | 167 | { |
138 | reason = string.Empty; | 168 | reason = string.Empty; |
diff --git a/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnectorModule.cs b/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnectorModule.cs index 9b6bfbd..d3de0e8 100644 --- a/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnectorModule.cs +++ b/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnectorModule.cs | |||
@@ -199,7 +199,7 @@ namespace OpenSim.Groups | |||
199 | public List<DirGroupsReplyData> FindGroups(string RequestingAgentID, string search) | 199 | public List<DirGroupsReplyData> FindGroups(string RequestingAgentID, string search) |
200 | { | 200 | { |
201 | // TODO! | 201 | // TODO! |
202 | return new List<DirGroupsReplyData>(); | 202 | return m_GroupsService.FindGroups(RequestingAgentID, search); |
203 | } | 203 | } |
204 | 204 | ||
205 | public bool AddAgentToGroup(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID, string token, out string reason) | 205 | public bool AddAgentToGroup(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID, string token, out string reason) |
diff --git a/OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs b/OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs index 106c6c4..249d974 100644 --- a/OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs +++ b/OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs | |||
@@ -133,6 +133,8 @@ namespace OpenSim.Groups | |||
133 | return HandleAddNotice(request); | 133 | return HandleAddNotice(request); |
134 | case "GETNOTICES": | 134 | case "GETNOTICES": |
135 | return HandleGetNotices(request); | 135 | return HandleGetNotices(request); |
136 | case "FINDGROUPS": | ||
137 | return HandleFindGroups(request); | ||
136 | } | 138 | } |
137 | m_log.DebugFormat("[GROUPS HANDLER]: unknown method request: {0}", method); | 139 | m_log.DebugFormat("[GROUPS HANDLER]: unknown method request: {0}", method); |
138 | } | 140 | } |
@@ -740,6 +742,32 @@ namespace OpenSim.Groups | |||
740 | return Util.UTF8NoBomEncoding.GetBytes(xmlString); | 742 | return Util.UTF8NoBomEncoding.GetBytes(xmlString); |
741 | } | 743 | } |
742 | 744 | ||
745 | byte[] HandleFindGroups(Dictionary<string, object> request) | ||
746 | { | ||
747 | Dictionary<string, object> result = new Dictionary<string, object>(); | ||
748 | |||
749 | if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("Query")) | ||
750 | NullResult(result, "Bad network data"); | ||
751 | |||
752 | List<DirGroupsReplyData> hits = m_GroupsService.FindGroups(request["RequestingAgentID"].ToString(), request["Query"].ToString()); | ||
753 | |||
754 | if (hits == null || (hits != null && hits.Count == 0)) | ||
755 | NullResult(result, "No hits"); | ||
756 | else | ||
757 | { | ||
758 | Dictionary<string, object> dict = new Dictionary<string, object>(); | ||
759 | int i = 0; | ||
760 | foreach (DirGroupsReplyData n in hits) | ||
761 | dict["n-" + i++] = GroupsDataUtils.DirGroupsReplyData(n); | ||
762 | |||
763 | result["RESULT"] = dict; | ||
764 | } | ||
765 | |||
766 | |||
767 | string xmlString = ServerUtils.BuildXmlResponse(result); | ||
768 | return Util.UTF8NoBomEncoding.GetBytes(xmlString); | ||
769 | } | ||
770 | |||
743 | 771 | ||
744 | #region Helpers | 772 | #region Helpers |
745 | 773 | ||
diff --git a/OpenSim/Data/MySQL/MySQLGroupsData.cs b/OpenSim/Data/MySQL/MySQLGroupsData.cs index 2a1bd6c..0318284 100644 --- a/OpenSim/Data/MySQL/MySQLGroupsData.cs +++ b/OpenSim/Data/MySQL/MySQLGroupsData.cs | |||
@@ -88,7 +88,7 @@ namespace OpenSim.Data.MySQL | |||
88 | if (string.IsNullOrEmpty(pattern)) | 88 | if (string.IsNullOrEmpty(pattern)) |
89 | pattern = "1 ORDER BY Name LIMIT 100"; | 89 | pattern = "1 ORDER BY Name LIMIT 100"; |
90 | else | 90 | else |
91 | pattern = string.Format("Name LIKE %{0}% ORDER BY Name LIMIT 100", pattern); | 91 | pattern = string.Format("Name LIKE '%{0}%' ORDER BY Name LIMIT 100", pattern); |
92 | 92 | ||
93 | return m_Groups.Get(pattern); | 93 | return m_Groups.Get(pattern); |
94 | } | 94 | } |