diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/EnterpriseStorage/EnterpriseStorageController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/EnterpriseStorage/EnterpriseStorageController.cs index 7398203b..200a52fb 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/EnterpriseStorage/EnterpriseStorageController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/EnterpriseStorage/EnterpriseStorageController.cs @@ -586,7 +586,7 @@ namespace WebsitePanel.EnterpriseServer var userGroups = OrganizationController.GetSecurityGroupsByMember(itemId, accountId); - foreach (var folder in es.GetFolders(org.OrganizationId, webDavSettings)) + foreach (var folder in es.GetFoldersWithoutFrsm(org.OrganizationId, webDavSettings)) { var permissions = ConvertToESPermission(itemId,folder.Rules); diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/EnterpriseStorage/IEnterpriseStorage.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/EnterpriseStorage/IEnterpriseStorage.cs index 892864a9..ae907208 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/EnterpriseStorage/IEnterpriseStorage.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/EnterpriseStorage/IEnterpriseStorage.cs @@ -39,6 +39,7 @@ namespace WebsitePanel.Providers.EnterpriseStorage public interface IEnterpriseStorage { SystemFile[] GetFolders(string organizationId, WebDavSetting[] settings); + SystemFile[] GetFoldersWithoutFrsm(string organizationId, WebDavSetting[] settings); SystemFile GetFolder(string organizationId, string folderName, WebDavSetting setting); void CreateFolder(string organizationId, string folder, WebDavSetting setting); SystemFile RenameFolder(string organizationId, string originalFolder, string newFolder, WebDavSetting setting); diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.EnterpriseStorage.Windows2012/Windows2012.cs b/WebsitePanel/Sources/WebsitePanel.Providers.EnterpriseStorage.Windows2012/Windows2012.cs index f0a8caf3..67b2d1ff 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.EnterpriseStorage.Windows2012/Windows2012.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.EnterpriseStorage.Windows2012/Windows2012.cs @@ -122,6 +122,49 @@ namespace WebsitePanel.Providers.EnterpriseStorage return (SystemFile[]) items.ToArray(typeof (SystemFile)); } + public SystemFile[] GetFoldersWithoutFrsm(string organizationId, WebDavSetting[] settings) + { + ArrayList items = new ArrayList(); + + var webDavSettings = GetWebDavSettings(settings); + + foreach (var setting in webDavSettings) + { + string rootPath = string.Format("{0}:\\{1}\\{2}", setting.LocationDrive, setting.HomeFolder, + organizationId); + + if (Directory.Exists(rootPath)) + { + DirectoryInfo root = new DirectoryInfo(rootPath); + IWebDav webdav = new Web.WebDav(setting); + + // get directories + DirectoryInfo[] dirs = root.GetDirectories(); + + foreach (DirectoryInfo dir in dirs) + { + SystemFile folder = new SystemFile(); + + folder.Name = dir.Name; + folder.FullName = dir.FullName; + folder.IsDirectory = true; + + if (folder.Size == -1) + { + folder.Size = FileUtils.BytesToMb(FileUtils.CalculateFolderSize(dir.FullName)); + } + + folder.Url = string.Format("https://{0}/{1}/{2}", setting.Domain, organizationId, dir.Name); + folder.Rules = webdav.GetFolderWebDavRules(organizationId, dir.Name); + + items.Add(folder); + } + } + } + + return (SystemFile[])items.ToArray(typeof(SystemFile)); + } + public SystemFile GetFolder(string organizationId, string folderName, WebDavSetting setting) { var webDavSetting = GetWebDavSetting(setting); diff --git a/WebsitePanel/Sources/WebsitePanel.Server.Client/EnterpriseStorageProxy.cs b/WebsitePanel/Sources/WebsitePanel.Server.Client/EnterpriseStorageProxy.cs index f43357e6..2fd82337 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server.Client/EnterpriseStorageProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server.Client/EnterpriseStorageProxy.cs @@ -11,10 +11,6 @@ // // This source code was auto-generated by wsdl, Version=2.0.50727.3038. // - -using WebsitePanel.Providers.OS; -using WebsitePanel.Providers.Web; - namespace WebsitePanel.Providers.EnterpriseStorage { using System.Xml.Serialization; using System.Web.Services; @@ -22,6 +18,8 @@ namespace WebsitePanel.Providers.EnterpriseStorage { using System.Web.Services.Protocols; using System; using System.Diagnostics; + using WebsitePanel.Providers.OS; + using WebsitePanel.Providers.Web; /// @@ -36,6 +34,8 @@ namespace WebsitePanel.Providers.EnterpriseStorage { private System.Threading.SendOrPostCallback GetFoldersOperationCompleted; + private System.Threading.SendOrPostCallback GetFoldersWithoutFrsmOperationCompleted; + private System.Threading.SendOrPostCallback GetFolderOperationCompleted; private System.Threading.SendOrPostCallback CreateFolderOperationCompleted; @@ -60,6 +60,9 @@ namespace WebsitePanel.Providers.EnterpriseStorage { /// public event GetFoldersCompletedEventHandler GetFoldersCompleted; + /// + public event GetFoldersWithoutFrsmCompletedEventHandler GetFoldersWithoutFrsmCompleted; + /// public event GetFolderCompletedEventHandler GetFolderCompleted; @@ -129,6 +132,51 @@ namespace WebsitePanel.Providers.EnterpriseStorage { } } + /// + [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFoldersWithoutFrsm", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public SystemFile[] GetFoldersWithoutFrsm(string organizationId, WebDavSetting[] settings) { + object[] results = this.Invoke("GetFoldersWithoutFrsm", new object[] { + organizationId, + settings}); + return ((SystemFile[])(results[0])); + } + + /// + public System.IAsyncResult BeginGetFoldersWithoutFrsm(string organizationId, WebDavSetting[] settings, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetFoldersWithoutFrsm", new object[] { + organizationId, + settings}, callback, asyncState); + } + + /// + public SystemFile[] EndGetFoldersWithoutFrsm(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((SystemFile[])(results[0])); + } + + /// + public void GetFoldersWithoutFrsmAsync(string organizationId, WebDavSetting[] settings) { + this.GetFoldersWithoutFrsmAsync(organizationId, settings, null); + } + + /// + public void GetFoldersWithoutFrsmAsync(string organizationId, WebDavSetting[] settings, object userState) { + if ((this.GetFoldersWithoutFrsmOperationCompleted == null)) { + this.GetFoldersWithoutFrsmOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetFoldersWithoutFrsmOperationCompleted); + } + this.InvokeAsync("GetFoldersWithoutFrsm", new object[] { + organizationId, + settings}, this.GetFoldersWithoutFrsmOperationCompleted, userState); + } + + private void OnGetFoldersWithoutFrsmOperationCompleted(object arg) { + if ((this.GetFoldersWithoutFrsmCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetFoldersWithoutFrsmCompleted(this, new GetFoldersWithoutFrsmCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFolder", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] @@ -544,6 +592,32 @@ namespace WebsitePanel.Providers.EnterpriseStorage { } } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + public delegate void GetFoldersWithoutFrsmCompletedEventHandler(object sender, GetFoldersWithoutFrsmCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetFoldersWithoutFrsmCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetFoldersWithoutFrsmCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public SystemFile[] Result { + get { + this.RaiseExceptionIfNecessary(); + return ((SystemFile[])(this.results[0])); + } + } + } + /// [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] public delegate void GetFolderCompletedEventHandler(object sender, GetFolderCompletedEventArgs e); diff --git a/WebsitePanel/Sources/WebsitePanel.Server/EnterpriseStorage.asmx.cs b/WebsitePanel/Sources/WebsitePanel.Server/EnterpriseStorage.asmx.cs index ecd4878c..6a27c78a 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server/EnterpriseStorage.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server/EnterpriseStorage.asmx.cs @@ -75,6 +75,23 @@ namespace WebsitePanel.Server } } + [WebMethod, SoapHeader("settings")] + public SystemFile[] GetFoldersWithoutFrsm(string organizationId, WebDavSetting[] settings) + { + try + { + Log.WriteStart("'{0}' GetFolders", ProviderSettings.ProviderName); + SystemFile[] result = EnterpriseStorageProvider.GetFoldersWithoutFrsm(organizationId, settings); + Log.WriteEnd("'{0}' GetFolders", ProviderSettings.ProviderName); + return result; + } + catch (Exception ex) + { + Log.WriteError(String.Format("'{0}' GetFolders", ProviderSettings.ProviderName), ex); + throw; + } + } + [WebMethod, SoapHeader("settings")] public SystemFile GetFolder(string organizationId, string folder, WebDavSetting setting) {