diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index 7d8add41..ed0eb6d3 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -3035,4 +3035,133 @@ END GO UPDATE [dbo].[Quotas] SET [QuotaDescription] = N'Disk Storage Space (Mb)' WHERE [QuotaName] = 'EnterpriseStorage.DiskStorageSpace' +GO + +--Enterprise Storage +IF NOT EXISTS(select 1 from sys.columns COLS INNER JOIN sys.objects OBJS ON OBJS.object_id=COLS.object_id and OBJS.type='U' AND OBJS.name='EnterpriseFolders' AND COLS.name='LocationDrive') +BEGIN +ALTER TABLE [dbo].[EnterpriseFolders] ADD + [LocationDrive] NVARCHAR(255) NULL +END +GO + +IF NOT EXISTS(select 1 from sys.columns COLS INNER JOIN sys.objects OBJS ON OBJS.object_id=COLS.object_id and OBJS.type='U' AND OBJS.name='EnterpriseFolders' AND COLS.name='HomeFolder') +BEGIN +ALTER TABLE [dbo].[EnterpriseFolders] ADD + [HomeFolder] NVARCHAR(255) NULL +END +GO + +IF NOT EXISTS(select 1 from sys.columns COLS INNER JOIN sys.objects OBJS ON OBJS.object_id=COLS.object_id and OBJS.type='U' AND OBJS.name='EnterpriseFolders' AND COLS.name='Domain') +BEGIN +ALTER TABLE [dbo].[EnterpriseFolders] ADD + [Domain] NVARCHAR(255) NULL +END +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetEnterpriseFolders') +DROP PROCEDURE GetEnterpriseFolders +GO + +CREATE PROCEDURE [dbo].[GetEnterpriseFolders] +( + @ItemID INT +) +AS + +SELECT DISTINCT LocationDrive, HomeFolder, Domain FROM EnterpriseFolders +WHERE ItemID = @ItemID +GO + + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetEnterpriseFolder') +DROP PROCEDURE GetEnterpriseFolder +GO + +CREATE PROCEDURE [dbo].[GetEnterpriseFolder] +( + @ItemID INT, + @FolderName NVARCHAR(255) +) +AS + +SELECT LocationDrive, HomeFolder, Domain FROM EnterpriseFolders +WHERE ItemID = @ItemID AND FolderName = @FolderName +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddEnterpriseFolder') +DROP PROCEDURE [dbo].[AddEnterpriseFolder] +GO + +CREATE PROCEDURE [dbo].[AddEnterpriseFolder] +( + @FolderID INT OUTPUT, + @ItemID INT, + @FolderName NVARCHAR(255), + @LocationDrive NVARCHAR(255), + @HomeFolder NVARCHAR(255), + @Domain NVARCHAR(255) +) +AS + +INSERT INTO EnterpriseFolders +( + ItemID, + FolderName, + LocationDrive, + HomeFolder, + Domain +) +VALUES +( + @ItemID, + @FolderName, + @LocationDrive, + @HomeFolder, + @Domain +) + +SET @FolderID = SCOPE_IDENTITY() + +RETURN +GO + +DECLARE @serviceId int +SET @serviceId = (SELECT TOP(1) ServiceId FROM Services WHERE ProviderID = 600) + +DECLARE @locationDrive nvarchar(255) +SET @locationDrive = (SELECT TOP(1) PropertyValue FROM ServiceProperties WHERE PropertyName = 'locationdrive' AND ServiceID = @serviceId) +DECLARE @homeFolder nvarchar(255) +SET @homeFolder = (SELECT TOP(1) PropertyValue FROM ServiceProperties WHERE PropertyName = 'usershome' AND ServiceID = @serviceId) +DECLARE @domain nvarchar(255) +SET @domain = (SELECT TOP(1) PropertyValue FROM ServiceProperties WHERE PropertyName = 'usersdomain' AND ServiceID = @serviceId) + +UPDATE EnterpriseFolders SET + LocationDrive = @locationDrive, + HomeFolder = @homeFolder, + Domain = @domain +GO + +IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetOrganizationGroupsByDisplayName') +DROP PROCEDURE [dbo].[GetOrganizationGroupsByDisplayName] +GO + +CREATE PROCEDURE [dbo].[GetOrganizationGroupsByDisplayName] +( + @ItemID int, + @DisplayName NVARCHAR(255) +) +AS +SELECT + AccountID, + ItemID, + AccountType, + AccountName, + DisplayName, + UserPrincipalName +FROM + ExchangeAccounts +WHERE + ItemID = @ItemID AND DisplayName = @DisplayName AND (AccountType IN (8, 9)) +RETURN GO \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/EnterpriseStorageProxy.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/EnterpriseStorageProxy.cs index a64f9834..113e48d2 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/EnterpriseStorageProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/EnterpriseStorageProxy.cs @@ -304,20 +304,22 @@ namespace WebsitePanel.EnterpriseServer /// [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/CreateEnterpriseFolder", RequestNamespace = "http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace = "http://smbsaas/websitepanel/enterpriseserver", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public ResultObject CreateEnterpriseFolder(int itemId, string folderName) + public ResultObject CreateEnterpriseFolder(int itemId, string folderName, bool addDefaultGroup) { object[] results = this.Invoke("CreateEnterpriseFolder", new object[] { itemId, - folderName}); + folderName, + addDefaultGroup}); return ((ResultObject)(results[0])); } /// - public System.IAsyncResult BeginCreateEnterpriseFolder(int itemId, string folderName, System.AsyncCallback callback, object asyncState) + public System.IAsyncResult BeginCreateEnterpriseFolder(int itemId, string folderName, bool addDefaultGroup, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("CreateEnterpriseFolder", new object[] { itemId, - folderName}, callback, asyncState); + folderName, + addDefaultGroup}, callback, asyncState); } /// @@ -328,13 +330,13 @@ namespace WebsitePanel.EnterpriseServer } /// - public void CreateEnterpriseFolderAsync(int itemId, string folderName) + public void CreateEnterpriseFolderAsync(int itemId, string folderName, bool addDefaultGroup) { - this.CreateEnterpriseFolderAsync(itemId, folderName, null); + this.CreateEnterpriseFolderAsync(itemId, folderName, addDefaultGroup, null); } /// - public void CreateEnterpriseFolderAsync(int itemId, string folderName, object userState) + public void CreateEnterpriseFolderAsync(int itemId, string folderName, bool addDefaultGroup, object userState) { if ((this.CreateEnterpriseFolderOperationCompleted == null)) { @@ -342,7 +344,8 @@ namespace WebsitePanel.EnterpriseServer } this.InvokeAsync("CreateEnterpriseFolder", new object[] { itemId, - folderName}, this.CreateEnterpriseFolderOperationCompleted, userState); + folderName, + addDefaultGroup}, this.CreateEnterpriseFolderOperationCompleted, userState); } private void OnCreateEnterpriseFolderOperationCompleted(object arg) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs index 6dc8c467..b6e7a97a 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Data/DataProvider.cs @@ -3092,6 +3092,17 @@ namespace WebsitePanel.EnterpriseServer ); } + public static IDataReader GetOrganizationGroupsByDisplayName(int itemId, string displayName) + { + return SqlHelper.ExecuteReader( + ConnectionString, + CommandType.StoredProcedure, + "GetOrganizationGroupsByDisplayName", + new SqlParameter("@ItemID", itemId), + new SqlParameter("@DisplayName", displayName) + ); + } + public static IDataReader SearchOrganizationAccounts(int actorId, int itemId, string filterColumn, string filterValue, string sortColumn, bool includeMailboxes) { @@ -4158,7 +4169,7 @@ namespace WebsitePanel.EnterpriseServer #region Enterprise Storage - public static int AddEntepriseFolder(int itemId, string folderName) + public static int AddEntepriseFolder(int itemId, string folderName, string locationDrive, string homeFolder, string domain) { SqlParameter prmId = new SqlParameter("@FolderID", SqlDbType.Int); prmId.Direction = ParameterDirection.Output; @@ -4169,7 +4180,11 @@ namespace WebsitePanel.EnterpriseServer "AddEnterpriseFolder", prmId, new SqlParameter("@ItemID", itemId), - new SqlParameter("@FolderName", folderName)); + new SqlParameter("@FolderName", folderName), + new SqlParameter("@LocationDrive", locationDrive), + new SqlParameter("@HomeFolder", homeFolder), + new SqlParameter("@Domain", domain) + ); // read identity return Convert.ToInt32(prmId.Value); @@ -4197,6 +4212,27 @@ namespace WebsitePanel.EnterpriseServer new SqlParameter("@FolderQuota", folderQuota)); } + public static IDataReader GetEnterpriseFolders(int itemId) + { + return SqlHelper.ExecuteReader( + ConnectionString, + CommandType.StoredProcedure, + "GetEnterpriseFolders", + new SqlParameter("@ItemID", itemId) + ); + } + + public static IDataReader GetEnterpriseFolder(int itemId, string folderName) + { + return SqlHelper.ExecuteReader( + ConnectionString, + CommandType.StoredProcedure, + "GetEnterpriseFolder", + new SqlParameter("@ItemID", itemId), + new SqlParameter("@FolderName", folderName) + ); + } + #endregion } } diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/EnterpriseStorage/EnterpriseStorageController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/EnterpriseStorage/EnterpriseStorageController.cs index bc333377..8d1ee486 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/EnterpriseStorage/EnterpriseStorageController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/EnterpriseStorage/EnterpriseStorageController.cs @@ -87,12 +87,12 @@ namespace WebsitePanel.EnterpriseServer public static ResultObject CreateFolder(int itemId) { - return CreateFolder(itemId, string.Empty); + return CreateFolder(itemId, string.Empty, false); } - public static ResultObject CreateFolder(int itemId, string folderName) + public static ResultObject CreateFolder(int itemId, string folderName, bool addDefaultGroup) { - return CreateFolderInternal(itemId, folderName); + return CreateFolderInternal(itemId, folderName, addDefaultGroup); } public static ResultObject DeleteFolder(int itemId) @@ -354,7 +354,10 @@ namespace WebsitePanel.EnterpriseServer EnterpriseStorage es = GetEnterpriseStorage(serviceId); - return es.GetFolders(org.OrganizationId); + var webDavSettings = ObjectUtils.CreateListFromDataReader( + DataProvider.GetEnterpriseFolders(itemId)).ToArray(); + + return es.GetFolders(org.OrganizationId, webDavSettings); } catch (Exception ex) { @@ -375,7 +378,10 @@ namespace WebsitePanel.EnterpriseServer EnterpriseStorage es = GetEnterpriseStorage(GetEnterpriseStorageServiceID(org.PackageId)); - return es.GetFolder(org.OrganizationId, folderName); + var webDavSetting = ObjectUtils.FillObjectFromDataReader( + DataProvider.GetEnterpriseFolder(itemId, folderName)); + + return es.GetFolder(org.OrganizationId, folderName, webDavSetting); } catch (Exception ex) { @@ -396,9 +402,12 @@ namespace WebsitePanel.EnterpriseServer EnterpriseStorage es = GetEnterpriseStorage(GetEnterpriseStorageServiceID(org.PackageId)); - if (es.GetFolder(org.OrganizationId, newFolder) == null) + var webDavSetting = ObjectUtils.FillObjectFromDataReader( + DataProvider.GetEnterpriseFolder(itemId, oldFolder)); + + if (webDavSetting == null) { - SystemFile folder = es.RenameFolder(org.OrganizationId, oldFolder, newFolder); + SystemFile folder = es.RenameFolder(org.OrganizationId, oldFolder, newFolder, webDavSetting); DataProvider.UpdateEnterpriseFolder(itemId, oldFolder, newFolder, folder.FRSMQuotaGB); @@ -413,7 +422,7 @@ namespace WebsitePanel.EnterpriseServer } } - protected static ResultObject CreateFolderInternal(int itemId, string folderName) + protected static ResultObject CreateFolderInternal(int itemId, string folderName, bool addDefaultGroup) { ResultObject result = TaskManager.StartResultTask("ENTERPRISE_STORAGE", "CREATE_FOLDER"); @@ -430,11 +439,46 @@ namespace WebsitePanel.EnterpriseServer EnterpriseStorage es = GetEnterpriseStorage(GetEnterpriseStorageServiceID(org.PackageId)); - if (es.GetFolder(org.OrganizationId, folderName) == null) + var webDavSetting = ObjectUtils.FillObjectFromDataReader( + DataProvider.GetEnterpriseFolder(itemId, folderName)); + + if (webDavSetting == null) { + int esId = PackageController.GetPackageServiceId(org.PackageId, ResourceGroups.EnterpriseStorage); + + StringDictionary esSesstings = ServerController.GetServiceSettings(esId); + es.CreateFolder(org.OrganizationId, folderName); - DataProvider.AddEntepriseFolder(itemId, folderName); + DataProvider.AddEntepriseFolder(itemId, folderName, esSesstings["LocationDrive"], + esSesstings["UsersHome"], esSesstings["UsersDomain"]); + + if (addDefaultGroup) + { + var groupName = string.Format("{0} Folder Users", folderName); + + var accountId = ObjectUtils.CreateListFromDataReader( + DataProvider.GetOrganizationGroupsByDisplayName(itemId, groupName)).Select(g => g.AccountId).FirstOrDefault(); + + if (accountId == null) + { + accountId = OrganizationController.CreateSecurityGroup(itemId, groupName); + } + + var securityGroup = OrganizationController.GetSecurityGroupGeneralSettings(itemId, accountId); + + var rules = new List() { + new WebDavFolderRule + { + Roles = new List() { securityGroup.AccountName }, + Read = true, + Write = true, + Pathes = new List() { "*" } + } + }; + + es.SetFolderWebDavRules(org.OrganizationId, folderName, webDavSetting, rules.ToArray()); + } } else { @@ -519,7 +563,10 @@ namespace WebsitePanel.EnterpriseServer EnterpriseStorage es = GetEnterpriseStorage(GetEnterpriseStorageServiceID(org.PackageId)); - es.DeleteFolder(org.OrganizationId, folderName); + var webDavSetting = ObjectUtils.FillObjectFromDataReader( + DataProvider.GetEnterpriseFolder(itemId, folderName)); + + es.DeleteFolder(org.OrganizationId, folderName, webDavSetting); DataProvider.DeleteEnterpriseFolder(itemId, folderName); } @@ -595,7 +642,11 @@ namespace WebsitePanel.EnterpriseServer if (CheckUsersDomainExistsInternal(itemId, org.PackageId)) { EnterpriseStorage es = GetEnterpriseStorage(GetEnterpriseStorageServiceID(org.PackageId)); - List folders = es.GetFolders(org.OrganizationId).Where(x => x.Name.Contains(filterValue)).ToList(); + + var webDavSettings = ObjectUtils.CreateListFromDataReader( + DataProvider.GetEnterpriseFolders(itemId)).ToArray(); + + List folders = es.GetFolders(org.OrganizationId, webDavSettings).Where(x => x.Name.Contains(filterValue)).ToList(); switch (sortColumn) { @@ -720,7 +771,10 @@ namespace WebsitePanel.EnterpriseServer EnterpriseStorage es = GetEnterpriseStorage(GetEnterpriseStorageServiceID(org.PackageId)); - es.SetFolderWebDavRules(org.OrganizationId, folder, rules); + var webDavSetting = ObjectUtils.FillObjectFromDataReader( + DataProvider.GetEnterpriseFolder(itemId, folder)); + + es.SetFolderWebDavRules(org.OrganizationId, folder, webDavSetting, rules); } catch (Exception ex) { @@ -754,7 +808,10 @@ namespace WebsitePanel.EnterpriseServer EnterpriseStorage es = GetEnterpriseStorage(GetEnterpriseStorageServiceID(org.PackageId)); - return es.GetFolderWebDavRules(org.OrganizationId, folder); + var webDavSetting = ObjectUtils.FillObjectFromDataReader( + DataProvider.GetEnterpriseFolder(itemId, folder)); + + return es.GetFolderWebDavRules(org.OrganizationId, folder, webDavSetting); } catch (Exception ex) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esEnterpriseStorage.asmx.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esEnterpriseStorage.asmx.cs index bfa15387..eed5ba06 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esEnterpriseStorage.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esEnterpriseStorage.asmx.cs @@ -76,9 +76,9 @@ namespace WebsitePanel.EnterpriseServer } [WebMethod] - public ResultObject CreateEnterpriseFolder(int itemId, string folderName) + public ResultObject CreateEnterpriseFolder(int itemId, string folderName, bool addDefaultGroup) { - return EnterpriseStorageController.CreateFolder(itemId, folderName); + return EnterpriseStorageController.CreateFolder(itemId, folderName, addDefaultGroup); } [WebMethod] diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/EnterpriseStorage/IEnterpriseStorage.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/EnterpriseStorage/IEnterpriseStorage.cs index dbcc97cc..155120b4 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/EnterpriseStorage/IEnterpriseStorage.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/EnterpriseStorage/IEnterpriseStorage.cs @@ -38,13 +38,13 @@ namespace WebsitePanel.Providers.EnterpriseStorage /// public interface IEnterpriseStorage { - SystemFile[] GetFolders(string organizationId); - SystemFile GetFolder(string organizationId, string folderName); + SystemFile[] GetFolders(string organizationId, WebDavSetting[] settings); + SystemFile GetFolder(string organizationId, string folderName, WebDavSetting setting); void CreateFolder(string organizationId, string folder); - SystemFile RenameFolder(string organizationId, string originalFolder, string newFolder); - void DeleteFolder(string organizationId, string folder); - bool SetFolderWebDavRules(string organizationId, string folder, WebDavFolderRule[] rules); - WebDavFolderRule[] GetFolderWebDavRules(string organizationId, string folder); + SystemFile RenameFolder(string organizationId, string originalFolder, string newFolder, WebDavSetting setting); + void DeleteFolder(string organizationId, string folder, WebDavSetting setting); + bool SetFolderWebDavRules(string organizationId, string folder, WebDavSetting setting, WebDavFolderRule[] rules); + WebDavFolderRule[] GetFolderWebDavRules(string organizationId, string folder, WebDavSetting setting); bool CheckFileServicesInstallation(); } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/WebDavFolderRule.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/WebDavFolderRule.cs index 44815d80..f0cc3f4a 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/WebDavFolderRule.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/WebDavFolderRule.cs @@ -6,7 +6,6 @@ using WebsitePanel.Providers.HostedSolution; namespace WebsitePanel.Providers.Web { - public enum WebDavAccess { Read = 1, diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/WebDavSetting.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/WebDavSetting.cs new file mode 100644 index 00000000..3a0688a7 --- /dev/null +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/Web/WebDavSetting.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace WebsitePanel.Providers.Web +{ + public class WebDavSetting + { + public string LocationDrive { get; set; } + public string HomeFolder { get; set; } + public string Domain { get; set; } + + public WebDavSetting() { } + + public WebDavSetting(string locationDrive, string homeFolder, string domain) + { + LocationDrive = locationDrive; + HomeFolder = homeFolder; + Domain = domain; + } + + public bool IsEmpty() + { + return string.IsNullOrEmpty(LocationDrive) && string.IsNullOrEmpty(HomeFolder) && string.IsNullOrEmpty(Domain); + } + } +} diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj index 76bc8c69..3e0c109c 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/WebsitePanel.Providers.Base.csproj @@ -332,6 +332,7 @@ + diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.EnterpriseStorage.Windows2012/Windows2012.cs b/WebsitePanel/Sources/WebsitePanel.Providers.EnterpriseStorage.Windows2012/Windows2012.cs index 28896298..6914ed20 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.EnterpriseStorage.Windows2012/Windows2012.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.EnterpriseStorage.Windows2012/Windows2012.cs @@ -62,55 +62,63 @@ namespace WebsitePanel.Providers.EnterpriseStorage #endregion #region Folders - public SystemFile[] GetFolders(string organizationId) + public SystemFile[] GetFolders(string organizationId, WebDavSetting[] settings) { ArrayList items = new ArrayList(); - string rootPath = string.Format("{0}:\\{1}\\{2}", LocationDrive, UsersHome, organizationId); - var windows = new WebsitePanel.Providers.OS.Windows2012(); + var webDavSettings = GetWebDavSettings(settings); - if (Directory.Exists(rootPath)) + foreach (var setting in webDavSettings) { - DirectoryInfo root = new DirectoryInfo(rootPath); - IWebDav webdav = new Web.WebDav(UsersDomain); + string rootPath = string.Format("{0}:\\{1}\\{2}", setting.LocationDrive, setting.HomeFolder, organizationId); - // get directories - DirectoryInfo[] dirs = root.GetDirectories(); - foreach (DirectoryInfo dir in dirs) + var windows = new WebsitePanel.Providers.OS.Windows2012(); + + if (Directory.Exists(rootPath)) { - string fullName = System.IO.Path.Combine(rootPath, dir.Name); + DirectoryInfo root = new DirectoryInfo(rootPath); + IWebDav webdav = new Web.WebDav(setting); - SystemFile folder = new SystemFile(); - - folder.Name = dir.Name; - folder.FullName = dir.FullName; - folder.IsDirectory = true; - - Quota quota = windows.GetQuotaOnFolder(fullName, string.Empty, string.Empty); - - folder.Size = quota.Usage; - - if (folder.Size == -1) + // get directories + DirectoryInfo[] dirs = root.GetDirectories(); + foreach (DirectoryInfo dir in dirs) { - folder.Size = FileUtils.BytesToMb(FileUtils.CalculateFolderSize(dir.FullName)); - } + string fullName = System.IO.Path.Combine(rootPath, dir.Name); - folder.Url = string.Format("https://{0}/{1}/{2}", UsersDomain, organizationId, dir.Name); - folder.Rules = webdav.GetFolderWebDavRules(organizationId, dir.Name); - folder.FRSMQuotaMB = quota.Size; - folder.FRSMQuotaGB = windows.ConvertMegaBytesToGB(folder.FRSMQuotaMB); - folder.FsrmQuotaType = quota.QuotaType; - - items.Add(folder); + SystemFile folder = new SystemFile(); + + folder.Name = dir.Name; + folder.FullName = dir.FullName; + folder.IsDirectory = true; + + Quota quota = windows.GetQuotaOnFolder(fullName, string.Empty, string.Empty); + + folder.Size = quota.Usage; + + 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); + folder.FRSMQuotaMB = quota.Size; + folder.FRSMQuotaGB = windows.ConvertMegaBytesToGB(folder.FRSMQuotaMB); + folder.FsrmQuotaType = quota.QuotaType; + + items.Add(folder); + } } } return (SystemFile[])items.ToArray(typeof(SystemFile)); } - public SystemFile GetFolder(string organizationId, string folderName) + public SystemFile GetFolder(string organizationId, string folderName, WebDavSetting setting) { - string fullName = string.Format("{0}:\\{1}\\{2}\\{3}", LocationDrive, UsersHome, organizationId, folderName); + var webDavSetting = GetWebDavSetting(setting); + + string fullName = string.Format("{0}:\\{1}\\{2}\\{3}", webDavSetting.LocationDrive, webDavSetting.HomeFolder, organizationId, folderName); SystemFile folder = null; var windows = new WebsitePanel.Providers.OS.Windows2012(); @@ -134,8 +142,8 @@ namespace WebsitePanel.Providers.EnterpriseStorage folder.Size = FileUtils.BytesToMb(FileUtils.CalculateFolderSize(root.FullName)); } - folder.Url = string.Format("https://{0}/{1}/{2}", UsersDomain, organizationId, folderName); - folder.Rules = GetFolderWebDavRules(organizationId, folderName); + folder.Url = string.Format("https://{0}/{1}/{2}", webDavSetting.Domain, organizationId, folderName); + folder.Rules = GetFolderWebDavRules(organizationId, folderName, webDavSetting); folder.FRSMQuotaMB = quota.Size; folder.FRSMQuotaGB = windows.ConvertMegaBytesToGB(folder.FRSMQuotaMB); folder.FsrmQuotaType = quota.QuotaType; @@ -149,24 +157,28 @@ namespace WebsitePanel.Providers.EnterpriseStorage FileUtils.CreateDirectory(string.Format("{0}:\\{1}\\{2}\\{3}", LocationDrive, UsersHome, organizationId, folder)); } - public SystemFile RenameFolder(string organizationId, string originalFolder, string newFolder) + public SystemFile RenameFolder(string organizationId, string originalFolder, string newFolder, WebDavSetting setting) { - var oldPath = string.Format("{0}:\\{1}\\{2}\\{3}", LocationDrive, UsersHome, organizationId, originalFolder); - var newPath = string.Format("{0}:\\{1}\\{2}\\{3}", LocationDrive, UsersHome, organizationId, newFolder); + var webDavSetting = GetWebDavSetting(setting); + + var oldPath = string.Format("{0}:\\{1}\\{2}\\{3}", webDavSetting.LocationDrive, webDavSetting.HomeFolder, organizationId, originalFolder); + var newPath = string.Format("{0}:\\{1}\\{2}\\{3}", webDavSetting.LocationDrive, webDavSetting.HomeFolder, organizationId, newFolder); FileUtils.MoveFile(oldPath,newPath); - IWebDav webdav = new WebDav(UsersDomain); + IWebDav webdav = new WebDav(webDavSetting); //deleting old folder rules webdav.DeleteAllWebDavRules(organizationId, originalFolder); - return GetFolder(organizationId, newFolder); + return GetFolder(organizationId, newFolder, webDavSetting); } - public void DeleteFolder(string organizationId, string folder) + public void DeleteFolder(string organizationId, string folder, WebDavSetting setting) { - string rootPath = string.Format("{0}:\\{1}\\{2}\\{3}", LocationDrive, UsersHome, organizationId, folder); + var webDavSetting = GetWebDavSetting(setting); + + string rootPath = string.Format("{0}:\\{1}\\{2}\\{3}", webDavSetting.LocationDrive, webDavSetting.HomeFolder, organizationId, folder); DirectoryInfo treeRoot = new DirectoryInfo(rootPath); @@ -176,7 +188,7 @@ namespace WebsitePanel.Providers.EnterpriseStorage while (dirs.Length > 0) { foreach (DirectoryInfo dir in dirs) - DeleteFolder(organizationId, folder != string.Empty ? string.Format("{0}\\{1}", folder, dir.Name) : dir.Name); + DeleteFolder(organizationId, folder != string.Empty ? string.Format("{0}\\{1}", folder, dir.Name) : dir.Name, webDavSetting); dirs = treeRoot.GetDirectories(); } @@ -189,7 +201,7 @@ namespace WebsitePanel.Providers.EnterpriseStorage File.Delete(file); } - IWebDav webdav = new WebDav(UsersDomain); + IWebDav webdav = new WebDav(webDavSetting); webdav.DeleteAllWebDavRules(organizationId, folder); @@ -197,7 +209,7 @@ namespace WebsitePanel.Providers.EnterpriseStorage } } - public bool SetFolderWebDavRules(string organizationId, string folder, WebDavFolderRule[] rules) + public bool SetFolderWebDavRules(string organizationId, string folder, WebDavSetting setting, WebDavFolderRule[] rules) { var users = new List(); @@ -224,20 +236,24 @@ namespace WebsitePanel.Providers.EnterpriseStorage } } - string path = string.Format("{0}:\\{1}\\{2}\\{3}", LocationDrive, UsersHome, organizationId, folder); + var webDavSetting = GetWebDavSetting(setting); + + string path = string.Format("{0}:\\{1}\\{2}\\{3}", webDavSetting.LocationDrive, webDavSetting.HomeFolder, organizationId, folder); SecurityUtils.ResetNtfsPermissions(path); SecurityUtils.GrantGroupNtfsPermissions(path, users.ToArray(), false, new RemoteServerSettings(), null, null); - IWebDav webdav = new WebDav(UsersDomain); + IWebDav webdav = new WebDav(webDavSetting); return webdav.SetFolderWebDavRules(organizationId, folder, rules); } - public WebDavFolderRule[] GetFolderWebDavRules(string organizationId, string folder) + public WebDavFolderRule[] GetFolderWebDavRules(string organizationId, string folder, WebDavSetting setting) { - IWebDav webdav = new WebDav(UsersDomain); + var webDavSetting = GetWebDavSetting(setting); + + IWebDav webdav = new WebDav(webDavSetting); return webdav.GetFolderWebDavRules(organizationId, folder); } @@ -326,5 +342,34 @@ namespace WebsitePanel.Providers.EnterpriseStorage return version == WebsitePanel.Server.Utils.OS.WindowsVersion.WindowsServer2012; } + protected WebDavSetting GetWebDavSetting(WebDavSetting setting) + { + if (setting == null || setting.IsEmpty()) + { + return new WebDavSetting(LocationDrive, UsersHome, UsersDomain); + } + + return setting; + } + + protected WebDavSetting[] GetWebDavSettings(WebDavSetting[] settings) + { + var webDavSettings = new ArrayList(); + + foreach (var setting in settings) + { + if (!setting.IsEmpty()) + { + webDavSettings.Add(setting); + } + } + + if (webDavSettings.Count == 0) + { + return new WebDavSetting[] { GetWebDavSetting(new WebDavSetting()) }; + } + + return settings; + } } } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Web.WebDav/WebDav.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Web.WebDav/WebDav.cs index 1ec41b3d..48b947de 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Web.WebDav/WebDav.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Web.WebDav/WebDav.cs @@ -13,13 +13,13 @@ namespace WebsitePanel.Providers.Web { #region Fields - private string _usersDomain; + protected WebDavSetting _Setting; #endregion - public WebDav(string domain) + public WebDav(WebDavSetting setting) { - _usersDomain = domain; + _Setting = setting; } public void CreateWebDavRule(string organizationId, string folder, WebDavFolderRule rule) @@ -28,7 +28,7 @@ namespace WebsitePanel.Providers.Web { Configuration config = serverManager.GetApplicationHostConfiguration(); - ConfigurationSection authoringRulesSection = config.GetSection("system.webServer/webdav/authoringRules", string.Format("{0}/{1}/{2}", _usersDomain, organizationId, folder)); + ConfigurationSection authoringRulesSection = config.GetSection("system.webServer/webdav/authoringRules", string.Format("{0}/{1}/{2}", _Setting.Domain, organizationId, folder)); ConfigurationElementCollection authoringRulesCollection = authoringRulesSection.GetCollection(); @@ -61,7 +61,7 @@ namespace WebsitePanel.Providers.Web { Configuration config = serverManager.GetApplicationHostConfiguration(); - ConfigurationSection authoringRulesSection = config.GetSection("system.webServer/webdav/authoringRules", string.Format("{0}/{1}/{2}", _usersDomain, organizationId, folder)); + ConfigurationSection authoringRulesSection = config.GetSection("system.webServer/webdav/authoringRules", string.Format("{0}/{1}/{2}", _Setting.Domain, organizationId, folder)); ConfigurationElementCollection authoringRulesCollection = authoringRulesSection.GetCollection(); @@ -107,7 +107,7 @@ namespace WebsitePanel.Providers.Web { Configuration config = serverManager.GetApplicationHostConfiguration(); - ConfigurationSection authoringRulesSection = config.GetSection("system.webServer/webdav/authoringRules", string.Format("{0}/{1}/{2}", _usersDomain, organizationId, folder)); + ConfigurationSection authoringRulesSection = config.GetSection("system.webServer/webdav/authoringRules", string.Format("{0}/{1}/{2}", _Setting.Domain, organizationId, folder)); ConfigurationElementCollection authoringRulesCollection = authoringRulesSection.GetCollection(); @@ -133,7 +133,7 @@ namespace WebsitePanel.Providers.Web Configuration config = serverManager.GetApplicationHostConfiguration(); - config.RemoveLocationPath(string.Format("{0}/{1}/{2}", _usersDomain, organizationId, folder)); + config.RemoveLocationPath(string.Format("{0}/{1}/{2}", _Setting.Domain, organizationId, folder)); serverManager.CommitChanges(); return true; } diff --git a/WebsitePanel/Sources/WebsitePanel.Server.Client/EnterpriseStorageProxy.cs b/WebsitePanel/Sources/WebsitePanel.Server.Client/EnterpriseStorageProxy.cs index 81bed424..063f7e10 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server.Client/EnterpriseStorageProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server.Client/EnterpriseStorageProxy.cs @@ -112,18 +112,20 @@ namespace WebsitePanel.Providers.EnterpriseStorage /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFolders", 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[] GetFolders(string organizationId) + public SystemFile[] GetFolders(string organizationId, WebDavSetting[] settings) { object[] results = this.Invoke("GetFolders", new object[] { - organizationId}); + organizationId, + settings}); return ((SystemFile[])(results[0])); } /// - public System.IAsyncResult BeginGetFolders(string organizationId, System.AsyncCallback callback, object asyncState) + public System.IAsyncResult BeginGetFolders(string organizationId, WebDavSetting[] settings, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetFolders", new object[] { - organizationId}, callback, asyncState); + organizationId, + settings}, callback, asyncState); } /// @@ -134,20 +136,21 @@ namespace WebsitePanel.Providers.EnterpriseStorage } /// - public void GetFoldersAsync(string organizationId) + public void GetFoldersAsync(string organizationId, WebDavSetting[] settings) { - this.GetFoldersAsync(organizationId, null); + this.GetFoldersAsync(organizationId, settings, null); } /// - public void GetFoldersAsync(string organizationId, object userState) + public void GetFoldersAsync(string organizationId, WebDavSetting[] settings, object userState) { if ((this.GetFoldersOperationCompleted == null)) { this.GetFoldersOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetFoldersOperationCompleted); } this.InvokeAsync("GetFolders", new object[] { - organizationId}, this.GetFoldersOperationCompleted, userState); + organizationId, + settings}, this.GetFoldersOperationCompleted, userState); } private void OnGetFoldersOperationCompleted(object arg) @@ -162,20 +165,22 @@ namespace WebsitePanel.Providers.EnterpriseStorage /// [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)] - public SystemFile GetFolder(string organizationId, string folder) + public SystemFile GetFolder(string organizationId, string folder, WebDavSetting setting) { object[] results = this.Invoke("GetFolder", new object[] { organizationId, - folder}); + folder, + setting}); return ((SystemFile)(results[0])); } /// - public System.IAsyncResult BeginGetFolder(string organizationId, string folder, System.AsyncCallback callback, object asyncState) + public System.IAsyncResult BeginGetFolder(string organizationId, string folder, WebDavSetting setting, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetFolder", new object[] { organizationId, - folder}, callback, asyncState); + folder, + setting}, callback, asyncState); } /// @@ -186,13 +191,13 @@ namespace WebsitePanel.Providers.EnterpriseStorage } /// - public void GetFolderAsync(string organizationId, string folder) + public void GetFolderAsync(string organizationId, string folder, WebDavSetting setting) { - this.GetFolderAsync(organizationId, folder, null); + this.GetFolderAsync(organizationId, folder, setting, null); } /// - public void GetFolderAsync(string organizationId, string folder, object userState) + public void GetFolderAsync(string organizationId, string folder, WebDavSetting setting, object userState) { if ((this.GetFolderOperationCompleted == null)) { @@ -200,7 +205,8 @@ namespace WebsitePanel.Providers.EnterpriseStorage } this.InvokeAsync("GetFolder", new object[] { organizationId, - folder}, this.GetFolderOperationCompleted, userState); + folder, + setting}, this.GetFolderOperationCompleted, userState); } private void OnGetFolderOperationCompleted(object arg) @@ -266,19 +272,21 @@ namespace WebsitePanel.Providers.EnterpriseStorage /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/DeleteFolder", 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 void DeleteFolder(string organizationId, string folder) + public void DeleteFolder(string organizationId, string folder, WebDavSetting setting) { this.Invoke("DeleteFolder", new object[] { organizationId, - folder}); + folder, + setting}); } /// - public System.IAsyncResult BeginDeleteFolder(string organizationId, string folder, System.AsyncCallback callback, object asyncState) + public System.IAsyncResult BeginDeleteFolder(string organizationId, string folder, WebDavSetting setting, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("DeleteFolder", new object[] { organizationId, - folder}, callback, asyncState); + folder, + setting}, callback, asyncState); } /// @@ -288,13 +296,13 @@ namespace WebsitePanel.Providers.EnterpriseStorage } /// - public void DeleteFolderAsync(string organizationId, string folder) + public void DeleteFolderAsync(string organizationId, string folder, WebDavSetting setting) { - this.DeleteFolderAsync(organizationId, folder, null); + this.DeleteFolderAsync(organizationId, folder, setting, null); } /// - public void DeleteFolderAsync(string organizationId, string folder, object userState) + public void DeleteFolderAsync(string organizationId, string folder, WebDavSetting setting, object userState) { if ((this.DeleteFolderOperationCompleted == null)) { @@ -302,7 +310,8 @@ namespace WebsitePanel.Providers.EnterpriseStorage } this.InvokeAsync("DeleteFolder", new object[] { organizationId, - folder}, this.DeleteFolderOperationCompleted, userState); + folder, + setting}, this.DeleteFolderOperationCompleted, userState); } private void OnDeleteFolderOperationCompleted(object arg) @@ -317,21 +326,23 @@ namespace WebsitePanel.Providers.EnterpriseStorage /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/SetFolderWebDavRules", 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 bool SetFolderWebDavRules(string organizationId, string folder, WebDavFolderRule[] rules) + public bool SetFolderWebDavRules(string organizationId, string folder, WebDavSetting setting, WebDavFolderRule[] rules) { object[] results = this.Invoke("SetFolderWebDavRules", new object[] { organizationId, folder, + setting, rules}); return ((bool)(results[0])); } /// - public System.IAsyncResult BeginSetFolderWebDavRules(string organizationId, string folder, WebDavFolderRule[] rules, System.AsyncCallback callback, object asyncState) + public System.IAsyncResult BeginSetFolderWebDavRules(string organizationId, string folder, WebDavSetting setting, WebDavFolderRule[] rules, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("SetFolderWebDavRules", new object[] { organizationId, folder, + setting, rules}, callback, asyncState); } @@ -343,13 +354,13 @@ namespace WebsitePanel.Providers.EnterpriseStorage } /// - public void SetFolderWebDavRulesAsync(string organizationId, string folder, WebDavFolderRule[] rules) + public void SetFolderWebDavRulesAsync(string organizationId, string folder, WebDavSetting setting, WebDavFolderRule[] rules) { - this.SetFolderWebDavRulesAsync(organizationId, folder, rules, null); + this.SetFolderWebDavRulesAsync(organizationId, folder, setting, rules, null); } /// - public void SetFolderWebDavRulesAsync(string organizationId, string folder, WebDavFolderRule[] rules, object userState) + public void SetFolderWebDavRulesAsync(string organizationId, string folder, WebDavSetting setting, WebDavFolderRule[] rules, object userState) { if ((this.SetFolderWebDavRulesOperationCompleted == null)) { @@ -358,6 +369,7 @@ namespace WebsitePanel.Providers.EnterpriseStorage this.InvokeAsync("SetFolderWebDavRules", new object[] { organizationId, folder, + setting, rules}, this.SetFolderWebDavRulesOperationCompleted, userState); } @@ -373,20 +385,22 @@ namespace WebsitePanel.Providers.EnterpriseStorage /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetFolderWebDavRules", 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 WebDavFolderRule[] GetFolderWebDavRules(string organizationId, string folder) + public WebDavFolderRule[] GetFolderWebDavRules(string organizationId, string folder, WebDavSetting setting) { object[] results = this.Invoke("GetFolderWebDavRules", new object[] { organizationId, - folder}); + folder, + setting}); return ((WebDavFolderRule[])(results[0])); } /// - public System.IAsyncResult BeginGetFolderWebDavRules(string organizationId, string folder, System.AsyncCallback callback, object asyncState) + public System.IAsyncResult BeginGetFolderWebDavRules(string organizationId, string folder, WebDavSetting setting, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetFolderWebDavRules", new object[] { organizationId, - folder}, callback, asyncState); + folder, + setting}, callback, asyncState); } /// @@ -397,13 +411,13 @@ namespace WebsitePanel.Providers.EnterpriseStorage } /// - public void GetFolderWebDavRulesAsync(string organizationId, string folder) + public void GetFolderWebDavRulesAsync(string organizationId, string folder, WebDavSetting setting) { - this.GetFolderWebDavRulesAsync(organizationId, folder, null); + this.GetFolderWebDavRulesAsync(organizationId, folder, setting, null); } /// - public void GetFolderWebDavRulesAsync(string organizationId, string folder, object userState) + public void GetFolderWebDavRulesAsync(string organizationId, string folder, WebDavSetting setting, object userState) { if ((this.GetFolderWebDavRulesOperationCompleted == null)) { @@ -411,7 +425,8 @@ namespace WebsitePanel.Providers.EnterpriseStorage } this.InvokeAsync("GetFolderWebDavRules", new object[] { organizationId, - folder}, this.GetFolderWebDavRulesOperationCompleted, userState); + folder, + setting}, this.GetFolderWebDavRulesOperationCompleted, userState); } private void OnGetFolderWebDavRulesOperationCompleted(object arg) @@ -473,22 +488,24 @@ namespace WebsitePanel.Providers.EnterpriseStorage /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/RenameFolder", 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 RenameFolder(string organizationId, string originalFolder, string newFolder) + public SystemFile RenameFolder(string organizationId, string originalFolder, string newFolder, WebDavSetting setting) { object[] results = this.Invoke("RenameFolder", new object[] { organizationId, originalFolder, - newFolder}); + newFolder, + setting}); return ((SystemFile)(results[0])); } /// - public System.IAsyncResult BeginRenameFolder(string organizationId, string originalFolder, string newFolder, System.AsyncCallback callback, object asyncState) + public System.IAsyncResult BeginRenameFolder(string organizationId, string originalFolder, string newFolder, WebDavSetting setting, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("RenameFolder", new object[] { organizationId, originalFolder, - newFolder}, callback, asyncState); + newFolder, + setting}, callback, asyncState); } /// @@ -499,13 +516,13 @@ namespace WebsitePanel.Providers.EnterpriseStorage } /// - public void RenameFolderAsync(string organizationId, string originalFolder, string newFolder) + public void RenameFolderAsync(string organizationId, string originalFolder, string newFolder, WebDavSetting setting) { - this.RenameFolderAsync(organizationId, originalFolder, newFolder, null); + this.RenameFolderAsync(organizationId, originalFolder, newFolder, setting, null); } /// - public void RenameFolderAsync(string organizationId, string originalFolder, string newFolder, object userState) + public void RenameFolderAsync(string organizationId, string originalFolder, string newFolder, WebDavSetting setting, object userState) { if ((this.RenameFolderOperationCompleted == null)) { @@ -514,7 +531,8 @@ namespace WebsitePanel.Providers.EnterpriseStorage this.InvokeAsync("RenameFolder", new object[] { organizationId, originalFolder, - newFolder}, this.RenameFolderOperationCompleted, userState); + newFolder, + setting}, this.RenameFolderOperationCompleted, userState); } private void OnRenameFolderOperationCompleted(object arg) diff --git a/WebsitePanel/Sources/WebsitePanel.Server/EnterpriseStorage.asmx.cs b/WebsitePanel/Sources/WebsitePanel.Server/EnterpriseStorage.asmx.cs index 002a4c98..5acdecd7 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server/EnterpriseStorage.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server/EnterpriseStorage.asmx.cs @@ -39,6 +39,7 @@ using WebsitePanel.Providers; using WebsitePanel.Providers.EnterpriseStorage; using WebsitePanel.Providers.OS; using WebsitePanel.Server.Utils; +using WebsitePanel.Providers.Web; namespace WebsitePanel.Server { @@ -58,12 +59,12 @@ namespace WebsitePanel.Server [WebMethod, SoapHeader("settings")] - public SystemFile[] GetFolders(string organizationId) + public SystemFile[] GetFolders(string organizationId, WebDavSetting[] settings) { try { Log.WriteStart("'{0}' GetFolders", ProviderSettings.ProviderName); - SystemFile[] result = EnterpriseStorageProvider.GetFolders(organizationId); + SystemFile[] result = EnterpriseStorageProvider.GetFolders(organizationId, settings); Log.WriteEnd("'{0}' GetFolders", ProviderSettings.ProviderName); return result; } @@ -75,12 +76,12 @@ namespace WebsitePanel.Server } [WebMethod, SoapHeader("settings")] - public SystemFile GetFolder(string organizationId, string folder) + public SystemFile GetFolder(string organizationId, string folder, WebDavSetting setting) { try { Log.WriteStart("'{0}' GetFolder", ProviderSettings.ProviderName); - SystemFile result = EnterpriseStorageProvider.GetFolder(organizationId, folder); + SystemFile result = EnterpriseStorageProvider.GetFolder(organizationId, folder, setting); Log.WriteEnd("'{0}' GetFolder", ProviderSettings.ProviderName); return result; } @@ -108,12 +109,12 @@ namespace WebsitePanel.Server } [WebMethod, SoapHeader("settings")] - public void DeleteFolder(string organizationId, string folder) + public void DeleteFolder(string organizationId, string folder, WebDavSetting setting) { try { Log.WriteStart("'{0}' DeleteFolder", ProviderSettings.ProviderName); - EnterpriseStorageProvider.DeleteFolder(organizationId, folder); + EnterpriseStorageProvider.DeleteFolder(organizationId, folder, setting); Log.WriteEnd("'{0}' DeleteFolder", ProviderSettings.ProviderName); } catch (Exception ex) @@ -124,12 +125,12 @@ namespace WebsitePanel.Server } [WebMethod, SoapHeader("settings")] - public bool SetFolderWebDavRules(string organizationId, string folder, Providers.Web.WebDavFolderRule[] rules) + public bool SetFolderWebDavRules(string organizationId, string folder, WebDavSetting setting, Providers.Web.WebDavFolderRule[] rules) { try { Log.WriteStart("'{0}' SetFolderWebDavRules", ProviderSettings.ProviderName); - return EnterpriseStorageProvider.SetFolderWebDavRules(organizationId, folder, rules); + return EnterpriseStorageProvider.SetFolderWebDavRules(organizationId, folder, setting, rules); Log.WriteEnd("'{0}' SetFolderWebDavRules", ProviderSettings.ProviderName); } catch (Exception ex) @@ -140,12 +141,12 @@ namespace WebsitePanel.Server } [WebMethod, SoapHeader("settings")] - public Providers.Web.WebDavFolderRule[] GetFolderWebDavRules(string organizationId, string folder) + public Providers.Web.WebDavFolderRule[] GetFolderWebDavRules(string organizationId, string folder, WebDavSetting setting) { try { Log.WriteStart("'{0}' GetFolderWebDavRules", ProviderSettings.ProviderName); - return EnterpriseStorageProvider.GetFolderWebDavRules(organizationId, folder); + return EnterpriseStorageProvider.GetFolderWebDavRules(organizationId, folder, setting); Log.WriteEnd("'{0}' GetFolderWebDavRules", ProviderSettings.ProviderName); } catch (Exception ex) @@ -172,12 +173,12 @@ namespace WebsitePanel.Server } [WebMethod, SoapHeader("settings")] - public SystemFile RenameFolder(string organizationId, string originalFolder, string newFolder) + public SystemFile RenameFolder(string organizationId, string originalFolder, string newFolder, WebDavSetting setting) { try { Log.WriteStart("'{0}' RenameFolder", ProviderSettings.ProviderName); - return EnterpriseStorageProvider.RenameFolder(organizationId, originalFolder, newFolder); + return EnterpriseStorageProvider.RenameFolder(organizationId, originalFolder, newFolder, setting); Log.WriteEnd("'{0}' RenameFolder", ProviderSettings.ProviderName); } catch (Exception ex) diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/EnterpriseStorageCreateFolder.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/EnterpriseStorageCreateFolder.ascx.resx index 82a41d20..a36ab7a7 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/EnterpriseStorageCreateFolder.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/App_LocalResources/EnterpriseStorageCreateFolder.ascx.resx @@ -141,4 +141,7 @@ Create New Folder + + Add Default Group + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageCreateFolder.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageCreateFolder.ascx index 396fa46e..26a80b92 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageCreateFolder.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageCreateFolder.ascx @@ -32,6 +32,13 @@ ErrorMessage="Enter Folder Name" ValidationGroup="CreateFolder" Display="Dynamic" Text="*" SetFocusOnError="True"> + + + + + + +
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageCreateFolder.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageCreateFolder.ascx.cs index 1d369fa8..0f4eb61e 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageCreateFolder.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageCreateFolder.ascx.cs @@ -69,7 +69,7 @@ namespace WebsitePanel.Portal.ExchangeServer ES.Services.EnterpriseStorage.CreateEnterpriseStorage(PanelSecurity.PackageId, PanelRequest.ItemID); } - ResultObject result = ES.Services.EnterpriseStorage.CreateEnterpriseFolder(PanelRequest.ItemID, txtFolderName.Text); + ResultObject result = ES.Services.EnterpriseStorage.CreateEnterpriseFolder(PanelRequest.ItemID, txtFolderName.Text, chkAddDefaultGroup.Checked); if (!result.IsSuccess && result.ErrorCodes.Count > 0) { diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageCreateFolder.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageCreateFolder.ascx.designer.cs index dc641ab6..2c020b89 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageCreateFolder.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/EnterpriseStorageCreateFolder.ascx.designer.cs @@ -1,31 +1,3 @@ -// Copyright (c) 2012, Outercurve Foundation. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// - Redistributions of source code must retain the above copyright notice, this -// list of conditions and the following disclaimer. -// -// - Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// - Neither the name of the Outercurve Foundation nor the names of its -// contributors may be used to endorse or promote products derived from this -// software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - //------------------------------------------------------------------------------ // // This code was generated by a tool. @@ -121,6 +93,24 @@ namespace WebsitePanel.Portal.ExchangeServer { /// protected global::System.Web.UI.WebControls.RequiredFieldValidator valRequireFolderName; + /// + /// locAddDefaultGroup control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Localize locAddDefaultGroup; + + /// + /// chkAddDefaultGroup control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.CheckBox chkAddDefaultGroup; + /// /// btnCreate control. ///