Files
Umbraco-CMS/umbraco/presentation/umbraco/Trees/FileSystemTree.cs
Shandem 0bdf7f472e DO NOT DOWNLOAD - GET THE STABLE SOURCE FROM THE DOWNLOADS TAB
Fixes 21623 (adds tree rendering events to all trees that can support it)

[TFS Changeset #64434]
2010-03-04 12:02:07 +00:00

112 lines
4.1 KiB
C#

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using umbraco.IO;
namespace umbraco.cms.presentation.Trees
{
public abstract class FileSystemTree : BaseTree
{
public FileSystemTree(string application) : base(application) { }
public override abstract void RenderJS(ref System.Text.StringBuilder Javascript);
protected override abstract void CreateRootNode(ref XmlTreeNode rootNode);
protected abstract string FilePath { get;}
protected abstract string FileSearchPattern { get;}
/// <summary>
/// Inheritors can override this method to modify the file node that is created.
/// </summary>
/// <param name="xNode"></param>
protected virtual void OnRenderFileNode(ref XmlTreeNode xNode) { }
/// <summary>
/// Inheritors can override this method to modify the folder node that is created.
/// </summary>
/// <param name="xNode"></param>
protected virtual void OnRenderFolderNode(ref XmlTreeNode xNode) { }
public override void Render(ref XmlTree tree)
{
string orgPath = "";
string path = "";
if (!string.IsNullOrEmpty(this.NodeKey))
{
orgPath = this.NodeKey;
path = IOHelper.MapPath(FilePath + orgPath);
orgPath += "/";
}
else
{
path = IOHelper.MapPath(FilePath);
}
DirectoryInfo dirInfo = new DirectoryInfo(path);
DirectoryInfo[] dirInfos = dirInfo.GetDirectories();
foreach (DirectoryInfo dir in dirInfos)
{
if ((dir.Attributes & FileAttributes.Hidden) == 0)
{
XmlTreeNode xDirNode = XmlTreeNode.Create(this);
xDirNode.NodeID = orgPath + dir.Name;
xDirNode.Menu.Clear();
xDirNode.Text = dir.Name;
xDirNode.Action = string.Empty;
xDirNode.Source = GetTreeServiceUrl(orgPath + dir.Name);
xDirNode.Icon = FolderIcon;
xDirNode.OpenIcon = FolderIconOpen;
xDirNode.HasChildren = dir.GetFiles().Length > 0 || dir.GetDirectories().Length > 0;
OnRenderFolderNode(ref xDirNode);
OnBeforeNodeRender(ref tree, ref xDirNode, EventArgs.Empty);
if (xDirNode != null)
{
tree.Add(xDirNode);
OnAfterNodeRender(ref tree, ref xDirNode, EventArgs.Empty);
}
}
}
FileInfo[] fileInfo = dirInfo.GetFiles(FileSearchPattern);
foreach (FileInfo file in fileInfo)
{
if ((file.Attributes & FileAttributes.Hidden) == 0)
{
XmlTreeNode xFileNode = XmlTreeNode.Create(this);
xFileNode.NodeID = orgPath + file.Name;
xFileNode.Text = file.Name;
if (!((orgPath == "")))
xFileNode.Action = "javascript:openFile('" + orgPath + file.Name + "');";
else
xFileNode.Action = "javascript:openFile('" + file.Name + "');";
xFileNode.Icon = "doc.gif";
xFileNode.OpenIcon = "doc.gif";
OnRenderFileNode(ref xFileNode);
OnBeforeNodeRender(ref tree, ref xFileNode, EventArgs.Empty);
if (xFileNode != null)
{
tree.Add(xFileNode);
OnAfterNodeRender(ref tree, ref xFileNode, EventArgs.Empty);
}
}
}
}
}
}