diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/EnterpriseStorage/EnterpriseStorageController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/EnterpriseStorage/EnterpriseStorageController.cs index dec560e2..5f17b245 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/EnterpriseStorage/EnterpriseStorageController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/EnterpriseStorage/EnterpriseStorageController.cs @@ -261,16 +261,16 @@ namespace WebsitePanel.EnterpriseServer EnterpriseStorageController.AddWebDavDirectory(packageId, usersDomain, org.OrganizationId, homePath); - int osId = PackageController.GetPackageServiceId(packageId, ResourceGroups.Os); - bool enableHardQuota = (esSesstings["enablehardquota"] != null) - ? bool.Parse(esSesstings["enablehardquota"]) - : false; + //int osId = PackageController.GetPackageServiceId(packageId, ResourceGroups.Os); + //bool enableHardQuota = (esSesstings["enablehardquota"] != null) + // ? bool.Parse(esSesstings["enablehardquota"]) + // : false; - if (enableHardQuota && osId != 0 && OperatingSystemController.CheckFileServicesInstallation(osId)) - { - FilesController.SetFolderQuota(packageId, Path.Combine(usersHome, org.OrganizationId), - locationDrive, Quotas.ENTERPRISESTORAGE_DISKSTORAGESPACE); - } + //if (enableHardQuota && osId != 0 && OperatingSystemController.CheckFileServicesInstallation(osId)) + //{ + // FilesController.SetFolderQuota(packageId, Path.Combine(usersHome, org.OrganizationId), + // locationDrive, Quotas.ENTERPRISESTORAGE_DISKSTORAGESPACE); + //} } } catch (Exception ex) @@ -579,11 +579,6 @@ namespace WebsitePanel.EnterpriseServer dir.HttpErrors = null; dir.MimeMaps = null; - int serviceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.Web); - - if (serviceId == -1) - return serviceId; - // create directory WebServer web = GetWebServer(packageId); @@ -867,6 +862,11 @@ namespace WebsitePanel.EnterpriseServer cnfg.ProviderSettings.ProviderName = webProvider.DisplayName; cnfg.ProviderSettings.ProviderType = webProvider.ProviderType; + //// set service settings + //StringDictionary serviceSettings = ServerController.GetServiceSettings(serviceId); + //foreach (string key in serviceSettings.Keys) + // cnfg.ProviderSettings.Settings[key] = serviceSettings[key]; + ServiceProviderProxy.ServerInit(web, cnfg, package.ServerId); return web; diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs index 1b89f3dc..f07a01bf 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/Packages/PackageController.cs @@ -783,6 +783,7 @@ namespace WebsitePanel.EnterpriseServer // Update the Hard quota on home folder in case it was enabled and in case there was a change in disk space UpdatePackageHardQuota(package.PackageId); + UpdateESHardQuota(package.PackageId); DataProvider.DistributePackageServices(SecurityContext.User.UserId, package.PackageId); } @@ -980,6 +981,7 @@ namespace WebsitePanel.EnterpriseServer // Added By Haya UpdatePackageHardQuota(packageId); + UpdateESHardQuota(packageId); // save package item return AddPackageItem(homeFolder); @@ -1019,6 +1021,33 @@ namespace WebsitePanel.EnterpriseServer } + public static void UpdateESHardQuota(int packageId) + { + int esServiceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.EnterpriseStorage); + + if (esServiceId != 0) + { + + StringDictionary esSesstings = ServerController.GetServiceSettings(esServiceId); + + string usersHome = esSesstings["UsersHome"]; + string usersDomain = esSesstings["UsersDomain"]; + string locationDrive = esSesstings["LocationDrive"]; + + string homePath = string.Format("{0}:\\{1}", locationDrive, usersHome); + + int osId = PackageController.GetPackageServiceId(packageId, ResourceGroups.Os); + bool enableHardQuota = (esSesstings["enablehardquota"] != null) + ? bool.Parse(esSesstings["enablehardquota"]) + : false; + + if (enableHardQuota && osId != 0 && OperatingSystemController.CheckFileServicesInstallation(osId)) + { + FilesController.SetFolderQuota(packageId, usersHome, locationDrive, Quotas.ENTERPRISESTORAGE_DISKSTORAGESPACE); + } + } + } + #endregion #region Package Add-ons @@ -1079,6 +1108,7 @@ namespace WebsitePanel.EnterpriseServer // Update the Hard quota on home folder in case it was enabled and in case there was a change in disk space UpdatePackageHardQuota(addon.PackageId); + UpdateESHardQuota(addon.PackageId); return result; } @@ -1108,7 +1138,7 @@ namespace WebsitePanel.EnterpriseServer // Update the Hard quota on home folder in case it was enabled and in case there was a change in disk space UpdatePackageHardQuota(addon.PackageId); - + UpdateESHardQuota(addon.PackageId); return result; } @@ -1119,12 +1149,14 @@ namespace WebsitePanel.EnterpriseServer | DemandAccount.IsReseller); if (accountCheck < 0) return accountCheck; - - // Update the Hard quota on home folder in case it was enabled and in case there was a change in disk space - UpdatePackageHardQuota(GetPackageAddon(packageAddonId).PackageId); + var packageId = GetPackageAddon(packageAddonId).PackageId; DataProvider.DeletePackageAddon(SecurityContext.User.UserId, packageAddonId); + // Update the Hard quota on home folder in case it was enabled and in case there was a change in disk space + UpdatePackageHardQuota(packageId); + UpdateESHardQuota(packageId); + return 0; } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2012/Windows2012.cs b/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2012/Windows2012.cs index 3542555e..238cbc0c 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2012/Windows2012.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.OS.Windows2012/Windows2012.cs @@ -49,6 +49,7 @@ using System.Management.Automation.Runspaces; using WebsitePanel.Providers.Common; using WebsitePanel.Providers; using WebsitePanel.Providers.HostedSolution; +using System.Runtime.InteropServices; namespace WebsitePanel.Providers.OS @@ -80,28 +81,34 @@ namespace WebsitePanel.Providers.OS Log.WriteInfo("ShareNameDrive : {0}", shareNameDrive); Log.WriteInfo("QuotaLimit : {0}", quotaLimit); + string path = Path.Combine(shareNameDrive + @":\", folderPath); + var quota = CalculateQuota(quotaLimit); + Runspace runSpace = null; try { runSpace = OpenRunspace(); - string[] splits = folderPath.Split('\\'); - if (splits.Length > 0) + + if (path.IndexOfAny(Path.GetInvalidPathChars()) == -1) { - string sharePath = String.Empty; + if (!FileUtils.DirectoryExists(path)) + FileUtils.CreateDirectory(path); - if (splits.Length > 4) + switch (mode) { - // Form the share physicalPath - sharePath = shareNameDrive + @":\" + splits[3]; - - if (splits.Length == 5 && !quotaLimit.Equals(String.Empty)) - { - Command cmd = new Command("Set-FsrmQuota"); - cmd.Parameters.Add("Path", sharePath + @"\" + splits[4]); - cmd.Parameters.Add("Size", quotaLimit); - cmd.Parameters.Add("Confirm", true); - ExecuteShellCommand(runSpace, cmd, false); - } + //deleting old quota and creating new one + case 0: + { + RemoveOldQuotaOnFolder(runSpace, path); + ChangeQuotaOnFolder(runSpace, "New-FsrmQuota", path, quota); + break; + } + //modifying folder quota + case 1: + { + ChangeQuotaOnFolder(runSpace, "Set-FsrmQuota", path, quota); + break; + } } } } @@ -112,13 +119,60 @@ namespace WebsitePanel.Providers.OS } finally { - CloseRunspace(runSpace); } Log.WriteEnd("SetQuotaLimitOnFolder"); } + public UInt64 CalculateQuota(string quota) + { + UInt64 OneKb = 1024; + UInt64 OneMb = OneKb * 1024; + UInt64 OneGb = OneMb * 1024; + + UInt64 result = 0; + + // Quota Unit + if (quota.ToLower().Contains("gb")) + { + result = UInt64.Parse(quota.ToLower().Replace("gb", "")) * OneGb; + } + else if (quota.ToLower().Contains("mb")) + { + result = UInt64.Parse(quota.ToLower().Replace("mb", "")) * OneMb; + } + else + { + result = UInt64.Parse(quota.ToLower().Replace("kb", "")) * OneKb; + } + + return result; + } + + public void RemoveOldQuotaOnFolder(Runspace runSpace, string path) + { + try + { + runSpace = OpenRunspace(); + if (!string.IsNullOrEmpty(path)) + { + Command cmd = new Command("Remove-FsrmQuota"); + cmd.Parameters.Add("Path", path); + ExecuteShellCommand(runSpace, cmd, false); + } + } + catch { /* do nothing */ } + } + + public void ChangeQuotaOnFolder(Runspace runSpace, string command, string path, UInt64 quota) + { + Command cmd = new Command(command); + cmd.Parameters.Add("Path", path); + cmd.Parameters.Add("Size", quota); + ExecuteShellCommand(runSpace, cmd, false); + } + #region PowerShell integration private static InitialSessionState session = null;