diff --git a/src/Umbraco.Web/Trees/FileSystemTreeController.cs b/src/Umbraco.Web/Trees/FileSystemTreeController.cs
index 070885d621..0d612b5d4e 100644
--- a/src/Umbraco.Web/Trees/FileSystemTreeController.cs
+++ b/src/Umbraco.Web/Trees/FileSystemTreeController.cs
@@ -1,7 +1,11 @@
using System;
using System.IO;
+using System.Net.Http.Formatting;
+using umbraco.BusinessLogic.Actions;
+using Umbraco.Core;
using Umbraco.Core.IO;
using Umbraco.Web.Models.Trees;
+using Umbraco.Core.Services;
namespace Umbraco.Web.Trees
{
@@ -22,7 +26,7 @@ namespace Umbraco.Web.Trees
///
protected virtual void OnRenderFolderNode(ref TreeNode treeNode) { }
- protected override TreeNodeCollection GetTreeNodes(string id, System.Net.Http.Formatting.FormDataCollection queryStrings)
+ protected override TreeNodeCollection GetTreeNodes(string id, FormDataCollection queryStrings)
{
var orgPath = "";
string path;
@@ -43,15 +47,15 @@ namespace Umbraco.Web.Trees
var nodes = new TreeNodeCollection();
foreach (var dir in dirInfos)
{
- if ((dir.Attributes & FileAttributes.Hidden) == 0)
- {
- var hasChildren = dir.GetFiles().Length > 0 || dir.GetDirectories().Length > 0;
- var node = CreateTreeNode(orgPath + dir.Name, orgPath, queryStrings, dir.Name, "icon-folder", hasChildren);
+ if ((dir.Attributes & FileAttributes.Hidden) != 0)
+ continue;
- OnRenderFolderNode(ref node);
- if (node != null)
- nodes.Add(node);
- }
+ var hasChildren = dir.GetFiles().Length > 0 || dir.GetDirectories().Length > 0;
+ var node = CreateTreeNode(orgPath + dir.Name, orgPath, queryStrings, dir.Name, "icon-folder", hasChildren);
+
+ OnRenderFolderNode(ref node);
+ if (node != null)
+ nodes.Add(node);
}
//this is a hack to enable file system tree to support multiple file extension look-up
@@ -70,20 +74,82 @@ namespace Umbraco.Web.Trees
foreach (var file in fileInfo)
{
- if ((file.Attributes & FileAttributes.Hidden) == 0)
- {
- if (filterByMultipleExtensions && Array.IndexOf(allowedExtensions, file.Extension.ToLower().Trim('.')) < 0)
- continue;
+ if ((file.Attributes & FileAttributes.Hidden) != 0)
+ continue;
- var node = CreateTreeNode(orgPath + file.Name, orgPath, queryStrings, file.Name, "icon-file", false);
+ if (filterByMultipleExtensions && Array.IndexOf(allowedExtensions, file.Extension.ToLower().Trim('.')) < 0)
+ continue;
- OnRenderFileNode(ref node);
+ var withoutExt = Path.GetFileNameWithoutExtension(file.Name);
+ if (withoutExt.IsNullOrWhiteSpace())
+ continue;
- if (node != null)
- nodes.Add(node);
- }
+ var node = CreateTreeNode(orgPath + file.Name, orgPath, queryStrings, file.Name, "icon-file", false);
+
+ OnRenderFileNode(ref node);
+ if (node != null)
+ nodes.Add(node);
}
+
return nodes;
}
+
+ protected override MenuItemCollection GetMenuForNode(string id, FormDataCollection queryStrings)
+ {
+ var menu = new MenuItemCollection();
+
+ //if root node no need to visit the filesystem so lets just create the menu and return it
+ if (id == Constants.System.Root.ToInvariantString())
+ {
+ //set the default to create
+ menu.DefaultMenuAlias = ActionNew.Instance.Alias;
+ //create action
+ menu.Items.Add(Services.TextService.Localize(string.Format("actions/{0}", ActionNew.Instance.Alias)));
+ //refresh action
+ menu.Items.Add(Services.TextService.Localize(string.Format("actions/{0}", ActionRefresh.Instance.Alias)), true);
+
+ return menu;
+ }
+
+ string path;
+ if (string.IsNullOrEmpty(id) == false)
+ {
+ var orgPath = System.Web.HttpUtility.UrlDecode(id);
+ path = IOHelper.MapPath(FilePath + "/" + orgPath);
+ }
+ else
+ {
+ path = IOHelper.MapPath(FilePath);
+ }
+
+ var dirInfo = new DirectoryInfo(path);
+ //check if it's a directory
+ if (dirInfo.Attributes == FileAttributes.Directory)
+ {
+ //set the default to create
+ menu.DefaultMenuAlias = ActionNew.Instance.Alias;
+ //create action
+ menu.Items.Add(Services.TextService.Localize(string.Format("actions/{0}", ActionNew.Instance.Alias)));
+
+ var hasChildren = dirInfo.GetFiles().Length > 0 || dirInfo.GetDirectories().Length > 0;
+ //We can only delete folders if it doesn't have any children (folders or files)
+ if (hasChildren == false)
+ {
+ //delete action
+ menu.Items.Add(Services.TextService.Localize(string.Format("actions/{0}", ActionDelete.Instance.Alias)), true);
+ }
+
+ //refresh action
+ menu.Items.Add(Services.TextService.Localize(string.Format("actions/{0}", ActionRefresh.Instance.Alias)), true);
+ }
+ //if it's not a directory then we only allow to delete the item
+ else
+ {
+ //delete action
+ menu.Items.Add(Services.TextService.Localize(string.Format("actions/{0}", ActionDelete.Instance.Alias)));
+ }
+
+ return menu;
+ }
}
}
diff --git a/src/Umbraco.Web/Trees/FileSystemTreeController2.cs b/src/Umbraco.Web/Trees/FileSystemTreeController2.cs
index 79735e7e68..d43d68ee77 100644
--- a/src/Umbraco.Web/Trees/FileSystemTreeController2.cs
+++ b/src/Umbraco.Web/Trees/FileSystemTreeController2.cs
@@ -58,16 +58,15 @@ namespace Umbraco.Web.Trees
});
foreach (var file in files)
- {
+ {
var withoutExt = Path.GetFileNameWithoutExtension(file);
- if (withoutExt.IsNullOrWhiteSpace() == false)
- {
- var name = Path.GetFileName(file);
- var node = CreateTreeNode(HttpUtility.UrlEncode(file), path, queryStrings, name, FileIcon, false);
- OnRenderFileNode(ref node);
- if (node != null)
- nodes.Add(node);
- }
+ if (withoutExt.IsNullOrWhiteSpace()) continue;
+
+ var name = Path.GetFileName(file);
+ var node = CreateTreeNode(HttpUtility.UrlEncode(file), path, queryStrings, name, FileIcon, false);
+ OnRenderFileNode(ref node);
+ if (node != null)
+ nodes.Add(node);
}
return nodes;