add folder quota
This commit is contained in:
parent
878f67013e
commit
524c0f1a9e
9 changed files with 200 additions and 21 deletions
|
@ -3163,5 +3163,45 @@ FROM
|
|||
ExchangeAccounts
|
||||
WHERE
|
||||
ItemID = @ItemID AND DisplayName = @DisplayName AND (AccountType IN (8, 9))
|
||||
RETURN
|
||||
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),
|
||||
@FolderQuota INT,
|
||||
@LocationDrive NVARCHAR(255),
|
||||
@HomeFolder NVARCHAR(255),
|
||||
@Domain NVARCHAR(255)
|
||||
)
|
||||
AS
|
||||
|
||||
INSERT INTO EnterpriseFolders
|
||||
(
|
||||
ItemID,
|
||||
FolderName,
|
||||
FolderQuota,
|
||||
LocationDrive,
|
||||
HomeFolder,
|
||||
Domain
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
@ItemID,
|
||||
@FolderName,
|
||||
@FolderQuota,
|
||||
@LocationDrive,
|
||||
@HomeFolder,
|
||||
@Domain
|
||||
)
|
||||
|
||||
SET @FolderID = SCOPE_IDENTITY()
|
||||
|
||||
RETURN
|
||||
GO
|
|
@ -304,21 +304,25 @@ namespace WebsitePanel.EnterpriseServer
|
|||
|
||||
/// <remarks/>
|
||||
[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, bool addDefaultGroup)
|
||||
public ResultObject CreateEnterpriseFolder(int itemId, string folderName, int quota, QuotaType quotaType, bool addDefaultGroup)
|
||||
{
|
||||
object[] results = this.Invoke("CreateEnterpriseFolder", new object[] {
|
||||
itemId,
|
||||
folderName,
|
||||
quota,
|
||||
quotaType,
|
||||
addDefaultGroup});
|
||||
return ((ResultObject)(results[0]));
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public System.IAsyncResult BeginCreateEnterpriseFolder(int itemId, string folderName, bool addDefaultGroup, System.AsyncCallback callback, object asyncState)
|
||||
public System.IAsyncResult BeginCreateEnterpriseFolder(int itemId, string folderName, int quota, QuotaType quotaType, bool addDefaultGroup, System.AsyncCallback callback, object asyncState)
|
||||
{
|
||||
return this.BeginInvoke("CreateEnterpriseFolder", new object[] {
|
||||
itemId,
|
||||
folderName,
|
||||
quota,
|
||||
quotaType,
|
||||
addDefaultGroup}, callback, asyncState);
|
||||
}
|
||||
|
||||
|
@ -330,13 +334,13 @@ namespace WebsitePanel.EnterpriseServer
|
|||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void CreateEnterpriseFolderAsync(int itemId, string folderName, bool addDefaultGroup)
|
||||
public void CreateEnterpriseFolderAsync(int itemId, string folderName, int quota, QuotaType quotaType, bool addDefaultGroup)
|
||||
{
|
||||
this.CreateEnterpriseFolderAsync(itemId, folderName, addDefaultGroup, null);
|
||||
this.CreateEnterpriseFolderAsync(itemId, folderName, quota, quotaType, addDefaultGroup, null);
|
||||
}
|
||||
|
||||
/// <remarks/>
|
||||
public void CreateEnterpriseFolderAsync(int itemId, string folderName, bool addDefaultGroup, object userState)
|
||||
public void CreateEnterpriseFolderAsync(int itemId, string folderName, int quota, QuotaType quotaType, bool addDefaultGroup, object userState)
|
||||
{
|
||||
if ((this.CreateEnterpriseFolderOperationCompleted == null))
|
||||
{
|
||||
|
@ -345,6 +349,8 @@ namespace WebsitePanel.EnterpriseServer
|
|||
this.InvokeAsync("CreateEnterpriseFolder", new object[] {
|
||||
itemId,
|
||||
folderName,
|
||||
quota,
|
||||
quotaType,
|
||||
addDefaultGroup}, this.CreateEnterpriseFolderOperationCompleted, userState);
|
||||
}
|
||||
|
||||
|
|
|
@ -4169,7 +4169,7 @@ namespace WebsitePanel.EnterpriseServer
|
|||
|
||||
#region Enterprise Storage
|
||||
|
||||
public static int AddEntepriseFolder(int itemId, string folderName, string locationDrive, string homeFolder, string domain)
|
||||
public static int AddEntepriseFolder(int itemId, string folderName, int folderQuota, string locationDrive, string homeFolder, string domain)
|
||||
{
|
||||
SqlParameter prmId = new SqlParameter("@FolderID", SqlDbType.Int);
|
||||
prmId.Direction = ParameterDirection.Output;
|
||||
|
@ -4181,6 +4181,7 @@ namespace WebsitePanel.EnterpriseServer
|
|||
prmId,
|
||||
new SqlParameter("@ItemID", itemId),
|
||||
new SqlParameter("@FolderName", folderName),
|
||||
new SqlParameter("@FolderQuota", folderQuota),
|
||||
new SqlParameter("@LocationDrive", locationDrive),
|
||||
new SqlParameter("@HomeFolder", homeFolder),
|
||||
new SqlParameter("@Domain", domain)
|
||||
|
|
|
@ -87,12 +87,12 @@ namespace WebsitePanel.EnterpriseServer
|
|||
|
||||
public static ResultObject CreateFolder(int itemId)
|
||||
{
|
||||
return CreateFolder(itemId, string.Empty, false);
|
||||
return CreateFolder(itemId, string.Empty, 0, QuotaType.Soft, false);
|
||||
}
|
||||
|
||||
public static ResultObject CreateFolder(int itemId, string folderName, bool addDefaultGroup)
|
||||
public static ResultObject CreateFolder(int itemId, string folderName, int quota, QuotaType quotaType, bool addDefaultGroup)
|
||||
{
|
||||
return CreateFolderInternal(itemId, folderName, addDefaultGroup);
|
||||
return CreateFolderInternal(itemId, folderName, quota, quotaType, addDefaultGroup);
|
||||
}
|
||||
|
||||
public static ResultObject DeleteFolder(int itemId)
|
||||
|
@ -422,7 +422,7 @@ namespace WebsitePanel.EnterpriseServer
|
|||
}
|
||||
}
|
||||
|
||||
protected static ResultObject CreateFolderInternal(int itemId, string folderName, bool addDefaultGroup)
|
||||
protected static ResultObject CreateFolderInternal(int itemId, string folderName, int quota, QuotaType quotaType, bool addDefaultGroup)
|
||||
{
|
||||
ResultObject result = TaskManager.StartResultTask<ResultObject>("ENTERPRISE_STORAGE", "CREATE_FOLDER");
|
||||
|
||||
|
@ -450,20 +450,22 @@ namespace WebsitePanel.EnterpriseServer
|
|||
|
||||
es.CreateFolder(org.OrganizationId, folderName);
|
||||
|
||||
DataProvider.AddEntepriseFolder(itemId, folderName, esSesstings["LocationDrive"],
|
||||
SetFolderQuota(org.PackageId, org.OrganizationId, folderName, quota, quotaType);
|
||||
|
||||
DataProvider.AddEntepriseFolder(itemId, folderName, quota, esSesstings["LocationDrive"],
|
||||
esSesstings["UsersHome"], esSesstings["UsersDomain"]);
|
||||
|
||||
if (addDefaultGroup)
|
||||
{
|
||||
var groupName = string.Format("{0} Folder Users", folderName);
|
||||
|
||||
var accountId = ObjectUtils.CreateListFromDataReader<ExchangeAccount>(
|
||||
DataProvider.GetOrganizationGroupsByDisplayName(itemId, groupName)).Select(g => g.AccountId).FirstOrDefault();
|
||||
var account = ObjectUtils.CreateListFromDataReader<ExchangeAccount>(
|
||||
DataProvider.GetOrganizationGroupsByDisplayName(itemId, groupName)).FirstOrDefault();
|
||||
|
||||
var accountId = account == null
|
||||
? OrganizationController.CreateSecurityGroup(itemId, groupName)
|
||||
: account.AccountId;
|
||||
|
||||
if (accountId == null)
|
||||
{
|
||||
accountId = OrganizationController.CreateSecurityGroup(itemId, groupName);
|
||||
}
|
||||
|
||||
var securityGroup = OrganizationController.GetSecurityGroupGeneralSettings(itemId, accountId);
|
||||
|
||||
|
@ -473,6 +475,7 @@ namespace WebsitePanel.EnterpriseServer
|
|||
Roles = new List<string>() { securityGroup.AccountName },
|
||||
Read = true,
|
||||
Write = true,
|
||||
Source = true,
|
||||
Pathes = new List<string>() { "*" }
|
||||
}
|
||||
};
|
||||
|
@ -888,7 +891,6 @@ namespace WebsitePanel.EnterpriseServer
|
|||
if (permission.Access.ToLower().Contains("read-only"))
|
||||
{
|
||||
rule.Read = true;
|
||||
rule.Source = true;
|
||||
}
|
||||
|
||||
if (permission.Access.ToLower().Contains("read-write"))
|
||||
|
@ -897,6 +899,8 @@ namespace WebsitePanel.EnterpriseServer
|
|||
rule.Read = true;
|
||||
}
|
||||
|
||||
rule.Source = true;
|
||||
|
||||
rule.Pathes.Add("*");
|
||||
|
||||
rules.Add(rule);
|
||||
|
@ -960,6 +964,9 @@ namespace WebsitePanel.EnterpriseServer
|
|||
|
||||
private static void SetFolderQuota(int packageId, string orgId, string folderName, int quotaSize, QuotaType quotaType)
|
||||
{
|
||||
if (quotaSize == 0)
|
||||
return;
|
||||
|
||||
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
|
||||
if (accountCheck < 0)
|
||||
return;
|
||||
|
|
|
@ -76,9 +76,9 @@ namespace WebsitePanel.EnterpriseServer
|
|||
}
|
||||
|
||||
[WebMethod]
|
||||
public ResultObject CreateEnterpriseFolder(int itemId, string folderName, bool addDefaultGroup)
|
||||
public ResultObject CreateEnterpriseFolder(int itemId, string folderName, int quota, QuotaType quotaType, bool addDefaultGroup)
|
||||
{
|
||||
return EnterpriseStorageController.CreateFolder(itemId, folderName, addDefaultGroup);
|
||||
return EnterpriseStorageController.CreateFolder(itemId, folderName, quota, quotaType, addDefaultGroup);
|
||||
}
|
||||
|
||||
[WebMethod]
|
||||
|
|
|
@ -144,4 +144,25 @@
|
|||
<data name="locAddDefaultGroup" xml:space="preserve">
|
||||
<value>Add Default Group</value>
|
||||
</data>
|
||||
<data name="locFolderSize" xml:space="preserve">
|
||||
<value>Folder Limit Size (Gb):</value>
|
||||
</data>
|
||||
<data name="locQuotaType" xml:space="preserve">
|
||||
<value>Quota Type:</value>
|
||||
</data>
|
||||
<data name="rangeFolderSize" xml:space="preserve">
|
||||
<value>*</value>
|
||||
</data>
|
||||
<data name="rbtnQuotaHard" xml:space="preserve">
|
||||
<value>Hard</value>
|
||||
</data>
|
||||
<data name="rbtnQuotaSoft" xml:space="preserve">
|
||||
<value>Soft</value>
|
||||
</data>
|
||||
<data name="valRequireFolderSize" xml:space="preserve">
|
||||
<value>valRequireFolderSize</value>
|
||||
</data>
|
||||
<data name="valRequireFolderSize.ErrorMessage" xml:space="preserve">
|
||||
<value>Enter Folder Size</value>
|
||||
</data>
|
||||
</root>
|
|
@ -33,6 +33,24 @@
|
|||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<tr>
|
||||
<td class="FormLabel150"><asp:Localize ID="locFolderSize" runat="server" meta:resourcekey="locFolderSize" Text="Folder Limit Size (Gb):"></asp:Localize></td>
|
||||
<td>
|
||||
<asp:TextBox ID="txtFolderSize" runat="server" CssClass="HugeTextBox200"></asp:TextBox>
|
||||
<asp:RequiredFieldValidator ID="valRequireFolderSize" runat="server" meta:resourcekey="valRequireFolderSize" ControlToValidate="txtFolderSize"
|
||||
ErrorMessage="Enter Folder Size" ValidationGroup="CreateFolder" Display="Dynamic" Text="*" SetFocusOnError="True"></asp:RequiredFieldValidator>
|
||||
<asp:RangeValidator ID="rangeFolderSize" runat="server" ControlToValidate="txtFolderSize" MaximumValue="99999999" MinimumValue="0.01" Type="Double"
|
||||
ValidationGroup="CreateFolder" Display="Dynamic" Text="*" SetFocusOnError="True"
|
||||
ErrorMessage="The quota you’ve entered exceeds the available quota for tenant" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="FormLabel150"><asp:Localize ID="locQuotaType" runat="server" meta:resourcekey="locQuotaType" Text="Quota Type:"></asp:Localize></td>
|
||||
<td class="FormRBtnL">
|
||||
<asp:RadioButton ID="rbtnQuotaSoft" runat="server" meta:resourcekey="rbtnQuotaSoft" Text="Soft" GroupName="QuotaType" Checked="true" />
|
||||
<asp:RadioButton ID="rbtnQuotaHard" runat="server" meta:resourcekey="rbtnQuotaHard" Text="Hard" GroupName="QuotaType" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="FormLabel150"><asp:Localize ID="locAddDefaultGroup" runat="server" meta:resourcekey="locAddDefaultGroup" Text="Add Default Group:"></asp:Localize></td>
|
||||
<td>
|
||||
|
|
|
@ -30,11 +30,18 @@ using System;
|
|||
using WebsitePanel.EnterpriseServer;
|
||||
using WebsitePanel.Providers.Common;
|
||||
using WebsitePanel.Providers.HostedSolution;
|
||||
using WebsitePanel.Providers.OS;
|
||||
|
||||
namespace WebsitePanel.Portal.ExchangeServer
|
||||
{
|
||||
public partial class EnterpriseStorageCreateFolder : WebsitePanelModuleBase
|
||||
{
|
||||
#region Constants
|
||||
|
||||
private const int OneGb = 1024;
|
||||
|
||||
#endregion
|
||||
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (!IsPostBack)
|
||||
|
@ -44,6 +51,17 @@ namespace WebsitePanel.Portal.ExchangeServer
|
|||
Response.Redirect(EditUrl("SpaceID", PanelSecurity.PackageId.ToString(), "enterprisestorage_folders",
|
||||
"ItemID=" + PanelRequest.ItemID));
|
||||
}
|
||||
|
||||
OrganizationStatistics organizationStats = ES.Services.Organizations.GetOrganizationStatisticsByOrganization(PanelRequest.ItemID);
|
||||
|
||||
if (organizationStats.AllocatedEnterpriseStorageSpace != -1)
|
||||
{
|
||||
OrganizationStatistics tenantStats = ES.Services.Organizations.GetOrganizationStatistics(PanelRequest.ItemID);
|
||||
|
||||
rangeFolderSize.MaximumValue = Math.Round((tenantStats.AllocatedEnterpriseStorageSpace - (decimal)tenantStats.UsedEnterpriseStorageSpace) / OneGb
|
||||
+ Utils.ParseDecimal(txtFolderSize.Text, 0), 2).ToString();
|
||||
rangeFolderSize.ErrorMessage = string.Format("The quota you’ve entered exceeds the available quota for tenant ({0}Gb)", rangeFolderSize.MaximumValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -69,7 +87,12 @@ namespace WebsitePanel.Portal.ExchangeServer
|
|||
ES.Services.EnterpriseStorage.CreateEnterpriseStorage(PanelSecurity.PackageId, PanelRequest.ItemID);
|
||||
}
|
||||
|
||||
ResultObject result = ES.Services.EnterpriseStorage.CreateEnterpriseFolder(PanelRequest.ItemID, txtFolderName.Text, chkAddDefaultGroup.Checked);
|
||||
ResultObject result = ES.Services.EnterpriseStorage.CreateEnterpriseFolder(
|
||||
PanelRequest.ItemID,
|
||||
txtFolderName.Text,
|
||||
(int)(decimal.Parse(txtFolderSize.Text) * OneGb),
|
||||
rbtnQuotaSoft.Checked ? QuotaType.Soft : QuotaType.Hard,
|
||||
chkAddDefaultGroup.Checked);
|
||||
|
||||
if (!result.IsSuccess && result.ErrorCodes.Count > 0)
|
||||
{
|
||||
|
|
|
@ -93,6 +93,69 @@ namespace WebsitePanel.Portal.ExchangeServer {
|
|||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.RequiredFieldValidator valRequireFolderName;
|
||||
|
||||
/// <summary>
|
||||
/// locFolderSize control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Localize locFolderSize;
|
||||
|
||||
/// <summary>
|
||||
/// txtFolderSize control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.TextBox txtFolderSize;
|
||||
|
||||
/// <summary>
|
||||
/// valRequireFolderSize control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.RequiredFieldValidator valRequireFolderSize;
|
||||
|
||||
/// <summary>
|
||||
/// rangeFolderSize control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.RangeValidator rangeFolderSize;
|
||||
|
||||
/// <summary>
|
||||
/// locQuotaType control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.Localize locQuotaType;
|
||||
|
||||
/// <summary>
|
||||
/// rbtnQuotaSoft control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.RadioButton rbtnQuotaSoft;
|
||||
|
||||
/// <summary>
|
||||
/// rbtnQuotaHard control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.WebControls.RadioButton rbtnQuotaHard;
|
||||
|
||||
/// <summary>
|
||||
/// locAddDefaultGroup control.
|
||||
/// </summary>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue