aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Services/InventoryService/XInventoryService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Services/InventoryService/XInventoryService.cs')
-rw-r--r--OpenSim/Services/InventoryService/XInventoryService.cs46
1 files changed, 44 insertions, 2 deletions
diff --git a/OpenSim/Services/InventoryService/XInventoryService.cs b/OpenSim/Services/InventoryService/XInventoryService.cs
index f48bf60..f581f76 100644
--- a/OpenSim/Services/InventoryService/XInventoryService.cs
+++ b/OpenSim/Services/InventoryService/XInventoryService.cs
@@ -45,6 +45,7 @@ namespace OpenSim.Services.InventoryService
45 MethodBase.GetCurrentMethod().DeclaringType); 45 MethodBase.GetCurrentMethod().DeclaringType);
46 46
47 protected IXInventoryData m_Database; 47 protected IXInventoryData m_Database;
48 protected bool m_AllowDelete = true;
48 49
49 public XInventoryService(IConfigSource config) : base(config) 50 public XInventoryService(IConfigSource config) : base(config)
50 { 51 {
@@ -60,6 +61,7 @@ namespace OpenSim.Services.InventoryService
60 { 61 {
61 dllName = authConfig.GetString("StorageProvider", dllName); 62 dllName = authConfig.GetString("StorageProvider", dllName);
62 connString = authConfig.GetString("ConnectionString", connString); 63 connString = authConfig.GetString("ConnectionString", connString);
64 m_AllowDelete = authConfig.GetBoolean("AllowDelete", true);
63 // realm = authConfig.GetString("Realm", realm); 65 // realm = authConfig.GetString("Realm", realm);
64 } 66 }
65 67
@@ -259,13 +261,15 @@ namespace OpenSim.Services.InventoryService
259 261
260 public virtual List<InventoryItemBase> GetFolderItems(UUID principalID, UUID folderID) 262 public virtual List<InventoryItemBase> GetFolderItems(UUID principalID, UUID folderID)
261 { 263 {
264// m_log.DebugFormat("[XINVENTORY]: Fetch items for folder {0}", folderID);
265
262 // Since we probably don't get a valid principal here, either ... 266 // Since we probably don't get a valid principal here, either ...
263 // 267 //
264 List<InventoryItemBase> invItems = new List<InventoryItemBase>(); 268 List<InventoryItemBase> invItems = new List<InventoryItemBase>();
265 269
266 XInventoryItem[] items = m_Database.GetItems( 270 XInventoryItem[] items = m_Database.GetItems(
267 new string[] { "parentFolderID"}, 271 new string[] { "parentFolderID" },
268 new string[] { UUID.Zero.ToString() }); 272 new string[] { folderID.ToString() });
269 273
270 foreach (XInventoryItem i in items) 274 foreach (XInventoryItem i in items)
271 invItems.Add(ConvertToOpenSim(i)); 275 invItems.Add(ConvertToOpenSim(i));
@@ -302,10 +306,15 @@ namespace OpenSim.Services.InventoryService
302 // 306 //
303 public virtual bool DeleteFolders(UUID principalID, List<UUID> folderIDs) 307 public virtual bool DeleteFolders(UUID principalID, List<UUID> folderIDs)
304 { 308 {
309 if (!m_AllowDelete)
310 return false;
311
305 // Ignore principal ID, it's bogus at connector level 312 // Ignore principal ID, it's bogus at connector level
306 // 313 //
307 foreach (UUID id in folderIDs) 314 foreach (UUID id in folderIDs)
308 { 315 {
316 if (!ParentIsTrash(id))
317 continue;
309 InventoryFolderBase f = new InventoryFolderBase(); 318 InventoryFolderBase f = new InventoryFolderBase();
310 f.ID = id; 319 f.ID = id;
311 PurgeFolder(f); 320 PurgeFolder(f);
@@ -317,6 +326,12 @@ namespace OpenSim.Services.InventoryService
317 326
318 public virtual bool PurgeFolder(InventoryFolderBase folder) 327 public virtual bool PurgeFolder(InventoryFolderBase folder)
319 { 328 {
329 if (!m_AllowDelete)
330 return false;
331
332 if (!ParentIsTrash(folder.ID))
333 return false;
334
320 XInventoryFolder[] subFolders = m_Database.GetFolders( 335 XInventoryFolder[] subFolders = m_Database.GetFolders(
321 new string[] { "parentFolderID" }, 336 new string[] { "parentFolderID" },
322 new string[] { folder.ID.ToString() }); 337 new string[] { folder.ID.ToString() });
@@ -356,6 +371,9 @@ namespace OpenSim.Services.InventoryService
356 371
357 public virtual bool DeleteItems(UUID principalID, List<UUID> itemIDs) 372 public virtual bool DeleteItems(UUID principalID, List<UUID> itemIDs)
358 { 373 {
374 if (!m_AllowDelete)
375 return false;
376
359 // Just use the ID... *facepalms* 377 // Just use the ID... *facepalms*
360 // 378 //
361 foreach (UUID id in itemIDs) 379 foreach (UUID id in itemIDs)
@@ -517,5 +535,29 @@ namespace OpenSim.Services.InventoryService
517 535
518 return newItem; 536 return newItem;
519 } 537 }
538
539 private bool ParentIsTrash(UUID folderID)
540 {
541 XInventoryFolder[] folder = m_Database.GetFolders(new string[] {"folderID"}, new string[] {folderID.ToString()});
542 if (folder.Length < 1)
543 return false;
544
545 UUID parentFolder = folder[0].parentFolderID;
546
547 while (parentFolder != UUID.Zero)
548 {
549 XInventoryFolder[] parent = m_Database.GetFolders(new string[] {"folderID"}, new string[] {parentFolder.ToString()});
550 if (parent.Length < 1)
551 return false;
552
553 if (parent[0].type == (int)AssetType.TrashFolder)
554 return true;
555 if (parent[0].type == (int)AssetType.RootFolder)
556 return false;
557
558 parentFolder = parent[0].parentFolderID;
559 }
560 return false;
561 }
520 } 562 }
521} 563}