aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/CoreModules/World/Estate/EstateManagementCommands.cs135
-rw-r--r--OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs25
2 files changed, 157 insertions, 3 deletions
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementCommands.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementCommands.cs
index 1659493..59dd3bb 100644
--- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementCommands.cs
+++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementCommands.cs
@@ -39,6 +39,7 @@ using OpenSim.Framework.Console;
39using OpenSim.Region.CoreModules.Framework.InterfaceCommander; 39using OpenSim.Region.CoreModules.Framework.InterfaceCommander;
40using OpenSim.Region.Framework.Interfaces; 40using OpenSim.Region.Framework.Interfaces;
41using OpenSim.Region.Framework.Scenes; 41using OpenSim.Region.Framework.Scenes;
42using OpenSim.Services.Interfaces;
42 43
43namespace OpenSim.Region.CoreModules.World.Estate 44namespace OpenSim.Region.CoreModules.World.Estate
44{ 45{
@@ -50,9 +51,18 @@ namespace OpenSim.Region.CoreModules.World.Estate
50 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 51 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
51 52
52 protected EstateManagementModule m_module; 53 protected EstateManagementModule m_module;
53 54
54 protected Commander m_commander = new Commander("estate"); 55 protected Commander m_commander = new Commander("estate");
55 56
57 // variable used in processing "estate set owner"
58 private static string[] m_ownerCmd = null;
59
60 // variable used in processing "estate set owner"
61 private static UserAccount m_ownerAccount;
62
63 // variable used in processing "estate set owner"
64 private static List<uint> m_ownerEstates;
65
56 public EstateManagementCommands(EstateManagementModule module) 66 public EstateManagementCommands(EstateManagementModule module)
57 { 67 {
58 m_module = module; 68 m_module = module;
@@ -85,7 +95,12 @@ namespace OpenSim.Region.CoreModules.World.Estate
85 95
86 m_module.Scene.AddCommand( 96 m_module.Scene.AddCommand(
87 "Estates", m_module, "estate show", "estate show", "Shows all estates on the simulator.", ShowEstatesCommand); 97 "Estates", m_module, "estate show", "estate show", "Shows all estates on the simulator.", ShowEstatesCommand);
88 } 98
99 m_module.Scene.AddCommand(
100 "Estates", m_module, "estate set owner", "estate set owner [ <UUID> | <Firstname> <Lastname> ]",
101 "Sets the owner of the current region's estate to the specified UUID or user. " +
102 "If called from root region, all estates will be prompted for change.", SetEstateOwnerCommand);
103 }
89 104
90 public void Close() {} 105 public void Close() {}
91 106
@@ -226,5 +241,119 @@ namespace OpenSim.Region.CoreModules.World.Estate
226 241
227 MainConsole.Instance.Output(report.ToString()); 242 MainConsole.Instance.Output(report.ToString());
228 } 243 }
244
245 protected void SetEstateOwnerCommand(string module, string[] args)
246 {
247 string response = null;
248
249 EstateSettings es = m_module.Scene.RegionInfo.EstateSettings;
250
251 if(args != m_ownerCmd)
252 {
253 // new command... clear out the old values
254 m_ownerCmd = args;
255 m_ownerEstates = new List<uint>();
256 m_ownerAccount = null;
257 }
258
259 if (MainConsole.Instance.ConsoleScene == null)
260 {
261 if(m_ownerEstates.Contains(es.EstateID))
262 {
263 // already checked this one
264 return;
265 }
266 else if(m_ownerEstates.Count > 0 && m_ownerAccount == null)
267 {
268 // lookup will have been tried and not found.
269 return;
270 }
271 // flag this estate, so it is not tried multiple times
272 m_ownerEstates.Add(es.EstateID);
273 }
274 else if(MainConsole.Instance.ConsoleScene != m_module.Scene)
275 {
276 // trying to process a single region, and this isn't it
277 return;
278 }
279 UserAccount account = null;
280 if(m_ownerAccount == null)
281 {
282 if(args.Length == 3)
283 {
284 response = "No user specified.";
285 }
286 else
287 {
288 // TODO: Is there a better choice here?
289 UUID scopeID = UUID.Zero;
290
291 string s1 = args[3];
292 if(args.Length == 4)
293 {
294 // attempt to get account by UUID
295 UUID u;
296 if(UUID.TryParse(s1, out u))
297 {
298 account = m_module.Scene.UserAccountService.GetUserAccount(scopeID, u);
299 if(account == null)
300 {
301 response = String.Format("Could not find user {0}", s1);
302 }
303 }
304 else
305 {
306 response = String.Format("Invalid UUID {0}", s1);
307 account = null;
308 }
309 }
310 else
311 {
312 // attempt to get account by Firstname, Lastname
313 string s2 = args[4];
314 account = m_module.Scene.UserAccountService.GetUserAccount(scopeID, s1, s2);
315 if(account == null)
316 {
317 response = String.Format("Could not find user {0} {1}", s1, s2);
318 }
319 }
320 }
321 }
322 else
323 {
324 account = m_ownerAccount;
325 }
326 if(account != null)
327 {
328 if (MainConsole.Instance.ConsoleScene == null)
329 m_ownerAccount = account;
330
331 string choice;
332 do
333 {
334 // Get user confirmation, in case there are multiple estates involved (from root)
335 choice = MainConsole.Instance.CmdPrompt(
336 string.Format("Change owner of Estate {0} ({1}) [y/n]? ",es.EstateID, es.EstateName),
337 "Y");
338
339 if("y".Equals(choice, StringComparison.OrdinalIgnoreCase))
340 {
341 response = m_module.setEstateOwner((int)es.EstateID, account);
342 }
343 else if(!"n".Equals(choice, StringComparison.OrdinalIgnoreCase))
344 {
345 MainConsole.Instance.Output("Invalid response. Please select y or n.");
346 choice = null;
347 }
348 }
349 while(choice == null);
350 }
351
352
353 // Give the user some feedback
354 if(response != null)
355 MainConsole.Instance.Output(response);
356 }
357
229 } 358 }
230} \ No newline at end of file 359} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
index cb9ad4a..9e6d0fc 100644
--- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
@@ -40,6 +40,7 @@ using OpenMetaverse;
40using OpenSim.Framework; 40using OpenSim.Framework;
41using OpenSim.Region.Framework.Interfaces; 41using OpenSim.Region.Framework.Interfaces;
42using OpenSim.Region.Framework.Scenes; 42using OpenSim.Region.Framework.Scenes;
43using OpenSim.Services.Interfaces;
43using RegionFlags = OpenMetaverse.RegionFlags; 44using RegionFlags = OpenMetaverse.RegionFlags;
44 45
45namespace OpenSim.Region.CoreModules.World.Estate 46namespace OpenSim.Region.CoreModules.World.Estate
@@ -1202,6 +1203,30 @@ namespace OpenSim.Region.CoreModules.World.Estate
1202 sendRegionInfoPacketToAll(); 1203 sendRegionInfoPacketToAll();
1203 } 1204 }
1204 1205
1206 public string setEstateOwner(int estateID, UserAccount account)
1207 {
1208 string response;
1209
1210 // get the current settings from DB
1211 EstateSettings dbSettings = Scene.EstateDataService.LoadEstateSettings(estateID);
1212 if(account.PrincipalID != dbSettings.EstateOwner) {
1213 dbSettings.EstateOwner = account.PrincipalID;
1214 dbSettings.Save();
1215 response = String.Format("Estate owner changed to {0} ({1} {2})", account.PrincipalID, account.FirstName, account.LastName);
1216
1217 // make sure there's a log entry to document the change
1218 m_log.InfoFormat("[ESTATE]: Estate Owner for {0} changed to {1} ({2} {3})", dbSettings.EstateName,
1219 account.PrincipalID, account.FirstName, account.LastName);
1220
1221 TriggerEstateInfoChange();
1222 }
1223 else
1224 {
1225 response = String.Format("Estate already belongs to {0} ({1} {2})", account.PrincipalID, account.FirstName, account.LastName);
1226 }
1227 return response;
1228 }
1229
1205 #endregion 1230 #endregion
1206 1231
1207 private void EventManager_OnNewClient(IClientAPI client) 1232 private void EventManager_OnNewClient(IClientAPI client)