Added functionality of Service Levels

This commit is contained in:
vfedosevich 2014-09-11 22:23:48 +03:00
parent 4c58752483
commit b1c52c36eb
39 changed files with 2282 additions and 175 deletions

View file

@ -4506,3 +4506,703 @@ GO
UPDATE [dbo].[ScheduleTaskParameters] SET [DefaultValue]= N'MsSQL2005=SQL Server 2005;MsSQL2008=SQL Server 2008;MsSQL2012=SQL Server 2012;MsSQL2014=SQL Server 2014;MySQL4=MySQL 4.0;MySQL5=MySQL 5.0' WHERE [TaskID]= 'SCHEDULE_TASK_BACKUP_DATABASE' AND [ParameterID]='DATABASE_GROUP' UPDATE [dbo].[ScheduleTaskParameters] SET [DefaultValue]= N'MsSQL2005=SQL Server 2005;MsSQL2008=SQL Server 2008;MsSQL2012=SQL Server 2012;MsSQL2014=SQL Server 2014;MySQL4=MySQL 4.0;MySQL5=MySQL 5.0' WHERE [TaskID]= 'SCHEDULE_TASK_BACKUP_DATABASE' AND [ParameterID]='DATABASE_GROUP'
GO GO
/*SUPPORT SERVICE LEVELS*/
IF NOT EXISTS (SELECT * FROM [dbo].[ResourceGroups] WHERE [GroupName] = 'Service Levels')
BEGIN
INSERT [dbo].[ResourceGroups] ([GroupID], [GroupName], [GroupOrder], [GroupController], [ShowGroup]) VALUES (47, N'Service Levels', 2, NULL, 1)
END
GO
IF NOT EXISTS (SELECT * FROM SYS.TABLES WHERE name = 'SupportServiceLevels')
CREATE TABLE SupportServiceLevels
(
[LevelID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[LevelName] NVARCHAR(100) NOT NULL,
[LevelDescription] NVARCHAR(1000) NULL
)
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetSupportServiceLevels')
DROP PROCEDURE GetSupportServiceLevels
GO
CREATE PROCEDURE [dbo].[GetSupportServiceLevels]
AS
SELECT *
FROM SupportServiceLevels
RETURN
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'GetSupportServiceLevel')
DROP PROCEDURE GetSupportServiceLevel
GO
CREATE PROCEDURE [dbo].[GetSupportServiceLevel]
(
@LevelID int
)
AS
SELECT *
FROM SupportServiceLevels
WHERE LevelID = @LevelID
RETURN
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'AddSupportServiceLevel')
DROP PROCEDURE AddSupportServiceLevel
GO
CREATE PROCEDURE [dbo].[AddSupportServiceLevel]
(
@LevelID int OUTPUT,
@LevelName nvarchar(100),
@LevelDescription nvarchar(1000)
)
AS
BEGIN
IF EXISTS (SELECT * FROM SupportServiceLevels WHERE LevelName = @LevelName)
BEGIN
SET @LevelID = -1
RETURN
END
INSERT INTO SupportServiceLevels
(
LevelName,
LevelDescription
)
VALUES
(
@LevelName,
@LevelDescription
)
SET @LevelID = SCOPE_IDENTITY()
DECLARE @ResourseGroupID int
IF EXISTS (SELECT * FROM ResourceGroups WHERE GroupName = 'Service Levels')
BEGIN
DECLARE @QuotaLastID int, @CurQuotaName nvarchar(100),
@CurQuotaDescription nvarchar(1000), @QuotaOrderInGroup int
SET @CurQuotaName = N'ServiceLevel.' + @LevelName
SET @CurQuotaDescription = @LevelName + N', users'
SELECT @ResourseGroupID = GroupID FROM ResourceGroups WHERE GroupName = 'Service Levels'
SELECT @QuotaLastID = MAX(QuotaID) FROM Quotas
SELECT @QuotaOrderInGroup = MAX(QuotaOrder) FROM Quotas WHERE GroupID = @ResourseGroupID
IF @QuotaOrderInGroup IS NULL SET @QuotaOrderInGroup = 0
IF NOT EXISTS (SELECT * FROM Quotas WHERE QuotaName = @CurQuotaName)
BEGIN
INSERT Quotas
(QuotaID,
GroupID,
QuotaOrder,
QuotaName,
QuotaDescription,
QuotaTypeID,
ServiceQuota,
ItemTypeID)
VALUES
(@QuotaLastID + 1,
@ResourseGroupID,
@QuotaOrderInGroup + 1,
@CurQuotaName,
@CurQuotaDescription,
3,
0,
NULL)
END
END
END
RETURN
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'DeleteSupportServiceLevel')
DROP PROCEDURE DeleteSupportServiceLevel
GO
CREATE PROCEDURE [dbo].[DeleteSupportServiceLevel]
(
@LevelID int
)
AS
BEGIN
DECLARE @LevelName nvarchar(100), @QuotaName nvarchar(100), @QuotaID int
SELECT @LevelName = LevelName FROM SupportServiceLevels WHERE LevelID = @LevelID
SET @QuotaName = N'ServiceLevel.' + @LevelName
SELECT @QuotaID = QuotaID FROM Quotas WHERE QuotaName = @QuotaName
IF @QuotaID IS NOT NULL
BEGIN
DELETE FROM HostingPlanQuotas WHERE QuotaID = @QuotaID
DELETE FROM PackageQuotas WHERE QuotaID = @QuotaID
DELETE FROM Quotas WHERE QuotaID = @QuotaID
END
IF EXISTS (SELECT * FROM ExchangeAccounts WHERE LevelID = @LevelID)
UPDATE ExchangeAccounts
SET LevelID = NULL
WHERE LevelID = @LevelID
DELETE FROM SupportServiceLevels WHERE LevelID = @LevelID
END
RETURN
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'UpdateSupportServiceLevel')
DROP PROCEDURE UpdateSupportServiceLevel
GO
CREATE PROCEDURE [dbo].[UpdateSupportServiceLevel]
(
@LevelID int,
@LevelName nvarchar(100),
@LevelDescription nvarchar(1000)
)
AS
BEGIN
DECLARE @PrevQuotaName nvarchar(100), @PrevLevelName nvarchar(100)
SELECT @PrevLevelName = LevelName FROM SupportServiceLevels WHERE LevelID = @LevelID
SET @PrevQuotaName = N'ServiceLevel.' + @PrevLevelName
UPDATE SupportServiceLevels
SET LevelName = @LevelName,
LevelDescription = @LevelDescription
WHERE LevelID = @LevelID
IF EXISTS (SELECT * FROM Quotas WHERE QuotaName = @PrevQuotaName)
BEGIN
DECLARE @QuotaID INT
SELECT @QuotaID = QuotaID FROM Quotas WHERE QuotaName = @PrevQuotaName
UPDATE Quotas
SET QuotaName = N'ServiceLevel.' + @LevelName,
QuotaDescription = @LevelName + ', users'
WHERE QuotaID = @QuotaID
END
END
RETURN
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='ExchangeAccounts' AND COLS.name='LevelID')
BEGIN
ALTER TABLE [dbo].[ExchangeAccounts] ADD
[LevelID] [int] NULL,
[IsVIP] [bit] NOT NULL DEFAULT 0
END
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type IN ('FN', 'IF', 'TF') AND name = 'GetPackageServiceLevelResource')
DROP FUNCTION GetPackageServiceLevelResource
GO
CREATE FUNCTION dbo.GetPackageServiceLevelResource
(
@PackageID int,
@GroupID int,
@ServerID int
)
RETURNS bit
AS
BEGIN
IF NOT EXISTS (SELECT * FROM dbo.ResourceGroups WHERE GroupID = @GroupID AND GroupName = 'Service Levels')
RETURN 0
IF @PackageID IS NULL
RETURN 1
DECLARE @Result bit
SET @Result = 1 -- enabled
DECLARE @PID int, @ParentPackageID int
SET @PID = @PackageID
DECLARE @OverrideQuotas bit
IF @ServerID IS NULL OR @ServerID = 0
SELECT @ServerID = ServerID FROM Packages
WHERE PackageID = @PackageID
WHILE 1 = 1
BEGIN
DECLARE @GroupEnabled int
-- get package info
SELECT
@ParentPackageID = ParentPackageID,
@OverrideQuotas = OverrideQuotas
FROM Packages WHERE PackageID = @PID
-- check if this is a root 'System' package
SET @GroupEnabled = 1 -- enabled
IF @ParentPackageID IS NULL
BEGIN
IF @ServerID = 0
RETURN 0
ELSE IF @PID = -1
RETURN 1
ELSE IF @ServerID IS NULL
RETURN 1
ELSE IF @ServerID > 0
RETURN 1
ELSE RETURN 0
END
ELSE -- parentpackage is not null
BEGIN
-- check the current package
IF @OverrideQuotas = 1
BEGIN
IF NOT EXISTS(
SELECT GroupID FROM PackageResources WHERE GroupID = @GroupID AND PackageID = @PID
)
SET @GroupEnabled = 0
END
ELSE
BEGIN
IF NOT EXISTS(
SELECT HPR.GroupID FROM Packages AS P
INNER JOIN HostingPlanResources AS HPR ON P.PlanID = HPR.PlanID
WHERE HPR.GroupID = @GroupID AND P.PackageID = @PID
)
SET @GroupEnabled = 0
END
-- check addons
IF EXISTS(
SELECT HPR.GroupID FROM PackageAddons AS PA
INNER JOIN HostingPlanResources AS HPR ON PA.PlanID = HPR.PlanID
WHERE HPR.GroupID = @GroupID AND PA.PackageID = @PID
AND PA.StatusID = 1 -- active add-on
)
SET @GroupEnabled = 1
END
IF @GroupEnabled = 0
RETURN 0
SET @PID = @ParentPackageID
END -- end while
RETURN @Result
END
GO
ALTER PROCEDURE [dbo].[GetPackageQuotasForEdit]
(
@ActorID int,
@PackageID int
)
AS
-- check rights
IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0
RAISERROR('You are not allowed to access this package', 16, 1)
DECLARE @ServerID int, @ParentPackageID int, @PlanID int
SELECT @ServerID = ServerID, @ParentPackageID = ParentPackageID, @PlanID = PlanID FROM Packages
WHERE PackageID = @PackageID
-- get resource groups
SELECT
RG.GroupID,
RG.GroupName,
ISNULL(PR.CalculateDiskSpace, ISNULL(HPR.CalculateDiskSpace, 0)) AS CalculateDiskSpace,
ISNULL(PR.CalculateBandwidth, ISNULL(HPR.CalculateBandwidth, 0)) AS CalculateBandwidth,
--dbo.GetPackageAllocatedResource(@PackageID, RG.GroupID, @ServerID) AS Enabled,
CASE
WHEN RG.GroupName = 'Service Levels' THEN dbo.GetPackageServiceLevelResource(PackageID, RG.GroupID, @ServerID)
ELSE dbo.GetPackageAllocatedResource(PackageID, RG.GroupID, @ServerID)
END AS Enabled,
--dbo.GetPackageAllocatedResource(@ParentPackageID, RG.GroupID, @ServerID) AS ParentEnabled
CASE
WHEN RG.GroupName = 'Service Levels' THEN dbo.GetPackageServiceLevelResource(@ParentPackageID, RG.GroupID, @ServerID)
ELSE dbo.GetPackageAllocatedResource(@ParentPackageID, RG.GroupID, @ServerID)
END AS ParentEnabled
FROM ResourceGroups AS RG
LEFT OUTER JOIN PackageResources AS PR ON RG.GroupID = PR.GroupID AND PR.PackageID = @PackageID
LEFT OUTER JOIN HostingPlanResources AS HPR ON RG.GroupID = HPR.GroupID AND HPR.PlanID = @PlanID
ORDER BY RG.GroupOrder
-- return quotas
SELECT
Q.QuotaID,
Q.GroupID,
Q.QuotaName,
Q.QuotaDescription,
Q.QuotaTypeID,
CASE
WHEN PQ.QuotaValue IS NULL THEN dbo.GetPackageAllocatedQuota(@PackageID, Q.QuotaID)
ELSE PQ.QuotaValue
END QuotaValue,
dbo.GetPackageAllocatedQuota(@ParentPackageID, Q.QuotaID) AS ParentQuotaValue
FROM Quotas AS Q
LEFT OUTER JOIN PackageQuotas AS PQ ON PQ.QuotaID = Q.QuotaID AND PQ.PackageID = @PackageID
ORDER BY Q.QuotaOrder
RETURN
GO
ALTER PROCEDURE [dbo].[GetPackageQuotas]
(
@ActorID int,
@PackageID int
)
AS
-- check rights
IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0
RAISERROR('You are not allowed to access this package', 16, 1)
DECLARE @PlanID int, @ParentPackageID int
SELECT @PlanID = PlanID, @ParentPackageID = ParentPackageID FROM Packages
WHERE PackageID = @PackageID
-- get resource groups
SELECT
RG.GroupID,
RG.GroupName,
ISNULL(HPR.CalculateDiskSpace, 0) AS CalculateDiskSpace,
ISNULL(HPR.CalculateBandwidth, 0) AS CalculateBandwidth,
--dbo.GetPackageAllocatedResource(@ParentPackageID, RG.GroupID, 0) AS ParentEnabled
CASE
WHEN RG.GroupName = 'Service Levels' THEN dbo.GetPackageServiceLevelResource(@ParentPackageID, RG.GroupID, 0)
ELSE dbo.GetPackageAllocatedResource(@ParentPackageID, RG.GroupID, 0)
END AS ParentEnabled
FROM ResourceGroups AS RG
LEFT OUTER JOIN HostingPlanResources AS HPR ON RG.GroupID = HPR.GroupID AND HPR.PlanID = @PlanID
--WHERE dbo.GetPackageAllocatedResource(@PackageID, RG.GroupID, 0) = 1
WHERE (dbo.GetPackageAllocatedResource(@PackageID, RG.GroupID, 0) = 1 AND RG.GroupName <> 'Service Levels') OR
(dbo.GetPackageServiceLevelResource(@PackageID, RG.GroupID, 0) = 1 AND RG.GroupName = 'Service Levels')
ORDER BY RG.GroupOrder
-- return quotas
SELECT
Q.QuotaID,
Q.GroupID,
Q.QuotaName,
Q.QuotaDescription,
Q.QuotaTypeID,
dbo.GetPackageAllocatedQuota(@PackageID, Q.QuotaID) AS QuotaValue,
dbo.GetPackageAllocatedQuota(@ParentPackageID, Q.QuotaID) AS ParentQuotaValue,
ISNULL(dbo.CalculateQuotaUsage(@PackageID, Q.QuotaID), 0) AS QuotaUsedValue
FROM Quotas AS Q
WHERE Q.HideQuota IS NULL OR Q.HideQuota = 0
ORDER BY Q.QuotaOrder
RETURN
GO
ALTER PROCEDURE [dbo].[GetHostingPlanQuotas]
(
@ActorID int,
@PlanID int,
@PackageID int,
@ServerID int
)
AS
-- check rights
IF dbo.CheckActorParentPackageRights(@ActorID, @PackageID) = 0
RAISERROR('You are not allowed to access this package', 16, 1)
DECLARE @IsAddon bit
IF @ServerID = 0
SELECT @ServerID = ServerID FROM Packages
WHERE PackageID = @PackageID
-- get resource groups
SELECT
RG.GroupID,
RG.GroupName,
CASE
WHEN HPR.CalculateDiskSpace IS NULL THEN CAST(0 as bit)
ELSE CAST(1 as bit)
END AS Enabled,
--dbo.GetPackageAllocatedResource(@PackageID, RG.GroupID, @ServerID) AS ParentEnabled,
CASE
WHEN RG.GroupName = 'Service Levels' THEN dbo.GetPackageServiceLevelResource(@PackageID, RG.GroupID, @ServerID)
ELSE dbo.GetPackageAllocatedResource(@PackageID, RG.GroupID, @ServerID)
END AS ParentEnabled,
ISNULL(HPR.CalculateDiskSpace, 1) AS CalculateDiskSpace,
ISNULL(HPR.CalculateBandwidth, 1) AS CalculateBandwidth
FROM ResourceGroups AS RG
LEFT OUTER JOIN HostingPlanResources AS HPR ON RG.GroupID = HPR.GroupID AND HPR.PlanID = @PlanID
WHERE (RG.ShowGroup = 1)
ORDER BY RG.GroupOrder
-- get quotas by groups
SELECT
Q.QuotaID,
Q.GroupID,
Q.QuotaName,
Q.QuotaDescription,
Q.QuotaTypeID,
ISNULL(HPQ.QuotaValue, 0) AS QuotaValue,
dbo.GetPackageAllocatedQuota(@PackageID, Q.QuotaID) AS ParentQuotaValue
FROM Quotas AS Q
LEFT OUTER JOIN HostingPlanQuotas AS HPQ ON Q.QuotaID = HPQ.QuotaID AND HPQ.PlanID = @PlanID
WHERE Q.HideQuota IS NULL OR Q.HideQuota = 0
ORDER BY Q.QuotaOrder
RETURN
GO
ALTER PROCEDURE [dbo].[SearchOrganizationAccounts]
(
@ActorID int,
@ItemID int,
@FilterColumn nvarchar(50) = '',
@FilterValue nvarchar(50) = '',
@SortColumn nvarchar(50),
@IncludeMailboxes bit
)
AS
DECLARE @PackageID int
SELECT @PackageID = PackageID FROM ServiceItems
WHERE ItemID = @ItemID
-- check rights
IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0
RAISERROR('You are not allowed to access this package', 16, 1)
-- start
DECLARE @condition nvarchar(700)
SET @condition = '
(EA.AccountType = 7 OR (EA.AccountType = 1 AND @IncludeMailboxes = 1) )
AND EA.ItemID = @ItemID
'
IF @FilterColumn <> '' AND @FilterColumn IS NOT NULL
AND @FilterValue <> '' AND @FilterValue IS NOT NULL
SET @condition = @condition + ' AND ' + @FilterColumn + ' LIKE ''' + @FilterValue + ''''
IF @SortColumn IS NULL OR @SortColumn = ''
SET @SortColumn = 'EA.DisplayName ASC'
DECLARE @sql nvarchar(3500)
set @sql = '
SELECT
EA.AccountID,
EA.ItemID,
EA.AccountType,
EA.AccountName,
EA.DisplayName,
EA.PrimaryEmailAddress,
EA.SubscriberNumber,
EA.UserPrincipalName,
EA.LevelID,
EA.IsVIP
FROM ExchangeAccounts AS EA
WHERE ' + @condition
print @sql
exec sp_executesql @sql, N'@ItemID int, @IncludeMailboxes bit',
@ItemID, @IncludeMailboxes
RETURN
GO
ALTER PROCEDURE [dbo].[GetExchangeAccount]
(
@ItemID int,
@AccountID int
)
AS
SELECT
E.AccountID,
E.ItemID,
E.AccountType,
E.AccountName,
E.DisplayName,
E.PrimaryEmailAddress,
E.MailEnabledPublicFolder,
E.MailboxManagerActions,
E.SamAccountName,
E.AccountPassword,
E.MailboxPlanId,
P.MailboxPlan,
E.SubscriberNumber,
E.UserPrincipalName,
E.ArchivingMailboxPlanId,
AP.MailboxPlan as 'ArchivingMailboxPlan',
E.EnableArchiving,
E.LevelID,
E.IsVIP
FROM
ExchangeAccounts AS E
LEFT OUTER JOIN ExchangeMailboxPlans AS P ON E.MailboxPlanId = P.MailboxPlanId
LEFT OUTER JOIN ExchangeMailboxPlans AS AP ON E.ArchivingMailboxPlanId = AP.MailboxPlanId
WHERE
E.ItemID = @ItemID AND
E.AccountID = @AccountID
RETURN
GO
ALTER PROCEDURE [dbo].[GetExchangeAccountsPaged]
(
@ActorID int,
@ItemID int,
@AccountTypes nvarchar(30),
@FilterColumn nvarchar(50) = '',
@FilterValue nvarchar(50) = '',
@SortColumn nvarchar(50),
@StartRow int,
@MaximumRows int,
@Archiving bit
)
AS
DECLARE @PackageID int
SELECT @PackageID = PackageID FROM ServiceItems
WHERE ItemID = @ItemID
-- check rights
IF dbo.CheckActorPackageRights(@ActorID, @PackageID) = 0
RAISERROR('You are not allowed to access this package', 16, 1)
-- start
DECLARE @condition nvarchar(700)
SET @condition = '
EA.AccountType IN (' + @AccountTypes + ')
AND EA.ItemID = @ItemID
'
IF @FilterColumn <> '' AND @FilterColumn IS NOT NULL
AND @FilterValue <> '' AND @FilterValue IS NOT NULL
BEGIN
IF @FilterColumn = 'PrimaryEmailAddress' AND @AccountTypes <> '2'
BEGIN
SET @condition = @condition + ' AND EA.AccountID IN (SELECT EAEA.AccountID FROM ExchangeAccountEmailAddresses EAEA WHERE EAEA.EmailAddress LIKE ''' + @FilterValue + ''')'
END
ELSE
BEGIN
SET @condition = @condition + ' AND ' + @FilterColumn + ' LIKE ''' + @FilterValue + ''''
END
END
if @Archiving = 1
BEGIN
SET @condition = @condition + ' AND (EA.ArchivingMailboxPlanId > 0) '
END
IF @SortColumn IS NULL OR @SortColumn = ''
SET @SortColumn = 'EA.DisplayName ASC'
DECLARE @joincondition nvarchar(700)
SET @joincondition = ',P.MailboxPlan FROM ExchangeAccounts AS EA
LEFT OUTER JOIN ExchangeMailboxPlans AS P ON EA.MailboxPlanId = P.MailboxPlanId'
DECLARE @sql nvarchar(3500)
set @sql = '
SELECT COUNT(EA.AccountID) FROM ExchangeAccounts AS EA
WHERE ' + @condition + ';
WITH Accounts AS (
SELECT ROW_NUMBER() OVER (ORDER BY ' + @SortColumn + ') as Row,
EA.AccountID,
EA.ItemID,
EA.AccountType,
EA.AccountName,
EA.DisplayName,
EA.PrimaryEmailAddress,
EA.MailEnabledPublicFolder,
EA.MailboxPlanId,
EA.SubscriberNumber,
EA.UserPrincipalName,
EA.LevelID,
EA.IsVIP ' + @joincondition +
' WHERE ' + @condition + '
)
SELECT * FROM Accounts
WHERE Row BETWEEN @StartRow + 1 and @StartRow + @MaximumRows
'
print @sql
exec sp_executesql @sql, N'@ItemID int, @StartRow int, @MaximumRows int',
@ItemID, @StartRow, @MaximumRows
RETURN
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'UpdateExchangeAccountSLSettings')
DROP PROCEDURE UpdateExchangeAccountSLSettings
GO
CREATE PROCEDURE [dbo].[UpdateExchangeAccountSLSettings]
(
@AccountID int,
@LevelID int,
@IsVIP bit
)
AS
BEGIN TRAN
IF (@LevelID = -1)
BEGIN
SET @LevelID = NULL
END
UPDATE ExchangeAccounts SET
LevelID = @LevelID,
IsVIP = @IsVIP
WHERE
AccountID = @AccountID
IF (@@ERROR <> 0 )
BEGIN
ROLLBACK TRANSACTION
RETURN -1
END
COMMIT TRAN
RETURN
GO
IF EXISTS (SELECT * FROM SYS.OBJECTS WHERE type = 'P' AND name = 'CheckServiceLevelUsage')
DROP PROCEDURE CheckServiceLevelUsage
GO
CREATE PROCEDURE [dbo].[CheckServiceLevelUsage]
(
@LevelID int
)
AS
SELECT COUNT(EA.AccountID)
FROM SupportServiceLevels AS SL
INNER JOIN ExchangeAccounts AS EA ON SL.LevelID = EA.LevelID
WHERE EA.LevelID = @LevelID
RETURN
GO

View file

@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WebsitePanel.EnterpriseServer.Base.HostedSolution
{
public class ServiceLevel
{
int levelId;
string levelName;
string levelDescription;
public int LevelId
{
get { return levelId; }
set { levelId = value; }
}
public string LevelName
{
get { return levelName; }
set { levelName = value; }
}
public string LevelDescription
{
get { return levelDescription; }
set { levelDescription = value; }
}
}
}

View file

@ -255,5 +255,6 @@ order by rg.groupOrder
public const string ENTERPRISESTORAGE_FOLDERS = "EnterpriseStorage.Folders"; public const string ENTERPRISESTORAGE_FOLDERS = "EnterpriseStorage.Folders";
public const string ENTERPRICESTORAGE_DRIVEMAPS = "EnterpriseStorage.DriveMaps"; public const string ENTERPRICESTORAGE_DRIVEMAPS = "EnterpriseStorage.DriveMaps";
public const string SERVICE_LEVELS = "ServiceLevel.";
} }
} }

View file

@ -55,5 +55,6 @@ namespace WebsitePanel.EnterpriseServer
public const string VPSForPC = "VPSForPC"; public const string VPSForPC = "VPSForPC";
public const string Lync = "Lync"; public const string Lync = "Lync";
public const string EnterpriseStorage = "EnterpriseStorage"; public const string EnterpriseStorage = "EnterpriseStorage";
public const string ServiceLevels = "Service Levels";
} }
} }

View file

@ -117,6 +117,7 @@
<Compile Include="Ecommerce\TriggerSystem\ITriggerHandler.cs" /> <Compile Include="Ecommerce\TriggerSystem\ITriggerHandler.cs" />
<Compile Include="ExchangeServer\ExchangeEmailAddress.cs" /> <Compile Include="ExchangeServer\ExchangeEmailAddress.cs" />
<Compile Include="HostedSolution\AdditionalGroup.cs" /> <Compile Include="HostedSolution\AdditionalGroup.cs" />
<Compile Include="HostedSolution\ServiceLevel.cs" />
<Compile Include="HostedSolution\CRMLycenseTypes.cs" /> <Compile Include="HostedSolution\CRMLycenseTypes.cs" />
<Compile Include="HostedSolution\ESPermission.cs" /> <Compile Include="HostedSolution\ESPermission.cs" />
<Compile Include="Log\LogRecord.cs" /> <Compile Include="Log\LogRecord.cs" />

View file

@ -146,6 +146,16 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution
private System.Threading.SendOrPostCallback SetDefaultOrganizationOperationCompleted; private System.Threading.SendOrPostCallback SetDefaultOrganizationOperationCompleted;
private System.Threading.SendOrPostCallback GetSupportServiceLevelsOperationCompleted;
private System.Threading.SendOrPostCallback UpdateSupportServiceLevelOperationCompleted;
private System.Threading.SendOrPostCallback DeleteSupportServiceLevelOperationCompleted;
private System.Threading.SendOrPostCallback AddSupportServiceLevelOperationCompleted;
private System.Threading.SendOrPostCallback GetSupportServiceLevelOperationCompleted;
/// <remarks/> /// <remarks/>
public esOrganizations() public esOrganizations()
{ {
@ -272,6 +282,20 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution
/// <remarks/> /// <remarks/>
public event SetDefaultOrganizationCompletedEventHandler SetDefaultOrganizationCompleted; public event SetDefaultOrganizationCompletedEventHandler SetDefaultOrganizationCompleted;
/// <remarks/>
public event GetSupportServiceLevelsCompletedEventHandler GetSupportServiceLevelsCompleted;
/// <remarks/>
public event UpdateSupportServiceLevelCompletedEventHandler UpdateSupportServiceLevelCompleted;
/// <remarks/>
public event DeleteSupportServiceLevelCompletedEventHandler DeleteSupportServiceLevelCompleted;
/// <remarks/>
public event AddSupportServiceLevelCompletedEventHandler AddSupportServiceLevelCompleted;
/// <remarks/>
public event GetSupportServiceLevelCompletedEventHandler GetSupportServiceLevelCompleted;
/// <remarks/> /// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/CheckOrgIdExists", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/CheckOrgIdExists", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
@ -1415,7 +1439,9 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution
string webPage, string webPage,
string notes, string notes,
string externalEmail, string externalEmail,
string subscriberNumber) string subscriberNumber,
int levelId,
bool isVIP)
{ {
object[] results = this.Invoke("SetUserGeneralSettings", new object[] { object[] results = this.Invoke("SetUserGeneralSettings", new object[] {
itemId, itemId,
@ -1446,7 +1472,9 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution
webPage, webPage,
notes, notes,
externalEmail, externalEmail,
subscriberNumber}); subscriberNumber,
levelId,
isVIP});
return ((int)(results[0])); return ((int)(results[0]));
} }
@ -1481,6 +1509,8 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution
string notes, string notes,
string externalEmail, string externalEmail,
string subscriberNumber, string subscriberNumber,
int levelId,
bool isVIP,
System.AsyncCallback callback, System.AsyncCallback callback,
object asyncState) object asyncState)
{ {
@ -1513,7 +1543,9 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution
webPage, webPage,
notes, notes,
externalEmail, externalEmail,
subscriberNumber}, callback, asyncState); subscriberNumber,
levelId,
isVIP}, callback, asyncState);
} }
/// <remarks/> /// <remarks/>
@ -1553,9 +1585,11 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution
string webPage, string webPage,
string notes, string notes,
string externalEmail, string externalEmail,
string subscriberNumber) string subscriberNumber,
int levelId,
bool isVIP)
{ {
this.SetUserGeneralSettingsAsync(itemId, accountId, displayName, password, hideAddressBook, disabled, locked, firstName, initials, lastName, address, city, state, zip, country, jobTitle, company, department, office, managerAccountName, businessPhone, fax, homePhone, mobilePhone, pager, webPage, notes, externalEmail, subscriberNumber, null); this.SetUserGeneralSettingsAsync(itemId, accountId, displayName, password, hideAddressBook, disabled, locked, firstName, initials, lastName, address, city, state, zip, country, jobTitle, company, department, office, managerAccountName, businessPhone, fax, homePhone, mobilePhone, pager, webPage, notes, externalEmail, subscriberNumber, levelId, isVIP, null);
} }
/// <remarks/> /// <remarks/>
@ -1589,6 +1623,8 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution
string notes, string notes,
string externalEmail, string externalEmail,
string subscriberNumber, string subscriberNumber,
int levelId,
bool isVIP,
object userState) object userState)
{ {
if ((this.SetUserGeneralSettingsOperationCompleted == null)) if ((this.SetUserGeneralSettingsOperationCompleted == null))
@ -1624,7 +1660,9 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution
webPage, webPage,
notes, notes,
externalEmail, externalEmail,
subscriberNumber}, this.SetUserGeneralSettingsOperationCompleted, userState); subscriberNumber,
levelId,
isVIP}, this.SetUserGeneralSettingsOperationCompleted, userState);
} }
private void OnSetUserGeneralSettingsOperationCompleted(object arg) private void OnSetUserGeneralSettingsOperationCompleted(object arg)
@ -2663,6 +2701,255 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution
} }
} }
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetSupportServiceLevels", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public ServiceLevel[] GetSupportServiceLevels()
{
object[] results = this.Invoke("GetSupportServiceLevels", new object[0]);
return ((ServiceLevel[])(results[0]));
}
/// <remarks/>
public System.IAsyncResult BeginGetSupportServiceLevels(System.AsyncCallback callback, object asyncState)
{
return this.BeginInvoke("GetSupportServiceLevels", new object[0], callback, asyncState);
}
/// <remarks/>
public ServiceLevel[] EndGetSupportServiceLevels(System.IAsyncResult asyncResult)
{
object[] results = this.EndInvoke(asyncResult);
return ((ServiceLevel[])(results[0]));
}
/// <remarks/>
public void GetSupportServiceLevelsAsync()
{
this.GetSupportServiceLevelsAsync(null);
}
/// <remarks/>
public void GetSupportServiceLevelsAsync(object userState)
{
if ((this.GetSupportServiceLevelsOperationCompleted == null))
{
this.GetSupportServiceLevelsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetSupportServiceLevelsOperationCompleted);
}
this.InvokeAsync("GetSupportServiceLevels", new object[0], this.GetSupportServiceLevelsOperationCompleted, userState);
}
private void OnGetSupportServiceLevelsOperationCompleted(object arg)
{
if ((this.GetSupportServiceLevelsCompleted != null))
{
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.GetSupportServiceLevelsCompleted(this, new GetSupportServiceLevelsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/UpdateSupportServiceLevel", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public void UpdateSupportServiceLevel(int levelID, string levelName, string levelDescription)
{
this.Invoke("UpdateSupportServiceLevel", new object[] {
levelID,
levelName,
levelDescription});
}
/// <remarks/>
public System.IAsyncResult BeginUpdateSupportServiceLevel(int levelID, string levelName, string levelDescription, System.AsyncCallback callback, object asyncState)
{
return this.BeginInvoke("UpdateSupportServiceLevel", new object[] {
levelID,
levelName,
levelDescription}, callback, asyncState);
}
/// <remarks/>
public void EndUpdateSupportServiceLevel(System.IAsyncResult asyncResult)
{
this.EndInvoke(asyncResult);
}
/// <remarks/>
public void UpdateSupportServiceLevelAsync(int levelID, string levelName, string levelDescription)
{
this.UpdateSupportServiceLevelAsync(levelID, levelName, levelDescription, null);
}
/// <remarks/>
public void UpdateSupportServiceLevelAsync(int levelID, string levelName, string levelDescription, object userState)
{
if ((this.UpdateSupportServiceLevelOperationCompleted == null))
{
this.UpdateSupportServiceLevelOperationCompleted = new System.Threading.SendOrPostCallback(this.OnUpdateSupportServiceLevelOperationCompleted);
}
this.InvokeAsync("UpdateSupportServiceLevel", new object[] {
levelID,
levelName,
levelDescription}, this.UpdateSupportServiceLevelOperationCompleted, userState);
}
private void OnUpdateSupportServiceLevelOperationCompleted(object arg)
{
if ((this.UpdateSupportServiceLevelCompleted != null))
{
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.UpdateSupportServiceLevelCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/DeleteSupportServiceLevel", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public ResultObject DeleteSupportServiceLevel(int levelId)
{
object[] results = this.Invoke("DeleteSupportServiceLevel", new object[] {
levelId});
return ((ResultObject)(results[0]));
}
/// <remarks/>
public System.IAsyncResult BeginDeleteSupportServiceLevel(int levelId, System.AsyncCallback callback, object asyncState)
{
return this.BeginInvoke("DeleteSupportServiceLevel", new object[] {
levelId}, callback, asyncState);
}
/// <remarks/>
public ResultObject EndDeleteSupportServiceLevel(System.IAsyncResult asyncResult)
{
object[] results = this.EndInvoke(asyncResult);
return ((ResultObject)(results[0]));
}
/// <remarks/>
public void DeleteSupportServiceLevelAsync(int levelId)
{
this.DeleteSupportServiceLevelAsync(levelId, null);
}
/// <remarks/>
public void DeleteSupportServiceLevelAsync(int levelId, object userState)
{
if ((this.DeleteSupportServiceLevelOperationCompleted == null))
{
this.DeleteSupportServiceLevelOperationCompleted = new System.Threading.SendOrPostCallback(this.OnDeleteSupportServiceLevelOperationCompleted);
}
this.InvokeAsync("DeleteSupportServiceLevel", new object[] {
levelId}, this.DeleteSupportServiceLevelOperationCompleted, userState);
}
private void OnDeleteSupportServiceLevelOperationCompleted(object arg)
{
if ((this.DeleteSupportServiceLevelCompleted != null))
{
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.DeleteSupportServiceLevelCompleted(this, new DeleteSupportServiceLevelCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/AddSupportServiceLevel", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public int AddSupportServiceLevel(string levelName, string levelDescription)
{
object[] results = this.Invoke("AddSupportServiceLevel", new object[] {
levelName,
levelDescription});
return ((int)(results[0]));
}
/// <remarks/>
public System.IAsyncResult BeginAddSupportServiceLevel(string levelName, string levelDescription, System.AsyncCallback callback, object asyncState)
{
return this.BeginInvoke("AddSupportServiceLevel", new object[] {
levelName,
levelDescription}, callback, asyncState);
}
/// <remarks/>
public int EndAddSupportServiceLevel(System.IAsyncResult asyncResult)
{
object[] results = this.EndInvoke(asyncResult);
return ((int)(results[0]));
}
/// <remarks/>
public void AddSupportServiceLevelAsync(string levelName, string levelDescription)
{
this.AddSupportServiceLevelAsync(levelName, levelDescription, null);
}
/// <remarks/>
public void AddSupportServiceLevelAsync(string levelName, string levelDescription, object userState)
{
if ((this.AddSupportServiceLevelOperationCompleted == null))
{
this.AddSupportServiceLevelOperationCompleted = new System.Threading.SendOrPostCallback(this.OnAddSupportServiceLevelOperationCompleted);
}
this.InvokeAsync("AddSupportServiceLevel", new object[] {
levelName,
levelDescription}, this.AddSupportServiceLevelOperationCompleted, userState);
}
private void OnAddSupportServiceLevelOperationCompleted(object arg)
{
if ((this.AddSupportServiceLevelCompleted != null))
{
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.AddSupportServiceLevelCompleted(this, new AddSupportServiceLevelCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetSupportServiceLevel", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public ServiceLevel GetSupportServiceLevel(int levelID)
{
object[] results = this.Invoke("GetSupportServiceLevel", new object[] {
levelID});
return ((ServiceLevel)(results[0]));
}
/// <remarks/>
public System.IAsyncResult BeginGetSupportServiceLevel(int levelID, System.AsyncCallback callback, object asyncState)
{
return this.BeginInvoke("GetSupportServiceLevel", new object[] {
levelID}, callback, asyncState);
}
/// <remarks/>
public ServiceLevel EndGetSupportServiceLevel(System.IAsyncResult asyncResult)
{
object[] results = this.EndInvoke(asyncResult);
return ((ServiceLevel)(results[0]));
}
/// <remarks/>
public void GetSupportServiceLevelAsync(int levelID)
{
this.GetSupportServiceLevelAsync(levelID, null);
}
/// <remarks/>
public void GetSupportServiceLevelAsync(int levelID, object userState)
{
if ((this.GetSupportServiceLevelOperationCompleted == null))
{
this.GetSupportServiceLevelOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetSupportServiceLevelOperationCompleted);
}
this.InvokeAsync("GetSupportServiceLevel", new object[] {
levelID}, this.GetSupportServiceLevelOperationCompleted, userState);
}
private void OnGetSupportServiceLevelOperationCompleted(object arg)
{
if ((this.GetSupportServiceLevelCompleted != null))
{
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.GetSupportServiceLevelCompleted(this, new GetSupportServiceLevelCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/> /// <remarks/>
public new void CancelAsync(object userState) public new void CancelAsync(object userState)
{ {
@ -3791,4 +4078,128 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution
/// <remarks/> /// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void SetDefaultOrganizationCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e); public delegate void SetDefaultOrganizationCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void UpdateSupportServiceLevelCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void DeleteSupportServiceLevelCompletedEventHandler(object sender, DeleteSupportServiceLevelCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class DeleteSupportServiceLevelCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs
{
private object[] results;
internal DeleteSupportServiceLevelCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState)
{
this.results = results;
}
/// <remarks/>
public ResultObject Result
{
get
{
this.RaiseExceptionIfNecessary();
return ((ResultObject)(this.results[0]));
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void AddSupportServiceLevelCompletedEventHandler(object sender, AddSupportServiceLevelCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class AddSupportServiceLevelCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs
{
private object[] results;
internal AddSupportServiceLevelCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState)
{
this.results = results;
}
/// <remarks/>
public int Result
{
get
{
this.RaiseExceptionIfNecessary();
return ((int)(this.results[0]));
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void GetSupportServiceLevelsCompletedEventHandler(object sender, GetSupportServiceLevelsCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class GetSupportServiceLevelsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs
{
private object[] results;
internal GetSupportServiceLevelsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState)
{
this.results = results;
}
/// <remarks/>
public ServiceLevel[] Result
{
get
{
this.RaiseExceptionIfNecessary();
return ((ServiceLevel[])(this.results[0]));
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
public delegate void GetSupportServiceLevelCompletedEventHandler(object sender, GetSupportServiceLevelCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class GetSupportServiceLevelCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs
{
private object[] results;
internal GetSupportServiceLevelCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState)
{
this.results = results;
}
/// <remarks/>
public ServiceLevel Result
{
get
{
this.RaiseExceptionIfNecessary();
return ((ServiceLevel)(this.results[0]));
}
}
}
} }

View file

@ -2593,6 +2593,18 @@ namespace WebsitePanel.EnterpriseServer
); );
} }
public static void UpdateExchangeAccountServiceLevelSettings(int accountId, int levelId, bool isVIP)
{
SqlHelper.ExecuteNonQuery(
ConnectionString,
CommandType.StoredProcedure,
"UpdateExchangeAccountSLSettings",
new SqlParameter("@AccountID", accountId),
new SqlParameter("@LevelID", (levelId == 0) ? (object)DBNull.Value : (object)levelId),
new SqlParameter("@IsVIP", isVIP)
);
}
public static void UpdateExchangeAccountUserPrincipalName(int accountId, string userPrincipalName) public static void UpdateExchangeAccountUserPrincipalName(int accountId, string userPrincipalName)
{ {
SqlHelper.ExecuteNonQuery( SqlHelper.ExecuteNonQuery(
@ -4357,5 +4369,71 @@ namespace WebsitePanel.EnterpriseServer
} }
#endregion #endregion
#region Support Service Levels
public static IDataReader GetSupportServiceLevels()
{
return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
ObjectQualifier + "GetSupportServiceLevels");
}
public static int AddSupportServiceLevel(string levelName, string levelDescription)
{
SqlParameter outParam = new SqlParameter("@LevelID", SqlDbType.Int);
outParam.Direction = ParameterDirection.Output;
SqlHelper.ExecuteNonQuery(
ConnectionString,
CommandType.StoredProcedure,
"AddSupportServiceLevel",
outParam,
new SqlParameter("@LevelName", levelName),
new SqlParameter("@LevelDescription", levelDescription)
);
return Convert.ToInt32(outParam.Value);
}
public static void UpdateSupportServiceLevel(int levelID, string levelName, string levelDescription)
{
SqlHelper.ExecuteNonQuery(
ConnectionString,
CommandType.StoredProcedure,
"UpdateSupportServiceLevel",
new SqlParameter("@LevelID", levelID),
new SqlParameter("@LevelName", levelName),
new SqlParameter("@LevelDescription", levelDescription)
);
}
public static void DeleteSupportServiceLevel(int levelID)
{
SqlHelper.ExecuteNonQuery(
ConnectionString,
CommandType.StoredProcedure,
"DeleteSupportServiceLevel",
new SqlParameter("@LevelID", levelID)
);
}
public static IDataReader GetSupportServiceLevel(int levelID)
{
return SqlHelper.ExecuteReader(
ConnectionString,
CommandType.StoredProcedure,
"GetSupportServiceLevel",
new SqlParameter("@LevelID", levelID)
);
}
public static bool CheckServiceLevelUsage(int levelID)
{
int res = (int)SqlHelper.ExecuteScalar(ConnectionString, CommandType.StoredProcedure, "CheckServiceLevelUsage",
new SqlParameter("@LevelID", levelID));
return res > 0;
}
#endregion
} }
} }

View file

@ -978,6 +978,31 @@ namespace WebsitePanel.EnterpriseServer
List<ExchangeAccount> accounts = new List<ExchangeAccount>(); List<ExchangeAccount> accounts = new List<ExchangeAccount>();
ObjectUtils.FillCollectionFromDataView(accounts, ds.Tables[1].DefaultView); ObjectUtils.FillCollectionFromDataView(accounts, ds.Tables[1].DefaultView);
Organization org = null;
try
{
org = GetOrganization(itemId);
if (org != null)
{
Organizations orgProxy = OrganizationController.GetOrganizationProxy(org.ServiceId);
OrganizationUser user = null;
string accountName = string.Empty;
foreach (var account in accounts)
{
accountName = OrganizationController.GetAccountName(account.AccountName);
user = orgProxy.GetUserGeneralSettings(accountName, org.OrganizationId);
account.Disabled = user.Disabled;
account.Locked = user.Locked;
}
}
}
catch { }
result.PageItems = accounts.ToArray(); result.PageItems = accounts.ToArray();
return result; return result;
} }

View file

@ -1856,6 +1856,8 @@ namespace WebsitePanel.EnterpriseServer
retUser.IsLyncUser = DataProvider.CheckLyncUserExists(accountId); retUser.IsLyncUser = DataProvider.CheckLyncUserExists(accountId);
retUser.IsBlackBerryUser = BlackBerryController.CheckBlackBerryUserExists(accountId); retUser.IsBlackBerryUser = BlackBerryController.CheckBlackBerryUserExists(accountId);
retUser.SubscriberNumber = account.SubscriberNumber; retUser.SubscriberNumber = account.SubscriberNumber;
retUser.LevelId = account.LevelId;
retUser.IsVIP = account.IsVIP;
return retUser; return retUser;
} }
@ -1873,7 +1875,7 @@ namespace WebsitePanel.EnterpriseServer
string lastName, string address, string city, string state, string zip, string country, string lastName, string address, string city, string state, string zip, string country,
string jobTitle, string company, string department, string office, string managerAccountName, string jobTitle, string company, string department, string office, string managerAccountName,
string businessPhone, string fax, string homePhone, string mobilePhone, string pager, string businessPhone, string fax, string homePhone, string mobilePhone, string pager,
string webPage, string notes, string externalEmail, string subscriberNumber) string webPage, string notes, string externalEmail, string subscriberNumber, int levelId, bool isVIP)
{ {
// check account // check account
@ -1940,6 +1942,8 @@ namespace WebsitePanel.EnterpriseServer
// update account // update account
account.DisplayName = displayName; account.DisplayName = displayName;
account.SubscriberNumber = subscriberNumber; account.SubscriberNumber = subscriberNumber;
account.LevelId = levelId;
account.IsVIP = isVIP;
//account. //account.
if (!String.IsNullOrEmpty(password)) if (!String.IsNullOrEmpty(password))
@ -1948,6 +1952,7 @@ namespace WebsitePanel.EnterpriseServer
account.AccountPassword = null; account.AccountPassword = null;
UpdateAccount(account); UpdateAccount(account);
UpdateAccountServiceLevelSettings(account);
return 0; return 0;
@ -2114,7 +2119,10 @@ namespace WebsitePanel.EnterpriseServer
} }
} }
private static void UpdateAccountServiceLevelSettings(ExchangeAccount account)
{
DataProvider.UpdateExchangeAccountServiceLevelSettings(account.AccountId, account.LevelId, account.IsVIP);
}
private static void UpdateAccount(ExchangeAccount account) private static void UpdateAccount(ExchangeAccount account)
{ {
@ -2126,7 +2134,6 @@ namespace WebsitePanel.EnterpriseServer
} }
public static List<OrganizationUser> SearchAccounts(int itemId, public static List<OrganizationUser> SearchAccounts(int itemId,
string filterColumn, string filterValue, string sortColumn, bool includeMailboxes) string filterColumn, string filterValue, string sortColumn, bool includeMailboxes)
@ -2941,5 +2948,122 @@ namespace WebsitePanel.EnterpriseServer
//return accounts; //return accounts;
} }
#region Service Levels
public static int AddSupportServiceLevel(string levelName, string levelDescription)
{
if (string.IsNullOrEmpty(levelName))
throw new ArgumentNullException("levelName");
// place log record
TaskManager.StartTask("ORGANIZATION", "ADD_SUPPORT_SERVICE_LEVEL");
int levelID = 0;
try
{
levelID = DataProvider.AddSupportServiceLevel(levelName, levelDescription);
}
catch (Exception ex)
{
TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
return levelID;
}
public static ResultObject DeleteSupportServiceLevel(int levelId)
{
ResultObject res = TaskManager.StartResultTask<ResultObject>("ORGANIZATION", "DELETE_SUPPORT_SERVICE_LEVEL", levelId);
try
{
if (CheckServiceLevelUsage(levelId)) res.AddError("SERVICE_LEVEL_IN_USE", new ApplicationException("Service Level is being used"));
if (res.IsSuccess)
DataProvider.DeleteSupportServiceLevel(levelId);
}
catch (Exception ex)
{
TaskManager.WriteError(ex);
TaskManager.CompleteResultTask(res);
res.AddError("", ex);
return res;
}
TaskManager.CompleteResultTask();
return res;
}
public static void UpdateSupportServiceLevel(int levelID, string levelName, string levelDescription)
{
// place log record
TaskManager.StartTask("ORGANIZATION", "UPDATE_SUPPORT_SERVICE_LEVEL", levelID);
try
{
DataProvider.UpdateSupportServiceLevel(levelID, levelName, levelDescription);
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
}
public static ServiceLevel[] GetSupportServiceLevels()
{
// place log record
TaskManager.StartTask("ORGANIZATION", "GET_SUPPORT_SERVICE_LEVELS");
try
{
return ObjectUtils.CreateListFromDataReader<ServiceLevel>(DataProvider.GetSupportServiceLevels()).ToArray();
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
}
public static ServiceLevel GetSupportServiceLevel(int levelID)
{
// place log record
TaskManager.StartTask("ORGANIZATION", "GET_SUPPORT_SERVICE_LEVEL", levelID);
try
{
return ObjectUtils.FillObjectFromDataReader<ServiceLevel>(
DataProvider.GetSupportServiceLevel(levelID));
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
}
private static bool CheckServiceLevelUsage(int levelID)
{
return DataProvider.CheckServiceLevelUsage(levelID);
}
#endregion
} }
} }

View file

@ -31,6 +31,7 @@ using System.ComponentModel;
using System.Data; using System.Data;
using System.Web.Services; using System.Web.Services;
using WebsitePanel.EnterpriseServer.Base.HostedSolution; using WebsitePanel.EnterpriseServer.Base.HostedSolution;
using WebsitePanel.Providers.Common;
using WebsitePanel.Providers.HostedSolution; using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.Providers.ResultObjects; using WebsitePanel.Providers.ResultObjects;
@ -194,14 +195,14 @@ namespace WebsitePanel.EnterpriseServer
string lastName, string address, string city, string state, string zip, string country, string lastName, string address, string city, string state, string zip, string country,
string jobTitle, string company, string department, string office, string managerAccountName, string jobTitle, string company, string department, string office, string managerAccountName,
string businessPhone, string fax, string homePhone, string mobilePhone, string pager, string businessPhone, string fax, string homePhone, string mobilePhone, string pager,
string webPage, string notes, string externalEmail, string subscriberNumber) string webPage, string notes, string externalEmail, string subscriberNumber, int levelId, bool isVIP)
{ {
return OrganizationController.SetUserGeneralSettings(itemId, accountId, displayName, return OrganizationController.SetUserGeneralSettings(itemId, accountId, displayName,
password, hideAddressBook, disabled, locked, firstName, initials, password, hideAddressBook, disabled, locked, firstName, initials,
lastName, address, city, state, zip, country, lastName, address, city, state, zip, country,
jobTitle, company, department, office, managerAccountName, jobTitle, company, department, office, managerAccountName,
businessPhone, fax, homePhone, mobilePhone, pager, businessPhone, fax, homePhone, mobilePhone, pager,
webPage, notes, externalEmail, subscriberNumber); webPage, notes, externalEmail, subscriberNumber, levelId, isVIP);
} }
@ -335,5 +336,39 @@ namespace WebsitePanel.EnterpriseServer
#endregion #endregion
#region Service Levels
[WebMethod]
public ServiceLevel[] GetSupportServiceLevels()
{
return OrganizationController.GetSupportServiceLevels();
}
[WebMethod]
public void UpdateSupportServiceLevel(int levelID, string levelName, string levelDescription)
{
OrganizationController.UpdateSupportServiceLevel(levelID, levelName, levelDescription);
}
[WebMethod]
public ResultObject DeleteSupportServiceLevel(int levelId)
{
return OrganizationController.DeleteSupportServiceLevel(levelId);
}
[WebMethod]
public int AddSupportServiceLevel(string levelName, string levelDescription)
{
return OrganizationController.AddSupportServiceLevel(levelName, levelDescription);
}
[WebMethod]
public ServiceLevel GetSupportServiceLevel(int levelID)
{
return OrganizationController.GetSupportServiceLevel(levelID);
}
#endregion
} }
} }

View file

@ -51,6 +51,8 @@ namespace WebsitePanel.Providers.HostedSolution
string publicFolderPermission; string publicFolderPermission;
string userPrincipalName; string userPrincipalName;
string notes; string notes;
int levelId;
bool isVip;
public int AccountId public int AccountId
{ {
@ -177,6 +179,20 @@ namespace WebsitePanel.Providers.HostedSolution
set { this.enableArchiving = value; } set { this.enableArchiving = value; }
} }
public bool IsVIP
{
get { return this.isVip; }
set { this.isVip = value; }
}
public int LevelId
{
get { return this.levelId; }
set { this.levelId = value; }
}
public bool Disabled { get; set; }
public bool Locked { get; set; }
} }
} }

View file

@ -77,6 +77,8 @@ namespace WebsitePanel.Providers.HostedSolution
private OrganizationUser manager; private OrganizationUser manager;
private Guid crmUserId; private Guid crmUserId;
private int levelId;
private bool isVip;
public Guid CrmUserId public Guid CrmUserId
{ {
@ -313,5 +315,17 @@ namespace WebsitePanel.Providers.HostedSolution
} }
public int LevelId
{
get { return levelId; }
set { levelId = value; }
}
public bool IsVIP
{
get { return isVip; }
set { isVip = value; }
}
} }
} }

View file

@ -3219,7 +3219,7 @@
</data> </data>
<data name="Warning.2613" xml:space="preserve"> <data name="Warning.2613" xml:space="preserve">
<value>Invalid recoverable items quota specified, should be greater or equal to 6144MB</value> <value>Invalid recoverable items quota specified, should be greater or equal to 6144MB</value>
</data> </data>
<data name="AuditLogTask.EXCHANGE_CALCULATE_DISKSPACE" xml:space="preserve"> <data name="AuditLogTask.EXCHANGE_CALCULATE_DISKSPACE" xml:space="preserve">
<value>Calculate organization disk space</value> <value>Calculate organization disk space</value>
</data> </data>
@ -5572,4 +5572,16 @@
<data name="Text.Tasks" xml:space="preserve"> <data name="Text.Tasks" xml:space="preserve">
<value>Tasks</value> <value>Tasks</value>
</data> </data>
<data name="ResourceGroup.Service Levels" xml:space="preserve">
<value>Service Levels</value>
</data>
<data name="Error.ADD_SERVICE_LEVEL" xml:space="preserve">
<value>Service Level with this name is already exists</value>
</data>
<data name="Error.DELETE_SERVICE_LEVEL" xml:space="preserve">
<value>Delete Service Level Error</value>
</data>
<data name="Error.SERVICE_LEVEL_IN_USE" xml:space="preserve">
<value>Unable to remove Service Level because it is being used</value>
</data>
</root> </root>

View file

@ -0,0 +1,144 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnAddServiceLevel.Text" xml:space="preserve">
<value>Add New</value>
</data>
<data name="gvServiceLevels.Empty" xml:space="preserve">
<value>No service levels have been added yet. To add a new service level set params and click "Add New" button.</value>
</data>
<data name="valRequireServiceLevelName.ErrorMessage" xml:space="preserve">
<value>Please enter service level name</value>
</data>
<data name="valRequireServiceLevelName.Text" xml:space="preserve">
<value>*</value>
</data>
<data name="btnUpdateServiceLevel.Text" xml:space="preserve">
<value>Update</value>
</data>
<data name="lblServiceLevelDescr.Text" xml:space="preserve">
<value>Description:</value>
</data>
<data name="lblServiceLevelName.Text" xml:space="preserve">
<value>Name:</value>
</data>
<data name="secServiceLevel.Text" xml:space="preserve">
<value>Service Level</value>
</data>
</root>

View file

@ -150,4 +150,7 @@
<data name="lnkWebPolicy.Text" xml:space="preserve"> <data name="lnkWebPolicy.Text" xml:space="preserve">
<value>WEB Policy</value> <value>WEB Policy</value>
</data> </data>
<data name="lnkServiceLevels.Text" xml:space="preserve">
<value>Service Levels</value>
</data>
</root> </root>

View file

@ -177,4 +177,7 @@
<data name="locTitleArchiving.Text" xml:space="preserve"> <data name="locTitleArchiving.Text" xml:space="preserve">
<value>Archiving Mailboxes</value> <value>Archiving Mailboxes</value>
</data> </data>
<data name="gvServiceLevel.Header" xml:space="preserve">
<value>Service Level</value>
</data>
</root> </root>

View file

@ -246,4 +246,13 @@
<data name="chkInherit.Text" xml:space="preserve"> <data name="chkInherit.Text" xml:space="preserve">
<value>Update Services</value> <value>Update Services</value>
</data> </data>
<data name="locServiceLevel.Text" xml:space="preserve">
<value>Service Level:</value>
</data>
<data name="locVIPUser.Text" xml:space="preserve">
<value>VIP:</value>
</data>
<data name="secServiceLevels.Text" xml:space="preserve">
<value>Service Level Information</value>
</data>
</root> </root>

View file

@ -180,4 +180,7 @@
<data name="gvUsersLogin.Header" xml:space="preserve"> <data name="gvUsersLogin.Header" xml:space="preserve">
<value>Login</value> <value>Login</value>
</data> </data>
<data name="gvServiceLevel.Header" xml:space="preserve">
<value>Service Level</value>
</data>
</root> </root>

View file

@ -213,7 +213,9 @@ namespace WebsitePanel.Portal.ExchangeServer
null, null,
null, null,
user.ExternalEmail, user.ExternalEmail,
txtSubscriberNumber.Text); txtSubscriberNumber.Text,
0,
false);
} }

View file

@ -52,10 +52,16 @@
OnRowCommand="gvMailboxes_RowCommand" AllowPaging="True" AllowSorting="True" OnRowCommand="gvMailboxes_RowCommand" AllowPaging="True" AllowSorting="True"
DataSourceID="odsAccountsPaged" PageSize="20"> DataSourceID="odsAccountsPaged" PageSize="20">
<Columns> <Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Image ID="img2" runat="server" Width="16px" Height="16px" ImageUrl='<%# GetStateImage((bool)Eval("Locked"),(bool)Eval("Disabled")) %>' ImageAlign="AbsMiddle" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="gvMailboxesDisplayName" SortExpression="DisplayName"> <asp:TemplateField HeaderText="gvMailboxesDisplayName" SortExpression="DisplayName">
<ItemStyle Width="40%"></ItemStyle> <ItemStyle Width="20%"></ItemStyle>
<ItemTemplate> <ItemTemplate>
<asp:Image ID="img1" runat="server" ImageUrl='<%# GetAccountImage((int)Eval("AccountType")) %>' ImageAlign="AbsMiddle" /> <asp:Image ID="img1" runat="server" ImageUrl='<%# GetAccountImage((int)Eval("AccountType"),(bool)Eval("IsVIP")) %>' ImageAlign="AbsMiddle" />
<asp:Label runat="server" Text='<%# (bool)Eval("IsVIP") ? "*" : string.Empty %>' style="font-weight:bold;"/>
<asp:hyperlink id="lnk1" runat="server" <asp:hyperlink id="lnk1" runat="server"
NavigateUrl='<%# GetMailboxEditUrl(Eval("AccountId").ToString()) %>'> NavigateUrl='<%# GetMailboxEditUrl(Eval("AccountId").ToString()) %>'>
<%# Eval("DisplayName") %> <%# Eval("DisplayName") %>
@ -63,7 +69,7 @@
</ItemTemplate> </ItemTemplate>
</asp:TemplateField> </asp:TemplateField>
<asp:TemplateField HeaderText="gvUsersLogin" SortExpression="UserPrincipalName"> <asp:TemplateField HeaderText="gvUsersLogin" SortExpression="UserPrincipalName">
<ItemStyle></ItemStyle> <ItemStyle Width="20%"></ItemStyle>
<ItemTemplate> <ItemTemplate>
<asp:hyperlink id="lnk2" runat="server" <asp:hyperlink id="lnk2" runat="server"
NavigateUrl='<%# GetOrganizationUserEditUrl(Eval("AccountId").ToString()) %>'> NavigateUrl='<%# GetOrganizationUserEditUrl(Eval("AccountId").ToString()) %>'>
@ -71,6 +77,14 @@
</asp:hyperlink> </asp:hyperlink>
</ItemTemplate> </ItemTemplate>
</asp:TemplateField> </asp:TemplateField>
<asp:TemplateField HeaderText="gvServiceLevel">
<ItemStyle Width="20%"></ItemStyle>
<ItemTemplate>
<asp:Label id="lbServLevel" runat="server" ToolTip = '<%# GetServiceLevel((int)Eval("LevelId")).LevelDescription%>'>
<%# GetServiceLevel((int)Eval("LevelId")).LevelName%>
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="gvMailboxesEmail" DataField="PrimaryEmailAddress" SortExpression="PrimaryEmailAddress" ItemStyle-Width="25%" /> <asp:BoundField HeaderText="gvMailboxesEmail" DataField="PrimaryEmailAddress" SortExpression="PrimaryEmailAddress" ItemStyle-Width="25%" />
<asp:BoundField HeaderText="gvSubscriberNumber" DataField="SubscriberNumber" ItemStyle-Width="10%" /> <asp:BoundField HeaderText="gvSubscriberNumber" DataField="SubscriberNumber" ItemStyle-Width="10%" />
<asp:BoundField HeaderText="gvMailboxesMailboxPlan" DataField="MailboxPlan" SortExpression="MailboxPlan" ItemStyle-Width="50%" /> <asp:BoundField HeaderText="gvMailboxesMailboxPlan" DataField="MailboxPlan" SortExpression="MailboxPlan" ItemStyle-Width="50%" />

View file

@ -27,9 +27,11 @@
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System; using System;
using System.Linq;
using System.Web.UI.WebControls; using System.Web.UI.WebControls;
using WebsitePanel.Providers.HostedSolution; using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.EnterpriseServer; using WebsitePanel.EnterpriseServer;
using WebsitePanel.EnterpriseServer.Base.HostedSolution;
namespace WebsitePanel.Portal.ExchangeServer namespace WebsitePanel.Portal.ExchangeServer
{ {
@ -43,6 +45,8 @@ namespace WebsitePanel.Portal.ExchangeServer
} }
} }
private ServiceLevel[] ServiceLevels;
protected void Page_Load(object sender, EventArgs e) protected void Page_Load(object sender, EventArgs e)
{ {
locTitle.Text = ArchivingBoxes ? GetLocalizedString("locTitleArchiving.Text") : GetLocalizedString("locTitle.Text"); locTitle.Text = ArchivingBoxes ? GetLocalizedString("locTitleArchiving.Text") : GetLocalizedString("locTitle.Text");
@ -54,14 +58,23 @@ namespace WebsitePanel.Portal.ExchangeServer
BindStats(); BindStats();
} }
BindServiceLevels();
PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId); PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId);
if (cntx.Quotas.ContainsKey(Quotas.EXCHANGE2007_ISCONSUMER)) if (cntx.Quotas.ContainsKey(Quotas.EXCHANGE2007_ISCONSUMER))
{ {
if (cntx.Quotas[Quotas.EXCHANGE2007_ISCONSUMER].QuotaAllocatedValue != 1) if (cntx.Quotas[Quotas.EXCHANGE2007_ISCONSUMER].QuotaAllocatedValue != 1)
{ {
gvMailboxes.Columns[3].Visible = false; gvMailboxes.Columns[4].Visible = false;
} }
} }
gvMailboxes.Columns[3].Visible = cntx.Groups.ContainsKey(ResourceGroups.ServiceLevels);
}
private void BindServiceLevels()
{
ServiceLevels = ES.Services.Organizations.GetSupportServiceLevels();
} }
private void BindStats() private void BindStats()
@ -96,7 +109,7 @@ namespace WebsitePanel.Portal.ExchangeServer
} }
} }
public string GetAccountImage(int accountTypeId) public string GetAccountImage(int accountTypeId, bool vip)
{ {
ExchangeAccountType accountType = (ExchangeAccountType)accountTypeId; ExchangeAccountType accountType = (ExchangeAccountType)accountTypeId;
string imgName = "mailbox_16.gif"; string imgName = "mailbox_16.gif";
@ -109,6 +122,21 @@ namespace WebsitePanel.Portal.ExchangeServer
else if (accountType == ExchangeAccountType.Equipment) else if (accountType == ExchangeAccountType.Equipment)
imgName = "equipment_16.gif"; imgName = "equipment_16.gif";
if (vip) imgName = "admin_16.png";
return GetThemedImage("Exchange/" + imgName);
}
public string GetStateImage(bool locked, bool disabled)
{
string imgName = "enabled.png";
if (locked)
imgName = "locked.png";
else
if (disabled)
imgName = "disabled.png";
return GetThemedImage("Exchange/" + imgName); return GetThemedImage("Exchange/" + imgName);
} }
@ -166,5 +194,10 @@ namespace WebsitePanel.Portal.ExchangeServer
{ {
e.InputParameters["archiving"] = ArchivingBoxes; e.InputParameters["archiving"] = ArchivingBoxes;
} }
public ServiceLevel GetServiceLevel(int levelId)
{
return ServiceLevels.Where(x => x.LevelId == levelId).DefaultIfEmpty(new ServiceLevel { LevelName = "", LevelDescription = "" }).FirstOrDefault();
}
} }
} }

View file

@ -1,31 +1,3 @@
// Copyright (c) 2014, 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.
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.

View file

@ -167,7 +167,9 @@ namespace WebsitePanel.Portal.HostedSolution
null, null,
null, null,
user.ExternalEmail, user.ExternalEmail,
txtSubscriberNumber.Text); txtSubscriberNumber.Text,
0,
false);
} }
} }
} }

View file

@ -117,12 +117,34 @@
<asp:TextBox ID="txtNotes" runat="server" CssClass="TextBox200" Rows="4" TextMode="MultiLine"></asp:TextBox> <asp:TextBox ID="txtNotes" runat="server" CssClass="TextBox200" Rows="4" TextMode="MultiLine"></asp:TextBox>
</td> </td>
</tr> </tr>
</table> </table>
<wsp:CollapsiblePanel id="secServiceLevels" runat="server" IsCollapsed="true"
TargetControlID="ServiceLevels" meta:resourcekey="secServiceLevels" Text="Service Level Information">
</wsp:CollapsiblePanel>
<asp:Panel ID="ServiceLevels" runat="server" Height="0" style="overflow:hidden;">
<table>
<tr>
<td class="FormLabel150"><asp:Localize ID="locServiceLevel" runat="server" meta:resourcekey="locServiceLevel" Text="Service Level:"></asp:Localize></td>
<td>
<asp:DropDownList ID="ddlServiceLevels" DataValueField="LevelId" DataTextField="LevelName" runat="server"></asp:DropDownList>
</td>
</tr>
<tr>
<td class="FormLabel150"><asp:Localize ID="locVIPUser" runat="server" meta:resourcekey="locVIPUser" Text="VIP:"></asp:Localize></td>
<td>
<asp:CheckBox ID="chkVIP" runat="server"/>
</td>
</tr>
</table>
</asp:Panel>
<wsp:CollapsiblePanel id="secCompanyInfo" runat="server" IsCollapsed="true" <wsp:CollapsiblePanel id="secCompanyInfo" runat="server" IsCollapsed="true"
TargetControlID="CompanyInfo" meta:resourcekey="secCompanyInfo" Text="Company Information"> TargetControlID="CompanyInfo" meta:resourcekey="secCompanyInfo" Text="Company Information">
</wsp:CollapsiblePanel> </wsp:CollapsiblePanel>
<asp:Panel ID="CompanyInfo" runat="server" Height="0" style="overflow:hidden;"> <asp:Panel ID="CompanyInfo" runat="server" Height="0" style="overflow:hidden;">
<table> <table>
<tr> <tr>
@ -207,6 +229,7 @@
<wsp:CollapsiblePanel id="secAddressInfo" runat="server" IsCollapsed="true" <wsp:CollapsiblePanel id="secAddressInfo" runat="server" IsCollapsed="true"
TargetControlID="AddressInfo" meta:resourcekey="secAddressInfo" Text="Address"> TargetControlID="AddressInfo" meta:resourcekey="secAddressInfo" Text="Address">
</wsp:CollapsiblePanel> </wsp:CollapsiblePanel>
<asp:Panel ID="AddressInfo" runat="server" Height="0" style="overflow:hidden;"> <asp:Panel ID="AddressInfo" runat="server" Height="0" style="overflow:hidden;">
<table> <table>
<tr> <tr>

View file

@ -27,8 +27,11 @@
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI.WebControls; using System.Web.UI.WebControls;
using WebsitePanel.EnterpriseServer; using WebsitePanel.EnterpriseServer;
using WebsitePanel.EnterpriseServer.Base.HostedSolution;
using WebsitePanel.Providers.HostedSolution; using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.Providers.ResultObjects; using WebsitePanel.Providers.ResultObjects;
@ -40,6 +43,8 @@ namespace WebsitePanel.Portal.HostedSolution
{ {
if (!IsPostBack) if (!IsPostBack)
{ {
BindServiceLevels();
BindSettings(); BindSettings();
MailboxTabsId.Visible = (PanelRequest.Context == "Mailbox"); MailboxTabsId.Visible = (PanelRequest.Context == "Mailbox");
@ -81,6 +86,18 @@ namespace WebsitePanel.Portal.HostedSolution
txtInitials.Text = user.Initials; txtInitials.Text = user.Initials;
txtLastName.Text = user.LastName; txtLastName.Text = user.LastName;
if (user.LevelId > 0 && secServiceLevels.Visible)
{
ServiceLevel serviceLevel = ES.Services.Organizations.GetSupportServiceLevel(user.LevelId);
if (ddlServiceLevels.Items.FindByValue(serviceLevel.LevelId.ToString()) == null)
ddlServiceLevels.Items.Add(new ListItem(serviceLevel.LevelName, serviceLevel.LevelId.ToString()));
ddlServiceLevels.Items.FindByValue(string.Empty).Selected = false;
ddlServiceLevels.Items.FindByValue(serviceLevel.LevelId.ToString()).Selected = true;
}
chkVIP.Checked = user.IsVIP && secServiceLevels.Visible;
txtJobTitle.Text = user.JobTitle; txtJobTitle.Text = user.JobTitle;
txtCompany.Text = user.Company; txtCompany.Text = user.Company;
txtDepartment.Text = user.Department; txtDepartment.Text = user.Department;
@ -196,6 +213,51 @@ namespace WebsitePanel.Portal.HostedSolution
} }
} }
private void BindServiceLevels()
{
PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId);
if (cntx.Groups.ContainsKey(ResourceGroups.ServiceLevels))
{
List<ServiceLevel> enabledServiceLevels = new List<ServiceLevel>();
foreach (var quota in cntx.Quotas.Where(x => x.Key.Contains(Quotas.SERVICE_LEVELS)))
{
foreach (var serviceLevel in ES.Services.Organizations.GetSupportServiceLevels())
{
if (quota.Key.Replace(Quotas.SERVICE_LEVELS, "") == serviceLevel.LevelName && CheckServiceLevelQuota(quota.Value, serviceLevel.LevelId))
{
enabledServiceLevels.Add(serviceLevel);
}
}
}
ddlServiceLevels.DataSource = enabledServiceLevels;
ddlServiceLevels.DataTextField = "LevelName";
ddlServiceLevels.DataValueField = "LevelId";
ddlServiceLevels.DataBind();
ddlServiceLevels.Items.Insert(0, new ListItem("<Select Service Level>", string.Empty));
ddlServiceLevels.Items.FindByValue(string.Empty).Selected = true;
secServiceLevels.Visible = true;
}
else { secServiceLevels.Visible = false; }
}
private bool CheckServiceLevelQuota(QuotaValueInfo quota, int levelID)
{
quota.QuotaUsedValue = ES.Services.Organizations.SearchAccounts(PanelRequest.ItemID, "", "", "", true).Where(x => x.LevelId == levelID).Count();
if (quota.QuotaAllocatedValue != -1)
{
return quota.QuotaAllocatedValue > quota.QuotaUsedValue;
}
return true;
}
private void SaveSettings() private void SaveSettings()
{ {
if (!Page.IsValid) if (!Page.IsValid)
@ -235,7 +297,9 @@ namespace WebsitePanel.Portal.HostedSolution
txtWebPage.Text, txtWebPage.Text,
txtNotes.Text, txtNotes.Text,
txtExternalEmailAddress.Text, txtExternalEmailAddress.Text,
txtSubscriberNumber.Text); txtSubscriberNumber.Text,
string.IsNullOrEmpty(ddlServiceLevels.SelectedValue) ? 0 : int.Parse(ddlServiceLevels.SelectedValue),
chkVIP.Checked);
if (result < 0) if (result < 0)
{ {

View file

@ -1,31 +1,3 @@
// Copyright (c) 2014, 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.
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
@ -346,6 +318,60 @@ namespace WebsitePanel.Portal.HostedSolution {
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.TextBox txtNotes; protected global::System.Web.UI.WebControls.TextBox txtNotes;
/// <summary>
/// secServiceLevels control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.CollapsiblePanel secServiceLevels;
/// <summary>
/// ServiceLevels 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.Panel ServiceLevels;
/// <summary>
/// locServiceLevel 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 locServiceLevel;
/// <summary>
/// ddlServiceLevels 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.DropDownList ddlServiceLevels;
/// <summary>
/// locVIPUser 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 locVIPUser;
/// <summary>
/// chkVIP 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.CheckBox chkVIP;
/// <summary> /// <summary>
/// secCompanyInfo control. /// secCompanyInfo control.
/// </summary> /// </summary>

View file

@ -59,9 +59,10 @@
</asp:TemplateField> </asp:TemplateField>
<asp:TemplateField HeaderText="gvUsersDisplayName" SortExpression="DisplayName"> <asp:TemplateField HeaderText="gvUsersDisplayName" SortExpression="DisplayName">
<ItemStyle Width="50%"></ItemStyle> <ItemStyle Width="25%"></ItemStyle>
<ItemTemplate> <ItemTemplate>
<asp:Image ID="img1" runat="server" ImageUrl='<%# GetAccountImage((int)Eval("AccountType")) %>' ImageAlign="AbsMiddle" /> <asp:Image ID="img1" runat="server" ImageUrl='<%# GetAccountImage((int)Eval("AccountType"),(bool)Eval("IsVIP")) %>' ImageAlign="AbsMiddle"/>
<asp:Label runat="server" Text='<%# (bool)Eval("IsVIP") ? "*" : string.Empty %>' style="font-weight:bold;"/>
<asp:hyperlink id="lnk1" runat="server" <asp:hyperlink id="lnk1" runat="server"
NavigateUrl='<%# GetUserEditUrl(Eval("AccountId").ToString()) %>'> NavigateUrl='<%# GetUserEditUrl(Eval("AccountId").ToString()) %>'>
<%# Eval("DisplayName") %> <%# Eval("DisplayName") %>
@ -69,8 +70,16 @@
</ItemTemplate> </ItemTemplate>
</asp:TemplateField> </asp:TemplateField>
<asp:BoundField HeaderText="gvUsersLogin" DataField="UserPrincipalName" SortExpression="UserPrincipalName" ItemStyle-Width="25%" /> <asp:BoundField HeaderText="gvUsersLogin" DataField="UserPrincipalName" SortExpression="UserPrincipalName" ItemStyle-Width="25%" />
<asp:TemplateField HeaderText="gvServiceLevel">
<ItemStyle Width="25%"></ItemStyle>
<ItemTemplate>
<asp:Label id="lbServLevel" runat="server" ToolTip = '<%# GetServiceLevel((int)Eval("LevelId")).LevelDescription%>'>
<%# GetServiceLevel((int)Eval("LevelId")).LevelName%>
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="gvUsersEmail" DataField="PrimaryEmailAddress" SortExpression="PrimaryEmailAddress" ItemStyle-Width="25%" /> <asp:BoundField HeaderText="gvUsersEmail" DataField="PrimaryEmailAddress" SortExpression="PrimaryEmailAddress" ItemStyle-Width="25%" />
<asp:BoundField HeaderText="gvSubscriberNumber" DataField="SubscriberNumber" ItemStyle-Width="25%" /> <asp:BoundField HeaderText="gvSubscriberNumber" DataField="SubscriberNumber" ItemStyle-Width="20%" />
<asp:TemplateField ItemStyle-Wrap="False"> <asp:TemplateField ItemStyle-Wrap="False">
<ItemTemplate> <ItemTemplate>
<asp:ImageButton ID="Image2" runat="server" Width="16px" Height="16px" ToolTip="Mail" ImageUrl='<%# GetMailImage((int)Eval("AccountType")) %>' CommandName="OpenMailProperties" CommandArgument='<%# Eval("AccountId") %>' Enabled=<%# EnableMailImageButton((int)Eval("AccountType")) %>/> <asp:ImageButton ID="Image2" runat="server" Width="16px" Height="16px" ToolTip="Mail" ImageUrl='<%# GetMailImage((int)Eval("AccountType")) %>' CommandName="OpenMailProperties" CommandArgument='<%# Eval("AccountId") %>' Enabled=<%# EnableMailImageButton((int)Eval("AccountType")) %>/>

View file

@ -27,32 +27,42 @@
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI.WebControls; using System.Web.UI.WebControls;
using WebsitePanel.Providers.HostedSolution; using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.EnterpriseServer; using WebsitePanel.EnterpriseServer;
using WebsitePanel.EnterpriseServer.Base.HostedSolution;
namespace WebsitePanel.Portal.HostedSolution namespace WebsitePanel.Portal.HostedSolution
{ {
public partial class OrganizationUsers : WebsitePanelModuleBase public partial class OrganizationUsers : WebsitePanelModuleBase
{ {
private ServiceLevel[] ServiceLevels;
protected void Page_Load(object sender, EventArgs e) protected void Page_Load(object sender, EventArgs e)
{ {
if (!IsPostBack) if (!IsPostBack)
{ {
BindStats(); BindStats();
} }
BindServiceLevels();
PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId); PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId);
if (cntx.Quotas.ContainsKey(Quotas.EXCHANGE2007_ISCONSUMER)) if (cntx.Quotas.ContainsKey(Quotas.EXCHANGE2007_ISCONSUMER))
{ {
if (cntx.Quotas[Quotas.EXCHANGE2007_ISCONSUMER].QuotaAllocatedValue != 1) if (cntx.Quotas[Quotas.EXCHANGE2007_ISCONSUMER].QuotaAllocatedValue != 1)
{ {
gvUsers.Columns[4].Visible = false; gvUsers.Columns[5].Visible = false;
} }
} }
gvUsers.Columns[3].Visible = cntx.Groups.ContainsKey(ResourceGroups.ServiceLevels);
}
private void BindServiceLevels()
{
ServiceLevels = ES.Services.Organizations.GetSupportServiceLevels();
} }
private void BindStats() private void BindStats()
@ -164,7 +174,7 @@ namespace WebsitePanel.Portal.HostedSolution
} }
public string GetAccountImage(int accountTypeId) public string GetAccountImage(int accountTypeId, bool vip)
{ {
string imgName = string.Empty; string imgName = string.Empty;
@ -181,6 +191,7 @@ namespace WebsitePanel.Portal.HostedSolution
imgName = "admin_16.png"; imgName = "admin_16.png";
break; break;
} }
if (vip) imgName = "admin_16.png";
return GetThemedImage("Exchange/" + imgName); return GetThemedImage("Exchange/" + imgName);
} }
@ -298,8 +309,9 @@ namespace WebsitePanel.Portal.HostedSolution
return accountID.ToString() + "|" + IsOCS.ToString() + "|" + IsLync.ToString(); return accountID.ToString() + "|" + IsOCS.ToString() + "|" + IsLync.ToString();
} }
public ServiceLevel GetServiceLevel(int levelId)
{
return ServiceLevels.Where(x => x.LevelId == levelId).DefaultIfEmpty(new ServiceLevel { LevelName = "", LevelDescription = "" }).FirstOrDefault();
}
} }
} }

View file

@ -1,31 +1,3 @@
// Copyright (c) 2014, 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.
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.

View file

@ -100,7 +100,7 @@ namespace WebsitePanel.Portal
// rebind settings // rebind settings
BindSettings(); BindSettings();
} }
else else if (!SettingsName.Equals("ServiceLevels"))
{ {
ToggleControls(); ToggleControls();
} }

View file

@ -0,0 +1,84 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SettingsServiceLevels.ascx.cs" Inherits="WebsitePanel.Portal.SettingsServiceLevels" %>
<%@ Register Src="UserControls/CollapsiblePanel.ascx" TagName="CollapsiblePanel" TagPrefix="wsp" %>
<%@ Register Src="UserControls/SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %>
<%@ Register Src="UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %>
<%@ Import Namespace="WebsitePanel.Portal" %>
<wsp:EnableAsyncTasksSupport id="asyncTasks" runat="server"/>
<wsp:SimpleMessageBox id="messageBox" runat="server" />
<asp:GridView id="gvServiceLevels" runat="server" EnableViewState="true" AutoGenerateColumns="false"
Width="100%" EmptyDataText="gvServiceLevels" CssSelectorClass="NormalGridView" OnRowCommand="gvServiceLevels_RowCommand">
<Columns>
<asp:TemplateField HeaderText="Edit">
<ItemTemplate>
<asp:ImageButton ID="cmdEdit" runat="server" SkinID="EditSmall" CommandName="EditItem" AlternateText="Edit record" CommandArgument='<%# Eval("LevelId") %>' ></asp:ImageButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Service Level">
<ItemStyle Width="30%"></ItemStyle>
<ItemTemplate>
<asp:Label id="lnkServiceLevel" runat="server" EnableViewState="true" ><%# PortalAntiXSS.Encode((string)Eval("LevelName"))%></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Description">
<ItemStyle Width="60%"></ItemStyle>
<ItemTemplate>
<asp:Label id="lnkServiceLevelDescription" runat="server" EnableViewState="true" ><%# PortalAntiXSS.Encode((string)Eval("LevelDescription"))%></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
&nbsp;<asp:ImageButton id="imgDelMailboxPlan" runat="server" Text="Delete" SkinID="ExchangeDelete"
CommandName="DeleteItem" CommandArgument='<%# Eval("LevelId") %>'
meta:resourcekey="cmdDelete" OnClientClick="return confirm('Are you sure you want to delete selected service level?')"></asp:ImageButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br />
<wsp:CollapsiblePanel id="secServiceLevel" runat="server"
TargetControlID="ServiceLevel" meta:resourcekey="secServiceLevel" Text="Service Level">
</wsp:CollapsiblePanel>
<asp:Panel ID="ServiceLevel" runat="server" Height="0" style="overflow:hidden;">
<table>
<tr>
<td class="FormLabel200" align="right">
<asp:Label ID="lblServiceLevelName" runat="server" meta:resourcekey="lblServiceLevelName" Text="Name:"></asp:Label>
</td>
<td class="Normal">
<asp:TextBox ID="txtServiceLevelName" runat="server" Width="100%" CssClass="NormalTextBox" MaxLength="255"></asp:TextBox>
<asp:RequiredFieldValidator ID="valRequireServiceLevelName" runat="server" meta:resourcekey="valRequireServiceLevelName" ControlToValidate="txtServiceLevelName"
ErrorMessage="Enter service level name" ValidationGroup="CreateServiceLevel" Display="Dynamic" Text="*" SetFocusOnError="True"></asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td class="FormLabel200" align="right">
<asp:Label ID="lblServiceLevelDescr" runat="server" meta:resourcekey="lblServiceLevelDescr" Text="Description:"></asp:Label>
</td>
<td class="Normal" valign=top>
<asp:TextBox ID="txtServiceLevelDescr" runat="server" Rows="10" TextMode="MultiLine" Width="100%" CssClass="NormalTextBox" Wrap="False" MaxLength="511"></asp:TextBox></td>
</tr>
</table>
</asp:Panel>
<br />
<table>
<tr>
<td>
<div class="FormButtonsBarClean">
<asp:Button ID="btnAddServiceLevel" runat="server" meta:resourcekey="btnAddServiceLevel"
Text="Add New" CssClass="Button1" OnClick="btnAddServiceLevel_Click" />
</div>
</td>
<td>
<div class="FormButtonsBarClean">
<asp:Button ID="btnUpdateServiceLevel" runat="server" meta:resourcekey="btnUpdateServiceLevel"
Text="Update" CssClass="Button1" OnClick="btnUpdateServiceLevel_Click" />
</td>
</tr>
</table>
<br />
<asp:TextBox ID="txtStatus" runat="server" CssClass="TextBox400" MaxLength="128" ReadOnly="true"></asp:TextBox>

View file

@ -0,0 +1,176 @@
// 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.
using System;
using System.IO;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Xml;
using System.Xml.Serialization;
using System.Collections.Generic;
using System.Collections.ObjectModel;
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 WebsitePanel.EnterpriseServer;
using WebsitePanel.EnterpriseServer.Base.HostedSolution;
using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.Providers.ResultObjects;
using WebsitePanel.Providers.Common;
namespace WebsitePanel.Portal
{
public partial class SettingsServiceLevels : WebsitePanelControlBase, IUserSettingsEditorControl
{
public void BindSettings(UserSettings settings)
{
if (PanelSecurity.SelectedUser.Role == UserRole.Administrator)
BindServiceLevels();
txtStatus.Visible = false;
}
private void BindServiceLevels()
{
ServiceLevel[] array = ES.Services.Organizations.GetSupportServiceLevels();
gvServiceLevels.DataSource = array;
gvServiceLevels.DataBind();
btnAddServiceLevel.Enabled = (string.IsNullOrEmpty(txtServiceLevelName.Text)) ? true : false;
btnUpdateServiceLevel.Enabled = (string.IsNullOrEmpty(txtServiceLevelName.Text)) ? false : true;
}
public void btnAddServiceLevel_Click(object sender, EventArgs e)
{
Page.Validate("CreateServiceLevel");
if (!Page.IsValid)
return;
ServiceLevel serviceLevel = new ServiceLevel();
int res = ES.Services.Organizations.AddSupportServiceLevel(txtServiceLevelName.Text, txtServiceLevelDescr.Text);
if (res < 0)
{
messageBox.ShowErrorMessage("ADD_SERVICE_LEVEL");
return;
}
txtServiceLevelName.Text = string.Empty;
txtServiceLevelDescr.Text = string.Empty;
BindServiceLevels();
}
protected void gvServiceLevels_RowCommand(object sender, GridViewCommandEventArgs e)
{
int levelID = Utils.ParseInt(e.CommandArgument.ToString(), 0);
switch (e.CommandName)
{
case "DeleteItem":
ResultObject result = ES.Services.Organizations.DeleteSupportServiceLevel(levelID);
if (!result.IsSuccess)
{
if (result.ErrorCodes.Contains("SERVICE_LEVEL_IN_USE:Service Level is being used; ")) messageBox.ShowErrorMessage("SERVICE_LEVEL_IN_USE");
else messageBox.ShowMessage(result, "DELETE_SERVICE_LEVEL", null);
return;
}
ViewState["ServiceLevelID"] = null;
txtServiceLevelName.Text = string.Empty;
txtServiceLevelDescr.Text = string.Empty;
BindServiceLevels();
break;
case "EditItem":
ServiceLevel serviceLevel;
ViewState["ServiceLevelID"] = levelID;
serviceLevel = ES.Services.Organizations.GetSupportServiceLevel(levelID);
txtServiceLevelName.Text = serviceLevel.LevelName;
txtServiceLevelDescr.Text = serviceLevel.LevelDescription;
btnUpdateServiceLevel.Enabled = (string.IsNullOrEmpty(txtServiceLevelName.Text)) ? false : true;
btnAddServiceLevel.Enabled = (string.IsNullOrEmpty(txtServiceLevelName.Text)) ? true : false;
break;
}
}
public void SaveSettings(UserSettings settings)
{
settings["ServiceLevels"] = "";
}
protected void btnUpdateServiceLevel_Click(object sender, EventArgs e)
{
Page.Validate("CreateServiceLevel");
if (!Page.IsValid)
return;
if (ViewState["ServiceLevelID"] == null)
return;
int levelID = (int)ViewState["ServiceLevelID"];
ES.Services.Organizations.UpdateSupportServiceLevel(levelID, txtServiceLevelName.Text, txtServiceLevelDescr.Text);
txtServiceLevelName.Text = string.Empty;
txtServiceLevelDescr.Text = string.Empty;
BindServiceLevels();
}
}
}

View file

@ -0,0 +1,132 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebsitePanel.Portal {
public partial class SettingsServiceLevels {
/// <summary>
/// asyncTasks control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks;
/// <summary>
/// messageBox control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox;
/// <summary>
/// gvServiceLevels 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.GridView gvServiceLevels;
/// <summary>
/// secServiceLevel control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.CollapsiblePanel secServiceLevel;
/// <summary>
/// ServiceLevel 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.Panel ServiceLevel;
/// <summary>
/// lblServiceLevelName 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.Label lblServiceLevelName;
/// <summary>
/// txtServiceLevelName 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 txtServiceLevelName;
/// <summary>
/// valRequireServiceLevelName 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 valRequireServiceLevelName;
/// <summary>
/// lblServiceLevelDescr 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.Label lblServiceLevelDescr;
/// <summary>
/// txtServiceLevelDescr 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 txtServiceLevelDescr;
/// <summary>
/// btnAddServiceLevel 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.Button btnAddServiceLevel;
/// <summary>
/// btnUpdateServiceLevel 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.Button btnUpdateServiceLevel;
/// <summary>
/// txtStatus 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 txtStatus;
}
}

View file

@ -13,7 +13,7 @@
<ItemTemplate> <ItemTemplate>
<div class="Quota"> <div class="Quota">
<div class="Left"> <div class="Left">
<%# GetSharedLocalizedString("Quota." + (string)Eval("QuotaName"))%>: <%# GetQuotaTitle((string)Eval("QuotaName"), (string)Eval("QuotaDescription"))%>:
</div> </div>
<div class="Viewer"> <div class="Viewer">
<uc1:QuotaViewer ID="quota" runat="server" <uc1:QuotaViewer ID="quota" runat="server"

View file

@ -75,5 +75,13 @@ namespace WebsitePanel.Portal
{ {
return new DataView(dsQuotas.Tables[1], "GroupID=" + groupId.ToString(), "", DataViewRowState.CurrentRows); return new DataView(dsQuotas.Tables[1], "GroupID=" + groupId.ToString(), "", DataViewRowState.CurrentRows);
} }
public string GetQuotaTitle(string quotaName, string quotaDescription)
{
return quotaName.Contains("ServiceLevel") ?
(string.IsNullOrEmpty(quotaDescription) ?
string.Empty : quotaDescription).ToString()
: GetSharedLocalizedString("Quota." + quotaName);
}
} }
} }

View file

@ -1,31 +1,3 @@
// Copyright (c) 2014, 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.
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.

View file

@ -5,6 +5,10 @@
<asp:HyperLink ID="lnkWebsitePanelPolicy" runat="server" meta:resourcekey="lnkWebsitePanelPolicy" <asp:HyperLink ID="lnkWebsitePanelPolicy" runat="server" meta:resourcekey="lnkWebsitePanelPolicy"
Text="WebsitePanel Policy" NavigateUrl='<%# GetSettingsLink("WebsitePanelPolicy", "SettingsWebsitePanelPolicy") %>'></asp:HyperLink> Text="WebsitePanel Policy" NavigateUrl='<%# GetSettingsLink("WebsitePanelPolicy", "SettingsWebsitePanelPolicy") %>'></asp:HyperLink>
</li> </li>
<li>
<asp:HyperLink ID="lnkServiceLevels" runat="server" meta:resourcekey="lnkServiceLevels"
Text="Service Levels" NavigateUrl='<%# GetSettingsLink("ServiceLevels", "SettingsServiceLevels") %>'></asp:HyperLink>
</li>
<li> <li>
<asp:HyperLink ID="lnkWebPolicy" runat="server" meta:resourcekey="lnkWebPolicy" <asp:HyperLink ID="lnkWebPolicy" runat="server" meta:resourcekey="lnkWebPolicy"
Text="WEB Policy" NavigateUrl='<%# GetSettingsLink("WebPolicy", "SettingsWebPolicy") %>'></asp:HyperLink> Text="WEB Policy" NavigateUrl='<%# GetSettingsLink("WebPolicy", "SettingsWebPolicy") %>'></asp:HyperLink>

View file

@ -1,32 +1,3 @@
// Copyright (c) 2014, 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.
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
@ -50,6 +21,15 @@ namespace WebsitePanel.Portal {
/// </remarks> /// </remarks>
protected global::System.Web.UI.WebControls.HyperLink lnkWebsitePanelPolicy; protected global::System.Web.UI.WebControls.HyperLink lnkWebsitePanelPolicy;
/// <summary>
/// lnkServiceLevels 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.HyperLink lnkServiceLevels;
/// <summary> /// <summary>
/// lnkWebPolicy control. /// lnkWebPolicy control.
/// </summary> /// </summary>

View file

@ -210,6 +210,13 @@
<Compile Include="Code\ReportingServices\IResourceStorage.cs" /> <Compile Include="Code\ReportingServices\IResourceStorage.cs" />
<Compile Include="Code\ReportingServices\ReportingServicesUtils.cs" /> <Compile Include="Code\ReportingServices\ReportingServicesUtils.cs" />
<Compile Include="Code\UserControls\Tab.cs" /> <Compile Include="Code\UserControls\Tab.cs" />
<Compile Include="SettingsServiceLevels.ascx.cs">
<DependentUpon>SettingsServiceLevels.ascx</DependentUpon>
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="SettingsServiceLevels.ascx.designer.cs">
<DependentUpon>SettingsServiceLevels.ascx</DependentUpon>
</Compile>
<Compile Include="CRM\CRMStorageSettings.ascx.cs"> <Compile Include="CRM\CRMStorageSettings.ascx.cs">
<DependentUpon>CRMStorageSettings.ascx</DependentUpon> <DependentUpon>CRMStorageSettings.ascx</DependentUpon>
<SubType>ASPXCodeBehind</SubType> <SubType>ASPXCodeBehind</SubType>
@ -4138,6 +4145,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="ApplyEnableHardQuotaFeature.ascx" /> <Content Include="ApplyEnableHardQuotaFeature.ascx" />
<Content Include="SettingsServiceLevels.ascx" />
<Content Include="CRM\CRMStorageSettings.ascx" /> <Content Include="CRM\CRMStorageSettings.ascx" />
<Content Include="ExchangeServer\EnterpriseStorageCreateDriveMap.ascx" /> <Content Include="ExchangeServer\EnterpriseStorageCreateDriveMap.ascx" />
<Content Include="ExchangeServer\EnterpriseStorageDriveMaps.ascx" /> <Content Include="ExchangeServer\EnterpriseStorageDriveMaps.ascx" />
@ -5421,6 +5429,7 @@
<Content Include="ProviderControls\App_LocalResources\IceWarp_EditGroup.ascx.resx" /> <Content Include="ProviderControls\App_LocalResources\IceWarp_EditGroup.ascx.resx" />
<Content Include="ProviderControls\App_LocalResources\IceWarp_EditList.ascx.resx" /> <Content Include="ProviderControls\App_LocalResources\IceWarp_EditList.ascx.resx" />
<Content Include="ProviderControls\App_LocalResources\IceWarp_Settings.ascx.resx" /> <Content Include="ProviderControls\App_LocalResources\IceWarp_Settings.ascx.resx" />
<Content Include="App_LocalResources\SettingsServiceLevels.ascx.resx" />
<EmbeddedResource Include="UserControls\App_LocalResources\EditDomainsList.ascx.resx"> <EmbeddedResource Include="UserControls\App_LocalResources\EditDomainsList.ascx.resx">
<SubType>Designer</SubType> <SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>