From ee4d4d784eb9b51b29fe4bda3fc9ec3594d24f5a Mon Sep 17 00:00:00 2001
From: Melanie Thielker
Date: Fri, 21 Nov 2008 07:33:13 +0000
Subject: Fully implement object return from the parcel dialog
---
.../Region/Environment/Scenes/Scene.Inventory.cs | 144 ++-------------------
1 file changed, 8 insertions(+), 136 deletions(-)
(limited to 'OpenSim/Region/Environment/Scenes/Scene.Inventory.cs')
diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
index 79d79ef..19b8e16 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
@@ -1610,6 +1610,10 @@ namespace OpenSim.Region.Environment.Scenes
ExternalChecks.ExternalChecksCanDeleteObject(
grp.UUID,
remoteClient.AgentId);
+ if (permissionToDelete)
+ {
+ AddReturn(grp.OwnerID, grp.Name, grp.AbsolutePosition, "parcel owner return");
+ }
}
else // Auto return passes through here with null agent
{
@@ -2207,145 +2211,13 @@ namespace OpenSim.Region.Environment.Scenes
public virtual bool returnObjects(SceneObjectGroup[] returnobjects, UUID AgentId)
{
- string message = "";
- if (returnobjects.Length <= 0)
- return false;
-
- // for the moment we're going to store them individually.. however, in the future, the rezObject
- // will be able to have more items.
-
- //string returnstring = "";
- //returnstring += "\n";
- //for (int i = 0; i < returnobjects.Length; i++)
- //{
- // returnstring += grp.ToXmlString2();
- //}
- //returnstring += "\n";
-
- bool permissionToDelete = false;
-
- for (int i = 0; i < returnobjects.Length; i++)
- {
- CachedUserInfo userInfo =
- CommsManager.UserProfileCacheService.GetUserDetails(returnobjects[i].OwnerID);
- if (userInfo == null)
- {
- CommsManager.UserProfileCacheService.AddNewUser(returnobjects[i].OwnerID);
-
- }
- if (userInfo != null)
- {
- if (userInfo.HasReceivedInventory)
- {
- UUID folderID = UUID.Zero;
-
- List subrootfolders = userInfo.RootFolder.RequestListOfFolders();
- foreach (InventoryFolderBase flder in subrootfolders)
- {
- if (flder.Name == "Lost And Found")
- {
- folderID = flder.ID;
- break;
- }
- }
-
- if (folderID == UUID.Zero)
- {
- folderID = userInfo.RootFolder.ID;
- }
- permissionToDelete = ExternalChecks.ExternalChecksCanReturnObject(returnobjects[i].UUID, AgentId);
-
- // If the user doesn't have permission, go on to the next one.
- if (!permissionToDelete)
- continue;
-
- string sceneObjectXml = returnobjects[i].ToXmlString2();
- AssetBase asset = CreateAsset(
- returnobjects[i].GetPartName(returnobjects[i].LocalId),
- returnobjects[i].GetPartDescription(returnobjects[i].LocalId),
- (sbyte)AssetType.Object,
- Utils.StringToBytes(sceneObjectXml));
- AssetCache.AddAsset(asset);
-
- InventoryItemBase item = new InventoryItemBase();
- item.Creator = returnobjects[i].RootPart.CreatorID;
- item.Owner = returnobjects[i].OwnerID;
- item.ID = UUID.Random();
- item.AssetID = asset.FullID;
- item.Description = asset.Description;
- item.Name = asset.Name;
- item.AssetType = asset.Type;
- item.InvType = (int)InventoryType.Object;
- item.Folder = folderID;
-
- if ((AgentId != returnobjects[i].RootPart.OwnerID) && ExternalChecks.ExternalChecksPropagatePermissions())
- {
- uint perms = returnobjects[i].GetEffectivePermissions();
- uint nextPerms = (perms & 7) << 13;
- if ((nextPerms & (uint)PermissionMask.Copy) == 0)
- perms &= ~(uint)PermissionMask.Copy;
- if ((nextPerms & (uint)PermissionMask.Transfer) == 0)
- perms &= ~(uint)PermissionMask.Transfer;
- if ((nextPerms & (uint)PermissionMask.Modify) == 0)
- perms &= ~(uint)PermissionMask.Modify;
-
- item.BasePermissions = perms & returnobjects[i].RootPart.NextOwnerMask;
- item.CurrentPermissions = item.BasePermissions;
- item.NextPermissions = returnobjects[i].RootPart.NextOwnerMask;
- item.EveryOnePermissions = returnobjects[i].RootPart.EveryoneMask & returnobjects[i].RootPart.NextOwnerMask;
- item.GroupPermissions = returnobjects[i].RootPart.GroupMask & returnobjects[i].RootPart.NextOwnerMask;
- item.CurrentPermissions |= 8; // Slam!
- }
- else
- {
- item.BasePermissions = returnobjects[i].GetEffectivePermissions();
- item.CurrentPermissions = returnobjects[i].GetEffectivePermissions();
- item.NextPermissions = returnobjects[i].RootPart.NextOwnerMask;
- item.EveryOnePermissions = returnobjects[i].RootPart.EveryoneMask;
- item.GroupPermissions = returnobjects[i].RootPart.GroupMask;
- }
-
- // TODO: add the new fields (Flags, Sale info, etc)
-
- userInfo.AddItem(item);
-
- ScenePresence notifyUser = GetScenePresence(item.Owner);
- if (notifyUser != null)
- {
- notifyUser.ControllingClient.SendInventoryItemCreateUpdate(item);
- }
-
- SceneObjectGroup ObjectDeleting = returnobjects[i];
-
- returnobjects[i] = null;
-
- DeleteSceneObject(ObjectDeleting, false);
- ObjectDeleting = null;
- }
- else
- {
- CommsManager.UserProfileCacheService.RequestInventoryForUser(returnobjects[i].OwnerID);
- message = "Still waiting on the inventory service, some of the items won't be returned until the inventory services completes it's task. Try again shortly.";
- }
- }
- else
- {
- message = "Still waiting on the inventory service, some of the items won't be returned until the inventory services completes it's task. Try again shortly.";
- }
- //return true;
- }
-
- if (message.Length != 0)
+ foreach (SceneObjectGroup grp in returnobjects)
{
- ScenePresence returningavatar = GetScenePresence(AgentId);
- if (returningavatar != null)
- {
- returningavatar.ControllingClient.SendAlertMessage(message);
- }
- return false;
+ AddReturn(grp.OwnerID, grp.Name, grp.AbsolutePosition, "parcel owner return");
+ DeRezObject(null, grp.RootPart.LocalId,
+ grp.RootPart.GroupID, 9, UUID.Zero);
}
return true;
-
}
public void SetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID, bool running)
--
cgit v1.1