Significant amount of changes to hosted organizations and exchange:

Exchange 2010 SP2 provisioning separated through a new provider
Exchange 2010 SP2 now compliant with product group guidelines
Support for Database Availability Group
Fixed Distribution List view scope to only tenant
Consumer support (individual mailboxes as hotmail) added
Mailbox configuration moved to mailbox plans concept
CN creation is now based on UPN
sAMAccountName generation revised and decoupled from tenant name
2007 (ACL Based), 2010 (ACL Bases), 2010 SP2 (ABP) supported
Automated Hosted Organization provisioning added to create hosting space
Enterprise Server webservice extended with ImportMethod
Mobile tab fixed
Added more information to users listview
This commit is contained in:
robvde 2012-07-09 12:03:24 +04:00
parent 2f8a580846
commit 50f2c43315
194 changed files with 12994 additions and 9755 deletions

View file

@ -29,7 +29,7 @@ CREATE TABLE [dbo].[ExchangeAccounts](
[AccountID] [int] IDENTITY(1,1) NOT NULL,
[ItemID] [int] NOT NULL,
[AccountType] [int] NOT NULL,
[AccountName] [nvarchar](20) COLLATE Latin1_General_CI_AS NOT NULL,
[AccountName] [nvarchar](300) COLLATE Latin1_General_CI_AS NOT NULL,
[DisplayName] [nvarchar](300) COLLATE Latin1_General_CI_AS NOT NULL,
[PrimaryEmailAddress] [nvarchar](300) COLLATE Latin1_General_CI_AS NULL,
[MailEnabledPublicFolder] [bit] NULL,
@ -37,6 +37,8 @@ CREATE TABLE [dbo].[ExchangeAccounts](
[SamAccountName] [nvarchar](100) COLLATE Latin1_General_CI_AS NULL,
[AccountPassword] [nvarchar](200) COLLATE Latin1_General_CI_AS NULL,
[CreatedDate] [datetime] NOT NULL,
[MailboxPlanId] [int] NULL,
[SubscriberNumber] [nvarchar] (32) COLLATE Latin1_General_CI_AS NULL,
CONSTRAINT [PK_ExchangeAccounts] PRIMARY KEY CLUSTERED
(
[AccountID] ASC
@ -54,6 +56,32 @@ SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ExchangeMailboxPlans](
[MailboxPlanId] [int] IDENTITY(1,1) NOT NULL,
[ItemID] [int] NOT NULL,
[MailboxPlan] [nvarchar](300) COLLATE Latin1_General_CI_AS NOT NULL,
[EnableActiveSync] [bit] NOT NULL,
[EnableIMAP] [bit] NOT NULL,
[EnableMAPI] [bit] NOT NULL,
[EnableOWA] [bit] NOT NULL,
[EnablePOP] [bit] NOT NULL,
[IsDefault] [bit] NOT NULL,
[IssueWarningPct] [int] NOT NULL,
[KeepDeletedItemsDays] [int] NOT NULL,
[MailboxSizeMB] [int] NOT NULL,
[MaxReceiveMessageSizeKB] [int] NOT NULL,
[MaxRecipients] [int] NOT NULL,
[MaxSendMessageSizeKB] [int] NOT NULL,
[ProhibitSendPct] [int] NOT NULL,
[ProhibitSendReceivePct] [int] NOT NULL,
[HideFromAddressBook] [bit] NOT NULL,
CONSTRAINT [PK_ExchangeMailboxPlans] PRIMARY KEY CLUSTERED
(
[MailboxPlanId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
@ -80,7 +108,8 @@ SELECT
AccountName,
DisplayName,
PrimaryEmailAddress,
MailEnabledPublicFolder
MailEnabledPublicFolder,
SubscriberNumber
FROM
ExchangeAccounts
WHERE
@ -109,6 +138,7 @@ END
GO
@ -150,21 +180,71 @@ CREATE PROCEDURE [dbo].[GetExchangeAccounts]
)
AS
SELECT
AccountID,
ItemID,
AccountType,
AccountName,
DisplayName,
PrimaryEmailAddress,
MailEnabledPublicFolder
E.AccountID,
E.ItemID,
E.AccountType,
E.AccountName,
E.DisplayName,
E.PrimaryEmailAddress,
E.MailEnabledPublicFolder,
E.MailboxPlanId,
P.MailboxPlan,
E.SubscriberNumber
FROM
ExchangeAccounts
ExchangeAccounts AS E
INNER JOIN ExchangeMailboxPlans AS P ON E.MailboxPlanId = P.MailboxPlanId
WHERE
ItemID = @ItemID AND
(AccountType = @AccountType OR @AccountType IS NULL)
E.ItemID = @ItemID AND
(E.AccountType = @AccountType OR @AccountType IS NULL)
ORDER BY DisplayName
RETURN
GO
CREATE PROCEDURE [dbo].[GetExchangeAccountByAccountName]
(
@ItemID int,
@AccountName nvarchar(300)
)
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
FROM
ExchangeAccounts AS E
LEFT OUTER JOIN ExchangeMailboxPlans AS P ON E.MailboxPlanId = P.MailboxPlanId
WHERE
E.ItemID = @ItemID AND
E.AccountName = @AccountName
RETURN
@ -231,21 +311,25 @@ CREATE PROCEDURE [dbo].[GetExchangeAccount]
)
AS
SELECT
AccountID,
ItemID,
AccountType,
AccountName,
DisplayName,
PrimaryEmailAddress,
MailEnabledPublicFolder,
MailboxManagerActions,
SamAccountName,
AccountPassword
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
FROM
ExchangeAccounts
ExchangeAccounts AS E
LEFT OUTER JOIN ExchangeMailboxPlans AS P ON E.MailboxPlanId = P.MailboxPlanId
WHERE
ItemID = @ItemID AND
AccountID = @AccountID
E.ItemID = @ItemID AND
E.AccountID = @AccountID
RETURN
@ -311,14 +395,14 @@ GO
CREATE PROCEDURE ExchangeAccountExists
CREATE PROCEDURE [dbo].[ExchangeAccountExists]
(
@AccountName nvarchar(20),
@Exists bit OUTPUT
)
AS
SET @Exists = 0
IF EXISTS(SELECT * FROM ExchangeAccounts WHERE AccountName = @AccountName)
IF EXISTS(SELECT * FROM ExchangeAccounts WHERE sAMAccountName LIKE '%\'+@AccountName)
BEGIN
SET @Exists = 1
END
@ -352,6 +436,10 @@ RETURN
@ -936,7 +1024,7 @@ GO
CREATE PROCEDURE SearchExchangeAccounts
CREATE PROCEDURE [dbo].[SearchExchangeAccounts]
(
@ActorID int,
@ItemID int,
@ -986,7 +1074,8 @@ SELECT
EA.AccountName,
EA.DisplayName,
EA.PrimaryEmailAddress,
EA.MailEnabledPublicFolder
EA.MailEnabledPublicFolder,
EA.SubscriberNumber
FROM ExchangeAccounts AS EA
WHERE ' + @condition
@ -1026,6 +1115,7 @@ RETURN
GO
@ -1080,6 +1170,10 @@ 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 = '
@ -1094,9 +1188,10 @@ WITH Accounts AS (
EA.AccountName,
EA.DisplayName,
EA.PrimaryEmailAddress,
EA.MailEnabledPublicFolder
FROM ExchangeAccounts AS EA
WHERE ' + @condition + '
EA.MailEnabledPublicFolder,
EA.MailboxPlanId,
EA.SubscriberNumber ' + @joincondition +
' WHERE ' + @condition + '
)
SELECT * FROM Accounts
@ -1118,6 +1213,7 @@ RETURN
GO
SET ANSI_NULLS ON
GO
@ -1407,13 +1503,15 @@ CREATE PROCEDURE [dbo].[AddExchangeAccount]
@AccountID int OUTPUT,
@ItemID int,
@AccountType int,
@AccountName nvarchar(20),
@AccountName nvarchar(300),
@DisplayName nvarchar(300),
@PrimaryEmailAddress nvarchar(300),
@MailEnabledPublicFolder bit,
@MailboxManagerActions varchar(200),
@SamAccountName nvarchar(100),
@AccountPassword nvarchar(200)
@AccountPassword nvarchar(200),
@MailboxPlanId int,
@SubscriberNumber nvarchar(32)
)
AS
@ -1427,7 +1525,9 @@ INSERT INTO ExchangeAccounts
MailEnabledPublicFolder,
MailboxManagerActions,
SamAccountName,
AccountPassword
AccountPassword,
MailboxPlanId,
SubscriberNumber
)
VALUES
(
@ -1439,7 +1539,9 @@ VALUES
@MailEnabledPublicFolder,
@MailboxManagerActions,
@SamAccountName,
@AccountPassword
@AccountPassword,
@MailboxPlanId,
@SubscriberNumber
)
SET @AccountID = SCOPE_IDENTITY()
@ -1475,6 +1577,7 @@ RETURN
GO
@ -3538,9 +3641,9 @@ INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDe
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (75, 1, 8, N'OS.ExtraApplications', N'Extra Application Packs', 1, 0, NULL)
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (77, 12, 2, N'Exchange2007.DiskSpace', N'Organization Disk Space, MB', 3, 0, NULL)
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (77, 12, 2, N'Exchange2007.DiskSpace', N'Organization Disk Space, MB', 21, 0, NULL)
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (78, 12, 3, N'Exchange2007.Mailboxes', N'Mailboxes per Organization', 3, 0, NULL)
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (78, 12, 3, N'Exchange2007.Mailboxes', N'Mailboxes per Organization', 2, 0, NULL)
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (79, 12, 4, N'Exchange2007.Contacts', N'Contacts per Organization', 3, 0, NULL)
GO
@ -3560,16 +3663,6 @@ INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDe
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (88, 12, 8, N'Exchange2007.MailEnabledPublicFolders', N'Mail Enabled Public Folders Allowed', 1, 0, NULL)
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (89, 12, 10, N'Exchange2007.POP3Enabled', N'POP3 Enabled by default', 1, 0, NULL)
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (90, 12, 12, N'Exchange2007.IMAPEnabled', N'IMAP Enabled by default', 1, 0, NULL)
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (91, 12, 14, N'Exchange2007.OWAEnabled', N'OWA Enabled by default', 1, 0, NULL)
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (92, 12, 16, N'Exchange2007.MAPIEnabled', N'MAPI Enabled by default', 1, 0, NULL)
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (93, 12, 18, N'Exchange2007.ActiveSyncEnabled', N'ActiveSync Enabled by default', 1, 0, NULL)
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (94, 2, 17, N'Web.ColdFusion', N'ColdFusion', 1, 0, NULL)
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (95, 2, 1, N'Web.WebAppGallery', N'Web Application Gallery', 1, 0, NULL)
@ -3602,7 +3695,7 @@ INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDe
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (205, 13, 1, N'HostedSolution.Organizations', N'Organizations', 2, 0, 29)
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (206, 13, 2, N'HostedSolution.Users', N'Users', 3, 0, 30)
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (206, 13, 2, N'HostedSolution.Users', N'Users', 2, 0, 30)
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (207, 13, 3, N'HostedSolution.Domains', N'Domains per Organizations', 3, 0, NULL)
GO
@ -3748,6 +3841,16 @@ INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDe
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (363, 40, 12, N'VPSForPC.Bandwidth', N'Monthly bandwidth, GB', 2, 0, NULL)
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (364, 12, 19, N'Exchange2007.KeepDeletedItemsDays', N'Keep Deleted Items (days)', 3, 0, NULL)
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (365, 12, 20, N'Exchange2007.MaxRecipients', N'Maximum Recipients', 3, 0, NULL)
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (366, 12, 21, N'Exchange2007.MaxSendMessageSizeKB', N'Maximum Send Message Size (Kb)', 3, 0, NULL)
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (367, 12, 22, N'Exchange2007.MaxReceiveMessageSizeKB', N'Maximum Receive Message Size (Kb)', 3, 0, NULL)
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (368, 12, 1, N'Exchange2007.IsConsumer',N'Is Consumer Organization',1, 0 , NULL)
GO
INSERT [dbo].[Quotas] ([QuotaID], [GroupID], [QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (400, 20, 3, N'HostedSharePoint.UseSharedSSL', N'Use shared SSL Root', 1, 0, NULL)
GO
@ -5866,7 +5969,7 @@ SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ExchangeOrganizations](
[ItemID] [int] NOT NULL,
[OrganizationID] [nvarchar](10) COLLATE Latin1_General_CI_AS NOT NULL,
[OrganizationID] [nvarchar](128) COLLATE Latin1_General_CI_AS NOT NULL,
CONSTRAINT [PK_ExchangeOrganizations] PRIMARY KEY CLUSTERED
(
[ItemID] ASC
@ -5980,8 +6083,10 @@ CREATE PROCEDURE DeleteExchangeOrganization
@ItemID int
)
AS
DELETE FROM ExchangeOrganizations
WHERE ItemID = @ItemID
BEGIN TRAN
DELETE FROM ExchangeMailboxPlans WHERE ItemID = @ItemID
DELETE FROM ExchangeOrganizations WHERE ItemID = @ItemID
COMMIT TRAN
RETURN
@ -6053,7 +6158,7 @@ GO
CREATE PROCEDURE AddExchangeOrganization
(
@ItemID int,
@OrganizationID nvarchar(10)
@OrganizationID nvarchar(128)
)
AS
@ -6241,7 +6346,8 @@ SELECT
(SELECT COUNT(*) FROM ExchangeAccounts WHERE AccountType = 2 AND ItemID = @ItemID) AS CreatedContacts,
(SELECT COUNT(*) FROM ExchangeAccounts WHERE AccountType = 3 AND ItemID = @ItemID) AS CreatedDistributionLists,
(SELECT COUNT(*) FROM ExchangeAccounts WHERE AccountType = 4 AND ItemID = @ItemID) AS CreatedPublicFolders,
(SELECT COUNT(*) FROM ExchangeOrganizationDomains WHERE ItemID = @ItemID) AS CreatedDomains
(SELECT COUNT(*) FROM ExchangeOrganizationDomains WHERE ItemID = @ItemID) AS CreatedDomains,
(SELECT SUM(B.MailboxSizeMB) FROM ExchangeAccounts AS A INNER JOIN ExchangeMailboxPlans AS B ON A.MailboxPlanId = B.MailboxPlanId WHERE A.ItemID=@ItemID) AS UsedDiskSpace
RETURN
@ -6272,7 +6378,6 @@ RETURN
GO
@ -6611,18 +6716,26 @@ GO
CREATE PROCEDURE [dbo].[UpdateExchangeAccount]
(
@AccountID int,
@AccountName nvarchar(20),
@AccountName nvarchar(300),
@DisplayName nvarchar(300),
@PrimaryEmailAddress nvarchar(300),
@AccountType int,
@SamAccountName nvarchar(100),
@MailEnabledPublicFolder bit,
@MailboxManagerActions varchar(200),
@Password varchar(200)
@Password varchar(200),
@MailboxPlanId int,
@SubscriberNumber varchar(32)
)
AS
BEGIN TRAN
IF (@MailboxPlanId = -1)
BEGIN
SET @MailboxPlanId = NULL
END
UPDATE ExchangeAccounts SET
AccountName = @AccountName,
DisplayName = @DisplayName,
@ -6630,7 +6743,9 @@ UPDATE ExchangeAccounts SET
MailEnabledPublicFolder = @MailEnabledPublicFolder,
MailboxManagerActions = @MailboxManagerActions,
AccountType =@AccountType,
SamAccountName = @SamAccountName
SamAccountName = @SamAccountName,
MailboxPlanId = @MailboxPlanId,
SubscriberNumber = @SubscriberNumber
WHERE
AccountID = @AccountID
@ -6667,6 +6782,10 @@ RETURN
GO
@ -8899,7 +9018,8 @@ SELECT
EA.AccountType,
EA.AccountName,
EA.DisplayName,
EA.PrimaryEmailAddress
EA.PrimaryEmailAddress,
EA.SubscriberNumber
FROM ExchangeAccounts AS EA
WHERE ' + @condition
@ -8936,6 +9056,8 @@ RETURN
@ -20551,7 +20673,7 @@ GO
CREATE PROCEDURE GetPackages
CREATE PROCEDURE [dbo].[GetPackages]
(
@ActorID int,
@UserID int
@ -20590,8 +20712,7 @@ INNER JOIN Users AS U ON P.UserID = U.UserID
INNER JOIN Servers AS S ON P.ServerID = S.ServerID
INNER JOIN HostingPlans AS HP ON P.PlanID = HP.PlanID
WHERE
P.UserID <> @UserID
AND dbo.CheckUserParent(@UserID, P.UserID) = 1
P.UserID = @UserID
RETURN
@ -23257,6 +23378,8 @@ INSERT [dbo].[Providers] ([ProviderID], [GroupID], [ProviderName], [DisplayName]
GO
INSERT [dbo].[Providers] ([ProviderID], [GroupID], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery]) VALUES (400, 40, N'HyperVForPC', N'Microsoft Hyper-V For Private Cloud', N'WebsitePanel.Providers.VirtualizationForPC.HyperVForPC, WebsitePanel.Providers.VirtualizationForPC.HyperVForPC', N'HyperVForPrivateCloud', 1)
GO
INSERT [dbo].[Providers] ([ProviderId], [GroupId], [ProviderName], [DisplayName], [ProviderType], [EditorControl], [DisableAutoDiscovery]) VALUES(90, 12, N'Exchange2010SP2', N'Hosted Microsoft Exchange Server 2010 SP2', N'WebsitePanel.Providers.HostedSolution.Exchange2010SP2, WebsitePanel.Providers.HostedSolution', N'Exchange', 1)
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
@ -25738,21 +25861,27 @@ AS
INNER JOIN PackagesTreeCache AS PT ON PIP.PackageID = PT.PackageID
WHERE PT.ParentPackageID = @PackageID AND IP.PoolID = 3)
ELSE IF @QuotaID = 319 -- BB Users
SET @Result = (SELECT COUNT(ea.AccountID)
FROM
ExchangeAccounts ea
INNER JOIN
BlackBerryUsers bu
ON
ea.AccountID = bu.AccountID
INNER JOIN
ServiceItems si
ON
ea.ItemID = si.ItemID
INNER JOIN
PackagesTreeCache pt ON si.PackageID = pt.PackageID
WHERE
pt.ParentPackageID = @PackageID)
SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts ea
INNER JOIN BlackBerryUsers bu ON ea.AccountID = bu.AccountID
INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID
INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID
WHERE pt.ParentPackageID = @PackageID)
ELSE IF @QuotaID = 206 -- HostedSolution.Users
SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts AS ea
INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID
INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID
WHERE pt.ParentPackageID = @PackageID AND ea.AccountType IN (1,5,6,7))
ELSE IF @QuotaID = 78 -- Exchange2007.Mailboxes
SET @Result = (SELECT COUNT(ea.AccountID) FROM ExchangeAccounts AS ea
INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID
INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID
WHERE pt.ParentPackageID = @PackageID AND ea.MailboxPlanId IS NOT NULL)
ELSE IF @QuotaID = 77 -- Exchange2007.DiskSpace
SET @Result = (SELECT SUM(B.MailboxSizeMB) FROM ExchangeAccounts AS ea
INNER JOIN ExchangeMailboxPlans AS B ON ea.MailboxPlanId = B.MailboxPlanId
INNER JOIN ServiceItems si ON ea.ItemID = si.ItemID
INNER JOIN PackagesTreeCache pt ON si.PackageID = pt.PackageID
WHERE pt.ParentPackageID = @PackageID)
ELSE
SET @Result = (SELECT COUNT(SI.ItemID) FROM Quotas AS Q
INNER JOIN ServiceItems AS SI ON SI.ItemTypeID = Q.ItemTypeID
@ -25761,14 +25890,10 @@ AS
RETURN @Result
END
GO
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
@ -44451,6 +44576,7 @@ EXEC sp_xml_removedocument @idoc
COMMIT TRAN
RETURN
GO
@ -44473,27 +44599,280 @@ RETURN
CREATE PROCEDURE [dbo].[AddExchangeMailboxPlan]
(
@MailboxPlanId int OUTPUT,
@ItemID int,
@MailboxPlan nvarchar(300),
@EnableActiveSync bit,
@EnableIMAP bit,
@EnableMAPI bit,
@EnableOWA bit,
@EnablePOP bit,
@IsDefault bit,
@IssueWarningPct int,
@KeepDeletedItemsDays int,
@MailboxSizeMB int,
@MaxReceiveMessageSizeKB int,
@MaxRecipients int,
@MaxSendMessageSizeKB int,
@ProhibitSendPct int,
@ProhibitSendReceivePct int ,
@HideFromAddressBook bit
)
AS
INSERT INTO ExchangeMailboxPlans
(
ItemID,
MailboxPlan,
EnableActiveSync,
EnableIMAP,
EnableMAPI,
EnableOWA,
EnablePOP,
IsDefault,
IssueWarningPct,
KeepDeletedItemsDays,
MailboxSizeMB,
MaxReceiveMessageSizeKB,
MaxRecipients,
MaxSendMessageSizeKB,
ProhibitSendPct,
ProhibitSendReceivePct,
HideFromAddressBook
)
VALUES
(
@ItemID,
@MailboxPlan,
@EnableActiveSync,
@EnableIMAP,
@EnableMAPI,
@EnableOWA,
@EnablePOP,
@IsDefault,
@IssueWarningPct,
@KeepDeletedItemsDays,
@MailboxSizeMB,
@MaxReceiveMessageSizeKB,
@MaxRecipients,
@MaxSendMessageSizeKB,
@ProhibitSendPct,
@ProhibitSendReceivePct,
@HideFromAddressBook
)
SET @MailboxPlanId = SCOPE_IDENTITY()
RETURN
GO
CREATE PROCEDURE [dbo].[SetExchangeAccountMailboxplan]
(
@AccountID int,
@MailboxPlanId int
)
AS
UPDATE ExchangeAccounts SET
MailboxPlanId = @MailboxPlanId
WHERE
AccountID = @AccountID
RETURN
GO
CREATE PROCEDURE [dbo].[SetOrganizationDefaultExchangeMailboxPlan]
(
@ItemId int,
@MailboxPlanId int
)
AS
UPDATE ExchangeMailboxPlans SET IsDefault=0 WHERE ItemId=@ItemId
UPDATE ExchangeMailboxPlans SET IsDefault=1 WHERE MailboxPlanId=@MailboxPlanId
RETURN
GO
CREATE PROCEDURE [dbo].[GetExchangeMailboxPlan]
(
@MailboxPlanId int
)
AS
SELECT
MailboxPlanId,
ItemID,
MailboxPlan,
EnableActiveSync,
EnableIMAP,
EnableMAPI,
EnableOWA,
EnablePOP,
IsDefault,
IssueWarningPct,
KeepDeletedItemsDays,
MailboxSizeMB,
MaxReceiveMessageSizeKB,
MaxRecipients,
MaxSendMessageSizeKB,
ProhibitSendPct,
ProhibitSendReceivePct,
HideFromAddressBook
FROM
ExchangeMailboxPlans
WHERE
MailboxPlanId = @MailboxPlanId
RETURN
GO
CREATE PROCEDURE [dbo].[GetExchangeMailboxPlans]
(
@ItemID int
)
AS
SELECT
MailboxPlanId,
ItemID,
MailboxPlan,
EnableActiveSync,
EnableIMAP,
EnableMAPI,
EnableOWA,
EnablePOP,
IsDefault,
IssueWarningPct,
KeepDeletedItemsDays,
MailboxSizeMB,
MaxReceiveMessageSizeKB,
MaxRecipients,
MaxSendMessageSizeKB,
ProhibitSendPct,
ProhibitSendReceivePct,
HideFromAddressBook
FROM
ExchangeMailboxPlans
WHERE
ItemID = @ItemID
ORDER BY MailboxPlan
RETURN
GO
CREATE PROCEDURE [dbo].[DeleteExchangeMailboxPlan]
(
@MailboxPlanId int
)
AS
-- delete mailboxplan
DELETE FROM ExchangeMailboxPlans
WHERE MailboxPlanId = @MailboxPlanId
RETURN
GO
ALTER TABLE [dbo].[ScheduleParameters] WITH CHECK ADD CONSTRAINT [FK_ScheduleParameters_Schedule] FOREIGN KEY([ScheduleID])
REFERENCES [dbo].[Schedule] ([ScheduleID])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[ScheduleParameters] CHECK CONSTRAINT [FK_ScheduleParameters_Schedule]
GO
ALTER TABLE dbo.ExchangeMailboxPlans ADD CONSTRAINT
IX_ExchangeMailboxPlans UNIQUE NONCLUSTERED
(
MailboxPlanId
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
ALTER TABLE dbo.ExchangeMailboxPlans ADD CONSTRAINT
FK_ExchangeMailboxPlans_ExchangeOrganizations FOREIGN KEY
(
ItemID
) REFERENCES dbo.ExchangeOrganizations
(
ItemID
) ON UPDATE NO ACTION
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[ExchangeAccounts] WITH CHECK ADD CONSTRAINT [FK_ExchangeAccounts_ExchangeMailboxPlans] FOREIGN KEY([MailboxPlanId])
REFERENCES [dbo].[ExchangeMailboxPlans] ([MailboxPlanId])
GO
ALTER TABLE [dbo].[ExchangeAccounts] CHECK CONSTRAINT [FK_ExchangeAccounts_ExchangeMailboxPlans]
GO
ALTER TABLE [dbo].[ExchangeAccounts] WITH CHECK ADD CONSTRAINT [FK_ExchangeAccounts_ServiceItems] FOREIGN KEY([ItemID])
REFERENCES [dbo].[ServiceItems] ([ItemID])
ON DELETE CASCADE
@ -44713,6 +45092,12 @@ ON DELETE CASCADE
GO
ALTER TABLE [dbo].[ExchangeOrganizations] CHECK CONSTRAINT [FK_ExchangeOrganizations_ServiceItems]
GO
ALTER TABLE [dbo].[ExchangeOrganizations] WITH CHECK ADD CONSTRAINT [FK_ExchangeOrganizations_ExchangeMailboxPlans] FOREIGN KEY([ItemID])
REFERENCES [dbo].[ExchangeMailboxPlans] ([ItemID])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[ExchangeOrganizations] CHECK CONSTRAINT [FK_ExchangeOrganizations_ExchangeMailboxPlans]
GO
ALTER TABLE [dbo].[ExchangeOrganizationDomains] WITH CHECK ADD CONSTRAINT [FK_ExchangeOrganizationDomains_ServiceItems] FOREIGN KEY([ItemID])
REFERENCES [dbo].[ServiceItems] ([ItemID])
ON DELETE CASCADE
@ -45118,3 +45503,4 @@ GO
ALTER TABLE [dbo].[ServiceProperties] CHECK CONSTRAINT [FK_ServiceProperties_Services]
GO


File diff suppressed because it is too large Load diff

View file

@ -105,6 +105,11 @@ order by rg.groupOrder
public const string EXCHANGE2007_OWAENABLED = "Exchange2007.OWAEnabled"; // OWA Enabled by default
public const string EXCHANGE2007_MAPIENABLED = "Exchange2007.MAPIEnabled"; // MAPI Enabled by default
public const string EXCHANGE2007_ACTIVESYNCENABLED = "Exchange2007.ActiveSyncEnabled"; // ActiveSync Enabled by default
public const string EXCHANGE2007_KEEPDELETEDITEMSDAYS = "Exchange2007.KeepDeletedItemsDays"; // Keep deleted items
public const string EXCHANGE2007_MAXRECIPIENTS = "Exchange2007.MaxRecipients"; // Max Recipients
public const string EXCHANGE2007_MAXSENDMESSAGESIZEKB = "Exchange2007.MaxSendMessageSizeKB"; // Max Send Message Size
public const string EXCHANGE2007_MAXRECEIVEMESSAGESIZEKB = "Exchange2007.MaxReceiveMessageSizeKB"; // Max Receive Message Size
public const string EXCHANGE2007_ISCONSUMER = "Exchange2007.IsConsumer"; // Is Consumer Organization
public const string MSSQL2000_DATABASES = "MsSQL2000.Databases"; // Databases
public const string MSSQL2000_USERS = "MsSQL2000.Users"; // Users
public const string MSSQL2000_MAXDATABASESIZE = "MsSQL2000.MaxDatabaseSize"; // Max Database Size

View file

@ -2069,7 +2069,7 @@ namespace WebsitePanel.EnterpriseServer
public static int AddExchangeAccount(int itemId, int accountType, string accountName,
string displayName, string primaryEmailAddress, bool mailEnabledPublicFolder,
string mailboxManagerActions, string samAccountName, string accountPassword)
string mailboxManagerActions, string samAccountName, string accountPassword, int mailboxPlanId, string subscriberNumber)
{
SqlParameter outParam = new SqlParameter("@AccountID", SqlDbType.Int);
outParam.Direction = ParameterDirection.Output;
@ -2087,12 +2087,15 @@ namespace WebsitePanel.EnterpriseServer
new SqlParameter("@MailEnabledPublicFolder", mailEnabledPublicFolder),
new SqlParameter("@MailboxManagerActions", mailboxManagerActions),
new SqlParameter("@SamAccountName", samAccountName),
new SqlParameter("@AccountPassword", accountPassword)
new SqlParameter("@AccountPassword", accountPassword),
new SqlParameter("@MailboxPlanId", (mailboxPlanId == 0) ? (object)DBNull.Value : (object)mailboxPlanId),
new SqlParameter("@SubscriberNumber", (string.IsNullOrEmpty(subscriberNumber) ? (object)DBNull.Value : (object)subscriberNumber))
);
return Convert.ToInt32(outParam.Value);
}
public static void AddExchangeAccountEmailAddress(int accountId, string emailAddress)
{
SqlHelper.ExecuteNonQuery(
@ -2159,6 +2162,7 @@ namespace WebsitePanel.EnterpriseServer
);
}
public static void DeleteExchangeAccountEmailAddress(int accountId, string emailAddress)
{
SqlHelper.ExecuteNonQuery(
@ -2257,7 +2261,7 @@ namespace WebsitePanel.EnterpriseServer
public static void UpdateExchangeAccount(int accountId, string accountName, ExchangeAccountType accountType,
string displayName, string primaryEmailAddress, bool mailEnabledPublicFolder,
string mailboxManagerActions, string samAccountName, string accountPassword)
string mailboxManagerActions, string samAccountName, string accountPassword, int mailboxPlanId, string subscriberNumber)
{
SqlHelper.ExecuteNonQuery(
ConnectionString,
@ -2271,8 +2275,9 @@ namespace WebsitePanel.EnterpriseServer
new SqlParameter("@MailEnabledPublicFolder", mailEnabledPublicFolder),
new SqlParameter("@MailboxManagerActions", mailboxManagerActions),
new SqlParameter("@Password", string.IsNullOrEmpty(accountPassword) ? (object)DBNull.Value : (object)accountPassword),
new SqlParameter("@SamAccountName", samAccountName)
new SqlParameter("@SamAccountName", samAccountName),
new SqlParameter("@MailboxPlanId", (mailboxPlanId == 0) ? (object)DBNull.Value : (object)mailboxPlanId),
new SqlParameter("@SubscriberNumber", (string.IsNullOrEmpty(subscriberNumber) ? (object)DBNull.Value : (object)subscriberNumber))
);
}
@ -2287,6 +2292,17 @@ namespace WebsitePanel.EnterpriseServer
);
}
public static IDataReader GetExchangeAccountByAccountName(int itemId, string accountName)
{
return SqlHelper.ExecuteReader(
ConnectionString,
CommandType.StoredProcedure,
"GetExchangeAccountByAccountName",
new SqlParameter("@ItemID", itemId),
new SqlParameter("@AccountName", accountName)
);
}
public static IDataReader GetExchangeAccountEmailAddresses(int accountId)
{
return SqlHelper.ExecuteReader(
@ -2398,6 +2414,97 @@ namespace WebsitePanel.EnterpriseServer
#endregion
#region Exchange Mailbox Plans
public static int AddExchangeMailboxPlan(int itemID, string mailboxPlan, bool enableActiveSync, bool enableIMAP, bool enableMAPI, bool enableOWA, bool enablePOP,
bool isDefault, int issueWarningPct, int keepDeletedItemsDays, int mailboxSizeMB, int maxReceiveMessageSizeKB, int maxRecipients,
int maxSendMessageSizeKB, int prohibitSendPct, int prohibitSendReceivePct, bool hideFromAddressBook)
{
SqlParameter outParam = new SqlParameter("@MailboxPlanId", SqlDbType.Int);
outParam.Direction = ParameterDirection.Output;
SqlHelper.ExecuteNonQuery(
ConnectionString,
CommandType.StoredProcedure,
"AddExchangeMailboxPlan",
outParam,
new SqlParameter("@ItemID", itemID),
new SqlParameter("@MailboxPlan", mailboxPlan),
new SqlParameter("@EnableActiveSync", enableActiveSync),
new SqlParameter("@EnableIMAP", enableIMAP),
new SqlParameter("@EnableMAPI", enableMAPI),
new SqlParameter("@EnableOWA", enableOWA),
new SqlParameter("@EnablePOP", enablePOP),
new SqlParameter("@IsDefault", isDefault),
new SqlParameter("@IssueWarningPct", issueWarningPct),
new SqlParameter("@KeepDeletedItemsDays", keepDeletedItemsDays),
new SqlParameter("@MailboxSizeMB", mailboxSizeMB),
new SqlParameter("@MaxReceiveMessageSizeKB", maxReceiveMessageSizeKB),
new SqlParameter("@MaxRecipients", maxRecipients),
new SqlParameter("@MaxSendMessageSizeKB", maxSendMessageSizeKB),
new SqlParameter("@ProhibitSendPct", prohibitSendPct),
new SqlParameter("@ProhibitSendReceivePct", prohibitSendReceivePct),
new SqlParameter("@HideFromAddressBook", hideFromAddressBook)
);
return Convert.ToInt32(outParam.Value);
}
public static void DeleteExchangeMailboxPlan(int mailboxPlanId)
{
SqlHelper.ExecuteNonQuery(
ConnectionString,
CommandType.StoredProcedure,
"DeleteExchangeMailboxPlan",
new SqlParameter("@MailboxPlanId", mailboxPlanId)
);
}
public static IDataReader GetExchangeMailboxPlan(int mailboxPlanId)
{
return SqlHelper.ExecuteReader(
ConnectionString,
CommandType.StoredProcedure,
"GetExchangeMailboxPlan",
new SqlParameter("@MailboxPlanId", mailboxPlanId)
);
}
public static IDataReader GetExchangeMailboxPlans(int itemId)
{
return SqlHelper.ExecuteReader(
ConnectionString,
CommandType.StoredProcedure,
"GetExchangeMailboxPlans",
new SqlParameter("@ItemID", itemId)
);
}
public static void SetOrganizationDefaultExchangeMailboxPlan(int itemId, int mailboxPlanId)
{
SqlHelper.ExecuteNonQuery(
ConnectionString,
CommandType.StoredProcedure,
"SetOrganizationDefaultExchangeMailboxPlan",
new SqlParameter("@ItemID", itemId),
new SqlParameter("@MailboxPlanId", mailboxPlanId)
);
}
public static void SetExchangeAccountMailboxPlan(int accountId, int mailboxPlanId)
{
SqlHelper.ExecuteNonQuery(
ConnectionString,
CommandType.StoredProcedure,
"SetExchangeAccountMailboxplan",
new SqlParameter("@AccountID", accountId),
new SqlParameter("@MailboxPlanId", (mailboxPlanId == 0) ? (object)DBNull.Value : (object)mailboxPlanId)
);
}
#endregion
#region Organizations
public static void DeleteOrganizationUser(int itemId)

View file

@ -120,9 +120,6 @@ namespace WebsitePanel.EnterpriseServer
org.Id = 1;
org.OrganizationId = "fabrikam";
org.Name = "Fabrikam Inc";
org.IssueWarningKB = 150000;
org.ProhibitSendKB = 170000;
org.ProhibitSendReceiveKB = 190000;
org.KeepDeletedItemsDays = 14;
return org;
}
@ -167,7 +164,7 @@ namespace WebsitePanel.EnterpriseServer
DataProvider.GetExchangeOrganizationStatistics(itemId));
// disk space
stats.UsedDiskSpace = org.DiskSpace;
//stats.UsedDiskSpace = org.DiskSpace;
// allocated quotas
PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
@ -297,10 +294,6 @@ namespace WebsitePanel.EnterpriseServer
ExchangeServer mailboxRole = GetExchangeServer(serviceId, org.ServiceId);
bool authDomainCreated = false;
int itemId = 0;
bool organizationExtended = false;
@ -308,9 +301,14 @@ namespace WebsitePanel.EnterpriseServer
List<OrganizationDomainName> domains = null;
try
{
PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
// 1) Create Organization (Mailbox)
// ================================
Organization exchangeOrganization = mailboxRole.ExtendToExchangeOrganization(org.OrganizationId, org.SecurityGroup);
Organization exchangeOrganization = mailboxRole.ExtendToExchangeOrganization(org.OrganizationId,
org.SecurityGroup,
Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_ISCONSUMER].QuotaAllocatedValue));
organizationExtended = true;
exchangeOrganization.OrganizationId = org.OrganizationId;
@ -386,17 +384,17 @@ namespace WebsitePanel.EnterpriseServer
break;
}
PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
// organization limits
org.IssueWarningKB = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue;
if (org.IssueWarningKB > 0)
org.IssueWarningKB *= Convert.ToInt32(1024*0.9); //90%
org.ProhibitSendKB = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue;
if (org.ProhibitSendKB > 0)
org.ProhibitSendKB *= 1024; //100%
org.ProhibitSendReceiveKB = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue;
if (org.ProhibitSendReceiveKB > 0)
org.ProhibitSendReceiveKB *= 1024; //100%
// 4) Add the address book policy (Exchange 2010 SP2
//
// ==========================================
Organization OrgTmp = mailboxRole.CreateOrganizationAddressBookPolicy(org.OrganizationId,
org.GlobalAddressList,
org.AddressList,
org.RoomsAddressList,
org.OfflineAddressBook);
org.AddressBookPolicy = OrgTmp.AddressBookPolicy;
StringDictionary settings = ServerController.GetServiceSettings(serviceId);
org.KeepDeletedItemsDays = Utils.ParseInt(settings["KeepDeletedItemsDays"], 14);
@ -408,7 +406,7 @@ namespace WebsitePanel.EnterpriseServer
// rollback organization creation
if (organizationExtended)
mailboxRole.DeleteOrganization(org.OrganizationId, org.DistinguishedName,
org.GlobalAddressList, org.AddressList, org.RoomsAddressList, org.OfflineAddressBook, org.SecurityGroup);
org.GlobalAddressList, org.AddressList, org.RoomsAddressList, org.OfflineAddressBook, org.SecurityGroup, org.AddressBookPolicy);
// rollback domain
if (authDomainCreated)
@ -506,8 +504,8 @@ namespace WebsitePanel.EnterpriseServer
org.AddressList,
org.RoomsAddressList,
org.OfflineAddressBook,
org.SecurityGroup);
org.SecurityGroup,
org.AddressBookPolicy);
return successful ? 0 : BusinessErrorCodes.ERROR_EXCHANGE_DELETE_SOME_PROBLEMS;
@ -571,9 +569,6 @@ namespace WebsitePanel.EnterpriseServer
return BusinessErrorCodes.ERROR_EXCHANGE_STORAGE_QUOTAS_EXCEED_HOST_VALUES;
// set limits
org.IssueWarningKB = issueWarningKB;
org.ProhibitSendKB = prohibitSendKB;
org.ProhibitSendReceiveKB = prohibitSendReceiveKB;
org.KeepDeletedItemsDays = keepDeletedItemsDays;
// save organization
@ -665,6 +660,39 @@ namespace WebsitePanel.EnterpriseServer
}
}
public static ExchangeMailboxStatistics GetMailboxStatistics(int itemId, int accountId)
{
// place log record
TaskManager.StartTask("EXCHANGE", "GET_MAILBOX_STATS");
TaskManager.ItemId = itemId;
try
{
Organization org = (Organization)PackageController.GetPackageItem(itemId);
if (org == null)
return null;
// get stats
int exchangeServiceId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
// load account
ExchangeAccount account = GetAccount(itemId, accountId);
return exchange.GetMailboxStatistics(account.AccountName);
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
}
public static ExchangeItemStatistics[] GetPublicFoldersStatistics(int itemId)
{
#region Demo Mode
@ -1089,18 +1117,19 @@ namespace WebsitePanel.EnterpriseServer
private static int AddAccount(int itemId, ExchangeAccountType accountType,
string accountName, string displayName, string primaryEmailAddress, bool mailEnabledPublicFolder,
MailboxManagerActions mailboxManagerActions, string samAccountName, string accountPassword)
MailboxManagerActions mailboxManagerActions, string samAccountName, string accountPassword, int mailboxPlanId, string subscriberNumber)
{
return DataProvider.AddExchangeAccount(itemId, (int)accountType,
accountName, displayName, primaryEmailAddress, mailEnabledPublicFolder,
mailboxManagerActions.ToString(), samAccountName, CryptoUtils.Encrypt(accountPassword));
mailboxManagerActions.ToString(), samAccountName, CryptoUtils.Encrypt(accountPassword), mailboxPlanId, subscriberNumber.Trim());
}
private static void UpdateAccount(ExchangeAccount account)
{
DataProvider.UpdateExchangeAccount(account.AccountId, account.AccountName, account.AccountType, account.DisplayName,
account.PrimaryEmailAddress,account.MailEnabledPublicFolder,
account.MailboxManagerActions.ToString(), account.SamAccountName, account.AccountPassword);
account.PrimaryEmailAddress, account.MailEnabledPublicFolder,
account.MailboxManagerActions.ToString(), account.SamAccountName, account.AccountPassword, account.MailboxPlanId,
(string.IsNullOrEmpty(account.SubscriberNumber) ? null : account.SubscriberNumber.Trim()));
}
private static void DeleteAccount(int itemId, int accountId)
@ -1114,28 +1143,40 @@ namespace WebsitePanel.EnterpriseServer
private static string BuildAccountName(string orgId, string name)
{
int maxLen = 19 - orgId.Length;
// try to choose name
int i = 0;
while (true)
string accountName = name = name.Replace(" ", "");
string CounterStr = "00000";
int counter = 0;
bool bFound = false;
do
{
string num = i > 0 ? i.ToString() : "";
int len = maxLen - num.Length;
accountName = genSamLogin(name, CounterStr);
if (name.Length > len)
name = name.Substring(0, len);
if (!AccountExists(accountName)) bFound = true;
string accountName = name + num + "_" + orgId;
CounterStr = counter.ToString("d5");
counter++;
}
while (!bFound);
// check if already exists
if (!AccountExists(accountName))
return accountName;
}
i++;
private static string genSamLogin(string login, string strCounter)
{
int maxLogin = 20;
int fullLen = login.Length + strCounter.Length;
if (fullLen <= maxLogin)
return login + strCounter;
else
{
if (login.Length - (fullLen - maxLogin) > 0)
return login.Substring(0, login.Length - (fullLen - maxLogin)) + strCounter;
else return strCounter; // ????
}
}
#endregion
#region Account Email Addresses
@ -1378,7 +1419,7 @@ namespace WebsitePanel.EnterpriseServer
private static void UpdateExchangeAccount(int accountId, string accountName, ExchangeAccountType accountType,
string displayName, string primaryEmailAddress, bool mailEnabledPublicFolder,
string mailboxManagerActions, string samAccountName, string accountPassword)
string mailboxManagerActions, string samAccountName, string accountPassword, int mailboxPlanId, string subscriberNumber)
{
DataProvider.UpdateExchangeAccount(accountId,
accountName,
@ -1388,12 +1429,14 @@ namespace WebsitePanel.EnterpriseServer
mailEnabledPublicFolder,
mailboxManagerActions,
samAccountName,
CryptoUtils.Encrypt(accountPassword));
CryptoUtils.Encrypt(accountPassword),
mailboxPlanId,
(string.IsNullOrEmpty(subscriberNumber) ? null : subscriberNumber.Trim()));
}
public static int CreateMailbox(int itemId, int accountId, ExchangeAccountType accountType, string accountName,
string displayName, string name, string domain, string password, bool sendSetupInstructions, string setupInstructionMailAddress)
string displayName, string name, string domain, string password, bool sendSetupInstructions, string setupInstructionMailAddress, int mailboxPlanId, string subscriberNumber)
{
// check account
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
@ -1401,9 +1444,10 @@ namespace WebsitePanel.EnterpriseServer
// check mailbox quota
OrganizationStatistics orgStats = GetOrganizationStatistics(itemId);
if ((orgStats.AllocatedMailboxes > -1 ) && ( orgStats.CreatedMailboxes >= orgStats.AllocatedMailboxes))
if ((orgStats.AllocatedMailboxes > -1) && (orgStats.CreatedMailboxes >= orgStats.AllocatedMailboxes))
return BusinessErrorCodes.ERROR_EXCHANGE_MAILBOXES_QUOTA_LIMIT;
// place log record
TaskManager.StartTask("EXCHANGE", "CREATE_MAILBOX");
TaskManager.ItemId = itemId;
@ -1411,6 +1455,12 @@ namespace WebsitePanel.EnterpriseServer
Organization org = null;
try
{
accountName = accountName.Trim();
displayName = displayName.Trim();
name = name.Trim();
domain = domain.Trim();
// load organization
org = GetOrganization(itemId);
if (org == null)
@ -1425,13 +1475,18 @@ namespace WebsitePanel.EnterpriseServer
//Create AD user if needed
if (accountId == 0)
{
accountId = OrganizationController.CreateUser(org.Id, displayName, name, domain, password, enabled, false, string.Empty, out accountName);
accountId = OrganizationController.CreateUser(org.Id, displayName, name, domain, password, subscriberNumber, enabled, false, string.Empty, out accountName);
if (accountId > 0)
userCreated = true;
}
if (accountId < 0)
return accountId;
// get mailbox settings
Organizations orgProxy = OrganizationController.GetOrganizationProxy(org.ServiceId);
OrganizationUser retUser = orgProxy.GetUserGeneralSettings(accountName, org.OrganizationId);
int exchangeServiceId = PackageController.GetPackageServiceId(org.PackageId, ResourceGroups.Exchange);
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
@ -1449,23 +1504,47 @@ namespace WebsitePanel.EnterpriseServer
int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
if (packageCheck < 0) return packageCheck;
//verify if the mailbox fits in the storage quota
// load package context
PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
int maxDiskSpace = -1;
int quotaUsed = 0;
if (cntx.Quotas.ContainsKey(Quotas.EXCHANGE2007_DISKSPACE)
&& cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue > 0)
{
maxDiskSpace = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue;
quotaUsed = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaUsedValue;
}
string samAccount = exchange.CreateMailEnableUser(email, org.OrganizationId, org.DistinguishedName, accountType, org.Database,
ExchangeMailboxPlan plan = GetExchangeMailboxPlan(itemId, mailboxPlanId);
if (maxDiskSpace != -1)
{
if ((quotaUsed + plan.MailboxSizeMB) > (maxDiskSpace))
return BusinessErrorCodes.ERROR_EXCHANGE_STORAGE_QUOTAS_EXCEED_HOST_VALUES;
}
//GetServiceSettings
StringDictionary primSettings = ServerController.GetServiceSettings(exchangeServiceId);
string samAccount = exchange.CreateMailEnableUser(email, org.OrganizationId, org.DistinguishedName, accountType, primSettings["mailboxdatabase"],
org.OfflineAddressBook,
accountName,
QuotaEnabled(cntx, Quotas.EXCHANGE2007_POP3ENABLED),
QuotaEnabled(cntx, Quotas.EXCHANGE2007_IMAPENABLED),
QuotaEnabled(cntx, Quotas.EXCHANGE2007_OWAENABLED),
QuotaEnabled(cntx, Quotas.EXCHANGE2007_MAPIENABLED),
QuotaEnabled(cntx, Quotas.EXCHANGE2007_ACTIVESYNCENABLED),
org.IssueWarningKB,
org.ProhibitSendKB,
org.ProhibitSendReceiveKB,
org.KeepDeletedItemsDays);
org.AddressBookPolicy,
retUser.SamAccountName,
plan.EnablePOP,
plan.EnableIMAP,
plan.EnableOWA,
plan.EnableMAPI,
plan.EnableActiveSync,
(int)Math.Round((double)((plan.IssueWarningPct * plan.MailboxSizeMB * 1024) / 100)),
(int)Math.Round((double)((plan.ProhibitSendPct * plan.MailboxSizeMB * 1024) / 100)),
(int)Math.Round((double)((plan.ProhibitSendReceivePct * plan.MailboxSizeMB * 1024) / 100)),
plan.KeepDeletedItemsDays,
plan.MaxRecipients,
plan.MaxSendMessageSizeKB,
plan.MaxReceiveMessageSizeKB,
plan.HideFromAddressBook,
Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_ISCONSUMER].QuotaAllocatedValue));
MailboxManagerActions pmmActions = MailboxManagerActions.GeneralSettings
| MailboxManagerActions.MailFlowSettings
@ -1473,7 +1552,7 @@ namespace WebsitePanel.EnterpriseServer
| MailboxManagerActions.EmailAddresses;
UpdateExchangeAccount(accountId, accountName, accountType, displayName, email, false, pmmActions.ToString(), samAccount, password);
UpdateExchangeAccount(accountId, accountName, accountType, displayName, email, false, pmmActions.ToString(), samAccount, password, mailboxPlanId, subscriberNumber);
@ -1694,12 +1773,7 @@ namespace WebsitePanel.EnterpriseServer
}
}
public static int SetMailboxGeneralSettings(int itemId, int accountId, string displayName,
string password, bool hideAddressBook, bool disabled, string firstName, string initials,
string lastName, string address, string city, string state, string zip, string country,
string jobTitle, string company, string department, string office, string managerAccountName,
string businessPhone, string fax, string homePhone, string mobilePhone, string pager,
string webPage, string notes)
public static int SetMailboxGeneralSettings(int itemId, int accountId, bool hideAddressBook, bool disabled)
{
// check account
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
@ -1727,40 +1801,16 @@ namespace WebsitePanel.EnterpriseServer
int exchangeServiceId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
if (Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_ISCONSUMER].QuotaAllocatedValue))
hideAddressBook = true;
exchange.SetMailboxGeneralSettings(
account.AccountName,
displayName,
password,
hideAddressBook,
disabled,
firstName,
initials,
lastName,
address,
city,
state,
zip,
country,
jobTitle,
company,
department,
office,
managerAccountName,
businessPhone,
fax,
homePhone,
mobilePhone,
pager,
webPage,
notes);
// update account
account.DisplayName = displayName;
if (!String.IsNullOrEmpty(password))
account.AccountPassword = CryptoUtils.Encrypt(password);
UpdateAccount(account);
disabled);
return 0;
}
@ -2005,7 +2055,6 @@ namespace WebsitePanel.EnterpriseServer
public static int SetMailboxMailFlowSettings(int itemId, int accountId,
bool enableForwarding, string forwardingAccountName, bool forwardToBoth,
string[] sendOnBehalfAccounts, string[] acceptAccounts, string[] rejectAccounts,
int maxRecipients, int maxSendMessageSizeKB, int maxReceiveMessageSizeKB,
bool requireSenderAuthentication)
{
// check account
@ -2041,9 +2090,6 @@ namespace WebsitePanel.EnterpriseServer
sendOnBehalfAccounts,
acceptAccounts,
rejectAccounts,
maxRecipients,
maxSendMessageSizeKB,
maxReceiveMessageSizeKB,
requireSenderAuthentication);
return 0;
@ -2058,6 +2104,7 @@ namespace WebsitePanel.EnterpriseServer
}
}
public static ExchangeMailbox GetMailboxAdvancedSettings(int itemId, int accountId)
{
#region Demo Mode
@ -2098,75 +2145,6 @@ namespace WebsitePanel.EnterpriseServer
}
}
public static int SetMailboxAdvancedSettings(int itemId, int accountId, bool enablePOP,
bool enableIMAP, bool enableOWA, bool enableMAPI, bool enableActiveSync,
int issueWarningKB, int prohibitSendKB, int prohibitSendReceiveKB, int keepDeletedItemsDays)
{
// check account
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0) return accountCheck;
// place log record
TaskManager.StartTask("EXCHANGE", "UPDATE_MAILBOX_ADVANCED");
TaskManager.ItemId = itemId;
try
{
// load organization
Organization org = GetOrganization(itemId);
if (org == null)
return -1;
// check package
int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
if (packageCheck < 0) return packageCheck;
// load account
ExchangeAccount account = GetAccount(itemId, accountId);
// load package context
PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
int maxDiskSpace = 0;
if (cntx.Quotas.ContainsKey(Quotas.EXCHANGE2007_DISKSPACE)
&& cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue > 0)
maxDiskSpace = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue * 1024;
if ((maxDiskSpace > 0 &&
(issueWarningKB > maxDiskSpace
|| prohibitSendKB > maxDiskSpace
|| prohibitSendReceiveKB > maxDiskSpace || issueWarningKB == -1 || prohibitSendKB == -1 || prohibitSendReceiveKB == -1)))
return BusinessErrorCodes.ERROR_EXCHANGE_STORAGE_QUOTAS_EXCEED_HOST_VALUES;
// get mailbox settings
int exchangeServiceId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
exchange.SetMailboxAdvancedSettings(
org.OrganizationId,
account.AccountName,
QuotaEnabled(cntx, Quotas.EXCHANGE2007_POP3ALLOWED) && enablePOP,
QuotaEnabled(cntx, Quotas.EXCHANGE2007_IMAPALLOWED) && enableIMAP,
QuotaEnabled(cntx, Quotas.EXCHANGE2007_OWAALLOWED) && enableOWA,
QuotaEnabled(cntx, Quotas.EXCHANGE2007_MAPIALLOWED) && enableMAPI,
QuotaEnabled(cntx, Quotas.EXCHANGE2007_ACTIVESYNCALLOWED) && enableActiveSync,
issueWarningKB,
prohibitSendKB,
prohibitSendReceiveKB,
keepDeletedItemsDays);
return 0;
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
}
public static int SetMailboxManagerSettings(int itemId, int accountId, bool pmmAllowed, MailboxManagerActions action)
{
// check account
@ -2421,6 +2399,224 @@ namespace WebsitePanel.EnterpriseServer
#endregion
#region Mailbox plan
public static int SetExchangeMailboxPlan(int itemId, int accountId, int mailboxPlanId)
{
// check account
int accountCheck = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (accountCheck < 0) return accountCheck;
// place log record
TaskManager.StartTask("EXCHANGE", "SET_MAILBOXPLAN");
TaskManager.ItemId = itemId;
try
{
// load organization
Organization org = GetOrganization(itemId);
if (org == null)
return -1;
// check package
int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
if (packageCheck < 0) return packageCheck;
// load account
ExchangeAccount account = GetAccount(itemId, accountId);
// load package context
PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
int maxDiskSpace = -1;
int quotaUsed = 0;
if (cntx.Quotas.ContainsKey(Quotas.EXCHANGE2007_DISKSPACE)
&& cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue > 0)
{
maxDiskSpace = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue;
quotaUsed = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaUsedValue;
}
ExchangeMailboxPlan plan = GetExchangeMailboxPlan(itemId, mailboxPlanId);
if (maxDiskSpace != -1)
{
if ((quotaUsed + plan.MailboxSizeMB) > (maxDiskSpace))
return BusinessErrorCodes.ERROR_EXCHANGE_STORAGE_QUOTAS_EXCEED_HOST_VALUES;
}
// get mailbox settings
int exchangeServiceId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
exchange.SetMailboxAdvancedSettings(
org.OrganizationId,
account.AccountName,
plan.EnablePOP,
plan.EnableIMAP,
plan.EnableOWA,
plan.EnableMAPI,
plan.EnableActiveSync,
(int)Math.Round((double)((plan.IssueWarningPct * plan.MailboxSizeMB * 1024) / 100)),
(int)Math.Round((double)((plan.ProhibitSendPct * plan.MailboxSizeMB * 1024) / 100)),
(int)Math.Round((double)((plan.ProhibitSendReceivePct * plan.MailboxSizeMB * 1024) / 100)),
plan.KeepDeletedItemsDays,
plan.MaxRecipients,
plan.MaxSendMessageSizeKB,
plan.MaxReceiveMessageSizeKB);
DataProvider.SetExchangeAccountMailboxPlan(accountId, mailboxPlanId);
return 0;
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
}
public static List<ExchangeMailboxPlan> GetExchangeMailboxPlans(int itemId)
{
// place log record
TaskManager.StartTask("EXCHANGE", "GET_EXCHANGE_MAILBOXPLANS");
TaskManager.ItemId = itemId;
try
{
return ObjectUtils.CreateListFromDataReader<ExchangeMailboxPlan>(
DataProvider.GetExchangeMailboxPlans(itemId));
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
}
public static ExchangeMailboxPlan GetExchangeMailboxPlan(int itemID, int mailboxPlanId)
{
// place log record
TaskManager.StartTask("EXCHANGE", "GET_EXCHANGE_MAILBOXPLAN");
TaskManager.ItemId = mailboxPlanId;
try
{
return ObjectUtils.FillObjectFromDataReader<ExchangeMailboxPlan>(
DataProvider.GetExchangeMailboxPlan(mailboxPlanId));
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
}
public static int AddExchangeMailboxPlan(int itemID, ExchangeMailboxPlan mailboxPlan)
{
// place log record
TaskManager.StartTask("EXCHANGE", "ADD_EXCHANGE_MAILBOXPLAN");
TaskManager.ItemId = itemID;
try
{
Organization org = GetOrganization(itemID);
if (org == null)
return -1;
// load package context
PackageContext cntx = PackageController.GetPackageContext(org.PackageId);
mailboxPlan.EnableActiveSync = mailboxPlan.EnableActiveSync & Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_ACTIVESYNCALLOWED].QuotaAllocatedValue);
mailboxPlan.EnableIMAP = mailboxPlan.EnableIMAP & Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_IMAPALLOWED].QuotaAllocatedValue);
mailboxPlan.EnableMAPI = mailboxPlan.EnableMAPI & Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_MAPIALLOWED].QuotaAllocatedValue);
mailboxPlan.EnableOWA = mailboxPlan.EnableOWA & Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_OWAALLOWED].QuotaAllocatedValue);
mailboxPlan.EnablePOP = mailboxPlan.EnablePOP & Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_POP3ALLOWED].QuotaAllocatedValue);
if (mailboxPlan.KeepDeletedItemsDays > cntx.Quotas[Quotas.EXCHANGE2007_KEEPDELETEDITEMSDAYS].QuotaAllocatedValue)
mailboxPlan.KeepDeletedItemsDays = cntx.Quotas[Quotas.EXCHANGE2007_KEEPDELETEDITEMSDAYS].QuotaAllocatedValue;
if (cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue != -1)
if (mailboxPlan.MailboxSizeMB > cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue)
mailboxPlan.MailboxSizeMB = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue;
if (mailboxPlan.MaxReceiveMessageSizeKB > cntx.Quotas[Quotas.EXCHANGE2007_MAXRECEIVEMESSAGESIZEKB].QuotaAllocatedValue)
mailboxPlan.MaxReceiveMessageSizeKB = cntx.Quotas[Quotas.EXCHANGE2007_MAXRECEIVEMESSAGESIZEKB].QuotaAllocatedValue;
if (mailboxPlan.MaxSendMessageSizeKB > cntx.Quotas[Quotas.EXCHANGE2007_MAXSENDMESSAGESIZEKB].QuotaAllocatedValue)
mailboxPlan.MaxSendMessageSizeKB = cntx.Quotas[Quotas.EXCHANGE2007_MAXSENDMESSAGESIZEKB].QuotaAllocatedValue;
if (cntx.Quotas[Quotas.EXCHANGE2007_MAXRECIPIENTS].QuotaAllocatedValue != -1)
if (mailboxPlan.MaxRecipients > cntx.Quotas[Quotas.EXCHANGE2007_MAXRECIPIENTS].QuotaAllocatedValue)
mailboxPlan.MaxRecipients = cntx.Quotas[Quotas.EXCHANGE2007_MAXRECIPIENTS].QuotaAllocatedValue;
if (Convert.ToBoolean(cntx.Quotas[Quotas.EXCHANGE2007_ISCONSUMER].QuotaAllocatedValue)) mailboxPlan.HideFromAddressBook = true;
return DataProvider.AddExchangeMailboxPlan(itemID, mailboxPlan.MailboxPlan, mailboxPlan.EnableActiveSync, mailboxPlan.EnableIMAP, mailboxPlan.EnableMAPI, mailboxPlan.EnableOWA, mailboxPlan.EnablePOP,
mailboxPlan.IsDefault, mailboxPlan.IssueWarningPct, mailboxPlan.KeepDeletedItemsDays, mailboxPlan.MailboxSizeMB, mailboxPlan.MaxReceiveMessageSizeKB, mailboxPlan.MaxRecipients,
mailboxPlan.MaxSendMessageSizeKB, mailboxPlan.ProhibitSendPct, mailboxPlan.ProhibitSendReceivePct, mailboxPlan.HideFromAddressBook);
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
}
public static int DeleteExchangeMailboxPlan(int itemID, int mailboxPlanId)
{
TaskManager.StartTask("EXCHANGE", "DELETE_EXCHANGE_MAILBOXPLAN");
TaskManager.ItemId = itemID;
try
{
DataProvider.DeleteExchangeMailboxPlan(mailboxPlanId);
return 0;
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
}
public static void SetOrganizationDefaultExchangeMailboxPlan(int itemId, int mailboxPlanId)
{
TaskManager.StartTask("EXCHANGE", "SET_EXCHANGE_MAILBOXPLAN");
TaskManager.ItemId = itemId;
try
{
DataProvider.SetOrganizationDefaultExchangeMailboxPlan(itemId, mailboxPlanId);
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
}
#endregion
#region Contacts
public static int CreateContact(int itemId, string displayName, string email)
{
@ -2444,6 +2640,10 @@ namespace WebsitePanel.EnterpriseServer
try
{
displayName = displayName.Trim();
email = email.Trim();
// load organization
Organization org = GetOrganization(itemId);
@ -2477,10 +2677,12 @@ namespace WebsitePanel.EnterpriseServer
accountName,
email, org.DefaultDomain);
ExchangeContact contact = exchange.GetContactGeneralSettings(accountName);
// add meta-item
int accountId = AddAccount(itemId, ExchangeAccountType.Contact, accountName,
displayName, email, false,
0, "", null);
0, contact.SAMAccountName, null, 0, null);
return accountId;
}
@ -2603,6 +2805,11 @@ namespace WebsitePanel.EnterpriseServer
try
{
displayName = displayName.Trim();
emailAddress = emailAddress.Trim();
firstName = firstName.Trim();
lastName = lastName.Trim();
// load organization
Organization org = GetOrganization(itemId);
if (org == null)
@ -2770,6 +2977,10 @@ namespace WebsitePanel.EnterpriseServer
try
{
displayName = displayName.Trim();
name = name.Trim();
domain = domain.Trim();
// e-mail
string email = name + "@" + domain;
@ -2800,18 +3011,25 @@ namespace WebsitePanel.EnterpriseServer
}
OrganizationUser manager = OrganizationController.GetAccount(itemId, managerId);
List<string> addressLists = new List<string>();
addressLists.Add(org.GlobalAddressList);
addressLists.Add(org.AddressList);
exchange.CreateDistributionList(
org.OrganizationId,
org.DistinguishedName,
displayName,
accountName,
name,
domain, manager.AccountName);
domain, manager.AccountName, addressLists.ToArray());
ExchangeDistributionList dl = exchange.GetDistributionListGeneralSettings(accountName);
// add meta-item
int accountId = AddAccount(itemId, ExchangeAccountType.DistributionList, accountName,
int accountId = AddAccount(itemId, ExchangeAccountType.DistributionList, email,
displayName, email, false,
0, "", null);
0, dl.SAMAccountName, null, 0, null);
// register email address
AddAccountEmailAddress(accountId, email);
@ -2933,6 +3151,8 @@ namespace WebsitePanel.EnterpriseServer
try
{
displayName = displayName.Trim();
// load organization
Organization org = GetOrganization(itemId);
if (org == null)
@ -2949,13 +3169,18 @@ namespace WebsitePanel.EnterpriseServer
int exchangeServiceId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
List<string> addressLists = new List<string>();
addressLists.Add(org.GlobalAddressList);
addressLists.Add(org.AddressList);
exchange.SetDistributionListGeneralSettings(
account.AccountName,
displayName,
hideAddressBook,
managerAccount,
memberAccounts,
notes);
notes,
addressLists.ToArray());
// update account
account.DisplayName = displayName;
@ -3043,10 +3268,16 @@ namespace WebsitePanel.EnterpriseServer
int exchangeServiceId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
List<string> addressLists = new List<string>();
addressLists.Add(org.GlobalAddressList);
addressLists.Add(org.AddressList);
exchange.SetDistributionListMailFlowSettings(account.AccountName,
acceptAccounts,
rejectAccounts,
requireSenderAuthentication);
requireSenderAuthentication,
addressLists.ToArray());
return 0;
}
@ -3115,9 +3346,13 @@ namespace WebsitePanel.EnterpriseServer
int exchangeServiceId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
List<string> addressLists = new List<string>();
addressLists.Add(org.GlobalAddressList);
addressLists.Add(org.AddressList);
exchange.SetDistributionListEmailAddresses(
account.AccountName,
GetAccountSimpleEmailAddresses(itemId, accountId));
GetAccountSimpleEmailAddresses(itemId, accountId), addressLists.ToArray());
return 0;
}
@ -3159,9 +3394,14 @@ namespace WebsitePanel.EnterpriseServer
int exchangeServiceId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
List<string> addressLists = new List<string>();
addressLists.Add(org.GlobalAddressList);
addressLists.Add(org.AddressList);
exchange.SetDistributionListPrimaryEmailAddress(
account.AccountName,
emailAddress);
emailAddress,
addressLists.ToArray());
// save account
UpdateAccount(account);
@ -3213,9 +3453,13 @@ namespace WebsitePanel.EnterpriseServer
int exchangeServiceId = GetExchangeServiceID(org.PackageId);
ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId);
List<string> addressLists = new List<string>();
addressLists.Add(org.GlobalAddressList);
addressLists.Add(org.AddressList);
exchange.SetDistributionListEmailAddresses(
account.AccountName,
GetAccountSimpleEmailAddresses(itemId, accountId));
GetAccountSimpleEmailAddresses(itemId, accountId), addressLists.ToArray());
return 0;
}
@ -3273,8 +3517,12 @@ namespace WebsitePanel.EnterpriseServer
try
{
List<string> addressLists = new List<string>();
addressLists.Add(org.GlobalAddressList);
addressLists.Add(org.AddressList);
exchange.SetDistributionListPermissions(org.OrganizationId, account.AccountName, sendAsAccounts,
sendOnBehalfAccounts);
sendOnBehalfAccounts, addressLists.ToArray());
}
catch(Exception ex)
{
@ -3422,7 +3670,7 @@ namespace WebsitePanel.EnterpriseServer
// add meta-item
int accountId = AddAccount(itemId, ExchangeAccountType.PublicFolder, accountName,
folderPath, email, mailEnabled,
0, "", null);
0, "", null, 0 , null);
// register email address
if(mailEnabled)

View file

@ -633,7 +633,7 @@ namespace WebsitePanel.EnterpriseServer
}
private static Organizations GetOrganizationProxy(int serviceId)
public static Organizations GetOrganizationProxy(int serviceId)
{
Organizations ws = new Organizations();
ServiceProviderProxy.Init(ws, serviceId);
@ -710,9 +710,6 @@ namespace WebsitePanel.EnterpriseServer
org.Id = 1;
org.OrganizationId = "fabrikam";
org.Name = "Fabrikam Inc";
org.IssueWarningKB = 150000;
org.ProhibitSendKB = 170000;
org.ProhibitSendReceiveKB = 190000;
org.KeepDeletedItemsDays = 14;
org.GlobalAddressList = "FabrikamGAL";
return org;
@ -980,8 +977,17 @@ namespace WebsitePanel.EnterpriseServer
OrganizationUsersPaged result = new OrganizationUsersPaged();
result.RecordsCount = (int)ds.Tables[0].Rows[0][0];
List<OrganizationUser> Tmpaccounts = new List<OrganizationUser>();
ObjectUtils.FillCollectionFromDataView(Tmpaccounts, ds.Tables[1].DefaultView);
result.PageUsers = Tmpaccounts.ToArray();
List<OrganizationUser> accounts = new List<OrganizationUser>();
ObjectUtils.FillCollectionFromDataView(accounts, ds.Tables[1].DefaultView);
foreach (OrganizationUser user in Tmpaccounts.ToArray())
{
accounts.Add(GetUserGeneralSettings(itemId, user.AccountId));
}
result.PageUsers = accounts.ToArray();
return result;
}
@ -994,21 +1000,22 @@ namespace WebsitePanel.EnterpriseServer
}
private static int AddOrganizationUser(int itemId, string accountName, string displayName, string email, string accountPassword)
private static int AddOrganizationUser(int itemId, string accountName, string displayName, string email, string sAMAccountName, string accountPassword, string subscriberNumber)
{
return DataProvider.AddExchangeAccount(itemId, (int)ExchangeAccountType.User, accountName, displayName, email, false, string.Empty,
string.Empty, CryptoUtils.Encrypt(accountPassword));
sAMAccountName, CryptoUtils.Encrypt(accountPassword), 0, subscriberNumber.Trim());
}
public static string GetAccountName(string loginName)
{
string []parts = loginName.Split('@');
return parts != null && parts.Length > 1 ? parts[0] : loginName;
//string []parts = loginName.Split('@');
//return parts != null && parts.Length > 1 ? parts[0] : loginName;
return loginName;
}
public static int CreateUser(int itemId, string displayName, string name, string domain, string password, bool enabled, bool sendNotification, string to, out string accountName)
public static int CreateUser(int itemId, string displayName, string name, string domain, string password, string subscriberNumber, bool enabled, bool sendNotification, string to, out string accountName)
{
if (string.IsNullOrEmpty(displayName))
throw new ArgumentNullException("displayName");
@ -1032,6 +1039,18 @@ namespace WebsitePanel.EnterpriseServer
// place log record
TaskManager.StartTask("ORGANIZATION", "CREATE_USER");
TaskManager.ItemId = itemId;
TaskManager.Write("Organization ID :" + itemId);
TaskManager.Write("name :" + name);
TaskManager.Write("domain :" + domain);
TaskManager.Write("subscriberNumber :" + subscriberNumber);
int userId = -1;
try
{
displayName = displayName.Trim();
name = name.Trim();
domain = domain.Trim();
// e-mail
string email = name + "@" + domain;
@ -1056,10 +1075,18 @@ namespace WebsitePanel.EnterpriseServer
Organizations orgProxy = GetOrganizationProxy(org.ServiceId);
string upn = string.Format("{0}@{1}", name, domain);
accountName = BuildAccountName(org.OrganizationId, name);
orgProxy.CreateUser(org.OrganizationId, accountName, displayName, upn, password, enabled);
string sAMAccountName = BuildAccountName(org.OrganizationId, name);
int userId = AddOrganizationUser(itemId, accountName, displayName, email, password);
TaskManager.Write("accountName :" + sAMAccountName);
TaskManager.Write("upn :" + upn);
if (orgProxy.CreateUser(org.OrganizationId, sAMAccountName, displayName, upn, password, enabled) == 0)
{
OrganizationUser retUser = orgProxy.GetUserGeneralSettings(upn, org.OrganizationId);
TaskManager.Write("sAMAccountName :" + retUser.DomainUserName);
userId = AddOrganizationUser(itemId, upn, displayName, email, retUser.DomainUserName, password, subscriberNumber);
accountName = upn;
// register email address
AddAccountEmailAddress(userId, email);
@ -1068,11 +1095,107 @@ namespace WebsitePanel.EnterpriseServer
{
SendSummaryLetter(org.Id, userId, true, to, "");
}
}
else
{
TaskManager.WriteError("Failed to create user");
}
}
catch (Exception ex)
{
TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
return userId;
}
public static int ImportUser(int itemId, string accountName, string displayName, string name, string domain, string password, string subscriberNumber)
{
if (string.IsNullOrEmpty(accountName))
throw new ArgumentNullException("accountName");
if (string.IsNullOrEmpty(displayName))
throw new ArgumentNullException("displayName");
if (string.IsNullOrEmpty(name))
throw new ArgumentNullException("name");
if (string.IsNullOrEmpty(domain))
throw new ArgumentNullException("domain");
if (string.IsNullOrEmpty(password))
throw new ArgumentNullException("password");
// place log record
TaskManager.StartTask("ORGANIZATION", "IMPORT_USER");
TaskManager.ItemId = itemId;
TaskManager.Write("Organization ID :" + itemId);
TaskManager.Write("account :" + accountName);
TaskManager.Write("name :" + name);
TaskManager.Write("domain :" + domain);
int userId = -1;
try
{
accountName = accountName.Trim();
displayName = displayName.Trim();
name = name.Trim();
domain = domain.Trim();
// e-mail
string email = name + "@" + domain;
if (EmailAddressExists(email))
return BusinessErrorCodes.ERROR_EXCHANGE_EMAIL_EXISTS;
// load organization
Organization org = GetOrganization(itemId);
if (org == null)
return -1;
// check package
int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
if (packageCheck < 0) return packageCheck;
int errorCode;
if (!CheckUserQuota(org.Id, out errorCode))
return errorCode;
Organizations orgProxy = GetOrganizationProxy(org.ServiceId);
string upn = string.Format("{0}@{1}", name, domain);
TaskManager.Write("upn :" + upn);
OrganizationUser retUser = orgProxy.GetUserGeneralSettings(accountName, org.OrganizationId);
TaskManager.Write("sAMAccountName :" + retUser.DomainUserName);
userId = AddOrganizationUser(itemId, accountName, displayName, email, retUser.DomainUserName, password, subscriberNumber);
AddAccountEmailAddress(userId, email);
}
catch (Exception ex)
{
TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
return userId;
}
private static void AddAccountEmailAddress(int accountId, string emailAddress)
{
DataProvider.AddExchangeAccountEmailAddress(accountId, emailAddress);
@ -1080,28 +1203,40 @@ namespace WebsitePanel.EnterpriseServer
private static string BuildAccountName(string orgId, string name)
{
int maxLen = 19 - orgId.Length;
// try to choose name
int i = 0;
while (true)
string accountName = name = name.Replace(" ", "");
string CounterStr = "00000";
int counter = 0;
bool bFound = false;
do
{
string num = i > 0 ? i.ToString() : "";
int len = maxLen - num.Length;
accountName = genSamLogin(name, CounterStr);
if (name.Length > len)
name = name.Substring(0, len);
if (!AccountExists(accountName)) bFound = true;
string accountName = name + num + "_" + orgId;
CounterStr = counter.ToString("d5");
counter++;
}
while (!bFound);
// check if already exists
if (!AccountExists(accountName))
return accountName;
}
i++;
private static string genSamLogin(string login, string strCounter)
{
int maxLogin = 20;
int fullLen = login.Length + strCounter.Length;
if (fullLen <= maxLogin)
return login + strCounter;
else
{
if (login.Length - (fullLen - maxLogin) > 0)
return login.Substring(0, login.Length - (fullLen - maxLogin)) + strCounter;
else return strCounter; // ????
}
}
private static bool AccountExists(string accountName)
{
return DataProvider.ExchangeAccountExists(accountName);
@ -1180,6 +1315,18 @@ namespace WebsitePanel.EnterpriseServer
return account;
}
public static OrganizationUser GetAccountByAccountName(int itemId, string AccountName)
{
OrganizationUser account = ObjectUtils.FillObjectFromDataReader<OrganizationUser>(
DataProvider.GetExchangeAccountByAccountName(itemId, AccountName));
if (account == null)
return null;
return account;
}
private static void DeleteUserFromMetabase(int itemId, int accountId)
{
// try to get organization
@ -1217,11 +1364,16 @@ namespace WebsitePanel.EnterpriseServer
string accountName = GetAccountName(account.AccountName);
OrganizationUser retUser = orgProxy.GeUserGeneralSettings(accountName, org.OrganizationId);
OrganizationUser retUser = orgProxy.GetUserGeneralSettings(accountName, org.OrganizationId);
retUser.AccountId = accountId;
retUser.AccountName = account.AccountName;
retUser.PrimaryEmailAddress = account.PrimaryEmailAddress;
retUser.AccountType = account.AccountType;
retUser.CrmUserId = CRMController.GetCrmUserId(accountId);
retUser.IsOCSUser = DataProvider.CheckOCSUserExists(accountId);
//retUser.IsLyncUser = DataProvider.CheckLyncUserExists(accountId);
retUser.IsBlackBerryUser = BlackBerryController.CheckBlackBerryUserExists(accountId);
retUser.SubscriberNumber = account.SubscriberNumber;
return retUser;
}
@ -1240,7 +1392,7 @@ namespace WebsitePanel.EnterpriseServer
string lastName, string address, string city, string state, string zip, string country,
string jobTitle, string company, string department, string office, string managerAccountName,
string businessPhone, string fax, string homePhone, string mobilePhone, string pager,
string webPage, string notes, string externalEmail)
string webPage, string notes, string externalEmail, string subscriberNumber)
{
// check account
@ -1253,6 +1405,10 @@ namespace WebsitePanel.EnterpriseServer
try
{
displayName = displayName.Trim();
firstName = firstName.Trim();
lastName = lastName.Trim();
// load organization
Organization org = GetOrganization(itemId);
if (org == null)
@ -1303,6 +1459,7 @@ namespace WebsitePanel.EnterpriseServer
// update account
account.DisplayName = displayName;
account.SubscriberNumber = subscriberNumber;
//account.
if (!String.IsNullOrEmpty(password))
@ -1329,7 +1486,8 @@ namespace WebsitePanel.EnterpriseServer
{
DataProvider.UpdateExchangeAccount(account.AccountId, account.AccountName, account.AccountType, account.DisplayName,
account.PrimaryEmailAddress, account.MailEnabledPublicFolder,
account.MailboxManagerActions.ToString(), account.SamAccountName, account.AccountPassword);
account.MailboxManagerActions.ToString(), account.SamAccountName, account.AccountPassword, account.MailboxPlanId,
(string.IsNullOrEmpty(account.SubscriberNumber) ? null : account.SubscriberNumber.Trim()));
}
@ -1377,11 +1535,58 @@ namespace WebsitePanel.EnterpriseServer
}
#endregion
return ObjectUtils.CreateListFromDataReader<OrganizationUser>(
List<OrganizationUser> Tmpaccounts = ObjectUtils.CreateListFromDataReader<OrganizationUser>(
DataProvider.SearchOrganizationAccounts(SecurityContext.User.UserId, itemId,
filterColumn, filterValue, sortColumn, includeMailboxes));
List<OrganizationUser> Accounts = new List<OrganizationUser>();
foreach (OrganizationUser user in Tmpaccounts.ToArray())
{
Accounts.Add(GetUserGeneralSettings(itemId, user.AccountId));
}
return Accounts;
}
public static int GetAccountIdByUserPrincipalName(int itemId, string userPrincipalName)
{
// place log record
TaskManager.StartTask("ORGANIZATION", "GET_ACCOUNT_BYUPN");
TaskManager.ItemId = itemId;
int accounId = -1;
try
{
// load organization
Organization org = GetOrganization(itemId);
if (org == null)
return 0;
// get samaccountName
//Organizations orgProxy = GetOrganizationProxy(org.ServiceId);
//string accountName = orgProxy.GetSamAccountNameByUserPrincipalName(org.OrganizationId, userPrincipalName);
// load account
OrganizationUser account = GetAccountByAccountName(itemId, userPrincipalName);
if (account != null)
accounId = account.AccountId;
return accounId;
}
catch (Exception ex)
{
throw TaskManager.WriteError(ex);
}
finally
{
TaskManager.CompleteTask();
}
}
#endregion
public static List<OrganizationDomainName> GetOrganizationDomains(int itemId)

View file

@ -110,11 +110,12 @@ namespace WebsitePanel.EnterpriseServer
}
[WebMethod]
public ExchangeItemStatistics[] GetPublicFoldersStatistics(int itemId)
public ExchangeMailboxStatistics GetMailboxStatistics(int itemId, int accountId)
{
return ExchangeServerController.GetPublicFoldersStatistics(itemId);
return ExchangeServerController.GetMailboxStatistics(itemId, accountId);
}
[WebMethod]
public int CalculateOrganizationDiskspace(int itemId)
{
@ -209,9 +210,9 @@ namespace WebsitePanel.EnterpriseServer
#region Mailboxes
[WebMethod]
public int CreateMailbox(int itemId, int accountId, ExchangeAccountType accountType, string accountName, string displayName,
string name, string domain, string password, bool sendSetupInstructions, string setupInstructionMailAddress)
string name, string domain, string password, bool sendSetupInstructions, string setupInstructionMailAddress, int mailboxPlanId, string subscriberNumber)
{
return ExchangeServerController.CreateMailbox(itemId, accountId, accountType, accountName, displayName, name, domain, password, sendSetupInstructions, setupInstructionMailAddress);
return ExchangeServerController.CreateMailbox(itemId, accountId, accountType, accountName, displayName, name, domain, password, sendSetupInstructions, setupInstructionMailAddress, mailboxPlanId, subscriberNumber);
}
[WebMethod]
@ -234,19 +235,9 @@ namespace WebsitePanel.EnterpriseServer
}
[WebMethod]
public int SetMailboxGeneralSettings(int itemId, int accountId, string displayName,
string password, bool hideAddressBook, bool disabled, string firstName, string initials,
string lastName, string address, string city, string state, string zip, string country,
string jobTitle, string company, string department, string office, string managerAccountName,
string businessPhone, string fax, string homePhone, string mobilePhone, string pager,
string webPage, string notes)
public int SetMailboxGeneralSettings(int itemId, int accountId, bool hideAddressBook, bool disabled)
{
return ExchangeServerController.SetMailboxGeneralSettings(itemId, accountId, displayName,
password, hideAddressBook, disabled, firstName, initials,
lastName, address, city, state, zip, country,
jobTitle, company, department, office, managerAccountName,
businessPhone, fax, homePhone, mobilePhone, pager,
webPage, notes);
return ExchangeServerController.SetMailboxGeneralSettings(itemId, accountId, hideAddressBook, disabled);
}
[WebMethod]
@ -283,30 +274,19 @@ namespace WebsitePanel.EnterpriseServer
public int SetMailboxMailFlowSettings(int itemId, int accountId,
bool enableForwarding, string forwardingAccountName, bool forwardToBoth,
string[] sendOnBehalfAccounts, string[] acceptAccounts, string[] rejectAccounts,
int maxRecipients, int maxSendMessageSizeKB, int maxReceiveMessageSizeKB,
bool requireSenderAuthentication)
{
return ExchangeServerController.SetMailboxMailFlowSettings(itemId, accountId,
enableForwarding, forwardingAccountName, forwardToBoth,
sendOnBehalfAccounts, acceptAccounts, rejectAccounts,
maxRecipients, maxSendMessageSizeKB, maxReceiveMessageSizeKB,
requireSenderAuthentication);
}
[WebMethod]
public ExchangeMailbox GetMailboxAdvancedSettings(int itemId, int accountId)
{
return ExchangeServerController.GetMailboxAdvancedSettings(itemId, accountId);
}
[WebMethod]
public int SetMailboxAdvancedSettings(int itemId, int accountId, bool enablePOP,
bool enableIMAP, bool enableOWA, bool enableMAPI, bool enableActiveSync,
int issueWarningKB, int prohibitSendKB, int prohibitSendReceiveKB, int keepDeletedItemsDays)
public int SetExchangeMailboxPlan(int itemId, int accountId, int mailboxPlanId)
{
return ExchangeServerController.SetMailboxAdvancedSettings(itemId, accountId, enablePOP,
enableIMAP, enableOWA, enableMAPI, enableActiveSync,
issueWarningKB, prohibitSendKB, prohibitSendReceiveKB, keepDeletedItemsDays);
return ExchangeServerController.SetExchangeMailboxPlan(itemId, accountId, mailboxPlanId);
}
[WebMethod]
@ -473,6 +453,74 @@ namespace WebsitePanel.EnterpriseServer
#endregion
#region MobileDevice
[WebMethod]
public ExchangeMobileDevice[] GetMobileDevices(int itemId, int accountId)
{
return ExchangeServerController.GetMobileDevices(itemId, accountId);
}
[WebMethod]
public ExchangeMobileDevice GetMobileDevice(int itemId, string deviceId)
{
return ExchangeServerController.GetMobileDevice(itemId, deviceId);
}
[WebMethod]
public void WipeDataFromDevice(int itemId, string deviceId)
{
ExchangeServerController.WipeDataFromDevice(itemId, deviceId);
}
[WebMethod]
public void CancelRemoteWipeRequest(int itemId, string deviceId)
{
ExchangeServerController.CancelRemoteWipeRequest(itemId, deviceId);
}
[WebMethod]
public void RemoveDevice(int itemId, string deviceId)
{
ExchangeServerController.RemoveDevice(itemId, deviceId);
}
#endregion
#region MailboxPlans
[WebMethod]
public List<ExchangeMailboxPlan> GetExchangeMailboxPlans(int itemId)
{
return ExchangeServerController.GetExchangeMailboxPlans(itemId);
}
[WebMethod]
public ExchangeMailboxPlan GetExchangeMailboxPlan(int itemId, int mailboxPlanId)
{
return ExchangeServerController.GetExchangeMailboxPlan(itemId, mailboxPlanId);
}
[WebMethod]
public int AddExchangeMailboxPlan(int itemId, ExchangeMailboxPlan mailboxPlan)
{
return ExchangeServerController.AddExchangeMailboxPlan(itemId, mailboxPlan);
}
[WebMethod]
public int DeleteExchangeMailboxPlan(int itemId, int mailboxPlanId)
{
return ExchangeServerController.DeleteExchangeMailboxPlan(itemId, mailboxPlanId);
}
[WebMethod]
public void SetOrganizationDefaultExchangeMailboxPlan(int itemId, int mailboxPlanId)
{
ExchangeServerController.SetOrganizationDefaultExchangeMailboxPlan(itemId, mailboxPlanId);
}
#endregion
#region Public Folders
[WebMethod]
public int CreatePublicFolder(int itemId, string parentFolder, string folderName,
@ -560,39 +608,7 @@ namespace WebsitePanel.EnterpriseServer
}
#endregion
#region MobileDevice
[WebMethod]
public ExchangeMobileDevice[] GetMobileDevices(int itemId, int accountId)
{
return ExchangeServerController.GetMobileDevices(itemId, accountId);
}
[WebMethod]
public ExchangeMobileDevice GetMobileDevice(int itemId, string deviceId)
{
return ExchangeServerController.GetMobileDevice(itemId, deviceId);
}
[WebMethod]
public void WipeDataFromDevice(int itemId, string deviceId)
{
ExchangeServerController.WipeDataFromDevice(itemId, deviceId);
}
[WebMethod]
public void CancelRemoteWipeRequest(int itemId, string deviceId)
{
ExchangeServerController.CancelRemoteWipeRequest(itemId, deviceId);
}
[WebMethod]
public void RemoveDevice(int itemId, string deviceId)
{
ExchangeServerController.RemoveDevice(itemId, deviceId);
}
#endregion
}
}

View file

@ -1,4 +1,4 @@
// Copyright (c) 2012, Outercurve Foundation.
// Copyright (c) 2011, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
@ -97,6 +97,13 @@ namespace WebsitePanel.EnterpriseServer
return OrganizationController.GetOrganization(itemId);
}
[WebMethod]
public int GetAccountIdByUserPrincipalName(int itemId, string userPrincipalName)
{
return OrganizationController.GetAccountIdByUserPrincipalName(itemId, userPrincipalName);
}
#endregion
@ -132,12 +139,19 @@ namespace WebsitePanel.EnterpriseServer
#region Users
[WebMethod]
public int CreateUser(int itemId, string displayName, string name, string domain, string password, bool sendNotification, string to)
public int CreateUser(int itemId, string displayName, string name, string domain, string password, string subscriberNumber, bool sendNotification, string to)
{
string accountName;
return OrganizationController.CreateUser(itemId, displayName, name, domain, password, true, sendNotification, to, out accountName);
return OrganizationController.CreateUser(itemId, displayName, name, domain, password, subscriberNumber, true, sendNotification, to, out accountName);
}
[WebMethod]
public int ImportUser(int itemId, string accountName, string displayName, string name, string domain, string password, string subscriberNumber)
{
return OrganizationController.ImportUser(itemId, accountName, displayName, name, domain, password, subscriberNumber);
}
[WebMethod]
public OrganizationUsersPaged GetOrganizationUsersPaged(int itemId, string filterColumn, string filterValue, string sortColumn,
int startRow, int maximumRows)
@ -157,14 +171,14 @@ namespace WebsitePanel.EnterpriseServer
string lastName, string address, string city, string state, string zip, string country,
string jobTitle, string company, string department, string office, string managerAccountName,
string businessPhone, string fax, string homePhone, string mobilePhone, string pager,
string webPage, string notes, string externalEmail)
string webPage, string notes, string externalEmail, string subscriberNumber)
{
return OrganizationController.SetUserGeneralSettings(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);
webPage, notes, externalEmail, subscriberNumber);
}

View file

@ -1,4 +1,4 @@
// Copyright (c) 2012, Outercurve Foundation.
// Copyright (c) 2011, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
@ -150,12 +150,25 @@ namespace WebsitePanel.Providers.HostedSolution
}
}
public static void SetADObjectPropertyValue(DirectoryEntry oDE, string name, object value)
public static void SetADObjectPropertyValue(DirectoryEntry oDE, string name, string value)
{
PropertyValueCollection collection = oDE.Properties[name];
collection.Value = value;
}
public static void SetADObjectPropertyValue(DirectoryEntry oDE, string name, Guid value)
{
PropertyValueCollection collection = oDE.Properties[name];
collection.Value = value.ToByteArray();
}
public static void ClearADObjectPropertyValue(DirectoryEntry oDE, string name)
{
PropertyValueCollection collection = oDE.Properties[name];
collection.Clear();
}
public static object GetADObjectProperty(DirectoryEntry entry, string name)
{
return entry.Properties.Contains(name) ? entry.Properties[name][0] : null;
@ -254,11 +267,20 @@ namespace WebsitePanel.Providers.HostedSolution
return ret;
}
public static string CreateUser(string path, string user, string displayName, string password, bool enabled)
{
return CreateUser(path, "", user, displayName, password, enabled);
}
public static string CreateUser(string path, string upn, string user, string displayName, string password, bool enabled)
{
DirectoryEntry currentADObject = new DirectoryEntry(path);
DirectoryEntry newUserObject = currentADObject.Children.Add("CN=" + user, "User");
string cn = string.Empty;
if (string.IsNullOrEmpty(upn)) cn = user; else cn = upn;
DirectoryEntry newUserObject = currentADObject.Children.Add("CN=" + cn, "User");
newUserObject.Properties[ADAttributes.SAMAccountName].Add(user);
SetADObjectProperty(newUserObject, ADAttributes.DisplayName, displayName);

View file

@ -37,6 +37,7 @@ namespace WebsitePanel.Providers.HostedSolution
int accountId;
int itemId;
int packageId;
string subscriberNumber;
ExchangeAccountType accountType;
string accountName;
string displayName;
@ -45,6 +46,8 @@ namespace WebsitePanel.Providers.HostedSolution
MailboxManagerActions mailboxManagerActions;
string accountPassword;
string samAccountName;
int mailboxPlanId;
string mailboxPlan;
string publicFolderPermission;
public int AccountId
@ -113,10 +116,31 @@ namespace WebsitePanel.Providers.HostedSolution
set { this.mailboxManagerActions = value; }
}
public int MailboxPlanId
{
get { return this.mailboxPlanId; }
set { this.mailboxPlanId = value; }
}
public string MailboxPlan
{
get { return this.mailboxPlan; }
set { this.mailboxPlan = value; }
}
public string SubscriberNumber
{
get { return this.subscriberNumber; }
set { this.subscriberNumber = value; }
}
public string PublicFolderPermission
{
get { return this.publicFolderPermission; }
set { this.publicFolderPermission = value; }
}
}
}

View file

@ -63,6 +63,7 @@ namespace WebsitePanel.Providers.HostedSolution
string country;
string notes;
string sAMAccountName;
private int useMapiRichTextFormat;
ExchangeAccount[] acceptAccounts;
@ -236,5 +237,14 @@ namespace WebsitePanel.Providers.HostedSolution
get { return useMapiRichTextFormat; }
set { useMapiRichTextFormat = value; }
}
public string SAMAccountName
{
get { return sAMAccountName; }
set { sAMAccountName = value; }
}
}
}

View file

@ -99,5 +99,12 @@ namespace WebsitePanel.Providers.HostedSolution
get;
set;
}
public string SAMAccountName
{
get;
set;
}
}
}

View file

@ -0,0 +1,160 @@
// 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.Collections.Generic;
using System.Text;
namespace WebsitePanel.Providers.HostedSolution
{
public class ExchangeMailboxPlan
{
int mailboxPlanId;
string mailboxPlan;
int mailboxSizeMB;
int maxRecipients;
int maxSendMessageSizeKB;
int maxReceiveMessageSizeKB;
bool enablePOP;
bool enableIMAP;
bool enableOWA;
bool enableMAPI;
bool enableActiveSync;
int issueWarningPct;
int prohibitSendPct;
int prohibitSendReceivePct;
int keepDeletedItemsDays;
bool isDefault;
bool hideFromAddressBook;
public int MailboxPlanId
{
get { return this.mailboxPlanId; }
set { this.mailboxPlanId = value; }
}
public string MailboxPlan
{
get { return this.mailboxPlan; }
set { this.mailboxPlan = value; }
}
public int MailboxSizeMB
{
get { return this.mailboxSizeMB; }
set { this.mailboxSizeMB = value; }
}
public bool IsDefault
{
get { return this.isDefault; }
set { this.isDefault = value; }
}
public int MaxRecipients
{
get { return this.maxRecipients; }
set { this.maxRecipients = value; }
}
public int MaxSendMessageSizeKB
{
get { return this.maxSendMessageSizeKB; }
set { this.maxSendMessageSizeKB = value; }
}
public int MaxReceiveMessageSizeKB
{
get { return this.maxReceiveMessageSizeKB; }
set { this.maxReceiveMessageSizeKB = value; }
}
public bool EnablePOP
{
get { return this.enablePOP; }
set { this.enablePOP = value; }
}
public bool EnableIMAP
{
get { return this.enableIMAP; }
set { this.enableIMAP = value; }
}
public bool EnableOWA
{
get { return this.enableOWA; }
set { this.enableOWA = value; }
}
public bool EnableMAPI
{
get { return this.enableMAPI; }
set { this.enableMAPI = value; }
}
public bool EnableActiveSync
{
get { return this.enableActiveSync; }
set { this.enableActiveSync = value; }
}
public int IssueWarningPct
{
get { return this.issueWarningPct; }
set { this.issueWarningPct = value; }
}
public int ProhibitSendPct
{
get { return this.prohibitSendPct; }
set { this.prohibitSendPct = value; }
}
public int ProhibitSendReceivePct
{
get { return this.prohibitSendReceivePct; }
set { this.prohibitSendReceivePct = value; }
}
public int KeepDeletedItemsDays
{
get { return this.keepDeletedItemsDays; }
set { this.keepDeletedItemsDays = value; }
}
public bool HideFromAddressBook
{
get { return this.hideFromAddressBook; }
set { this.hideFromAddressBook = value; }
}
}
}

View file

@ -35,17 +35,18 @@ namespace WebsitePanel.Providers.HostedSolution
// Organizations
string CreateMailEnableUser(string upn, string organizationId, string organizationDistinguishedName, ExchangeAccountType accountType,
string mailboxDatabase, string offlineAddressBook,
string mailboxDatabase, string offlineAddressBook, string addressBookPolicy,
string accountName, bool enablePOP, bool enableIMAP,
bool enableOWA, bool enableMAPI, bool enableActiveSync,
int issueWarningKB, int prohibitSendKB, int prohibitSendReceiveKB,
int keepDeletedItemsDays);
int keepDeletedItemsDays, int maxRecipients, int maxSendMessageSizeKB, int maxReceiveMessageSizeKB, bool hideFromAddressBook, bool isConsumer);
Organization ExtendToExchangeOrganization(string organizationId, string securityGroup);
Organization ExtendToExchangeOrganization(string organizationId, string securityGroup, bool IsConsumer);
string GetOABVirtualDirectory();
Organization CreateOrganizationOfflineAddressBook(string organizationId, string securityGroup, string oabVirtualDir);
Organization CreateOrganizationAddressBookPolicy(string organizationId, string gal, string addressBook, string roomList, string oab);
void UpdateOrganizationOfflineAddressBook(string id);
bool DeleteOrganization(string organizationId, string distinguishedName, string globalAddressList, string addressList, string roomsAddressList, string offlineAddressBook, string securityGroup);
bool DeleteOrganization(string organizationId, string distinguishedName, string globalAddressList, string addressList, string roomList, string offlineAddressBook, string securityGroup, string addressBookPolicy);
void SetOrganizationStorageLimits(string organizationDistinguishedName, int issueWarningKB, int prohibitSendKB, int prohibitSendReceiveKB, int keepDeletedItemsDays);
ExchangeItemStatistics[] GetMailboxesStatistics(string organizationDistinguishedName);
@ -55,16 +56,16 @@ namespace WebsitePanel.Providers.HostedSolution
string[] GetAuthoritativeDomains();
// Mailboxes
string CreateMailbox(string organizationId, string organizationDistinguishedName, string mailboxDatabase, string securityGroup, string offlineAddressBook, ExchangeAccountType accountType, string displayName, string accountName, string name, string domain, string password, bool enablePOP, bool enableIMAP, bool enableOWA, bool enableMAPI, bool enableActiveSync,
int issueWarningKB, int prohibitSendKB, int prohibitSendReceiveKB, int keepDeletedItemsDays);
//string CreateMailbox(string organizationId, string organizationDistinguishedName, string mailboxDatabase, string securityGroup, string offlineAddressBook, string addressBookPolicy, ExchangeAccountType accountType, string displayName, string accountName, string name, string domain, string password, bool enablePOP, bool enableIMAP, bool enableOWA, bool enableMAPI, bool enableActiveSync,
// int issueWarningKB, int prohibitSendKB, int prohibitSendReceiveKB, int keepDeletedItemsDays, int maxRecipients, int maxSendMessageSizeKB, int maxReceiveMessageSizeKB,bool hideFromAddressBook);
void DeleteMailbox(string accountName);
void DisableMailbox(string id);
ExchangeMailbox GetMailboxGeneralSettings(string accountName);
void SetMailboxGeneralSettings(string accountName, string displayName, string password, bool hideFromAddressBook, bool disabled, string firstName, string initials, string lastName, string address, string city, string state, string zip, string country, string jobTitle, string company, string department, string office, string managerAccountName, string businessPhone, string fax, string homePhone, string mobilePhone, string pager, string webPage, string notes);
void SetMailboxGeneralSettings(string accountName, bool hideFromAddressBook, bool disabled);
ExchangeMailbox GetMailboxMailFlowSettings(string accountName);
void SetMailboxMailFlowSettings(string accountName, bool enableForwarding, string forwardingAccountName, bool forwardToBoth, string[] sendOnBehalfAccounts, string[] acceptAccounts, string[] rejectAccounts, int maxRecipients, int maxSendMessageSizeKB, int maxReceiveMessageSizeKB, bool requireSenderAuthentication);
void SetMailboxMailFlowSettings(string accountName, bool enableForwarding, string forwardingAccountName, bool forwardToBoth, string[] sendOnBehalfAccounts, string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication);
ExchangeMailbox GetMailboxAdvancedSettings(string accountName);
void SetMailboxAdvancedSettings(string organizationId, string accountName, bool enablePOP, bool enableIMAP, bool enableOWA, bool enableMAPI, bool enableActiveSync, int issueWarningKB, int prohibitSendKB, int prohibitSendReceiveKB, int keepDeletedItemsDays);
void SetMailboxAdvancedSettings(string organizationId, string accountName, bool enablePOP, bool enableIMAP, bool enableOWA, bool enableMAPI, bool enableActiveSync, int issueWarningKB, int prohibitSendKB, int prohibitSendReceiveKB, int keepDeletedItemsDays, int maxRecipients, int maxSendMessageSizeKB, int maxReceiveMessageSizeKB);
ExchangeEmailAddress[] GetMailboxEmailAddresses(string accountName);
void SetMailboxEmailAddresses(string accountName, string[] emailAddresses);
void SetMailboxPrimaryEmailAddress(string accountName, string emailAddress);
@ -81,19 +82,19 @@ namespace WebsitePanel.Providers.HostedSolution
void SetContactMailFlowSettings(string accountName, string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication);
// Distribution Lists
void CreateDistributionList(string organizationId, string organizationDistinguishedName, string displayName, string accountName, string name, string domain, string managedBy);
void CreateDistributionList(string organizationId, string organizationDistinguishedName, string displayName, string accountName, string name, string domain, string managedBy, string[] addressLists);
void DeleteDistributionList(string accountName);
ExchangeDistributionList GetDistributionListGeneralSettings(string accountName);
void SetDistributionListGeneralSettings(string accountName, string displayName, bool hideFromAddressBook, string managedBy, string[] memebers, string notes);
void AddDistributionListMembers(string accountName, string[] memberAccounts);
void RemoveDistributionListMembers(string accountName, string[] memberAccounts);
void SetDistributionListGeneralSettings(string accountName, string displayName, bool hideFromAddressBook, string managedBy, string[] memebers, string notes, string[] addressLists);
void AddDistributionListMembers(string accountName, string[] memberAccounts, string[] addressLists);
void RemoveDistributionListMembers(string accountName, string[] memberAccounts, string[] addressLists);
ExchangeDistributionList GetDistributionListMailFlowSettings(string accountName);
void SetDistributionListMailFlowSettings(string accountName, string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication);
void SetDistributionListMailFlowSettings(string accountName, string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication, string[] addressLists);
ExchangeEmailAddress[] GetDistributionListEmailAddresses(string accountName);
void SetDistributionListEmailAddresses(string accountName, string[] emailAddresses);
void SetDistributionListPrimaryEmailAddress(string accountName, string emailAddress);
void SetDistributionListEmailAddresses(string accountName, string[] emailAddresses, string[] addressLists);
void SetDistributionListPrimaryEmailAddress(string accountName, string emailAddress, string[] addressLists);
ExchangeDistributionList GetDistributionListPermissions(string organizationId, string accountName);
void SetDistributionListPermissions(string organizationId, string accountName, string[] sendAsAccounts, string[] sendOnBehalfAccounts);
void SetDistributionListPermissions(string organizationId, string accountName, string[] sendAsAccounts, string[] sendOnBehalfAccounts, string[] addressLists);
// Public Folders
void CreatePublicFolder(string organizationId, string securityGroup, string parentFolder, string folderName, bool mailEnabled, string accountName, string name, string domain);

View file

@ -36,7 +36,7 @@ namespace WebsitePanel.Providers.HostedSolution
void DeleteOrganization(string organizationId);
void CreateUser(string organizationId, string loginName, string displayName, string upn, string password, bool enabled);
int CreateUser(string organizationId, string loginName, string displayName, string upn, string password, bool enabled);
void DeleteUser(string loginName, string organizationId);
@ -58,5 +58,7 @@ namespace WebsitePanel.Providers.HostedSolution
void CreateOrganizationDomain(string organizationDistinguishedName, string domain);
PasswordPolicyResult GetPasswordPolicy();
string GetSamAccountNameByUserPrincipalName(string organizationId, string userPrincipalName);
}
}

View file

@ -41,12 +41,12 @@ namespace WebsitePanel.Providers.HostedSolution
private string addressList;
private string roomsAddressList;
private string globalAddressList;
private string addressBookPolicy;
private string database;
private string securityGroup;
private string lyncTenantId;
private int diskSpace;
private int issueWarningKB;
private int prohibitSendKB;
private int prohibitSendReceiveKB;
private int keepDeletedItemsDays;
@ -182,6 +182,13 @@ namespace WebsitePanel.Providers.HostedSolution
set { globalAddressList = value; }
}
[Persistent]
public string AddressBookPolicy
{
get { return addressBookPolicy; }
set { addressBookPolicy = value; }
}
[Persistent]
public string Database
{
@ -203,27 +210,6 @@ namespace WebsitePanel.Providers.HostedSolution
set { diskSpace = value; }
}
[Persistent]
public int IssueWarningKB
{
get { return issueWarningKB; }
set { issueWarningKB = value; }
}
[Persistent]
public int ProhibitSendKB
{
get { return prohibitSendKB; }
set { prohibitSendKB = value; }
}
[Persistent]
public int ProhibitSendReceiveKB
{
get { return prohibitSendReceiveKB; }
set { prohibitSendReceiveKB = value; }
}
[Persistent]
public int KeepDeletedItemsDays
{
@ -233,5 +219,15 @@ namespace WebsitePanel.Providers.HostedSolution
[Persistent]
public bool IsOCSOrganization { get; set; }
[Persistent]
public string LyncTenantId
{
get { return lyncTenantId; }
set { lyncTenantId = value; }
}
}
}

View file

@ -37,6 +37,7 @@ namespace WebsitePanel.Providers.HostedSolution
private int accountId;
private int itemId;
private int packageId;
private string subscriberNumber;
private string primaryEmailAddress;
private string accountPassword;
@ -298,5 +299,13 @@ namespace WebsitePanel.Providers.HostedSolution
set { isBlackBerryUser = value; }
}
public string SubscriberNumber
{
get { return subscriberNumber; }
set { subscriberNumber = value; }
}
}
}

View file

@ -0,0 +1,71 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WebsitePanel.Providers.HostedSolution
{
public class TransactionAction
{
private TransactionActionTypes actionType;
public TransactionActionTypes ActionType
{
get { return actionType; }
set { actionType = value; }
}
private string id;
public string Id
{
get { return id; }
set { id = value; }
}
private string suffix;
public string Suffix
{
get { return suffix; }
set { suffix = value; }
}
private string account;
public string Account
{
get { return account; }
set { account = value; }
}
public enum TransactionActionTypes
{
CreateOrganizationUnit,
CreateGlobalAddressList,
CreateAddressList,
CreateAddressBookPolicy,
CreateOfflineAddressBook,
CreateDistributionGroup,
EnableDistributionGroup,
CreateAcceptedDomain,
AddUPNSuffix,
CreateMailbox,
CreateContact,
CreatePublicFolder,
CreateActiveSyncPolicy,
AddMailboxFullAccessPermission,
AddSendAsPermission,
RemoveMailboxFullAccessPermission,
RemoveSendAsPermission,
EnableMailbox,
LyncNewSipDomain,
LyncNewSimpleUrl,
LyncNewUser,
LyncNewConferencingPolicy,
LyncNewExternalAccessPolicy,
LyncNewMobilityPolicy
};
}
}

View file

@ -79,6 +79,8 @@
<Compile Include="HostedSolution\BlackBerryErrorsCodes.cs" />
<Compile Include="HostedSolution\BlackBerryStatsItem.cs" />
<Compile Include="HostedSolution\BlackBerryUserDeleteState.cs" />
<Compile Include="HostedSolution\ExchangeMailboxPlan.cs" />
<Compile Include="HostedSolution\TransactionAction.cs" />
<Compile Include="ResultObjects\HeliconApe.cs" />
<Compile Include="HostedSolution\ExchangeMobileDevice.cs" />
<Compile Include="HostedSolution\IOCSEdgeServer.cs" />

View file

@ -167,7 +167,7 @@ namespace WebsitePanel.Providers.HostedSolution
return runspace;
}
private static Assembly ResolveExchangeAssembly(object p, ResolveEventArgs args)
internal static Assembly ResolveExchangeAssembly(object p, ResolveEventArgs args)
{
//Add path for the Exchange 2007 DLLs
if (args.Name.Contains("Microsoft.Exchange"))

View file

@ -0,0 +1,753 @@
// 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.Configuration;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;
using System.Reflection;
using System.Globalization;
using System.Collections;
using System.DirectoryServices;
using System.Security;
using System.Security.Principal;
using System.Security.AccessControl;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using WebsitePanel.Providers;
using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.Providers.Utils;
using WebsitePanel.Server.Utils;
using Microsoft.Exchange.Data.Directory.Recipient;
using Microsoft.Win32;
using Microsoft.Exchange.Data;
using Microsoft.Exchange.Data.Directory;
using Microsoft.Exchange.Data.Storage;
namespace WebsitePanel.Providers.HostedSolution
{
public class Exchange2010SP2 : Exchange2010
{
#region Static constructor
static private Hashtable htBbalancer = new Hashtable();
static Exchange2010SP2()
{
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ResolveExchangeAssembly);
ExchangeRegistryPath = "SOFTWARE\\Microsoft\\ExchangeServer\\v14\\Setup";
}
#endregion
#region Organization
/// <summary>
/// Creates organization on Mail Server
/// </summary>
/// <param name="organizationId"></param>
/// <returns></returns>
internal override Organization ExtendToExchangeOrganizationInternal(string organizationId, string securityGroup, bool IsConsumer)
{
ExchangeLog.LogStart("CreateOrganizationInternal");
ExchangeLog.DebugInfo(" Organization Id: {0}", organizationId);
ExchangeTransaction transaction = StartTransaction();
Organization info = new Organization();
Runspace runSpace = null;
try
{
runSpace = OpenRunspace();
string server = GetServerName();
string securityGroupPath = AddADPrefix(securityGroup);
//Create mail enabled organization security group
EnableMailSecurityDistributionGroup(runSpace, securityGroup, organizationId);
transaction.RegisterMailEnabledDistributionGroup(securityGroup);
UpdateSecurityDistributionGroup(runSpace, securityGroup, organizationId, IsConsumer);
//create GAL
string galId = CreateGlobalAddressList(runSpace, organizationId);
transaction.RegisterNewGlobalAddressList(galId);
ExchangeLog.LogInfo(" Global Address List: {0}", galId);
UpdateGlobalAddressList(runSpace, galId, securityGroupPath);
//create AL
string alId = CreateAddressList(runSpace, organizationId);
transaction.RegisterNewAddressList(alId);
ExchangeLog.LogInfo(" Address List: {0}", alId);
UpdateAddressList(runSpace, alId, securityGroupPath);
//create RAL
string ralId = CreateRoomsAddressList(runSpace, organizationId);
transaction.RegisterNewRoomsAddressList(ralId);
ExchangeLog.LogInfo(" Rooms Address List: {0}", ralId);
UpdateAddressList(runSpace, ralId, securityGroupPath);
//create ActiveSync policy
string asId = CreateActiveSyncPolicy(runSpace, organizationId);
transaction.RegisterNewActiveSyncPolicy(asId);
ExchangeLog.LogInfo(" ActiveSync Policy: {0}", asId);
info.AddressList = alId;
info.GlobalAddressList = galId;
info.RoomsAddressList = ralId;
info.OrganizationId = organizationId;
}
catch (Exception ex)
{
ExchangeLog.LogError("CreateOrganizationInternal", ex);
RollbackTransaction(transaction);
throw;
}
finally
{
CloseRunspace(runSpace);
}
ExchangeLog.LogEnd("CreateOrganizationInternal");
return info;
}
internal override Organization CreateOrganizationAddressBookPolicyInternal(string organizationId, string gal, string addressBook, string roomList, string oab)
{
ExchangeLog.LogStart("CreateOrganizationAddressBookPolicyInternal");
ExchangeLog.LogInfo(" Organization Id: {0}", organizationId);
ExchangeLog.LogInfo(" GAL: {0}", gal);
ExchangeLog.LogInfo(" AddressBook: {0}", addressBook);
ExchangeLog.LogInfo(" RoomList: {0}", roomList);
ExchangeLog.LogInfo(" OAB: {0}", oab);
ExchangeTransaction transaction = StartTransaction();
Organization info = new Organization();
string policyName = GetAddressBookPolicyName(organizationId);
Runspace runSpace = null;
try
{
runSpace = OpenRunspace();
Command cmd = new Command("New-AddressBookPolicy");
cmd.Parameters.Add("Name", policyName);
cmd.Parameters.Add("AddressLists", addressBook);
cmd.Parameters.Add("RoomList", roomList);
cmd.Parameters.Add("GlobalAddressList", gal);
cmd.Parameters.Add("OfflineAddressBook", oab);
Collection<PSObject> result = ExecuteShellCommand(runSpace, cmd);
info.AddressBookPolicy = GetResultObjectDN(result);
}
catch (Exception ex)
{
ExchangeLog.LogError("CreateOrganizationAddressBookPolicyInternal", ex);
RollbackTransaction(transaction);
throw;
}
finally
{
CloseRunspace(runSpace);
}
ExchangeLog.LogEnd("CreateOrganizationAddressBookPolicyInternal");
return info;
}
internal override bool DeleteOrganizationInternal(string organizationId, string distinguishedName,
string globalAddressList, string addressList, string roomList, string offlineAddressBook, string securityGroup, string addressBookPolicy)
{
ExchangeLog.LogStart("DeleteOrganizationInternal");
bool ret = true;
Runspace runSpace = null;
try
{
runSpace = OpenRunspace();
string ou = ConvertADPathToCanonicalName(distinguishedName);
if (!DeleteOrganizationMailboxes(runSpace, ou))
ret = false;
if (!DeleteOrganizationContacts(runSpace, ou))
ret = false;
if (!DeleteOrganizationDistributionLists(runSpace, ou))
ret = false;
//delete AddressBookPolicy
try
{
if (!string.IsNullOrEmpty(addressBookPolicy))
DeleteAddressBookPolicy(runSpace, addressBookPolicy);
}
catch (Exception ex)
{
ret = false;
ExchangeLog.LogError("Could not delete AddressBook Policy " + addressBookPolicy, ex);
}
//delete OAB
try
{
if (!string.IsNullOrEmpty(offlineAddressBook))
DeleteOfflineAddressBook(runSpace, offlineAddressBook);
}
catch (Exception ex)
{
ret = false;
ExchangeLog.LogError("Could not delete Offline Address Book " + offlineAddressBook, ex);
}
//delete AL
try
{
if (!string.IsNullOrEmpty(addressList))
DeleteAddressList(runSpace, addressList);
}
catch (Exception ex)
{
ret = false;
ExchangeLog.LogError("Could not delete Address List " + addressList, ex);
}
//delete RL
try
{
if (!string.IsNullOrEmpty(roomList))
DeleteAddressList(runSpace, roomList);
}
catch (Exception ex)
{
ret = false;
ExchangeLog.LogError("Could not delete Address List " + roomList, ex);
}
//delete GAL
try
{
if (!string.IsNullOrEmpty(globalAddressList))
DeleteGlobalAddressList(runSpace, globalAddressList);
}
catch (Exception ex)
{
ret = false;
ExchangeLog.LogError("Could not delete Global Address List " + globalAddressList, ex);
}
//delete ActiveSync policy
try
{
DeleteActiveSyncPolicy(runSpace, organizationId);
}
catch (Exception ex)
{
ret = false;
ExchangeLog.LogError("Could not delete ActiveSyncPolicy " + organizationId, ex);
}
//disable mail security distribution group
try
{
DisableMailSecurityDistributionGroup(runSpace, securityGroup);
}
catch (Exception ex)
{
ret = false;
ExchangeLog.LogError("Could not disable mail security distribution group " + securityGroup, ex);
}
}
catch (Exception ex)
{
ret = false;
ExchangeLog.LogError("DeleteOrganizationInternal", ex);
throw;
}
finally
{
CloseRunspace(runSpace);
}
ExchangeLog.LogEnd("DeleteOrganizationInternal");
return ret;
}
internal override void DeleteAddressBookPolicy(Runspace runSpace, string id)
{
ExchangeLog.LogStart("DeleteAddressBookPolicy");
//if (id != "IsConsumer")
//{
Command cmd = new Command("Remove-AddressBookPolicy");
cmd.Parameters.Add("Identity", id);
cmd.Parameters.Add("Confirm", false);
ExecuteShellCommand(runSpace, cmd);
//}
ExchangeLog.LogEnd("DeleteAddressBookPolicy");
}
#endregion
#region Mailbox
internal override string CreateMailEnableUserInternal(string upn, string organizationId, string organizationDistinguishedName, ExchangeAccountType accountType,
string mailboxDatabase, string offlineAddressBook, string addressBookPolicy,
string accountName, bool enablePOP, bool enableIMAP,
bool enableOWA, bool enableMAPI, bool enableActiveSync,
int issueWarningKB, int prohibitSendKB, int prohibitSendReceiveKB, int keepDeletedItemsDays,
int maxRecipients, int maxSendMessageSizeKB, int maxReceiveMessageSizeKB, bool hideFromAddressBook, bool IsConsumer)
{
ExchangeLog.LogStart("CreateMailEnableUserInternal");
ExchangeLog.DebugInfo("Organization Id: {0}", organizationId);
string ret = null;
ExchangeTransaction transaction = StartTransaction();
Runspace runSpace = null;
int attempts = 0;
string id = null;
try
{
runSpace = OpenRunspace();
Command cmd = null;
Collection<PSObject> result = null;
//try to enable mail user for 10 times
while (true)
{
try
{
//create mailbox
cmd = new Command("Enable-Mailbox");
cmd.Parameters.Add("Identity", upn);
cmd.Parameters.Add("Alias", accountName);
string database = GetDatabase(runSpace, PrimaryDomainController, mailboxDatabase);
ExchangeLog.DebugInfo("database: " + database);
if (database != string.Empty)
{
cmd.Parameters.Add("Database", database);
}
if (accountType == ExchangeAccountType.Equipment)
cmd.Parameters.Add("Equipment");
else if (accountType == ExchangeAccountType.Room)
cmd.Parameters.Add("Room");
result = ExecuteShellCommand(runSpace, cmd);
id = CheckResultObjectDN(result);
}
catch (Exception ex)
{
ExchangeLog.LogError(ex);
}
if (id != null)
break;
if (attempts > 9)
throw new Exception(
string.Format("Could not enable mail user '{0}' ", upn));
attempts++;
ExchangeLog.LogWarning("Attempt #{0} to enable mail user failed!", attempts);
// wait 5 sec
System.Threading.Thread.Sleep(1000);
}
transaction.RegisterEnableMailbox(id);
string windowsEmailAddress = ObjToString(GetPSObjectProperty(result[0], "WindowsEmailAddress"));
//update mailbox
cmd = new Command("Set-Mailbox");
cmd.Parameters.Add("Identity", id);
cmd.Parameters.Add("OfflineAddressBook", offlineAddressBook);
cmd.Parameters.Add("EmailAddressPolicyEnabled", false);
cmd.Parameters.Add("CustomAttribute1", organizationId);
cmd.Parameters.Add("CustomAttribute3", windowsEmailAddress);
cmd.Parameters.Add("PrimarySmtpAddress", upn);
cmd.Parameters.Add("WindowsEmailAddress", upn);
cmd.Parameters.Add("UseDatabaseQuotaDefaults", new bool?(false));
cmd.Parameters.Add("UseDatabaseRetentionDefaults", false);
cmd.Parameters.Add("IssueWarningQuota", ConvertKBToUnlimited(issueWarningKB));
cmd.Parameters.Add("ProhibitSendQuota", ConvertKBToUnlimited(prohibitSendKB));
cmd.Parameters.Add("ProhibitSendReceiveQuota", ConvertKBToUnlimited(prohibitSendReceiveKB));
cmd.Parameters.Add("RetainDeletedItemsFor", ConvertDaysToEnhancedTimeSpan(keepDeletedItemsDays));
cmd.Parameters.Add("RecipientLimits", ConvertInt32ToUnlimited(maxRecipients));
cmd.Parameters.Add("MaxSendSize", ConvertKBToUnlimited(maxSendMessageSizeKB));
cmd.Parameters.Add("MaxReceiveSize", ConvertKBToUnlimited(maxReceiveMessageSizeKB));
if (IsConsumer) cmd.Parameters.Add("HiddenFromAddressListsEnabled", true);
else
cmd.Parameters.Add("HiddenFromAddressListsEnabled", hideFromAddressBook);
cmd.Parameters.Add("AddressBookPolicy", addressBookPolicy);
ExecuteShellCommand(runSpace, cmd);
//Client Access
cmd = new Command("Set-CASMailbox");
cmd.Parameters.Add("Identity", id);
cmd.Parameters.Add("ActiveSyncEnabled", enableActiveSync);
if (enableActiveSync)
{
cmd.Parameters.Add("ActiveSyncMailboxPolicy", organizationId);
}
cmd.Parameters.Add("OWAEnabled", enableOWA);
cmd.Parameters.Add("MAPIEnabled", enableMAPI);
cmd.Parameters.Add("PopEnabled", enablePOP);
cmd.Parameters.Add("ImapEnabled", enableIMAP);
ExecuteShellCommand(runSpace, cmd);
//add to the security group
cmd = new Command("Add-DistributionGroupMember");
cmd.Parameters.Add("Identity", organizationId);
cmd.Parameters.Add("Member", id);
cmd.Parameters.Add("BypassSecurityGroupManagerCheck", true);
ExecuteShellCommand(runSpace, cmd);
if (!IsConsumer)
{
//Set-MailboxFolderPermission for calendar
cmd = new Command("Add-MailboxFolderPermission");
cmd.Parameters.Add("Identity", id + ":\\calendar");
cmd.Parameters.Add("AccessRights", "Reviewer");
cmd.Parameters.Add("User", organizationId);
ExecuteShellCommand(runSpace, cmd);
}
cmd = new Command("Set-MailboxFolderPermission");
cmd.Parameters.Add("Identity", id + ":\\calendar");
cmd.Parameters.Add("AccessRights", "None");
cmd.Parameters.Add("User", "Default");
ExecuteShellCommand(runSpace, cmd);
ret = string.Format("{0}\\{1}", GetNETBIOSDomainName(), accountName);
ExchangeLog.LogEnd("CreateMailEnableUserInternal");
return ret;
}
catch (Exception ex)
{
ExchangeLog.LogError("CreateMailEnableUserInternal", ex);
RollbackTransaction(transaction);
throw;
}
finally
{
CloseRunspace(runSpace);
}
}
internal override void DisableMailboxInternal(string id)
{
ExchangeLog.LogStart("DisableMailboxInternal");
Runspace runSpace = null;
try
{
runSpace = OpenRunspace();
Command cmd = new Command("Get-Mailbox");
cmd.Parameters.Add("Identity", id);
Collection<PSObject> result = ExecuteShellCommand(runSpace, cmd);
if (result != null && result.Count > 0)
{
string upn = ObjToString(GetPSObjectProperty(result[0], "UserPrincipalName"));
string addressbookPolicy = ObjToString(GetPSObjectProperty(result[0], "AddressBookPolicy"));
cmd = new Command("Disable-Mailbox");
cmd.Parameters.Add("Identity", id);
cmd.Parameters.Add("Confirm", false);
ExecuteShellCommand(runSpace, cmd);
if (addressbookPolicy == (upn + " AP"))
{
try
{
DeleteAddressBookPolicy(runSpace, upn + " AP");
}
catch (Exception)
{
}
try
{
DeleteGlobalAddressList(runSpace, upn + " GAL");
}
catch (Exception)
{
}
try
{
DeleteAddressList(runSpace, upn + " AL");
}
catch (Exception)
{
}
}
}
}
finally
{
CloseRunspace(runSpace);
}
ExchangeLog.LogEnd("DisableMailboxInternal");
}
internal override void DeleteMailboxInternal(string accountName)
{
ExchangeLog.LogStart("DeleteMailboxInternal");
ExchangeLog.DebugInfo("Account Name: {0}", accountName);
Runspace runSpace = null;
try
{
runSpace = OpenRunspace();
Command cmd = new Command("Get-Mailbox");
cmd.Parameters.Add("Identity", accountName);
Collection<PSObject> result = ExecuteShellCommand(runSpace, cmd);
if (result != null && result.Count > 0)
{
string upn = ObjToString(GetPSObjectProperty(result[0], "UserPrincipalName"));
string addressbookPolicy = ObjToString(GetPSObjectProperty(result[0], "AddressBookPolicy"));
RemoveMailbox(runSpace, accountName);
if (addressbookPolicy == (upn + " AP"))
{
try
{
DeleteAddressBookPolicy(runSpace, upn + " AP");
}
catch (Exception)
{
}
try
{
DeleteGlobalAddressList(runSpace, upn + " GAL");
}
catch (Exception)
{
}
try
{
DeleteAddressList(runSpace, upn + " AL");
}
catch (Exception)
{
}
}
}
}
finally
{
CloseRunspace(runSpace);
}
ExchangeLog.LogEnd("DeleteMailboxInternal");
}
internal string GetDatabase(Runspace runSpace, string primaryDomainController, string dagName)
{
string database = string.Empty;
if (string.IsNullOrEmpty(dagName)) return string.Empty;
ExchangeLog.LogStart("GetDatabase");
ExchangeLog.LogInfo("DAG: " + dagName);
//Get Dag Servers
Collection<PSObject> dags = null;
Command cmd = new Command("Get-DatabaseAvailabilityGroup");
cmd.Parameters.Add("Identity", dagName);
dags = ExecuteShellCommand(runSpace, cmd);
if (htBbalancer == null)
htBbalancer = new Hashtable();
if (htBbalancer[dagName] == null)
htBbalancer.Add(dagName, 0);
if (dags != null && dags.Count > 0)
{
ADMultiValuedProperty<ADObjectId> servers = (ADMultiValuedProperty<ADObjectId>)GetPSObjectProperty(dags[0], "Servers");
if (servers != null)
{
System.Collections.Generic.List<string> lstDatabase = new System.Collections.Generic.List<string>();
foreach (object objServer in servers)
{
Collection<PSObject> databases = null;
cmd = new Command("Get-MailboxDatabase");
cmd.Parameters.Add("Server", ObjToString(objServer));
databases = ExecuteShellCommand(runSpace, cmd);
foreach (PSObject objDatabase in databases)
{
if (((bool)GetPSObjectProperty(objDatabase, "IsExcludedFromProvisioning") == false) &&
((bool)GetPSObjectProperty(objDatabase, "IsSuspendedFromProvisioning") == false))
{
string db = ObjToString(GetPSObjectProperty(objDatabase, "Identity"));
bool bAdd = true;
foreach (string s in lstDatabase)
{
if (s.ToLower() == db.ToLower())
{
bAdd = false;
break;
}
}
if (bAdd)
{
lstDatabase.Add(db);
ExchangeLog.LogInfo("AddDatabase: " + db);
}
}
}
}
int balancer = (int)htBbalancer[dagName];
balancer++;
if (balancer >= lstDatabase.Count) balancer = 0;
htBbalancer[dagName] = balancer;
if (lstDatabase.Count != 0) database = lstDatabase[balancer];
}
}
ExchangeLog.LogEnd("GetDatabase");
return database;
}
#endregion
#region AddressBook
internal override void AdjustADSecurity(string objPath, string securityGroupPath, bool isAddressBook)
{
ExchangeLog.LogStart("AdjustADSecurity");
ExchangeLog.DebugInfo(" Active Direcory object: {0}", objPath);
ExchangeLog.DebugInfo(" Security Group: {0}", securityGroupPath);
if (isAddressBook)
{
ExchangeLog.DebugInfo(" Updating Security");
//"Download Address Book" security permission for offline address book
Guid openAddressBookGuid = new Guid("{bd919c7c-2d79-4950-bc9c-e16fd99285e8}");
DirectoryEntry groupEntry = GetADObject(securityGroupPath);
byte[] byteSid = (byte[])GetADObjectProperty(groupEntry, "objectSid");
DirectoryEntry objEntry = GetADObject(objPath);
ActiveDirectorySecurity security = objEntry.ObjectSecurity;
// Create a SecurityIdentifier object for security group.
SecurityIdentifier groupSid = new SecurityIdentifier(byteSid, 0);
// Create an access rule to allow users in Security Group to open address book.
ActiveDirectoryAccessRule allowOpenAddressBook =
new ActiveDirectoryAccessRule(
groupSid,
ActiveDirectoryRights.ExtendedRight,
AccessControlType.Allow,
openAddressBookGuid);
// Create an access rule to allow users in Security Group to read object.
ActiveDirectoryAccessRule allowRead =
new ActiveDirectoryAccessRule(
groupSid,
ActiveDirectoryRights.GenericRead,
AccessControlType.Allow);
// Remove existing rules if exist
security.RemoveAccessRuleSpecific(allowOpenAddressBook);
security.RemoveAccessRuleSpecific(allowRead);
// Add a new access rule to allow users in Security Group to open address book.
security.AddAccessRule(allowOpenAddressBook);
// Add a new access rule to allow users in Security Group to read object.
security.AddAccessRule(allowRead);
// Commit the changes.
objEntry.CommitChanges();
}
ExchangeLog.LogEnd("AdjustADSecurity");
}
#endregion
public override bool IsInstalled()
{
int value = 0;
bool bResult = false;
RegistryKey root = Registry.LocalMachine;
RegistryKey rk = root.OpenSubKey(ExchangeRegistryPath);
if (rk != null)
{
value = (int)rk.GetValue("MsiProductMajor", null);
if (value == 14)
{
value = (int)rk.GetValue("MsiProductMinor", null);
if (value == 2) bResult = true;
}
rk.Close();
}
return bResult;
}
}
}

View file

@ -77,15 +77,12 @@ namespace WebsitePanel.Providers.HostedSolution
internal static void DebugInfo(string message, params object[] args)
{
#if DEBUG
string text = String.Format(message, args);
Log.WriteInfo("{0} {1}", LogPrefix, text);
#endif
}
internal static void DebugCommand(Command cmd)
{
#if DEBUG
StringBuilder sb = new StringBuilder(cmd.CommandText);
foreach (CommandParameter parameter in cmd.Parameters)
{
@ -97,7 +94,6 @@ namespace WebsitePanel.Providers.HostedSolution
sb.AppendFormat(formatString, parameter.Name, parameter.Value);
}
Log.WriteInfo("{0} {1}", LogPrefix, sb.ToString());
#endif
}
}
}

View file

@ -84,17 +84,20 @@ namespace WebsitePanel.Providers.HostedSolution
action.Id = id;
Actions.Add(action);
}
internal void RegisterNewRoomsAddressList(string id)
internal void RegisterNewAddressBookPolicy(string id)
{
TransactionAction action = new TransactionAction();
action.ActionType = TransactionAction.TransactionActionTypes.CreateRoomsAddressList;
action.ActionType = TransactionAction.TransactionActionTypes.CreateAddressBookPolicy;
action.Id = id;
Actions.Add(action);
}
internal void RegisterNewAddressPolicy(string id)
internal void RegisterNewRoomsAddressList(string id)
{
TransactionAction action = new TransactionAction();
action.ActionType = TransactionAction.TransactionActionTypes.CreateAddressPolicy;
action.ActionType = TransactionAction.TransactionActionTypes.CreateAddressList;
action.Id = id;
Actions.Add(action);
}
@ -142,6 +145,15 @@ namespace WebsitePanel.Providers.HostedSolution
Actions.Add(action);
}
internal void RegisterEnableMailbox(string id)
{
TransactionAction action = new TransactionAction();
action.ActionType = TransactionAction.TransactionActionTypes.EnableMailbox;
action.Id = id;
Actions.Add(action);
}
internal void RegisterNewContact(string id)
{
TransactionAction action = new TransactionAction();
@ -194,64 +206,4 @@ namespace WebsitePanel.Providers.HostedSolution
Actions.Add(action);
}
}
internal class TransactionAction
{
private TransactionActionTypes actionType;
public TransactionActionTypes ActionType
{
get { return actionType; }
set { actionType = value; }
}
private string id;
public string Id
{
get { return id; }
set { id = value; }
}
private string suffix;
public string Suffix
{
get { return suffix; }
set { suffix = value; }
}
private string account;
public string Account
{
get { return account; }
set { account = value; }
}
internal enum TransactionActionTypes
{
CreateOrganizationUnit,
CreateGlobalAddressList,
CreateAddressList,
CreateAddressPolicy,
CreateOfflineAddressBook,
CreateDistributionGroup,
EnableDistributionGroup,
CreateAcceptedDomain,
AddUPNSuffix,
CreateMailbox,
CreateContact,
CreatePublicFolder,
CreateActiveSyncPolicy,
AddMailboxFullAccessPermission,
AddSendAsPermission,
RemoveMailboxFullAccessPermission,
RemoveSendAsPermission,
CreateRoomsAddressList
};
}
}

View file

@ -342,9 +342,9 @@ namespace WebsitePanel.Providers.HostedSolution
#region Users
public void CreateUser(string organizationId, string loginName, string displayName, string upn, string password, bool enabled)
public int CreateUser(string organizationId, string loginName, string displayName, string upn, string password, bool enabled)
{
CreateUserInternal(organizationId, loginName, displayName, upn, password, enabled);
return CreateUserInternal(organizationId, loginName, displayName, upn, password, enabled);
}
internal int CreateUserInternal(string organizationId, string loginName, string displayName, string upn, string password, bool enabled)
@ -368,24 +368,31 @@ namespace WebsitePanel.Providers.HostedSolution
try
{
string path = GetOrganizationPath(organizationId);
userPath= GetUserPath(organizationId, loginName);
userPath = GetUserPath(organizationId, loginName);
if (!ActiveDirectoryUtils.AdObjectExists(userPath))
{
userPath = ActiveDirectoryUtils.CreateUser(path, loginName, displayName, password, enabled);
userPath = ActiveDirectoryUtils.CreateUser(path, upn, loginName, displayName, password, enabled);
DirectoryEntry entry = new DirectoryEntry(userPath);
ActiveDirectoryUtils.SetADObjectProperty(entry, ADAttributes.UserPrincipalName, upn);
entry.CommitChanges();
userCreated = true;
HostedSolutionLog.DebugInfo("User created: {0}", displayName);
}
else
{
HostedSolutionLog.DebugInfo("AD_OBJECT_ALREADY_EXISTS: {0}", userPath);
HostedSolutionLog.LogEnd("CreateUserInternal");
return Errors.AD_OBJECT_ALREADY_EXISTS;
}
string groupPath = GetGroupPath(organizationId);
HostedSolutionLog.DebugInfo("Group retrieved: {0}", groupPath);
ActiveDirectoryUtils.AddUserToGroup(userPath, groupPath);
HostedSolutionLog.DebugInfo("Added to group: {0}", groupPath);
}
catch(Exception e)
catch (Exception e)
{
HostedSolutionLog.LogError(e);
try
@ -393,10 +400,12 @@ namespace WebsitePanel.Providers.HostedSolution
if (userCreated)
ActiveDirectoryUtils.DeleteADObject(userPath);
}
catch(Exception ex)
catch (Exception ex)
{
HostedSolutionLog.LogError(ex);
}
return Errors.AD_OBJECT_ALREADY_EXISTS;
}
HostedSolutionLog.LogEnd("CreateUserInternal");
@ -516,7 +525,8 @@ namespace WebsitePanel.Providers.HostedSolution
retUser.ExternalEmail = ActiveDirectoryUtils.GetADObjectStringProperty(entry, ADAttributes.ExternalEmail);
retUser.Disabled = (bool)entry.InvokeGet(ADAttributes.AccountDisabled);
retUser.Manager = GetManager(entry);
retUser.DomainUserName = GetDomainName(loginName);
retUser.SamAccountName = ActiveDirectoryUtils.GetADObjectStringProperty(entry, ADAttributes.SAMAccountName);
retUser.DomainUserName = GetDomainName(ActiveDirectoryUtils.GetADObjectStringProperty(entry, ADAttributes.SAMAccountName));
retUser.DistinguishedName = ActiveDirectoryUtils.GetADObjectStringProperty(entry, ADAttributes.DistinguishedName);
retUser.Locked = (bool)entry.InvokeGet(ADAttributes.AccountLocked);
@ -626,6 +636,48 @@ namespace WebsitePanel.Providers.HostedSolution
}
public string GetSamAccountNameByUserPrincipalName(string organizationId, string userPrincipalName)
{
return GetSamAccountNameByUserPrincipalNameInternal(organizationId, userPrincipalName);
}
private string GetSamAccountNameByUserPrincipalNameInternal(string organizationId, string userPrincipalName)
{
HostedSolutionLog.LogStart("GetSamAccountNameByUserPrincipalNameInternal");
HostedSolutionLog.DebugInfo("userPrincipalName : {0}", userPrincipalName);
HostedSolutionLog.DebugInfo("organizationId : {0}", organizationId);
string accountName = string.Empty;
try
{
string path = GetOrganizationPath(organizationId);
DirectoryEntry entry = ActiveDirectoryUtils.GetADObject(path);
DirectorySearcher searcher = new DirectorySearcher(entry);
searcher.PropertiesToLoad.Add("userPrincipalName");
searcher.PropertiesToLoad.Add("sAMAccountName");
searcher.Filter = "(userPrincipalName=" + userPrincipalName + ")";
searcher.SearchScope = SearchScope.Subtree;
SearchResult resCollection = searcher.FindOne();
if (resCollection != null)
{
accountName = resCollection.Properties["samaccountname"][0].ToString();
}
HostedSolutionLog.LogEnd("GetSamAccountNameByUserPrincipalNameInternal");
}
catch (Exception e)
{
HostedSolutionLog.DebugInfo("Failed : {0}", e.Message);
}
return accountName;
}
#endregion
#region Domains

View file

@ -131,6 +131,7 @@
<Compile Include="BlackBerry5Provider.cs" />
<Compile Include="BlackBerryProvider.cs" />
<Compile Include="Exchange2010.cs" />
<Compile Include="Exchange2010SP2.cs" />
<Compile Include="HostedSharePointServer2010.cs" />
<Compile Include="OCSEdge2007R2.cs" />
<Compile Include="OCS2007R2.cs" />

View file

@ -1,35 +1,7 @@
// 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.
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.3053
// Runtime Version:2.0.50727.5456
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@ -39,16 +11,16 @@
//
// This source code was auto-generated by wsdl, Version=2.0.50727.42.
//
using WebsitePanel.Providers.Common;
using WebsitePanel.Providers.ResultObjects;
namespace WebsitePanel.Providers.HostedSolution {
using System.Diagnostics;
using System.Xml.Serialization;
using System.Web.Services;
using System.ComponentModel;
using System.Web.Services.Protocols;
using System;
using System.Xml.Serialization;
using System.Diagnostics;
using WebsitePanel.Providers.Common;
using WebsitePanel.Providers.ResultObjects;
/// <remarks/>
@ -72,7 +44,7 @@ namespace WebsitePanel.Providers.HostedSolution {
private System.Threading.SendOrPostCallback DeleteUserOperationCompleted;
private System.Threading.SendOrPostCallback GeUserGeneralSettingsOperationCompleted;
private System.Threading.SendOrPostCallback GetUserGeneralSettingsOperationCompleted;
private System.Threading.SendOrPostCallback SetUserGeneralSettingsOperationCompleted;
@ -82,9 +54,11 @@ namespace WebsitePanel.Providers.HostedSolution {
private System.Threading.SendOrPostCallback GetPasswordPolicyOperationCompleted;
private System.Threading.SendOrPostCallback GetSamAccountNameByUserPrincipalNameOperationCompleted;
/// <remarks/>
public Organizations() {
this.Url = "http://exchange-dev:9003/Organizations.asmx";
this.Url = "http://localhost:9006/Organizations.asmx";
}
/// <remarks/>
@ -103,7 +77,7 @@ namespace WebsitePanel.Providers.HostedSolution {
public event DeleteUserCompletedEventHandler DeleteUserCompleted;
/// <remarks/>
public event GeUserGeneralSettingsCompletedEventHandler GeUserGeneralSettingsCompleted;
public event GetUserGeneralSettingsCompletedEventHandler GetUserGeneralSettingsCompleted;
/// <remarks/>
public event SetUserGeneralSettingsCompletedEventHandler SetUserGeneralSettingsCompleted;
@ -117,6 +91,9 @@ namespace WebsitePanel.Providers.HostedSolution {
/// <remarks/>
public event GetPasswordPolicyCompletedEventHandler GetPasswordPolicyCompleted;
/// <remarks/>
public event GetSamAccountNameByUserPrincipalNameCompletedEventHandler GetSamAccountNameByUserPrincipalNameCompleted;
/// <remarks/>
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/OrganizationExists", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
@ -244,14 +221,15 @@ namespace WebsitePanel.Providers.HostedSolution {
/// <remarks/>
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/CreateUser", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public void CreateUser(string organizationId, string loginName, string displayName, string upn, string password, bool enabled) {
this.Invoke("CreateUser", new object[] {
public int CreateUser(string organizationId, string loginName, string displayName, string upn, string password, bool enabled) {
object[] results = this.Invoke("CreateUser", new object[] {
organizationId,
loginName,
displayName,
upn,
password,
enabled});
return ((int)(results[0]));
}
/// <remarks/>
@ -266,8 +244,9 @@ namespace WebsitePanel.Providers.HostedSolution {
}
/// <remarks/>
public void EndCreateUser(System.IAsyncResult asyncResult) {
this.EndInvoke(asyncResult);
public int EndCreateUser(System.IAsyncResult asyncResult) {
object[] results = this.EndInvoke(asyncResult);
return ((int)(results[0]));
}
/// <remarks/>
@ -292,7 +271,7 @@ namespace WebsitePanel.Providers.HostedSolution {
private void OnCreateUserOperationCompleted(object arg) {
if ((this.CreateUserCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.CreateUserCompleted(this, new System.ComponentModel.AsyncCompletedEventArgs(invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
this.CreateUserCompleted(this, new CreateUserCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
@ -341,46 +320,46 @@ namespace WebsitePanel.Providers.HostedSolution {
/// <remarks/>
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GeUserGeneralSettings", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public OrganizationUser GeUserGeneralSettings(string loginName, string organizationId) {
object[] results = this.Invoke("GeUserGeneralSettings", new object[] {
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetUserGeneralSettings", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public OrganizationUser GetUserGeneralSettings(string loginName, string organizationId) {
object[] results = this.Invoke("GetUserGeneralSettings", new object[] {
loginName,
organizationId});
return ((OrganizationUser)(results[0]));
}
/// <remarks/>
public System.IAsyncResult BeginGeUserGeneralSettings(string loginName, string organizationId, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("GeUserGeneralSettings", new object[] {
public System.IAsyncResult BeginGetUserGeneralSettings(string loginName, string organizationId, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("GetUserGeneralSettings", new object[] {
loginName,
organizationId}, callback, asyncState);
}
/// <remarks/>
public OrganizationUser EndGeUserGeneralSettings(System.IAsyncResult asyncResult) {
public OrganizationUser EndGetUserGeneralSettings(System.IAsyncResult asyncResult) {
object[] results = this.EndInvoke(asyncResult);
return ((OrganizationUser)(results[0]));
}
/// <remarks/>
public void GeUserGeneralSettingsAsync(string loginName, string organizationId) {
this.GeUserGeneralSettingsAsync(loginName, organizationId, null);
public void GetUserGeneralSettingsAsync(string loginName, string organizationId) {
this.GetUserGeneralSettingsAsync(loginName, organizationId, null);
}
/// <remarks/>
public void GeUserGeneralSettingsAsync(string loginName, string organizationId, object userState) {
if ((this.GeUserGeneralSettingsOperationCompleted == null)) {
this.GeUserGeneralSettingsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGeUserGeneralSettingsOperationCompleted);
public void GetUserGeneralSettingsAsync(string loginName, string organizationId, object userState) {
if ((this.GetUserGeneralSettingsOperationCompleted == null)) {
this.GetUserGeneralSettingsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetUserGeneralSettingsOperationCompleted);
}
this.InvokeAsync("GeUserGeneralSettings", new object[] {
this.InvokeAsync("GetUserGeneralSettings", new object[] {
loginName,
organizationId}, this.GeUserGeneralSettingsOperationCompleted, userState);
organizationId}, this.GetUserGeneralSettingsOperationCompleted, userState);
}
private void OnGeUserGeneralSettingsOperationCompleted(object arg) {
if ((this.GeUserGeneralSettingsCompleted != null)) {
private void OnGetUserGeneralSettingsOperationCompleted(object arg) {
if ((this.GetUserGeneralSettingsCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.GeUserGeneralSettingsCompleted(this, new GeUserGeneralSettingsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
this.GetUserGeneralSettingsCompleted(this, new GetUserGeneralSettingsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
@ -745,21 +724,57 @@ namespace WebsitePanel.Providers.HostedSolution {
}
}
/// <remarks/>
[System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetSamAccountNameByUserPrincipalName", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public string GetSamAccountNameByUserPrincipalName(string organizationId, string userPrincipalName) {
object[] results = this.Invoke("GetSamAccountNameByUserPrincipalName", new object[] {
organizationId,
userPrincipalName});
return ((string)(results[0]));
}
/// <remarks/>
public System.IAsyncResult BeginGetSamAccountNameByUserPrincipalName(string organizationId, string userPrincipalName, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("GetSamAccountNameByUserPrincipalName", new object[] {
organizationId,
userPrincipalName}, callback, asyncState);
}
/// <remarks/>
public string EndGetSamAccountNameByUserPrincipalName(System.IAsyncResult asyncResult) {
object[] results = this.EndInvoke(asyncResult);
return ((string)(results[0]));
}
/// <remarks/>
public void GetSamAccountNameByUserPrincipalNameAsync(string organizationId, string userPrincipalName) {
this.GetSamAccountNameByUserPrincipalNameAsync(organizationId, userPrincipalName, null);
}
/// <remarks/>
public void GetSamAccountNameByUserPrincipalNameAsync(string organizationId, string userPrincipalName, object userState) {
if ((this.GetSamAccountNameByUserPrincipalNameOperationCompleted == null)) {
this.GetSamAccountNameByUserPrincipalNameOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetSamAccountNameByUserPrincipalNameOperationCompleted);
}
this.InvokeAsync("GetSamAccountNameByUserPrincipalName", new object[] {
organizationId,
userPrincipalName}, this.GetSamAccountNameByUserPrincipalNameOperationCompleted, userState);
}
private void OnGetSamAccountNameByUserPrincipalNameOperationCompleted(object arg) {
if ((this.GetSamAccountNameByUserPrincipalNameCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.GetSamAccountNameByUserPrincipalNameCompleted(this, new GetSamAccountNameByUserPrincipalNameCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/>
public new void CancelAsync(object userState) {
base.CancelAsync(userState);
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
public delegate void OrganizationExistsCompletedEventHandler(object sender, OrganizationExistsCompletedEventArgs e);
@ -818,7 +833,29 @@ namespace WebsitePanel.Providers.HostedSolution {
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
public delegate void CreateUserCompletedEventHandler(object sender, System.ComponentModel.AsyncCompletedEventArgs e);
public delegate void CreateUserCompletedEventHandler(object sender, CreateUserCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class CreateUserCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
private object[] results;
internal CreateUserCompletedEventArgs(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.42")]
@ -826,17 +863,17 @@ namespace WebsitePanel.Providers.HostedSolution {
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
public delegate void GeUserGeneralSettingsCompletedEventHandler(object sender, GeUserGeneralSettingsCompletedEventArgs e);
public delegate void GetUserGeneralSettingsCompletedEventHandler(object sender, GetUserGeneralSettingsCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class GeUserGeneralSettingsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
public partial class GetUserGeneralSettingsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
private object[] results;
internal GeUserGeneralSettingsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
internal GetUserGeneralSettingsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState) {
this.results = results;
}
@ -887,4 +924,30 @@ namespace WebsitePanel.Providers.HostedSolution {
}
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
public delegate void GetSamAccountNameByUserPrincipalNameCompletedEventHandler(object sender, GetSamAccountNameByUserPrincipalNameCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class GetSamAccountNameByUserPrincipalNameCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
private object[] results;
internal GetSamAccountNameByUserPrincipalNameCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState) {
this.results = results;
}
/// <remarks/>
public string Result {
get {
this.RaiseExceptionIfNecessary();
return ((string)(this.results[0]));
}
}
}
}

View file

@ -1,4 +1,4 @@
// Copyright (c) 2012, Outercurve Foundation.
// Copyright (c) 2011, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
@ -87,7 +87,7 @@ namespace WebsitePanel.Server.Utils
{
if (logSeverity.TraceInfo)
{
Trace.TraceInformation(FormatIncomingMessage(message, args));
Trace.TraceInformation(FormatIncomingMessage(message, "INFO", args));
}
}
catch { }
@ -103,7 +103,7 @@ namespace WebsitePanel.Server.Utils
{
if (logSeverity.TraceWarning)
{
Trace.TraceWarning(FormatIncomingMessage(message, args));
Trace.TraceWarning(FormatIncomingMessage(message, "WARNING", args));
}
}
catch { }
@ -119,7 +119,7 @@ namespace WebsitePanel.Server.Utils
{
if (logSeverity.TraceInfo)
{
Trace.TraceInformation(FormatIncomingMessage(message, args));
Trace.TraceInformation(FormatIncomingMessage(message, "START", args));
}
}
catch { }
@ -135,13 +135,13 @@ namespace WebsitePanel.Server.Utils
{
if (logSeverity.TraceInfo)
{
Trace.TraceInformation(FormatIncomingMessage(message, args));
Trace.TraceInformation(FormatIncomingMessage(message, "END", args));
}
}
catch { }
}
private static string FormatIncomingMessage(string message, params object[] args)
private static string FormatIncomingMessage(string message, string tag, params object[] args)
{
//
if (args.Length > 0)
@ -149,7 +149,7 @@ namespace WebsitePanel.Server.Utils
message = String.Format(message, args);
}
//
return String.Concat(String.Format("[{0:G}] END: ", DateTime.Now), message);
return String.Concat(String.Format("[{0:G}] {1}: ", DateTime.Now, tag), message);
}
}
}

View file

@ -71,12 +71,12 @@ namespace WebsitePanel.Server
#region Organizations
[WebMethod, SoapHeader("settings")]
public Organization ExtendToExchangeOrganization(string organizationId, string securityGroup)
public Organization ExtendToExchangeOrganization(string organizationId, string securityGroup, bool IsConsumer)
{
try
{
LogStart("ExtendToExchangeOrganization");
Organization ret = ES.ExtendToExchangeOrganization(organizationId, securityGroup);
Organization ret = ES.ExtendToExchangeOrganization(organizationId, securityGroup, IsConsumer);
LogEnd("ExtendToExchangeOrganization");
return ret;
}
@ -89,20 +89,22 @@ namespace WebsitePanel.Server
[WebMethod, SoapHeader("settings")]
public string CreateMailEnableUser(string upn, string organizationId, string organizationDistinguishedName, ExchangeAccountType accountType,
string mailboxDatabase, string offlineAddressBook,
string mailboxDatabase, string offlineAddressBook, string addressBookPolicy,
string accountName, bool enablePOP, bool enableIMAP,
bool enableOWA, bool enableMAPI, bool enableActiveSync,
int issueWarningKB, int prohibitSendKB, int prohibitSendReceiveKB, int keepDeletedItemsDays)
int issueWarningKB, int prohibitSendKB, int prohibitSendReceiveKB, int keepDeletedItemsDays,
int maxRecipients, int maxSendMessageSizeKB, int maxReceiveMessageSizeKB, bool hideFromAddressBook, bool isConsumer)
{
try
{
LogStart("CreateMailEnableUser");
string ret = ES.CreateMailEnableUser(upn, organizationId, organizationDistinguishedName,accountType,
mailboxDatabase, offlineAddressBook,
string ret = ES.CreateMailEnableUser(upn, organizationId, organizationDistinguishedName, accountType,
mailboxDatabase, offlineAddressBook, addressBookPolicy,
accountName, enablePOP, enableIMAP,
enableOWA, enableMAPI, enableActiveSync,
issueWarningKB, prohibitSendKB, prohibitSendReceiveKB,
keepDeletedItemsDays);
keepDeletedItemsDays,
maxRecipients, maxSendMessageSizeKB, maxReceiveMessageSizeKB, hideFromAddressBook, isConsumer);
LogEnd("CreateMailEnableUser");
return ret;
}
@ -176,12 +178,30 @@ namespace WebsitePanel.Server
}
[WebMethod, SoapHeader("settings")]
public bool DeleteOrganization(string organizationId, string distinguishedName, string globalAddressList, string addressList, string roomsAddressList, string offlineAddressBook, string securityGroup)
public Organization CreateOrganizationAddressBookPolicy(string organizationId, string gal, string addressBook, string roomList, string oab)
{
try
{
LogStart("CCreateOrganizationAddressBookPolicy");
Organization ret = ES.CreateOrganizationAddressBookPolicy(organizationId, gal, addressBook, roomList, oab);
LogEnd("CreateOrganizationAddressBookPolicy");
return ret;
}
catch (Exception ex)
{
LogError("CreateOrganizationAddressBookPolicy", ex);
throw;
}
}
[WebMethod, SoapHeader("settings")]
public bool DeleteOrganization(string organizationId, string distinguishedName, string globalAddressList, string addressList, string roomList, string offlineAddressBook, string securityGroup, string addressBookPolicy)
{
try
{
LogStart("DeleteOrganization");
bool ret = ES.DeleteOrganization(organizationId, distinguishedName, globalAddressList, addressList, roomsAddressList, offlineAddressBook, securityGroup);
bool ret = ES.DeleteOrganization(organizationId, distinguishedName, globalAddressList, addressList, roomList, offlineAddressBook, securityGroup, addressBookPolicy);
LogEnd("DeleteOrganization");
return ret;
}
@ -252,7 +272,7 @@ namespace WebsitePanel.Server
try
{
LogStart("GetAuthoritativeDomains");
string []ret = ES.GetAuthoritativeDomains();
string[] ret = ES.GetAuthoritativeDomains();
LogEnd("GetAuthoritativeDomains");
return ret;
}
@ -281,21 +301,23 @@ namespace WebsitePanel.Server
#endregion
#region Mailboxes
/*
[WebMethod, SoapHeader("settings")]
public string CreateMailbox(string organizationId, string organizationDistinguishedName, string mailboxDatabase,
string securityGroup, string offlineAddressBook, ExchangeAccountType accountType,
string securityGroup, string offlineAddressBook, string addressBookPolicy, ExchangeAccountType accountType,
string displayName, string accountName, string name,
string domain, string password, bool enablePOP, bool enableIMAP, bool enableOWA, bool enableMAPI, bool enableActiveSync,
int issueWarningKB, int prohibitSendKB, int prohibitSendReceiveKB, int keepDeletedItemsDays)
int issueWarningKB, int prohibitSendKB, int prohibitSendReceiveKB, int keepDeletedItemsDays, int maxRecipients, int maxSendMessageSizeKB, int maxReceiveMessageSizeKB, bool hideFromAddressBook)
{
try
{
LogStart("CreateMailbox");
string ret = ES.CreateMailbox(organizationId, organizationDistinguishedName, mailboxDatabase, securityGroup,
offlineAddressBook, accountType,
offlineAddressBook, addressBookPolicy, accountType,
displayName, accountName, name, domain, password, enablePOP, enableIMAP,
enableOWA, enableMAPI, enableActiveSync,
issueWarningKB, prohibitSendKB, prohibitSendReceiveKB, keepDeletedItemsDays);
issueWarningKB, prohibitSendKB, prohibitSendReceiveKB, keepDeletedItemsDays,
maxRecipients, maxSendMessageSizeKB, maxReceiveMessageSizeKB, hideFromAddressBook);
LogEnd("CreateMailbox");
return ret;
}
@ -305,7 +327,7 @@ namespace WebsitePanel.Server
throw;
}
}
*/
[WebMethod, SoapHeader("settings")]
public void DeleteMailbox(string accountName)
{
@ -357,12 +379,12 @@ namespace WebsitePanel.Server
}
[WebMethod, SoapHeader("settings")]
public void SetMailboxGeneralSettings(string accountName, string displayName, string password, bool hideFromAddressBook, bool disabled, string firstName, string initials, string lastName, string address, string city, string state, string zip, string country, string jobTitle, string company, string department, string office, string managerAccountName, string businessPhone, string fax, string homePhone, string mobilePhone, string pager, string webPage, string notes)
public void SetMailboxGeneralSettings(string accountName, bool hideFromAddressBook, bool disabled)
{
try
{
LogStart("SetMailboxGeneralSettings");
ES.SetMailboxGeneralSettings(accountName, displayName, password, hideFromAddressBook, disabled, firstName, initials, lastName, address, city, state, zip, country, jobTitle, company, department, office, managerAccountName, businessPhone, fax, homePhone, mobilePhone, pager, webPage, notes);
ES.SetMailboxGeneralSettings(accountName, hideFromAddressBook, disabled);
LogEnd("SetMailboxGeneralSettings");
}
catch (Exception ex)
@ -390,12 +412,12 @@ namespace WebsitePanel.Server
}
[WebMethod, SoapHeader("settings")]
public void SetMailboxMailFlowSettings(string accountName, bool enableForwarding, string forwardingAccountName, bool forwardToBoth, string[] sendOnBehalfAccounts, string[] acceptAccounts, string[] rejectAccounts, int maxRecipients, int maxSendMessageSizeKB, int maxReceiveMessageSizeKB, bool requireSenderAuthentication)
public void SetMailboxMailFlowSettings(string accountName, bool enableForwarding, string forwardingAccountName, bool forwardToBoth, string[] sendOnBehalfAccounts, string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication)
{
try
{
LogStart("SetMailboxMailFlowSettings");
ES.SetMailboxMailFlowSettings(accountName, enableForwarding, forwardingAccountName, forwardToBoth, sendOnBehalfAccounts, acceptAccounts, rejectAccounts, maxRecipients, maxSendMessageSizeKB, maxReceiveMessageSizeKB, requireSenderAuthentication);
ES.SetMailboxMailFlowSettings(accountName, enableForwarding, forwardingAccountName, forwardToBoth, sendOnBehalfAccounts, acceptAccounts, rejectAccounts, requireSenderAuthentication);
LogEnd("SetMailboxMailFlowSettings");
}
catch (Exception ex)
@ -424,13 +446,13 @@ namespace WebsitePanel.Server
[WebMethod, SoapHeader("settings")]
public void SetMailboxAdvancedSettings(string organizationId, string accountName, bool enablePOP, bool enableIMAP, bool enableOWA, bool enableMAPI, bool enableActiveSync,
int issueWarningKB, int prohibitSendKB, int prohibitSendReceiveKB, int keepDeletedItemsDays)
int issueWarningKB, int prohibitSendKB, int prohibitSendReceiveKB, int keepDeletedItemsDays, int maxRecipients, int maxSendMessageSizeKB, int maxReceiveMessageSizeKB)
{
try
{
LogStart("SetMailboxAdvancedSettings");
ES.SetMailboxAdvancedSettings(organizationId, accountName, enablePOP, enableIMAP, enableOWA, enableMAPI, enableActiveSync,
issueWarningKB, prohibitSendKB, prohibitSendReceiveKB, keepDeletedItemsDays);
issueWarningKB, prohibitSendKB, prohibitSendReceiveKB, keepDeletedItemsDays, maxRecipients, maxSendMessageSizeKB, maxReceiveMessageSizeKB);
LogEnd("SetMailboxAdvancedSettings");
}
catch (Exception ex)
@ -646,12 +668,12 @@ namespace WebsitePanel.Server
#region Distribution Lists
[WebMethod, SoapHeader("settings")]
public void CreateDistributionList(string organizationId, string organizationDistinguishedName, string displayName, string accountName, string name, string domain, string managedBy)
public void CreateDistributionList(string organizationId, string organizationDistinguishedName, string displayName, string accountName, string name, string domain, string managedBy, string[] addressLists)
{
try
{
LogStart("CreateDistributionList");
ES.CreateDistributionList(organizationId, organizationDistinguishedName, displayName, accountName, name, domain, managedBy);
ES.CreateDistributionList(organizationId, organizationDistinguishedName, displayName, accountName, name, domain, managedBy, addressLists);
LogEnd("CreateDistributionList");
}
catch (Exception ex)
@ -695,12 +717,12 @@ namespace WebsitePanel.Server
}
[WebMethod, SoapHeader("settings")]
public void SetDistributionListGeneralSettings(string accountName, string displayName, bool hideFromAddressBook, string managedBy, string[] members, string notes)
public void SetDistributionListGeneralSettings(string accountName, string displayName, bool hideFromAddressBook, string managedBy, string[] members, string notes, string[] addressLists)
{
try
{
LogStart("SetDistributionListGeneralSettings");
ES.SetDistributionListGeneralSettings(accountName, displayName, hideFromAddressBook, managedBy, members, notes);
ES.SetDistributionListGeneralSettings(accountName, displayName, hideFromAddressBook, managedBy, members, notes, addressLists);
LogEnd("SetDistributionListGeneralSettings");
}
catch (Exception ex)
@ -728,12 +750,12 @@ namespace WebsitePanel.Server
}
[WebMethod, SoapHeader("settings")]
public void SetDistributionListMailFlowSettings(string accountName, string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication)
public void SetDistributionListMailFlowSettings(string accountName, string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication, string[] addressLists)
{
try
{
LogStart("SetDistributionListMailFlowSettings");
ES.SetDistributionListMailFlowSettings(accountName, acceptAccounts, rejectAccounts, requireSenderAuthentication);
ES.SetDistributionListMailFlowSettings(accountName, acceptAccounts, rejectAccounts, requireSenderAuthentication, addressLists);
LogEnd("SetDistributionListMailFlowSettings");
}
catch (Exception ex)
@ -761,12 +783,12 @@ namespace WebsitePanel.Server
}
[WebMethod, SoapHeader("settings")]
public void SetDistributionListEmailAddresses(string accountName, string[] emailAddresses)
public void SetDistributionListEmailAddresses(string accountName, string[] emailAddresses, string[] addressLists)
{
try
{
LogStart("SetDistributionListEmailAddresses");
ES.SetDistributionListEmailAddresses(accountName, emailAddresses);
ES.SetDistributionListEmailAddresses(accountName, emailAddresses, addressLists);
LogEnd("SetDistributionListEmailAddresses");
}
catch (Exception ex)
@ -777,12 +799,12 @@ namespace WebsitePanel.Server
}
[WebMethod, SoapHeader("settings")]
public void SetDistributionListPrimaryEmailAddress(string accountName, string emailAddress)
public void SetDistributionListPrimaryEmailAddress(string accountName, string emailAddress, string[] addressLists)
{
try
{
LogStart("SetDistributionListPrimaryEmailAddress");
ES.SetDistributionListPrimaryEmailAddress(accountName, emailAddress);
ES.SetDistributionListPrimaryEmailAddress(accountName, emailAddress, addressLists);
LogEnd("SetDistributionListPrimaryEmailAddress");
}
catch (Exception ex)
@ -793,9 +815,9 @@ namespace WebsitePanel.Server
}
[WebMethod, SoapHeader("settings")]
public void SetDistributionListPermissions(string organizationId, string accountName, string[] sendAsAccounts, string[] sendOnBehalfAccounts)
public void SetDistributionListPermissions(string organizationId, string accountName, string[] sendAsAccounts, string[] sendOnBehalfAccounts, string[] addressLists)
{
ES.SetDistributionListPermissions(organizationId, accountName, sendAsAccounts, sendOnBehalfAccounts);
ES.SetDistributionListPermissions(organizationId, accountName, sendAsAccounts, sendOnBehalfAccounts, addressLists);
}
[WebMethod, SoapHeader("settings")]

View file

@ -93,13 +93,9 @@ namespace WebsitePanel.Server
}
[WebMethod, SoapHeader("settings")]
public void CreateUser(string organizationId, string loginName, string displayName, string upn, string password, bool enabled)
public int CreateUser(string organizationId, string loginName, string displayName, string upn, string password, bool enabled)
{
Log.WriteStart("'{0} CreateUser", ProviderSettings.ProviderName);
Organization.CreateUser(organizationId, loginName, displayName, upn, password, enabled);
Log.WriteEnd("'{0}' CreateUser", ProviderSettings.ProviderName);
return Organization.CreateUser(organizationId, loginName, displayName, upn, password, enabled);
}
[WebMethod, SoapHeader("settings")]
@ -109,7 +105,7 @@ namespace WebsitePanel.Server
}
[WebMethod, SoapHeader("settings")]
public OrganizationUser GeUserGeneralSettings(string loginName, string organizationId)
public OrganizationUser GetUserGeneralSettings(string loginName, string organizationId)
{
return Organization.GetUserGeneralSettings(loginName, organizationId);
}
@ -147,5 +143,10 @@ namespace WebsitePanel.Server
return Organization.GetPasswordPolicy();
}
[WebMethod, SoapHeader("settings")]
public string GetSamAccountNameByUserPrincipalName(string organizationId, string userPrincipalName)
{
return Organization.GetSamAccountNameByUserPrincipalName(organizationId, userPrincipalName);
}
}
}

View file

@ -3,7 +3,7 @@
<!-- Display Settings -->
<PortalName>WebsitePanel</PortalName>
<!-- Enterprise Server -->
<EnterpriseServer>http://localhost:9002</EnterpriseServer>
<EnterpriseServer>http://localhost:9005</EnterpriseServer>
<!-- General Settings -->
<CultureCookieName>UserCulture</CultureCookieName>
<ThemeCookieName>UserTheme</ThemeCookieName>

View file

@ -486,6 +486,9 @@
<Control key="storage_usage_details" src="WebsitePanel/ExchangeServer/ExchangeStorageUsageBreakdown.ascx" title="ExchangeStorageUsageBreakdown" type="View" />
<Control key="storage_limits" src="WebsitePanel/ExchangeServer/ExchangeStorageLimits.ascx" title="ExchangeStorageLimits" type="View" />
<Control key="activesync_policy" src="WebsitePanel/ExchangeServer/ExchangeActiveSyncSettings.ascx" title="ExchangeActiveSyncSettings" type="View" />
<Control key="mailboxplans" src="WebsitePanel/ExchangeServer/ExchangeMailboxPlans.ascx" title="ExchangeMailboxPlans" type="View" />
<Control key="add_mailboxplan" src="WebsitePanel/ExchangeServer/ExchangeAddMailboxPlan.ascx" title="ExchangeAddMailboxPlan" type="View" />
<Control key="CRMOrganizationDetails" src="WebsitePanel/CRM/CRMOrganizationDetails.ascx" title="ExchangeActiveSyncSettings" type="View" />
<Control key="CRMUsers" src="WebsitePanel/CRM/CRMUsers.ascx" title="CRM Users" type="View" />
<Control key="CRMUserRoles" src="WebsitePanel/CRM/CRMUserRoles.ascx" title="CRM User Roles" type="View" />

View file

@ -2806,7 +2806,7 @@
<value>Contacts per Organization</value>
</data>
<data name="Quota.Exchange2007.DiskSpace" xml:space="preserve">
<value>Max mailbox size, MB</value>
<value>Mailbox storage, MB</value>
</data>
<data name="Quota.Exchange2007.DistributionLists" xml:space="preserve">
<value>Distribution Lists per Organization</value>
@ -2850,6 +2850,18 @@
<data name="Quota.Exchange2007.PublicFolders" xml:space="preserve">
<value>Public Folders per Organization</value>
</data>
<data name="Quota.Exchange2007.KeepDeletedItemsDays" xml:space="preserve">
<value>Keep Deleted Items (Days)</value>
</data>
<data name="Quota.Exchange2007.MaxRecipients" xml:space="preserve">
<value>Maximum Recipients</value>
</data>
<data name="Quota.Exchange2007.MaxSendMessageSizeKB" xml:space="preserve">
<value>Maximum Send Message Size (Kb)</value>
</data>
<data name="Quota.Exchange2007.MaxReceiveMessageSizeKB" xml:space="preserve">
<value>Maximum Receive Message Size (Kb)</value>
</data>
<data name="ResourceGroup.Exchange" xml:space="preserve">
<value>Hosted Exchange</value>
</data>
@ -4990,4 +5002,7 @@
<data name="Quota.HostedSharePoint.UseSharedSSL" xml:space="preserve">
<value>Use shared SSL Root</value>
</data>
<data name="Quota.Exchange2007.IsConsumer" xml:space="preserve">
<value>Consumer Organization Support</value>
</data>
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 832 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 719 B

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCancel.Text" xml:space="preserve">
<value>Cancel</value>
@ -219,4 +219,7 @@
<data name="valRequirePlan.ErrorMessage" xml:space="preserve">
<value>Please select hosting plan</value>
</data>
<data name="chkIntegratedOUProvisioning.Text" xml:space="preserve">
<value>Automated Hosted Organization Provisioning</value>
</data>
</root>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnSave.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Updating ActiveSync settings...');</value>
@ -151,7 +151,7 @@
<value>Windows SharePoint Services</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;Exchange Server 2007 enables users who have mobile devices to synchronize mailbox data by using Exchange ActiveSync. Users can synchronize e-mail, contacts, calendars, and task folders. &lt;/p&gt;&lt;p&gt;
<value>&lt;p&gt;Exchange Server enables users who have mobile devices to synchronize mailbox data by using Exchange ActiveSync. Users can synchronize e-mail, contacts, calendars, and task folders. &lt;/p&gt;&lt;p&gt;
ActiveSync mailbox policy allows you to apply a common set of security settings to all users in organization.
&lt;/p&gt;</value>
</data>

View file

@ -112,13 +112,16 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCancel" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>Enter domain name, e.g. "mydomain.com" or "sub.mydomain.com"</value>
<value>Select a domain name, e.g. "mydomain.com" or "sub.mydomain.com"</value>
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Add Domain Name</value>

View file

@ -112,20 +112,17 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnSave.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Updating mailbox settings...');</value>
</data>
<data name="btnSave.Text" xml:space="preserve">
<value>Save Changes</value>
</data>
<data name="chkActiveSync.Text" xml:space="preserve">
<value>ActiveSync</value>
</data>
<data name="chkHideFromAddressBook" xml:space="preserve">
<value>Hide from Addressbook</value>
</data>
<data name="chkIMAP.Text" xml:space="preserve">
<value>IMAP</value>
</data>
@ -135,20 +132,11 @@
<data name="chkOWA.Text" xml:space="preserve">
<value>OWA/HTTP</value>
</data>
<data name="chkPmmAllowed.Text" xml:space="preserve">
<value>Allow these settings to be managed from &lt;b&gt;Personal Mailbox Manager&lt;/b&gt;</value>
</data>
<data name="chkPOP3.Text" xml:space="preserve">
<value>POP3</value>
</data>
<data name="chkUseOrgDeleteRetention.Text" xml:space="preserve">
<value>Use organization defaults</value>
</data>
<data name="chkUseOrgStorageQuotas.Text" xml:space="preserve">
<value>Use organization defaults</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;In "Mailbox Features" section you may enable/disable specific access protocols for the mailbox.&lt;/p&gt;&lt;p&gt;You may override mailbox quotas and retention period defined on the organization level. Please note, that you cannot specify storage settings higher than defined in the space hosting plan.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Domain User Name&lt;/b&gt; is used when setting up mailbox in Outlook 2003/2007.&lt;/p&gt;</value>
<value>&lt;p&gt; A Mailbox plan is a template that defines the characteristics of a mailbox &lt;/p&gt; &lt;p&gt;The mailbox plan name needs to be unique. A mailbox plan cannot be modified. In case a mailbox needs a mailbox plan with another characteristics, a new mailbox plan needs to be created and assigned to the mailbox. A mailbox plan can only be deleted when the plan is not assigned to any mailboxes. &lt;/p&gt;</value>
</data>
<data name="locDays.Text" xml:space="preserve">
<value>days</value>
@ -162,11 +150,17 @@
<data name="locKeepDeletedItems.Text" xml:space="preserve">
<value>Keep deleted items for:</value>
</data>
<data name="locLastLogoff.Text" xml:space="preserve">
<value>Last Logoff:</value>
<data name="locMailboxSize.Text" xml:space="preserve">
<value>Mailbox size:</value>
</data>
<data name="locLastLogon.Text" xml:space="preserve">
<value>Last Logon:</value>
<data name="locMaxReceiveMessageSizeKB.Text" xml:space="preserve">
<value>Maximum Receive Message Size:</value>
</data>
<data name="locMaxRecipients.Text" xml:space="preserve">
<value>Maximum Recipients:</value>
</data>
<data name="locMaxSendMessageSizeKB.Text" xml:space="preserve">
<value>Maximum Send Message Size:</value>
</data>
<data name="locProhibitSend.Text" xml:space="preserve">
<value>Prohibit send at:</value>
@ -175,13 +169,7 @@
<value>Prohibit send and receive at:</value>
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Edit Mailbox</value>
</data>
<data name="locTotalItems.Text" xml:space="preserve">
<value>Total Items:</value>
</data>
<data name="locTotalSize.Text" xml:space="preserve">
<value>Total Size (MB):</value>
<value>Add Mailbox plan</value>
</data>
<data name="locWhenSizeExceeds.Text" xml:space="preserve">
<value>When the mailbox size exceeds the indicated amount:</value>
@ -189,19 +177,25 @@
<data name="secDeleteRetention.Text" xml:space="preserve">
<value>Delete Item Retention</value>
</data>
<data name="secDomainUser.Text" xml:space="preserve">
<value>Domain User Name</value>
</data>
<data name="secMailboxFeatures.Text" xml:space="preserve">
<value>Mailbox Features</value>
</data>
<data name="secStatistics.Text" xml:space="preserve">
<value>Mailbox Statistics</value>
<data name="secMailboxGeneral.Text" xml:space="preserve">
<value>General</value>
</data>
<data name="secMailboxPlan.Text" xml:space="preserve">
<value>Mailbox plan</value>
</data>
<data name="secStorageQuotas.Text" xml:space="preserve">
<value>Mailbox Quotas</value>
<value>Quotas</value>
</data>
<data name="Text.PageName" xml:space="preserve">
<value>Mailboxes</value>
<value>Mailbox plan</value>
</data>
<data name="valRequireMailboxPlan.ErrorMessage" xml:space="preserve">
<value>Please enter correct mailboxplan</value>
</data>
<data name="valRequireMailboxPlan.Text" xml:space="preserve">
<value>*</value>
</data>
</root>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnSave.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Updating contact settings...');</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnSave.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Updating contact settings...');</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCreateContact.Text" xml:space="preserve">
<value>Create New Contact</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCreate.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Creating contact...');</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCreate.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Creating distribution list...');</value>
@ -124,7 +124,7 @@
<value>Create Distribution List</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;&lt;b&gt;Display Name&lt;/b&gt; will be shown in the GAL in Outlook and OWA.&lt;/p&gt;&lt;p&gt;You can add new Domain Names on "Domain Names" page. We always provide you with a free domain that would allow your organization migrating to Exchange as soon as possible.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Primary E-Mail Address&lt;/b&gt; is shown in the GAL and in "From" field of all messages sent from this DL.&lt;/p&gt;</value>
<value>&lt;p&gt;&lt;b&gt;Display Name&lt;/b&gt; will be shown in the GAL in Outlook and OWA.&lt;/p&gt;&lt;p&gt;You can add new Domain Names on "Domain Names" page. &lt;/p&gt;&lt;p&gt;&lt;b&gt;Primary E-Mail Address&lt;/b&gt; is shown in the GAL and in "From" field of all messages sent from this DL.&lt;/p&gt;</value>
</data>
<data name="locAccount.Text" xml:space="preserve">
<value>E-mail Address: *</value>
@ -132,22 +132,22 @@
<data name="locDisplayName.Text" xml:space="preserve">
<value>Display Name: *</value>
</data>
<data name="locManagedBy.Text" xml:space="preserve">
<value>Managed by: *</value>
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Create New Distribution List</value>
</data>
<data name="Text.PageName" xml:space="preserve">
<value>Distribution Lists</value>
</data>
<data name="valManager.ErrorMessage" xml:space="preserve">
<value>Please specify a manager</value>
</data>
<data name="valRequireDisplayName.ErrorMessage" xml:space="preserve">
<value>Enter Display Name</value>
</data>
<data name="valRequireDisplayName.Text" xml:space="preserve">
<value>*</value>
</data>
<data name="locManagedBy.Text" xml:space="preserve">
<value>Managed by: *</value>
</data>
<data name="valManager.ErrorMessage" xml:space="preserve">
<value>Please specify a manager</value>
</data>
</root>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCreate.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Creating mailbox...');</value>
@ -134,7 +134,7 @@
&lt;p&gt;&lt;b&gt;E-Mail Address&lt;/b&gt; is a User Principal Name (UPN). It is used as a logon name in Outlook, Outlook Web Access (OWA) or SharePoint.&lt;/p&gt;
&lt;p&gt;New organization domains can be added on "Domain Names" page. Temporary domain name is provided by default to allow creating new accounts as soon as possible.&lt;/p&gt;
&lt;p&gt;New organization domains can be added on "Domain Names" page.&lt;/p&gt;
&lt;p&gt;Make sure your password is strong enough, i.e. contains lower and capital letters, numbers and symbols.</value>
</data>
@ -156,6 +156,9 @@
<data name="locPassword.Text" xml:space="preserve">
<value>Password: *</value>
</data>
<data name="locSubscriberNumber.Text" xml:space="preserve">
<value>Subscriber Number: *</value>
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Create New Mailbox</value>
</data>
@ -183,4 +186,10 @@
<data name="valRequireDisplayName.Text" xml:space="preserve">
<value>*</value>
</data>
<data name="valRequireSubscriberNumber.ErrorMessage" xml:space="preserve">
<value>Enter Subscriber Number</value>
</data>
<data name="valRequireSubscriberNumber.Text" xml:space="preserve">
<value>*</value>
</data>
</root>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnAddEmail.Text" xml:space="preserve">
<value>Add E-mail Address</value>
@ -127,7 +127,7 @@
<value>Set As Primary</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;b&gt;Primary E-Mail Address&lt;/b&gt; is a User Principal Name (UPN). It will be used as a login in Outlook 2003/2007 and Outlook Web Access (OWA). Also, Primary E-Mail Address will be shown in "From" field of messages sent from this mailbox.&lt;/p&gt;&lt;p&gt;You can add new Domain Names on "Domain Names" page. We always provide you with a free domain that would allow your organization migrating to Exchange as soon as possible.&lt;/p&gt;&lt;p&gt;E-mail addresses of all Exchange accounts should be unique across the organization. You cannot add the same e-mail address to several accounts.&lt;/p&gt;</value>
<value>&lt;b&gt;Primary E-Mail Address&lt;/b&gt; is a User Principal Name (UPN). It will be used as a login in Outlook and Outlook Web Access (OWA). Also, Primary E-Mail Address will be shown in "From" field of messages sent from this mailbox.&lt;/p&gt;&lt;p&gt;You can add new Domain Names on "Domain Names" page.&lt;/p&gt;&lt;p&gt;E-mail addresses of all Exchange accounts should be unique across the organization. You cannot add the same e-mail address to several accounts.&lt;/p&gt;</value>
</data>
<data name="gvEmailAddress.Header" xml:space="preserve">
<value>E-mail Address</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnSave.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Updating distribution list settings...');</value>
@ -144,13 +144,13 @@
<data name="Text.PageName" xml:space="preserve">
<value>Distribution Lists</value>
</data>
<data name="valManager.ErrorMessage" xml:space="preserve">
<value>Please specify a manager</value>
</data>
<data name="valRequireDisplayName.ErrorMessage" xml:space="preserve">
<value>Enter Display Name</value>
</data>
<data name="valRequireDisplayName.Text" xml:space="preserve">
<value>*</value>
</data>
<data name="valManager.ErrorMessage" xml:space="preserve">
<value>Please specify a manager</value>
</data>
</root>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnSave.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Updating distribution list settings...');</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCreateList.Text" xml:space="preserve">
<value>Create New Distribution List</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnAddDomain.Text" xml:space="preserve">
<value>Add New Domain</value>
@ -142,11 +142,9 @@
<value>Domain Name</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;Each organization can have several domain names. These domain names are used as part of the primary e-mail address (UPN) of the new accounts. Exchange-enabled organizations use domain name when creating e-mail addresses for mailboxes, distribution lists and mail-enabled public folders. Domain name is also used when creating new site collection in SharePoint.&lt;/p&gt;
<value>&lt;p&gt;Each organization can have several domain names. These domain names are used as part of the primary e-mail address (UPN) of the new accounts. Exchange-enabled organizations use domain name when creating e-mail addresses for mailboxes, and distribution lists. Domain name is also used when creating new site collection in SharePoint.&lt;/p&gt;
&lt;p&gt;Default domain name is selected by default when creating a new e-mail address. You can always change default domain name and it will not affect existing accounts.&lt;/p&gt;
&lt;p&gt;For each domain name WebsitePanel creates a corresponding DNS Zone. You can edit DNS zone records by clicking domain name link. If you are unsure about the structure of DNS zone, please do not modify zone records.&lt;/p&gt;</value>
&lt;p&gt;For each domain name a corresponding DNS Zone is created. You can edit DNS zone records by clicking domain name link. If you are unsure about the structure of DNS zone, please do not modify zone records.&lt;/p&gt;</value>
</data>
<data name="locQuota.Text" xml:space="preserve">
<value>Total Domain Names Used:</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnAdd.Text" xml:space="preserve">
<value>Add record</value>
@ -130,7 +130,7 @@
<value>Save</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;For each domain name WebsitePanel creates a corresponding DNS Zone. If you are unsure about the structure of DNS zone, please do not modify zone records.&lt;/p&gt;</value>
<value>&lt;p&gt;For each domain name a corresponding DNS Zone is created. If you are unsure about the structure of DNS zone, please do not modify zone records.&lt;/p&gt;</value>
</data>
<data name="gvRecords.Empty" xml:space="preserve">
<value>No DNS records defined.</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnAddEmail.Text" xml:space="preserve">
<value>Add E-mail Address</value>
@ -130,7 +130,7 @@
<value>Allow these settings to be managed from &lt;b&gt;Personal Mailbox Manager&lt;/b&gt;</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;b&gt;Primary E-Mail Address&lt;/b&gt; is a User Principal Name (UPN). It will be used as a login in Outlook 2003/2007 and Outlook Web Access (OWA). Also, Primary E-Mail Address will be shown in "From" field of messages sent from this mailbox.&lt;/p&gt;&lt;p&gt;You can add new Domain Names on "Domain Names" page. We always provide you with a free domain that would allow your organization migrating to Exchange as soon as possible.&lt;/p&gt;&lt;p&gt;E-mail addresses of all Exchange accounts should be unique across the organization. You cannot add the same e-mail address to several accounts.&lt;/p&gt;</value>
<value>&lt;b&gt;Primary E-Mail Address&lt;/b&gt; is a User Principal Name (UPN). It will be used as a login in Outlook and Outlook Web Access (OWA). Also, Primary E-Mail Address will be shown in "From" field of messages sent from this mailbox.&lt;/p&gt;&lt;p&gt;You can add new Domain Names on "Domain Names" page. &lt;/p&gt;&lt;p&gt;E-mail addresses of all Exchange accounts should be unique across the organization. You cannot add the same e-mail address to several accounts.&lt;/p&gt;</value>
</data>
<data name="gvEmailAddress.Header" xml:space="preserve">
<value>E-mail Address</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnSave.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Updating mailbox settings...');</value>
@ -133,85 +133,22 @@
<value>Allow these settings to be managed from &lt;b&gt;Personal Mailbox Manager&lt;/b&gt;</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;The General tab displays general information about the mailbox user. Use this tab to view or modify the display name, password, company information, contact information and address. You can also specify whether to disable the mailbox user or hide the mailbox user from Exchange address lists.&lt;/p&gt;</value>
<value>&lt;p&gt;The General tab displays general information about the mailbox Use this tab to view or modify the mailbox characteristics such as size and show in your address book in the Exchange address lists. You can also specify whether to disable the mailbox user.&lt;/p&gt;</value>
</data>
<data name="locAddress.Text" xml:space="preserve">
<value>Address:</value>
<data name="locMailboxplanName.Text" xml:space="preserve">
<value>Mailbox plan:</value>
</data>
<data name="locBusinessPhone.Text" xml:space="preserve">
<value>Business Phone:</value>
</data>
<data name="locCity.Text" xml:space="preserve">
<value>City:</value>
</data>
<data name="locCompany.Text" xml:space="preserve">
<value>Company:</value>
</data>
<data name="locCountry.Text" xml:space="preserve">
<value>Country/Region:</value>
</data>
<data name="locDepartment.Text" xml:space="preserve">
<value>Department:</value>
</data>
<data name="locDisplayName.Text" xml:space="preserve">
<value>Display Name: *</value>
</data>
<data name="locFax.Text" xml:space="preserve">
<value>Fax:</value>
</data>
<data name="locFirstName.Text" xml:space="preserve">
<value>First Name:</value>
</data>
<data name="locHomePhone.Text" xml:space="preserve">
<value>Home Phone:</value>
</data>
<data name="locInitials.Text" xml:space="preserve">
<value>Initials:</value>
</data>
<data name="locJobTitle.Text" xml:space="preserve">
<value>Job Title:</value>
</data>
<data name="locLastName.Text" xml:space="preserve">
<value>Last Name:</value>
</data>
<data name="locManager.Text" xml:space="preserve">
<value>Manager:</value>
</data>
<data name="locMobilePhone.Text" xml:space="preserve">
<value>Mobile Phone:</value>
</data>
<data name="locNotes.Text" xml:space="preserve">
<value>Notes:</value>
</data>
<data name="locOffice.Text" xml:space="preserve">
<value>Office:</value>
</data>
<data name="locPager.Text" xml:space="preserve">
<value>Pager:</value>
</data>
<data name="locPassword.Text" xml:space="preserve">
<value>Password:</value>
</data>
<data name="locState.Text" xml:space="preserve">
<value>State/Province:</value>
<data name="locQuota.Text" xml:space="preserve">
<value>Mailbox size:</value>
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Edit Mailbox</value>
</data>
<data name="locWebPage.Text" xml:space="preserve">
<value>Web Page:</value>
<data name="secCalendarSettings.Text" xml:space="preserve">
<value>Calendar Settings</value>
</data>
<data name="locZip.Text" xml:space="preserve">
<value>Zip/Postal Code:</value>
</data>
<data name="secAddressInfo.Text" xml:space="preserve">
<value>Address</value>
</data>
<data name="secCompanyInfo.Text" xml:space="preserve">
<value>Company Information</value>
</data>
<data name="secContactInfo.Text" xml:space="preserve">
<value>Contact Information</value>
<data name="secGeneral.Text" xml:space="preserve">
<value>General</value>
</data>
<data name="Text.PageName" xml:space="preserve">
<value>Mailboxes</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnSave.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Updating mailbox settings...');</value>

View file

@ -112,13 +112,13 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="deviceUserAgentColumn.HeaderText" xml:space="preserve">
<value>User Agent</value>
<data name="cmdDelete.OnClientClick" xml:space="preserve">
<value>return confirm('Are you sure you want to remove the device partnership?');</value>
</data>
<data name="deviceStatus.HeaderText" xml:space="preserve">
<value>Status</value>
@ -126,34 +126,34 @@
<data name="deviceTypeColumn.HeaderText" xml:space="preserve">
<value>Type</value>
</data>
<data name="deviceUserAgentColumn.HeaderText" xml:space="preserve">
<value>User Agent</value>
</data>
<data name="gvMobile.EmptyDataText" xml:space="preserve">
<value>There are no mobile devices.</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;Manage mobile devices here.&lt;/p&gt;&lt;p&gt;To add a new device, begin a partnership with Microsoft Exchange from the device and it will appear in the device list.&lt;/p&gt;&lt;p&gt;You can remove devices that you are no longer using. If you forget your device password, you can access it here. If you lose your phone or mobile device, you can initiate a remote device wipe to protect your information.&lt;/p&gt;</value>
</data>
<data name="lastSyncTimeColumn.HeaderText" xml:space="preserve">
<value>Last Sync Time</value>
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Edit Mailbox</value>
</data>
<data name="OK" xml:space="preserve">
<value>OK</value>
</data>
<data name="PendingWipe" xml:space="preserve">
<value>Pending Wipe</value>
</data>
<data name="Text.PageName" xml:space="preserve">
<value>Edit Mailbox</value>
</data>
<data name="Unknown" xml:space="preserve">
<value>Unknown</value>
</data>
<data name="WipeSuccessful" xml:space="preserve">
<value>Wipe Successful</value>
</data>
<data name="cmdDelete.OnClientClick" xml:space="preserve">
<value>return confirm('Are you sure you want to remove the device partnership?');</value>
</data>
<data name="Text.PageName" xml:space="preserve">
<value>Edit Mailbox</value>
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Edit Mailbox</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;Manage mobile devices here.&lt;/p&gt;&lt;p&gt;To add a new device, begin a partnership with Microsoft Exchange from the device and it will appear in the device list.&lt;/p&gt;&lt;p&gt;You can remove devices that you are no longer using. If you forget your device password, you can access it here. If you lose your phone or mobile device, you can initiate a remote device wipe to protect your information.&lt;/p&gt;</value>
</data>
</root>

View file

@ -112,11 +112,26 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnBack.Text" xml:space="preserve">
<value>Back</value>
</data>
<data name="btnCancel.Text" xml:space="preserve">
<value>Cancel Pending Wipe Request</value>
</data>
<data name="btnWipeAllData.OnClientClick" xml:space="preserve">
<value>return confirm('Are you sure you want to wipe all data from your device?');</value>
</data>
<data name="btnWipeAllData.Text" xml:space="preserve">
<value>Wipe All Data from Device</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;Manage the mobile device here.&lt;/p&gt;&lt;p&gt;If you forget your device password, you can access it here. If you lose your phone or mobile device, you can initiate a remote device wipe to protect your information . You can also cancel a wipe request if it was initiated by accident or the device was found subsequently.&lt;/p&gt;</value>
</data>
<data name="locDeviceAcnowledgeTime.Text" xml:space="preserve">
<value>Device wipe acnowledge time:</value>
</data>
@ -165,37 +180,22 @@
<data name="locStatus.Text" xml:space="preserve">
<value>Status:</value>
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Edit Mailbox</value>
</data>
<data name="OK" xml:space="preserve">
<value>OK</value>
</data>
<data name="PendingWipe" xml:space="preserve">
<value>Pending wipe</value>
</data>
<data name="Text.PageName" xml:space="preserve">
<value>Edit Mailbox</value>
</data>
<data name="Unknown" xml:space="preserve">
<value>Unknown</value>
</data>
<data name="WipeSuccessful" xml:space="preserve">
<value>Wipe successful</value>
</data>
<data name="btnBack.Text" xml:space="preserve">
<value>Back</value>
</data>
<data name="btnCancel.Text" xml:space="preserve">
<value>Cancel Pending Wipe Request</value>
</data>
<data name="btnWipeAllData.Text" xml:space="preserve">
<value>Wipe All Data from Device</value>
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Edit Mailbox</value>
</data>
<data name="Text.PageName" xml:space="preserve">
<value>Edit Mailbox</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;Manage the mobile device here.&lt;/p&gt;&lt;p&gt;If you forget your device password, you can access it here. If you lose your phone or mobile device, you can initiate a remote device wipe to protect your information . You can also cancel a wipe request if it was initiated by accident or the device was found subsequently.&lt;/p&gt;</value>
</data>
<data name="btnWipeAllData.OnClientClick" xml:space="preserve">
<value>return confirm('Are you sure you want to wipe all data from your device?');</value>
</data>
</root>

View file

@ -112,17 +112,23 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnSave.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Updating mailbox permissions...');</value>
</data>
<data name="btnSave.Text" xml:space="preserve">
<value>Save Changes</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;When you grant &lt;b&gt;Full Access&lt;/b&gt; permission to a user, that user can open this mailbox and access all of its content.&lt;/p&gt; &lt;br&gt;&lt;p&gt;When you grant &lt;b&gt;Send As&lt;/b&gt; permission to a user, that user can send messages as this mailbox. &lt;/p&gt; &lt;br&gt;&lt;p&gt;We do not recommend to use this setting together “Send on behalf” (“Send as”) it may work unpredictable&lt;/p&gt;</value>
</data>
<data name="grandPermission.Text" xml:space="preserve">
<value>Grant this permission to:</value>
</data>
<data name="secFullAccessPermission.Text" xml:space="preserve">
<value>Full Access</value>
</data>
@ -132,10 +138,4 @@
<data name="Text.PageName" xml:space="preserve">
<value>Permissions</value>
</data>
<data name="grandPermission.Text" xml:space="preserve">
<value>Grant this permission to:</value>
</data>
<data name="btnSave.Text" xml:space="preserve">
<value>Save Changes</value>
</data>
</root>

View file

@ -112,36 +112,42 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="locDomainTemplates.Text" xml:space="preserve">
<value>Domain Templates</value>
<data name="btnAddMailboxPlan.Text" xml:space="preserve">
<value>Add New Mailbox plan</value>
</data>
<data name="locEcpDomain.Text" xml:space="preserve">
<value>Exchange Control Panel URL:</value>
<data name="btnSetDefaultMailboxPlan.Text" xml:space="preserve">
<value>Set Default Mailbox plan</value>
</data>
<data name="locEcpURLDescr.Text" xml:space="preserve">
<value>You can use [DOMAIN_NAME] variable for organization default domain.</value>
<data name="cmdDelete.OnClientClick" xml:space="preserve">
<value>if(!confirm('Are you sure you want to delete selected mailbox plan?')) return false; else ShowProgressDialog('Deleting Mailbox plan...');</value>
</data>
<data name="locOfferID.Text" xml:space="preserve">
<value>Offer ID:</value>
<data name="cmdDelete.Text" xml:space="preserve">
<value>Delete</value>
</data>
<data name="locOrganizationTemplate.Text" xml:space="preserve">
<value>Organization Template</value>
<data name="cmdDelete.ToolTip" xml:space="preserve">
<value>Delete Mailbox plan</value>
</data>
<data name="locProgramID.Text" xml:space="preserve">
<value>Program ID:</value>
<data name="gvMailboxPlan.Header" xml:space="preserve">
<value>Mailbox plan</value>
</data>
<data name="locTemporaryDomain.Text" xml:space="preserve">
<value>Temporary domain:</value>
<data name="gvMailboxPlanDefault.Header" xml:space="preserve">
<value>Default Mailbox plan</value>
</data>
<data name="requireOfferID.Text" xml:space="preserve">
<value>*</value>
<data name="gvMailboxPlans.Empty" xml:space="preserve">
<value>No mailbox plans have been added yet. To add a new mailbox plan click "Add New Mailbox plan" button.</value>
</data>
<data name="requireProgramID.Text" xml:space="preserve">
<value>*</value>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt; A Mailbox plan is a template that defines the characteristics of a mailbox &lt;/p&gt; &lt;p&gt;The mailbox plan name needs to be unique. A mailbox plan cannot be modified. In case a mailbox needs a mailbox plan with another characteristics, a new mailbox plan needs to be created and assigned to the mailbox. A mailbox plan can only be deleted when the plan is not assigned to any mailboxes. &lt;/p&gt;</value>
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Mailbox plans</value>
</data>
<data name="Text.PageName" xml:space="preserve">
<value>Mailbox plans</value>
</data>
</root>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnSend.Text" xml:space="preserve">
<value>Send</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCreateMailbox.Text" xml:space="preserve">
<value>Create New Mailbox</value>
@ -132,6 +132,9 @@
<data name="cmdSearch.AlternateText" xml:space="preserve">
<value>Search</value>
</data>
<data name="ddlSearchColumnAccountName.Text" xml:space="preserve">
<value>Domain Account</value>
</data>
<data name="ddlSearchColumnDisplayName.Text" xml:space="preserve">
<value>Display Name</value>
</data>
@ -147,6 +150,12 @@
<data name="gvMailboxesEmail.Header" xml:space="preserve">
<value>Primary E-mail Address</value>
</data>
<data name="gvMailboxesMailboxPlan.Header" xml:space="preserve">
<value>Mailbox plan</value>
</data>
<data name="gvSubscriberNumber.Header" xml:space="preserve">
<value>Subscriber</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;&lt;b&gt;Mailboxes&lt;/b&gt; are used to receive and send electronic messages. Each mailbox is a separate Exchange account which may be a person, room or inventory unit.&lt;/p&gt;
@ -165,7 +174,4 @@
<data name="Text.PageName" xml:space="preserve">
<value>Mailboxes</value>
</data>
<data name="ddlSearchColumnAccountName.Text" xml:space="preserve">
<value>Domain Account</value>
</data>
</root>

View file

@ -1,162 +0,0 @@
<?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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnSave.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Updating storage settings...');</value>
</data>
<data name="btnSave.Text" xml:space="preserve">
<value>Save Changes</value>
</data>
<data name="btnSaveApply.OnClientClick" xml:space="preserve">
<value>if(!confirm('Please be aware that applying new storage settings to all mailboxes can take significant time to complete. Do you want to proceed?')) return false; else ShowProgressDialog('Applying storage settings to mailboxes...');</value>
</data>
<data name="btnSaveApply.Text" xml:space="preserve">
<value>Save and Apply to All Mailboxes</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;You can change storage limits and deleted items retention policy.&lt;/p&gt;&lt;p&gt;The settings will be applied for for new mailboxes only. By clicking "Save and Apply to All Mailboxes" button you can override these settings for all existing mailboxes.&lt;/p&gt;&lt;p&gt;Please note, that you cannot specify storage settings higher than defined in the space hosting plan.&lt;/p&gt;</value>
</data>
<data name="locIssueWarning.Text" xml:space="preserve">
<value>Issue warning at:</value>
</data>
<data name="locKeepDeletedItems.Text" xml:space="preserve">
<value>Keep deleted items for:</value>
</data>
<data name="locProhibitSend.Text" xml:space="preserve">
<value>Prohibit send at:</value>
</data>
<data name="locProhibitSendReceive.Text" xml:space="preserve">
<value>Prohibit send and receive at:</value>
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Storage Settings</value>
</data>
<data name="locWhenSizeExceeds.Text" xml:space="preserve">
<value>When the mailbox size exceeds the indicated amount:</value>
</data>
<data name="secDeletionSettings.Text" xml:space="preserve">
<value>Deletion Settings</value>
</data>
<data name="secStorageLimits.Text" xml:space="preserve">
<value>Storage Settings</value>
</data>
<data name="Text.PageName" xml:space="preserve">
<value>Storage Settings</value>
</data>
</root>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnRecalculate.OnClientClick" xml:space="preserve">
<value>return confirm('Recalculating organization disk space may require certain time to complete and this task will be performed asynchronously. New disk space value will be available in a few minutes. Proceed with disk space calculation?');</value>
@ -123,8 +123,11 @@
<data name="btnRecalculate.Text" xml:space="preserve">
<value>Recalculate Disk Space</value>
</data>
<data name="btnUsedSize.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Please wait...');</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;Organization disk space usage is calculated on timely basis (usually once a day). You can recalculate it right now by clicking "Recalculate Disk Space" button.&lt;/p&gt;&lt;p&gt;Click on the link with used disk space to see usage breakdown by all organization mailboxes and public folders.&lt;/p&gt;</value>
<value>&lt;p&gt;Organization disk space actual usage is calculated on timely basis (usually once a day). You can recalculate it right now by clicking "Recalculate Disk Space" button.&lt;/p&gt;&lt;p&gt;Click on the link with used disk space to see actual usage breakdown by all organization mailboxes.&lt;/p&gt;</value>
</data>
<data name="locAllocatedSize.Text" xml:space="preserve">
<value>Allocated Disk Space (MB):</value>
@ -136,7 +139,7 @@
<value>Storage Usage</value>
</data>
<data name="locUsedSize.Text" xml:space="preserve">
<value>Used Disk Space (MB):</value>
<value>Allocated Disk Space (MB):</value>
</data>
<data name="Text.PageName" xml:space="preserve">
<value>Storage Usage</value>
@ -144,7 +147,4 @@
<data name="Unlimited.Text" xml:space="preserve">
<value>Unlimited</value>
</data>
<data name="btnUsedSize.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Please wait...');</value>
</data>
</root>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnOK.Text" xml:space="preserve">
<value> OK </value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCreate.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Creating Organization...');</value>
@ -124,7 +124,7 @@
<value>Create Organization</value>
</data>
<data name="FormComments.Text" xml:space="preserve">
<value>&lt;p&gt;&lt;b&gt;Organization name&lt;/b&gt; is used just as display name for references purposes. It will not be used somewhere on Exchange Server.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Organization ID&lt;/b&gt; is an unique organization identifier. It can contain only numbers and letters and cannot be longer than 9 symbols. Organization ID will be used as GAL name and as a root public folder.&lt;/p&gt;</value>
<value>&lt;p&gt;&lt;b&gt;Organization name&lt;/b&gt; is used just as display name for references purposes. It will not be used somewhere on Exchange Server.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Organization ID&lt;/b&gt; is an unique organization identifier. Organization ID will be used as GAL name.&lt;/p&gt;</value>
</data>
<data name="locOrganizationID.Text" xml:space="preserve">
<value>Organization ID: *</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCreate.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Creating user...');</value>
@ -131,7 +131,7 @@
&lt;p&gt;&lt;b&gt;E-Mail Address&lt;/b&gt; is a User Principal Name (UPN). It is used as a logon name in Outlook, Outlook Web Access (OWA) or SharePoint.&lt;/p&gt;
&lt;p&gt;New organization domains can be added on "Domain Names" page. Temporary domain name is provided by default to allow creating new users as soon as possible.&lt;/p&gt;
&lt;p&gt;New organization domains can be added on "Domain Names" page.&lt;/p&gt;
&lt;p&gt;Make sure your password is strong enough, i.e. contains lower and capital letters, numbers and symbols.&lt;/p&gt;</value>
</data>
@ -144,6 +144,9 @@
<data name="locPassword.Text" xml:space="preserve">
<value>Password: *</value>
</data>
<data name="locSubscriberNumber.Text" xml:space="preserve">
<value>Subscriber Number: *</value>
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Create New User</value>
</data>
@ -156,4 +159,10 @@
<data name="valRequireDisplayName.Text" xml:space="preserve">
<value>*</value>
</data>
<data name="valRequireSubscriberNumber.ErrorMessage" xml:space="preserve">
<value>Enter Subscriber Number</value>
</data>
<data name="valRequireSubscriberNumber.Text" xml:space="preserve">
<value>*</value>
</data>
</root>

View file

@ -112,57 +112,16 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;Welcome to the organization home page!&lt;/p&gt;
&lt;p&gt;Using the left menu you can manage organization domain names and users.&lt;/p&gt;
&lt;p&gt;Organization statistics displays current status of the organization.&lt;/p&gt;</value>
</data>
<data name="lnkAllocatedDiskspace.Text" xml:space="preserve">
<value>Allocated Diskspace (MB)</value>
</data>
<data name="lnkContacts.Text" xml:space="preserve">
<value>Contacts:</value>
</data>
<data name="lnkDomains.Text" xml:space="preserve">
<value>Domain Names:</value>
</data>
<data name="lnkFolders.Text" xml:space="preserve">
<value>Public Folders:</value>
</data>
<data name="lnkLists.Text" xml:space="preserve">
<value>Distribution Lists:</value>
</data>
<data name="lnkMailboxes.Text" xml:space="preserve">
<value>Mailboxes:</value>
</data>
<data name="lnkSiteCollections.Text" xml:space="preserve">
<value>Site Collections:</value>
</data>
<data name="lnkUsedDiskspace.Text" xml:space="preserve">
<value>Used Diskspace (MB)</value>
</data>
<data name="lnkUsers.Text" xml:space="preserve">
<value>Users:</value>
</data>
<data name="locHeadStatistics.Text" xml:space="preserve">
<value>Organization Statistics</value>
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Home</value>
</data>
<data name="Text.PageName" xml:space="preserve">
<value>Home</value>
</data>
<data name="Unlimited.Text" xml:space="preserve">
<value>Unlimited</value>
</data>
<data name="lblCreated.Text" xml:space="preserve">
<value>Created:</value>
</data>
@ -172,22 +131,82 @@
<data name="lblOrganizationName.Text" xml:space="preserve">
<value>Organization Name:</value>
</data>
<data name="lnkCRMUsers.Text" xml:space="preserve">
<value>CRM Users:</value>
</data>
<data name="litTotalUserDiskSpace.Text" xml:space="preserve">
<value>Total Used Disk Space, MB:</value>
</data>
<data name="litUsedDiskSpace.Text" xml:space="preserve">
<value>Used Disk Space, MB:</value>
</data>
<data name="lnkAllocatedDiskspace.Text" xml:space="preserve">
<value>Allocated Diskspace (MB)</value>
</data>
<data name="lnkBESUsers.Text" xml:space="preserve">
<value>BlackBerry Users:</value>
</data>
<data name="lnkContacts.Text" xml:space="preserve">
<value>Contacts:</value>
</data>
<data name="lnkCRMUsers.Text" xml:space="preserve">
<value>CRM Users:</value>
</data>
<data name="lnkDomains.Text" xml:space="preserve">
<value>Domain Names:</value>
</data>
<data name="lnkExchangeStorage.Text" xml:space="preserve">
<value>Storage (Mb):</value>
</data>
<data name="lnkFolders.Text" xml:space="preserve">
<value>Public Folders:</value>
</data>
<data name="lnkLists.Text" xml:space="preserve">
<value>Distribution Lists:</value>
</data>
<data name="lnkLyncUsers.Text" xml:space="preserve">
<value>Users:</value>
</data>
<data name="lnkMailboxes.Text" xml:space="preserve">
<value>Mailboxes:</value>
</data>
<data name="lnkOCSUsers.Text" xml:space="preserve">
<value>OCS Users:</value>
</data>
<data name="lnkSiteCollections.Text" xml:space="preserve">
<value>Site Collections:</value>
</data>
<data name="lnkUsedDiskspace.Text" xml:space="preserve">
<value>Used Diskspace (MB)</value>
</data>
<data name="lnkUsers.Text" xml:space="preserve">
<value>Users:</value>
</data>
<data name="locBESStatistics.Text" xml:space="preserve">
<value>BlackBerry</value>
</data>
<data name="locCRM.Text" xml:space="preserve">
<value>CRM</value>
</data>
<data name="locExchangeStatistics.Text" xml:space="preserve">
<value>Exchange</value>
</data>
<data name="locHeadStatistics.Text" xml:space="preserve">
<value>Organization</value>
</data>
<data name="locLyncStatistics.Text" xml:space="preserve">
<value>Lync</value>
</data>
<data name="locOCSStatistics.Text" xml:space="preserve">
<value>OCS</value>
</data>
<data name="locSharePoint.Text" xml:space="preserve">
<value>SharePoint</value>
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Home</value>
</data>
<data name="Text.PageName" xml:space="preserve">
<value>Home</value>
</data>
<data name="Unlimited.Text" xml:space="preserve">
<value>Unlimited</value>
</data>
</root>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnSave.OnClientClick" xml:space="preserve">
<value>ShowProgressDialog('Updating user settings...');</value>
@ -126,11 +126,15 @@
<data name="chkDisable.Text" xml:space="preserve">
<value>Disable User</value>
</data>
<data name="chkLocked.Text" xml:space="preserve">
<value>Account is locked out</value>
</data>
<data name="chkSetPassword.Text" xml:space="preserve">
<value>Set Password</value>
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;&lt;b&gt;Display Name&lt;/b&gt; is a “friendly” name used by other programs, such as Microsoft Exchange or SharePoint.&lt;/p&gt;
&lt;p&gt;Make sure your password is strong enough, i.e. contains lower and capital letters, numbers and symbols.&lt;/p&gt;
&lt;p&gt;You can specify manager account to build organizational structure of your company.&lt;/p&gt;</value>
</data>
<data name="locAddress.Text" xml:space="preserve">
@ -154,6 +158,9 @@
<data name="locDisplayName.Text" xml:space="preserve">
<value>Display Name: *</value>
</data>
<data name="locExternalEmailAddress.Text" xml:space="preserve">
<value>External e-mail:</value>
</data>
<data name="locFax.Text" xml:space="preserve">
<value>Fax:</value>
</data>
@ -193,6 +200,9 @@
<data name="locState.Text" xml:space="preserve">
<value>State/Province:</value>
</data>
<data name="locSubscriberNumber.Text" xml:space="preserve">
<value>Subscriber Number:</value>
</data>
<data name="locTitle.Text" xml:space="preserve">
<value>Edit User</value>
</data>
@ -226,10 +236,4 @@
<data name="valRequireDisplayName.Text" xml:space="preserve">
<value>*</value>
</data>
<data name="locExternalEmailAddress.Text" xml:space="preserve">
<value>External e-mail:</value>
</data>
<data name="chkLocked.Text" xml:space="preserve">
<value>Account is locked out</value>
</data>
</root>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnSend.Text" xml:space="preserve">
<value>Send</value>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCreateUser.Text" xml:space="preserve">
<value>Create New User</value>
@ -132,12 +132,21 @@
<data name="cmdSearch.AlternateText" xml:space="preserve">
<value>Search</value>
</data>
<data name="ddlSearchColumnAccountName.Text" xml:space="preserve">
<value>Domain Account</value>
</data>
<data name="ddlSearchColumnDisplayName.Text" xml:space="preserve">
<value>Display Name</value>
</data>
<data name="ddlSearchColumnEmail.Text" xml:space="preserve">
<value>E-mail Address</value>
</data>
<data name="ddlSearchColumnSubscriberNumber" xml:space="preserve">
<value>Subscriber Number</value>
</data>
<data name="gvSubscriberNumber.Header" xml:space="preserve">
<value>Subscriber</value>
</data>
<data name="gvUsers.Empty" xml:space="preserve">
<value>No users have been created. To create a new user click "Create New Users" button.</value>
</data>
@ -149,14 +158,11 @@
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;Active Directory user accounts are used to:&lt;/p&gt;
&lt;p&gt;• Authenticate the identity of a user.&lt;br&gt;
• Authorize or deny access to domain resources.&lt;br&gt;
• Administer other security principals.&lt;br&gt;
• Audit actions performed using the user account.&lt;/p&gt;
&lt;p&gt;Primary E-Mail Address is a User Principal Name (UPN). It is used as a logon name in Outlook, Outlook Web Access (OWA) or SharePoint.&lt;/p&gt;
&lt;p&gt;User account can also represent Exchange mailbox, which may be a person, room or inventory unit.&lt;/p&gt;</value>
</data>
<data name="locQuota.Text" xml:space="preserve">
@ -168,7 +174,4 @@
<data name="Text.PageName" xml:space="preserve">
<value>Users</value>
</data>
<data name="ddlSearchColumnAccountName.Text" xml:space="preserve">
<value>Domain Account</value>
</data>
</root>

View file

@ -112,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="btnCreate.Text" xml:space="preserve">
<value>Create New Organization</value>
@ -158,10 +158,8 @@
</data>
<data name="HSFormComments.Text" xml:space="preserve">
<value>&lt;p&gt;&lt;b&gt;Organization&lt;/b&gt; is a group of Active Directory users, contacts and groups.&lt;br&gt;&lt;br&gt;
All accounts within one organization are located in the same Organizational Unit and are not visible to members of other organizations.&lt;br&gt;&lt;br&gt;
Exchange-enabled organization has its own Global Address List (GAL) and Offline Address Book (OAB). Mailboxes, contacts, distribution lists and public folders of Exchange-enabled organization share the same GAL and OAB&lt;/p&gt;</value>
Exchange-enabled organization has its own Global Address List (GAL) and Offline Address Book (OAB). Mailboxes, contacts, and distribution lists of Exchange-enabled organization share the same GAL and OAB&lt;/p&gt;</value>
</data>
<data name="locQuota.Text" xml:space="preserve">
<value>Total Organizations Created:</value>

View file

@ -59,7 +59,7 @@
<asp:Localize ID="locMaxAttachmentSize" runat="server"
meta:resourcekey="locMaxAttachmentSize" Text="Maximum attachment size:"></asp:Localize></td>
<td>
<wsp:SizeBox id="sizeMaxAttachmentSize" runat="server" ValidationGroup="EditMailbox" />
<wsp:SizeBox id="sizeMaxAttachmentSize" runat="server" ValidationGroup="EditMailbox" DisplayUnitsKB="true" DisplayUnitsMB="false" DisplayUnitsPct="false"/>
</td>
</tr>
</table>
@ -137,7 +137,7 @@
<asp:Localize ID="locNumberAttempts" runat="server"
meta:resourcekey="locNumberAttempts" Text="Number of failed attempts allowed:"></asp:Localize></td>
<td>
<wsp:SizeBox id="sizeNumberAttempts" runat="server" ValidationGroup="EditMailbox" DisplayUnits="false" />
<wsp:SizeBox id="sizeNumberAttempts" runat="server" ValidationGroup="EditMailbox" DisplayUnits="false" DisplayUnitsKB="false" DisplayUnitsMB="false" DisplayUnitsPct="false"/>
</td>
</tr>
<tr>
@ -146,7 +146,7 @@
meta:resourcekey="locMinimumPasswordLength" Text="Minimum password length:"></asp:Localize></td>
<td>
<wsp:SizeBox id="sizeMinimumPasswordLength" runat="server" ValidationGroup="EditMailbox"
DisplayUnits="false" EmptyValue="0" />
DisplayUnits="false" EmptyValue="0" DisplayUnitsKB="false" DisplayUnitsMB="false" DisplayUnitsPct="false"/>
</td>
</tr>
<tr>
@ -154,7 +154,7 @@
<asp:Localize ID="locTimeReenter" runat="server"
meta:resourcekey="locTimeReenter" Text="Time without user input before password must be re-entered:"></asp:Localize></td>
<td>
<wsp:SizeBox id="sizeTimeReenter" runat="server" ValidationGroup="EditMailbox" DisplayUnits="false" />
<wsp:SizeBox id="sizeTimeReenter" runat="server" ValidationGroup="EditMailbox" DisplayUnits="false" DisplayUnitsKB="false" DisplayUnitsMB="false" DisplayUnitsPct="false"/>
<asp:Localize ID="locMinutes" runat="server"
meta:resourcekey="locMinutes" Text="minutes"></asp:Localize>
</td>
@ -164,7 +164,7 @@
<asp:Localize ID="locPasswordExpiration" runat="server"
meta:resourcekey="locPasswordExpiration" Text="Password expiration:"></asp:Localize></td>
<td>
<wsp:SizeBox id="sizePasswordExpiration" runat="server" ValidationGroup="EditMailbox" DisplayUnits="false" />
<wsp:SizeBox id="sizePasswordExpiration" runat="server" ValidationGroup="EditMailbox" DisplayUnits="false" DisplayUnitsKB="false" DisplayUnitsMB="false" DisplayUnitsPct="false"/>
<asp:Localize ID="locDays" runat="server"
meta:resourcekey="locDays" Text="days"></asp:Localize>
</td>
@ -174,7 +174,7 @@
<asp:Localize ID="locPasswordHistory" runat="server"
meta:resourcekey="locPasswordHistory" Text="Enforce password history:"></asp:Localize></td>
<td>
<wsp:SizeBox id="sizePasswordHistory" runat="server" ValidationGroup="EditMailbox" DisplayUnits="false" RequireValidatorEnabled="true" />
<wsp:SizeBox id="sizePasswordHistory" runat="server" ValidationGroup="EditMailbox" DisplayUnits="false" RequireValidatorEnabled="true" DisplayUnitsKB="false" DisplayUnitsMB="false" DisplayUnitsPct="false"/>
</td>
</tr>
</table>

View file

@ -28,6 +28,7 @@
using System;
using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.EnterpriseServer;
namespace WebsitePanel.Portal.ExchangeServer
{
@ -39,6 +40,9 @@ namespace WebsitePanel.Portal.ExchangeServer
{
BindPolicy();
}
}
protected void btnSave_Click(object sender, EventArgs e)

View file

@ -1,7 +1,6 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.832
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@ -11,12 +10,6 @@
namespace WebsitePanel.Portal.ExchangeServer {
/// <summary>
/// ExchangeActiveSyncSettings class.
/// </summary>
/// <remarks>
/// Auto-generated class.
/// </remarks>
public partial class ExchangeActiveSyncSettings {
/// <summary>

View file

@ -26,12 +26,7 @@
<tr>
<td class="FormLabel150"><asp:Localize ID="locDomainName" runat="server" meta:resourcekey="locDomainName" Text="Domain Name:"></asp:Localize></td>
<td>
<asp:TextBox ID="txtDomainName" runat="server" CssClass="HugeTextBox200"></asp:TextBox>
<asp:RequiredFieldValidator ID="valRequireDomainName" runat="server" meta:resourcekey="valRequireDomainName" ControlToValidate="txtDomainName"
ErrorMessage="Enter Domain Name" ValidationGroup="CreateDomain" Display="Dynamic" Text="*" SetFocusOnError="True"></asp:RequiredFieldValidator>
<asp:RegularExpressionValidator id="valRequireCorrectDomain" runat="server" ValidationExpression="^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.){1,10}[a-zA-Z]{2,6}$"
ErrorMessage='Please, enter correct domain name in the form "mydomain.com" or "sub.mydomain.com"' ControlToValidate="txtDomainName"
Display="Dynamic" meta:resourcekey="valRequireCorrectDomain" ValidationGroup="CreateDomain">*</asp:RegularExpressionValidator>
<asp:DropDownList id="ddlDomains" runat="server" CssClass="NormalTextBox" DataTextField="DomainName" DataValueField="DomainID" style="vertical-align:middle;"></asp:DropDownList>
</td>
</tr>
</table>
@ -39,6 +34,7 @@
<div class="FormFooterClean">
<asp:Button id="btnAdd" runat="server" Text="Add Domain" CssClass="Button1" meta:resourcekey="btnAdd" ValidationGroup="CreateDomain" OnClick="btnAdd_Click" OnClientClick="ShowProgressDialog('Creating Domain...');"></asp:Button>
<asp:ValidationSummary ID="ValidationSummary1" runat="server" ShowMessageBox="True" ShowSummary="False" ValidationGroup="CreateDomain" />
<asp:Button id="btnCancel" runat="server" Text="Cancel" CssClass="Button1" meta:resourcekey="btnCancel" OnClick="btnCancel_Click"></asp:Button>
</div>
</div>
</div>

View file

@ -27,6 +27,8 @@
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using WebsitePanel.EnterpriseServer;
using WebsitePanel.Providers.HostedSolution;
namespace WebsitePanel.Portal.ExchangeServer
{
@ -34,6 +36,31 @@ namespace WebsitePanel.Portal.ExchangeServer
{
protected void Page_Load(object sender, EventArgs e)
{
DomainInfo[] domains = ES.Services.Servers.GetMyDomains(PanelSecurity.PackageId);
OrganizationDomainName[] list = ES.Services.Organizations.GetOrganizationDomains(PanelRequest.ItemID);
foreach (DomainInfo d in domains)
{
if (!d.IsDomainPointer & !d.IsInstantAlias)
{
bool bAdd = true;
foreach (OrganizationDomainName acceptedDomain in list)
{
if (d.DomainName.ToLower() == acceptedDomain.DomainName.ToLower())
{
bAdd = false;
break;
}
}
if (bAdd) ddlDomains.Items.Add(d.DomainName.ToLower());
}
}
if (ddlDomains.Items.Count == 0) btnAdd.Enabled = false;
}
@ -42,6 +69,13 @@ namespace WebsitePanel.Portal.ExchangeServer
AddDomain();
}
protected void btnCancel_Click(object sender, EventArgs e)
{
Response.Redirect(EditUrl("ItemID", PanelRequest.ItemID.ToString(), "domains", "SpaceID=" + PanelSecurity.PackageId));
}
private void AddDomain()
{
if (!Page.IsValid)
@ -51,7 +85,7 @@ namespace WebsitePanel.Portal.ExchangeServer
{
int result = ES.Services.Organizations.AddOrganizationDomain(PanelRequest.ItemID,
txtDomainName.Text.Trim());
ddlDomains.SelectedValue.Trim());
if (result < 0)
{

View file

@ -76,31 +76,13 @@ namespace WebsitePanel.Portal.ExchangeServer {
protected global::System.Web.UI.WebControls.Localize locDomainName;
/// <summary>
/// txtDomainName control.
/// ddlDomains 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 txtDomainName;
/// <summary>
/// valRequireDomainName 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 valRequireDomainName;
/// <summary>
/// valRequireCorrectDomain 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.RegularExpressionValidator valRequireCorrectDomain;
protected global::System.Web.UI.WebControls.DropDownList ddlDomains;
/// <summary>
/// btnAdd control.
@ -120,6 +102,15 @@ namespace WebsitePanel.Portal.ExchangeServer {
/// </remarks>
protected global::System.Web.UI.WebControls.ValidationSummary ValidationSummary1;
/// <summary>
/// btnCancel 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 btnCancel;
/// <summary>
/// FormComments control.
/// </summary>

View file

@ -1,11 +1,10 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ExchangeMailboxAdvancedSettings.ascx.cs" Inherits="WebsitePanel.Portal.ExchangeServer.ExchangeMailboxAdvancedSettings" %>
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ExchangeAddMailboxPlan.ascx.cs" Inherits="WebsitePanel.Portal.ExchangeServer.ExchangeAddMailboxPlan" %>
<%@ Register Src="../UserControls/SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %>
<%@ Register Src="UserControls/MailboxTabs.ascx" TagName="MailboxTabs" TagPrefix="wsp" %>
<%@ Register Src="UserControls/Menu.ascx" TagName="Menu" TagPrefix="wsp" %>
<%@ Register Src="UserControls/Breadcrumb.ascx" TagName="Breadcrumb" TagPrefix="wsp" %>
<%@ Register Src="UserControls/SizeBox.ascx" TagName="SizeBox" TagPrefix="wsp" %>
<%@ Register Src="UserControls/DaysBox.ascx" TagName="DaysBox" TagPrefix="wsp" %>
<%@ Register Src="UserControls/Breadcrumb.ascx" TagName="Breadcrumb" TagPrefix="wsp" %>
<%@ Register TagPrefix="wsp" TagName="CollapsiblePanel" Src="../UserControls/CollapsiblePanel.ascx" %>
<%@ Register Src="../UserControls/CollapsiblePanel.ascx" TagName="CollapsiblePanel" TagPrefix="wsp" %>
<%@ Register Src="../UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %>
<wsp:EnableAsyncTasksSupport id="asyncTasks" runat="server"/>
@ -16,20 +15,36 @@
<wsp:Breadcrumb id="breadcrumb" runat="server" PageName="Text.PageName" />
</div>
<div class="Left">
<wsp:Menu id="menu" runat="server" SelectedItem="mailboxes" />
<wsp:Menu id="menu" runat="server" SelectedItem="mailboxplans" />
</div>
<div class="Content">
<div class="Center">
<div class="Title">
<asp:Image ID="Image1" SkinID="ExchangeMailbox48" runat="server" />
<asp:Localize ID="locTitle" runat="server" meta:resourcekey="locTitle" Text="Edit Mailbox"></asp:Localize>
-
<asp:Literal ID="litDisplayName" runat="server" Text="John Smith" />
<asp:Image ID="Image1" SkinID="ExchangeDomainNameAdd48" runat="server" />
<asp:Localize ID="locTitle" runat="server" meta:resourcekey="locTitle" Text="Add Mailboxplan"></asp:Localize>
</div>
<div class="FormBody">
<wsp:MailboxTabs id="tabs" runat="server" SelectedTab="mailbox_advanced" />
<wsp:SimpleMessageBox id="messageBox" runat="server" />
<wsp:CollapsiblePanel id="secMailboxPlan" runat="server"
TargetControlID="MailboxPlan" meta:resourcekey="secMailboxPlan" Text="Mailboxplan">
</wsp:CollapsiblePanel>
<asp:Panel ID="MailboxPlan" runat="server" Height="0" style="overflow:hidden;">
<table>
<tr>
<td class="FormLabel200" align="right">
</td>
<td>
<asp:TextBox ID="txtMailboxPlan" runat="server" CssClass="TextBox200" ></asp:TextBox>
<asp:RequiredFieldValidator ID="valRequireMailboxPlan" runat="server" meta:resourcekey="valRequireMailboxPlan" ControlToValidate="txtMailboxPlan"
ErrorMessage="Enter mailbox plan name" ValidationGroup="CreateMailboxPlan" Display="Dynamic" Text="*" SetFocusOnError="True"></asp:RequiredFieldValidator>
</td>
</tr>
</table>
<br />
</asp:Panel>
<wsp:CollapsiblePanel id="secMailboxFeatures" runat="server"
TargetControlID="MailboxFeatures" meta:resourcekey="secMailboxFeatures" Text="Mailbox Features">
</wsp:CollapsiblePanel>
@ -64,65 +79,69 @@
<br />
</asp:Panel>
<wsp:CollapsiblePanel id="secStatistics" runat="server"
TargetControlID="Statistics" meta:resourcekey="secStatistics" Text="Storage Statistics">
<wsp:CollapsiblePanel id="secMailboxGeneral" runat="server"
TargetControlID="MailboxGeneral" meta:resourcekey="secMailboxGeneral" Text="Mailbox General">
</wsp:CollapsiblePanel>
<asp:Panel ID="Statistics" runat="server" Height="0" style="overflow:hidden;">
<table cellpadding="4">
<asp:Panel ID="MailboxGeneral" runat="server" Height="0" style="overflow:hidden;">
<table>
<tr>
<td class="FormLabel150"><asp:Localize ID="locTotalItems" runat="server" meta:resourcekey="locTotalItems" Text="Total Items:"></asp:Localize></td>
<td>
<asp:Label ID="lblTotalItems" runat="server" CssClass="NormalBold">177</asp:Label>
</td>
</tr>
<tr>
<td class="FormLabel150"><asp:Localize ID="locTotalSize" runat="server" meta:resourcekey="locTotalSize" Text="Total Size (MB):"></asp:Localize></td>
<td>
<asp:Label ID="lblTotalSize" runat="server" CssClass="NormalBold">16</asp:Label>
</td>
</tr>
<tr>
<td class="FormLabel150"><asp:Localize ID="locLastLogon" runat="server" meta:resourcekey="locLastLogon" Text="Last Logon:"></asp:Localize></td>
<td>
<asp:Label ID="lblLastLogon" runat="server" CssClass="NormalBold"></asp:Label>
</td>
</tr>
<tr>
<td class="FormLabel150"><asp:Localize ID="locLastLogoff" runat="server" meta:resourcekey="locLastLogoff" Text="Last Logoff:"></asp:Localize></td>
<td>
<asp:Label ID="lblLastLogoff" runat="server" CssClass="NormalBold"></asp:Label>
<asp:CheckBox ID="chkHideFromAddressBook" runat="server" meta:resourcekey="chkHideFromAddressBook" Text="Hide from Addressbook"></asp:CheckBox>
</td>
</tr>
</table>
<br />
</asp:Panel>
<wsp:CollapsiblePanel id="secStorageQuotas" runat="server"
TargetControlID="StorageQuotas" meta:resourcekey="secStorageQuotas" Text="Storage Quotas">
</wsp:CollapsiblePanel>
<asp:Panel ID="StorageQuotas" runat="server" Height="0" style="overflow:hidden;">
<table>
<tr>
<td class="FormLabel200" align="right"><asp:Localize ID="locMailboxSize" runat="server" meta:resourcekey="locMailboxSize" Text="Mailbox size:"></asp:Localize></td>
<td>
<wsp:SizeBox id="mailboxSize" runat="server" ValidationGroup="CreateMailboxPlan" DisplayUnitsKB="false" DisplayUnitsMB="true" DisplayUnitsPct="false" RequireValidatorEnabled="true"/>
</td>
</tr>
<tr>
<td class="FormLabel200" align="right"><asp:Localize ID="locMaxRecipients" runat="server" meta:resourcekey="locMaxRecipients" Text="Maximum Recipients:"></asp:Localize></td>
<td>
<wsp:SizeBox id="maxRecipients" runat="server" ValidationGroup="CreateMailboxPlan" DisplayUnitsKB="false" DisplayUnitsMB="false" DisplayUnitsPct="false" RequireValidatorEnabled="true"/>
</td>
</tr>
<tr>
<td class="FormLabel200" align="right"><asp:Localize ID="locMaxSendMessageSizeKB" runat="server" meta:resourcekey="locMaxSendMessageSizeKB" Text="Maximum Send Message Size (Kb):"></asp:Localize></td>
<td>
<wsp:SizeBox id="maxSendMessageSizeKB" runat="server" ValidationGroup="CreateMailboxPlan" DisplayUnitsKB="true" DisplayUnitsMB="false" DisplayUnitsPct="false" RequireValidatorEnabled="true"/>
</td>
</tr>
<tr>
<td class="FormLabel200" align="right"><asp:Localize ID="locMaxReceiveMessageSizeKB" runat="server" meta:resourcekey="locMaxReceiveMessageSizeKB" Text="Maximum Receive Message Size (Kb):"></asp:Localize></td>
<td>
<wsp:SizeBox id="maxReceiveMessageSizeKB" runat="server" ValidationGroup="CreateMailboxPlan" DisplayUnitsKB="true" DisplayUnitsMB="false" DisplayUnitsPct="false" RequireValidatorEnabled="true"/>
</td>
</tr>
<tr>
<td class="FormLabel200" colspan="2"><asp:Localize ID="locWhenSizeExceeds" runat="server" meta:resourcekey="locWhenSizeExceeds" Text="When the mailbox size exceeds the indicated amount:"></asp:Localize></td>
</tr>
<tr>
<td class="FormLabel200" align="right"><asp:Localize ID="locIssueWarning" runat="server" meta:resourcekey="locIssueWarning" Text="Issue warning at:"></asp:Localize></td>
<td>
<wsp:SizeBox id="sizeIssueWarning" runat="server" ValidationGroup="EditMailbox" />
<wsp:SizeBox id="sizeIssueWarning" runat="server" ValidationGroup="CreateMailboxPlan" DisplayUnitsKB="false" DisplayUnitsMB="false" DisplayUnitsPct="true" RequireValidatorEnabled="true"/>
</td>
</tr>
<tr>
<td class="FormLabel200" align="right"><asp:Localize ID="locProhibitSend" runat="server" meta:resourcekey="locProhibitSend" Text="Prohibit send at:"></asp:Localize></td>
<td>
<wsp:SizeBox id="sizeProhibitSend" runat="server" ValidationGroup="EditMailbox" />
<wsp:SizeBox id="sizeProhibitSend" runat="server" ValidationGroup="CreateMailboxPlan" DisplayUnitsKB="false" DisplayUnitsMB="false" DisplayUnitsPct="true" RequireValidatorEnabled="true"/>
</td>
</tr>
<tr>
<td class="FormLabel200" align="right"><asp:Localize ID="locProhibitSendReceive" runat="server" meta:resourcekey="locProhibitSendReceive" Text="Prohibit send and receive at:"></asp:Localize></td>
<td>
<wsp:SizeBox id="sizeProhibitSendReceive" runat="server" ValidationGroup="EditMailbox" />
<wsp:SizeBox id="sizeProhibitSendReceive" runat="server" ValidationGroup="CreateMailboxPlan" DisplayUnitsKB=false DisplayUnitsMB="false" DisplayUnitsPct="true" RequireValidatorEnabled="true"/>
</td>
</tr>
</table>
@ -138,44 +157,17 @@
<tr>
<td class="FormLabel200" align="right"><asp:Localize ID="locKeepDeletedItems" runat="server" meta:resourcekey="locKeepDeletedItems" Text="Keep deleted items for:"></asp:Localize></td>
<td>
<wsp:DaysBox id="daysKeepDeletedItems" runat="server" ValidationGroup="EditMailbox" />
<wsp:DaysBox id="daysKeepDeletedItems" runat="server" ValidationGroup="CreateMailboxPlan" />
</td>
</tr>
</table>
<br />
</asp:Panel>
<wsp:CollapsiblePanel id="secDomainUser" runat="server"
TargetControlID="DomainUser" meta:resourcekey="secDomainUser" Text="Domain User Name">
</wsp:CollapsiblePanel>
<asp:Panel ID="DomainUser" runat="server" Height="0" style="overflow:hidden;">
<table>
<tr>
<td class="FormLabel200" align="right">
</td>
<td>
<asp:TextBox ID="txtAccountName" runat="server" CssClass="TextBox200" ReadOnly="true" Text="Username"></asp:TextBox>
</td>
</tr>
</table>
<br />
</asp:Panel>
<table style="width:100%;margin-top:10px;">
<tr>
<td align="center">
<asp:CheckBox ID="chkPmmAllowed" Visible="false" runat="server" meta:resourcekey="chkPmmAllowed" AutoPostBack="true"
Text="Allow these settings to be managed from Personal Mailbox Manager" OnCheckedChanged="chkPmmAllowed_CheckedChanged" />
</td>
</tr>
</table>
<div class="FormFooterClean">
<asp:Button id="btnSave" runat="server" Text="Save Changes" CssClass="Button1" meta:resourcekey="btnSave" ValidationGroup="EditMailbox" OnClick="btnSave_Click"></asp:Button>
<asp:ValidationSummary ID="ValidationSummary1" runat="server" ShowMessageBox="True"
ShowSummary="False" ValidationGroup="EditMailbox" />
<asp:Button id="btnAdd" runat="server" Text="Add Mailboxplan" CssClass="Button1" meta:resourcekey="btnAdd" ValidationGroup="CreateMailboxPlan" OnClick="btnAdd_Click" OnClientClick="ShowProgressDialog('Creating Mailboxplan...');"></asp:Button>
<asp:ValidationSummary ID="ValidationSummary1" runat="server" ShowMessageBox="True" ShowSummary="False" ValidationGroup="CreateMailboxPlan" />
</div>
</div>
</div>

View file

@ -0,0 +1,192 @@
// Copyright (c) 2011, 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 WebsitePanel.EnterpriseServer;
using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.Providers.ResultObjects;
namespace WebsitePanel.Portal.ExchangeServer
{
public partial class ExchangeAddMailboxPlan : WebsitePanelModuleBase
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (PanelRequest.GetInt("MailboxPlanId") != 0)
{
Providers.HostedSolution.ExchangeMailboxPlan plan = ES.Services.ExchangeServer.GetExchangeMailboxPlan(PanelRequest.ItemID, PanelRequest.GetInt("MailboxPlanId"));
txtMailboxPlan.Text = plan.MailboxPlan;
mailboxSize.ValueKB = plan.MailboxSizeMB;
maxRecipients.ValueKB = plan.MaxRecipients;
maxSendMessageSizeKB.ValueKB = plan.MaxSendMessageSizeKB;
maxReceiveMessageSizeKB.ValueKB = plan.MaxReceiveMessageSizeKB;
chkPOP3.Checked = plan.EnablePOP;
chkIMAP.Checked = plan.EnableIMAP;
chkOWA.Checked = plan.EnableOWA;
chkMAPI.Checked = plan.EnableMAPI;
chkActiveSync.Checked = plan.EnableActiveSync;
sizeIssueWarning.ValueKB = plan.IssueWarningPct;
sizeProhibitSend.ValueKB = plan.ProhibitSendPct;
sizeProhibitSendReceive.ValueKB = plan.ProhibitSendReceivePct;
daysKeepDeletedItems.ValueDays = plan.KeepDeletedItemsDays;
chkHideFromAddressBook.Checked = plan.HideFromAddressBook;
/*
txtMailboxPlan.Enabled = false;
mailboxSize.Enabled = false;
maxRecipients.Enabled = false;
maxSendMessageSizeKB.Enabled = false;
maxReceiveMessageSizeKB.Enabled = false;
chkPOP3.Enabled = false;
chkIMAP.Enabled = false;
chkOWA.Enabled = false;
chkMAPI.Enabled = false;
chkActiveSync.Enabled = false;
sizeIssueWarning.Enabled = false;
sizeProhibitSend.Enabled = false;
sizeProhibitSendReceive.Enabled = false;
daysKeepDeletedItems.Enabled = false;
chkHideFromAddressBook.Enabled = false;
btnAdd.Enabled = false;
*/
locTitle.Text = plan.MailboxPlan;
this.DisableControls = true;
}
else
{
PackageContext cntx = ES.Services.Packages.GetPackageContext(PanelSecurity.PackageId);
if (cntx != null)
{
foreach (QuotaValueInfo quota in cntx.QuotasArray)
{
switch (quota.QuotaId)
{
case 365:
maxRecipients.ValueKB = quota.QuotaAllocatedValue;
break;
case 366:
maxSendMessageSizeKB.ValueKB = quota.QuotaAllocatedValue;
break;
case 367:
maxReceiveMessageSizeKB.ValueKB = quota.QuotaAllocatedValue;
break;
case 83:
chkPOP3.Checked = Convert.ToBoolean(quota.QuotaAllocatedValue);
chkPOP3.Enabled = Convert.ToBoolean(quota.QuotaAllocatedValue);
break;
case 84:
chkIMAP.Checked = Convert.ToBoolean(quota.QuotaAllocatedValue);
chkIMAP.Enabled = Convert.ToBoolean(quota.QuotaAllocatedValue);
break;
case 85:
chkOWA.Checked = Convert.ToBoolean(quota.QuotaAllocatedValue);
chkOWA.Enabled = Convert.ToBoolean(quota.QuotaAllocatedValue);
break;
case 86:
chkMAPI.Checked = Convert.ToBoolean(quota.QuotaAllocatedValue);
chkMAPI.Enabled = Convert.ToBoolean(quota.QuotaAllocatedValue);
break;
case 87:
chkActiveSync.Checked = Convert.ToBoolean(quota.QuotaAllocatedValue);
chkActiveSync.Enabled = Convert.ToBoolean(quota.QuotaAllocatedValue);
break;
case 364:
daysKeepDeletedItems.ValueDays = quota.QuotaAllocatedValue;
break;
}
sizeIssueWarning.ValueKB = 100;
sizeProhibitSend.ValueKB = 100;
sizeProhibitSendReceive.ValueKB = 100;
}
}
else
this.DisableControls = true;
}
}
}
protected void btnAdd_Click(object sender, EventArgs e)
{
AddMailboxPlan();
}
private void AddMailboxPlan()
{
try
{
Providers.HostedSolution.ExchangeMailboxPlan plan = new Providers.HostedSolution.ExchangeMailboxPlan();
plan.MailboxPlan = txtMailboxPlan.Text;
plan.MailboxSizeMB = mailboxSize.ValueKB;
if ((plan.MailboxSizeMB == 0)) plan.MailboxSizeMB = 1;
plan.IsDefault = false;
plan.MaxRecipients = maxRecipients.ValueKB;
plan.MaxSendMessageSizeKB = maxSendMessageSizeKB.ValueKB;
plan.MaxReceiveMessageSizeKB = maxReceiveMessageSizeKB.ValueKB;
plan.EnablePOP = chkPOP3.Checked;
plan.EnableIMAP = chkIMAP.Checked;
plan.EnableOWA = chkOWA.Checked;
plan.EnableMAPI = chkMAPI.Checked;
plan.EnableActiveSync = chkActiveSync.Checked;
plan.IssueWarningPct = sizeIssueWarning.ValueKB;
if ((plan.IssueWarningPct == 0)) plan.IssueWarningPct = 100;
plan.ProhibitSendPct = sizeProhibitSend.ValueKB;
if ((plan.ProhibitSendPct == 0)) plan.ProhibitSendPct = 100;
plan.ProhibitSendReceivePct = sizeProhibitSendReceive.ValueKB;
if ((plan.ProhibitSendReceivePct == 0)) plan.ProhibitSendReceivePct = 100;
plan.KeepDeletedItemsDays = daysKeepDeletedItems.ValueDays;
plan.HideFromAddressBook = chkHideFromAddressBook.Checked;
int result = ES.Services.ExchangeServer.AddExchangeMailboxPlan(PanelRequest.ItemID,
plan);
if (result < 0)
{
messageBox.ShowResultMessage(result);
return;
}
Response.Redirect(EditUrl("ItemID", PanelRequest.ItemID.ToString(), "mailboxplans",
"SpaceID=" + PanelSecurity.PackageId));
}
catch (Exception ex)
{
messageBox.ShowErrorMessage("EXCHANGE_ADD_MAILBOXPLAN", ex);
}
}
}
}

View file

@ -1,7 +1,6 @@
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.1433
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@ -11,7 +10,7 @@
namespace WebsitePanel.Portal.ExchangeServer {
public partial class ExchangeMailboxAdvancedSettings {
public partial class ExchangeAddMailboxPlan {
/// <summary>
/// asyncTasks control.
@ -58,24 +57,6 @@ namespace WebsitePanel.Portal.ExchangeServer {
/// </remarks>
protected global::System.Web.UI.WebControls.Localize locTitle;
/// <summary>
/// litDisplayName 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.Literal litDisplayName;
/// <summary>
/// tabs control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.MailboxTabs tabs;
/// <summary>
/// messageBox control.
/// </summary>
@ -85,6 +66,42 @@ namespace WebsitePanel.Portal.ExchangeServer {
/// </remarks>
protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox;
/// <summary>
/// secMailboxPlan control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.CollapsiblePanel secMailboxPlan;
/// <summary>
/// MailboxPlan 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 MailboxPlan;
/// <summary>
/// txtMailboxPlan 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 txtMailboxPlan;
/// <summary>
/// valRequireMailboxPlan 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 valRequireMailboxPlan;
/// <summary>
/// secMailboxFeatures control.
/// </summary>
@ -149,94 +166,31 @@ namespace WebsitePanel.Portal.ExchangeServer {
protected global::System.Web.UI.WebControls.CheckBox chkActiveSync;
/// <summary>
/// secStatistics control.
/// secMailboxGeneral control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.CollapsiblePanel secStatistics;
protected global::WebsitePanel.Portal.CollapsiblePanel secMailboxGeneral;
/// <summary>
/// Statistics control.
/// MailboxGeneral 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 Statistics;
protected global::System.Web.UI.WebControls.Panel MailboxGeneral;
/// <summary>
/// locTotalItems control.
/// chkHideFromAddressBook 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 locTotalItems;
/// <summary>
/// lblTotalItems 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 lblTotalItems;
/// <summary>
/// locTotalSize 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 locTotalSize;
/// <summary>
/// lblTotalSize 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 lblTotalSize;
/// <summary>
/// locLastLogon 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 locLastLogon;
/// <summary>
/// lblLastLogon 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 lblLastLogon;
/// <summary>
/// locLastLogoff 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 locLastLogoff;
/// <summary>
/// lblLastLogoff 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 lblLastLogoff;
protected global::System.Web.UI.WebControls.CheckBox chkHideFromAddressBook;
/// <summary>
/// secStorageQuotas control.
@ -256,6 +210,78 @@ namespace WebsitePanel.Portal.ExchangeServer {
/// </remarks>
protected global::System.Web.UI.WebControls.Panel StorageQuotas;
/// <summary>
/// locMailboxSize 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 locMailboxSize;
/// <summary>
/// mailboxSize control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.SizeBox mailboxSize;
/// <summary>
/// locMaxRecipients 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 locMaxRecipients;
/// <summary>
/// maxRecipients control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.SizeBox maxRecipients;
/// <summary>
/// locMaxSendMessageSizeKB 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 locMaxSendMessageSizeKB;
/// <summary>
/// maxSendMessageSizeKB control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.SizeBox maxSendMessageSizeKB;
/// <summary>
/// locMaxReceiveMessageSizeKB 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 locMaxReceiveMessageSizeKB;
/// <summary>
/// maxReceiveMessageSizeKB control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.SizeBox maxReceiveMessageSizeKB;
/// <summary>
/// locWhenSizeExceeds control.
/// </summary>
@ -356,49 +382,13 @@ namespace WebsitePanel.Portal.ExchangeServer {
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.DaysBox daysKeepDeletedItems;
/// <summary>
/// secDomainUser control.
/// btnAdd control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.CollapsiblePanel secDomainUser;
/// <summary>
/// DomainUser 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 DomainUser;
/// <summary>
/// txtAccountName 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 txtAccountName;
/// <summary>
/// chkPmmAllowed 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 chkPmmAllowed;
/// <summary>
/// btnSave 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 btnSave;
protected global::System.Web.UI.WebControls.Button btnAdd;
/// <summary>
/// ValidationSummary1 control.

View file

@ -30,6 +30,7 @@ using System;
using System.Web.UI.WebControls;
using WebsitePanel.Providers.HostedSolution;
using Microsoft.Security.Application;
using WebsitePanel.EnterpriseServer;
namespace WebsitePanel.Portal.ExchangeServer
{
@ -42,6 +43,8 @@ namespace WebsitePanel.Portal.ExchangeServer
BindMapiRichTextFormat();
BindSettings();
}
}
private void BindMapiRichTextFormat()

View file

@ -1,7 +1,6 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.1433
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@ -11,12 +10,6 @@
namespace WebsitePanel.Portal.ExchangeServer {
/// <summary>
/// ExchangeContactGeneralSettings class.
/// </summary>
/// <remarks>
/// Auto-generated class.
/// </remarks>
public partial class ExchangeContactGeneralSettings {
/// <summary>

View file

@ -38,6 +38,7 @@ using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.EnterpriseServer;
namespace WebsitePanel.Portal.ExchangeServer
{
@ -49,6 +50,8 @@ namespace WebsitePanel.Portal.ExchangeServer
{
BindSettings();
}
}
private void BindSettings()

View file

@ -1,7 +1,6 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.312
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@ -11,12 +10,6 @@
namespace WebsitePanel.Portal.ExchangeServer {
/// <summary>
/// ExchangeContactMailFlowSettings class.
/// </summary>
/// <remarks>
/// Auto-generated class.
/// </remarks>
public partial class ExchangeContactMailFlowSettings {
/// <summary>

View file

@ -32,13 +32,6 @@
<div class="FormButtonsBarCleanRight">
<asp:Panel ID="SearchPanel" runat="server" DefaultButton="cmdSearch">
<asp:Localize ID="locSearch" runat="server" meta:resourcekey="locSearch" Visible="false"></asp:Localize>
<asp:DropDownList ID="ddlPageSize" runat="server" AutoPostBack="True"
onselectedindexchanged="ddlPageSize_SelectedIndexChanged">
<asp:ListItem>10</asp:ListItem>
<asp:ListItem Selected="True">20</asp:ListItem>
<asp:ListItem>50</asp:ListItem>
<asp:ListItem>100</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="ddlSearchColumn" runat="server" CssClass="NormalTextBox">
<asp:ListItem Value="DisplayName" meta:resourcekey="ddlSearchColumnDisplayName">DisplayName</asp:ListItem>
<asp:ListItem Value="PrimaryEmailAddress" meta:resourcekey="ddlSearchColumnEmail">Email</asp:ListItem>
@ -51,7 +44,7 @@
<asp:GridView ID="gvContacts" runat="server" AutoGenerateColumns="False" EnableViewState="true"
Width="100%" EmptyDataText="gvContacts" CssSelectorClass="NormalGridView"
OnRowCommand="gvContacts_RowCommand" AllowPaging="True" AllowSorting="True"
DataSourceID="odsAccountsPaged" PageSize="20">
DataSourceID="odsAccountsPaged">
<Columns>
<asp:TemplateField HeaderText="gvContactsDisplayName" SortExpression="DisplayName">
<ItemStyle Width="50%"></ItemStyle>

View file

@ -38,6 +38,7 @@ using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.EnterpriseServer;
namespace WebsitePanel.Portal.ExchangeServer
{
@ -49,6 +50,8 @@ namespace WebsitePanel.Portal.ExchangeServer
{
BindStats();
}
}
private void BindStats()
@ -109,17 +112,5 @@ namespace WebsitePanel.Portal.ExchangeServer
}
}
}
protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
{
gvContacts.PageSize = Convert.ToInt16(ddlPageSize.SelectedValue);
// rebind grid
gvContacts.DataBind();
// bind stats
BindStats();
}
}
}

View file

@ -93,15 +93,6 @@ namespace WebsitePanel.Portal.ExchangeServer {
/// </remarks>
protected global::System.Web.UI.WebControls.Localize locSearch;
/// <summary>
/// ddlPageSize 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 ddlPageSize;
/// <summary>
/// ddlSearchColumn control.
/// </summary>

View file

@ -1,7 +1,6 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.42
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@ -10,22 +9,151 @@
namespace WebsitePanel.Portal.ExchangeServer {
public partial class ExchangeCreateContact {
protected WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks;
protected WebsitePanel.Portal.ExchangeServer.UserControls.Breadcrumb breadcrumb;
protected WebsitePanel.Portal.ExchangeServer.UserControls.Menu menu;
protected System.Web.UI.WebControls.Image Image1;
protected System.Web.UI.WebControls.Localize locTitle;
protected WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox;
protected System.Web.UI.WebControls.Localize locDisplayName;
protected System.Web.UI.WebControls.TextBox txtDisplayName;
protected System.Web.UI.WebControls.RequiredFieldValidator valRequireDisplayName;
protected System.Web.UI.WebControls.Localize locEmail;
protected System.Web.UI.WebControls.TextBox txtEmail;
protected System.Web.UI.WebControls.RequiredFieldValidator valRequireAccount;
protected System.Web.UI.WebControls.RegularExpressionValidator valCorrectEmail;
protected System.Web.UI.WebControls.Button btnCreate;
protected System.Web.UI.WebControls.ValidationSummary ValidationSummary1;
protected System.Web.UI.WebControls.Localize FormComments;
/// <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>
/// breadcrumb control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Breadcrumb breadcrumb;
/// <summary>
/// menu control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Menu menu;
/// <summary>
/// Image1 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.Image Image1;
/// <summary>
/// locTitle 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 locTitle;
/// <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>
/// locDisplayName 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 locDisplayName;
/// <summary>
/// txtDisplayName 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 txtDisplayName;
/// <summary>
/// valRequireDisplayName 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 valRequireDisplayName;
/// <summary>
/// locEmail 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 locEmail;
/// <summary>
/// txtEmail 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 txtEmail;
/// <summary>
/// valRequireAccount 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 valRequireAccount;
/// <summary>
/// valCorrectEmail 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.RegularExpressionValidator valCorrectEmail;
/// <summary>
/// btnCreate 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 btnCreate;
/// <summary>
/// ValidationSummary1 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.ValidationSummary ValidationSummary1;
/// <summary>
/// FormComments 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 FormComments;
}
}

View file

@ -36,6 +36,7 @@ using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using WebsitePanel.EnterpriseServer;
namespace WebsitePanel.Portal.ExchangeServer
{

View file

@ -1,7 +1,6 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.1873
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.

View file

@ -7,6 +7,7 @@
<%@ Register Src="UserControls/Menu.ascx" TagName="Menu" TagPrefix="wsp" %>
<%@ Register Src="UserControls/Breadcrumb.ascx" TagName="Breadcrumb" TagPrefix="wsp" %>
<%@ Register Src="../UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %>
<%@ Register Src="UserControls/MailboxPlanSelector.ascx" TagName="MailboxPlanSelector" TagPrefix="wsp" %>
<wsp:EnableAsyncTasksSupport id="asyncTasks" runat="server"/>
@ -61,6 +62,14 @@
ErrorMessage="Enter Display Name" ValidationGroup="CreateMailbox" Display="Dynamic" Text="*" SetFocusOnError="True"></asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td class="FormLabel150"><asp:Localize ID="locSubscriberNumber" runat="server" meta:resourcekey="locSubscriberNumber" Text="Subscriber Number: *"></asp:Localize></td>
<td>
<asp:TextBox ID="txtSubscriberNumber" runat="server" CssClass="HugeTextBox200"></asp:TextBox>
<asp:RequiredFieldValidator ID="valRequireSubscriberNumber" runat="server" meta:resourcekey="valRequireSubscriberNumber" ControlToValidate="txtSubscriberNumber"
ErrorMessage="Enter Subscriber Number" ValidationGroup="CreateMailbox" Display="Dynamic" Text="*" SetFocusOnError="True"></asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td class="FormLabel150"><asp:Localize ID="locAccount" runat="server" meta:resourcekey="locAccount" Text="E-mail Address: *"></asp:Localize></td>
<td>
@ -91,6 +100,7 @@
<td class="FormLabel150"><asp:Localize ID="Localize1" runat="server" meta:resourcekey="locDisplayName" Text="Display Name: *"></asp:Localize></td>
<td><uc1:UserSelector id="userSelector" runat="server"></uc1:UserSelector></td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
@ -99,10 +109,11 @@
<table>
<tr>
<td class="FormLabel150">
<asp:CheckBox ID="chkSendInstructions" runat="server" meta:resourcekey="chkSendInstructions" Text="Send Setup Instructions" Checked="true" />
<asp:Localize ID="locMailboxplanName" runat="server" meta:resourcekey="locMailboxplanName" Text="Mailboxplan Name: *"></asp:Localize>
</td>
<td>
<wsp:MailboxPlanSelector ID="mailboxPlanSelector" runat="server" />
</td>
<td><wsp:EmailControl id="sendInstructionEmail" runat="server" RequiredEnabled="true" ValidationGroup="CreateMailbox"></wsp:EmailControl></td>
</tr>
</table>

View file

@ -68,11 +68,27 @@ namespace WebsitePanel.Portal.ExchangeServer
PackageInfo package = ES.Services.Packages.GetPackage(PanelSecurity.PackageId);
if (package != null)
{
UserInfo user = ES.Services.Users.GetUserById(package.UserId);
if (user != null)
sendInstructionEmail.Text = user.Email;
//UserInfo user = ES.Services.Users.GetUserById(package.UserId);
//if (user != null)
//sendInstructionEmail.Text = user.Email;
}
WebsitePanel.Providers.HostedSolution.ExchangeMailboxPlan[] plans = ES.Services.ExchangeServer.GetExchangeMailboxPlans(PanelRequest.ItemID);
if (plans.Length == 0)
btnCreate.Enabled = false;
}
PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId);
if (cntx.Quotas.ContainsKey(Quotas.EXCHANGE2007_ISCONSUMER))
{
if (cntx.Quotas[Quotas.EXCHANGE2007_ISCONSUMER].QuotaAllocatedValue != 1)
{
locSubscriberNumber.Visible = txtSubscriberNumber.Visible = valRequireSubscriberNumber.Enabled = false;
}
}
}
protected void btnCreate_Click(object sender, EventArgs e)
@ -92,21 +108,25 @@ namespace WebsitePanel.Portal.ExchangeServer
string accountName = IsNewUser ? string.Empty : userSelector.GetAccount();
ExchangeAccountType type = IsNewUser
? (ExchangeAccountType) Utils.ParseInt(rbMailboxType.SelectedValue, 1)
? (ExchangeAccountType)Utils.ParseInt(rbMailboxType.SelectedValue, 1)
: ExchangeAccountType.Mailbox;
string domain = IsNewUser ? email.DomainName : userSelector.GetPrimaryEmailAddress().Split('@')[1];
int accountId = IsNewUser ? 0 : userSelector.GetAccountId();
string subscriberNumber = IsNewUser ? txtSubscriberNumber.Text.Trim() : userSelector.GetSubscriberNumber();
accountId = ES.Services.ExchangeServer.CreateMailbox(PanelRequest.ItemID, accountId, type,
accountName,
displayName,
name,
domain,
password.Password,
chkSendInstructions.Checked,
sendInstructionEmail.Text);
false,
"",
Convert.ToInt32(mailboxPlanSelector.MailboxPlanId),
subscriberNumber);
if (accountId < 0)

View file

@ -1,7 +1,6 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.1378
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@ -11,12 +10,6 @@
namespace WebsitePanel.Portal.ExchangeServer {
/// <summary>
/// ExchangeCreateMailbox class.
/// </summary>
/// <remarks>
/// Auto-generated class.
/// </remarks>
public partial class ExchangeCreateMailbox {
/// <summary>
@ -145,6 +138,33 @@ namespace WebsitePanel.Portal.ExchangeServer {
/// </remarks>
protected global::System.Web.UI.WebControls.RequiredFieldValidator valRequireDisplayName;
/// <summary>
/// locSubscriberNumber 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 locSubscriberNumber;
/// <summary>
/// txtSubscriberNumber 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 txtSubscriberNumber;
/// <summary>
/// valRequireSubscriberNumber 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 valRequireSubscriberNumber;
/// <summary>
/// locAccount control.
/// </summary>
@ -227,22 +247,22 @@ namespace WebsitePanel.Portal.ExchangeServer {
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.UserSelector userSelector;
/// <summary>
/// chkSendInstructions control.
/// locMailboxplanName 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 chkSendInstructions;
protected global::System.Web.UI.WebControls.Localize locMailboxplanName;
/// <summary>
/// sendInstructionEmail control.
/// mailboxPlanSelector control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.UserControls.EmailControl sendInstructionEmail;
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.MailboxPlanSelector mailboxPlanSelector;
/// <summary>
/// btnCreate control.

View file

@ -7,12 +7,11 @@
<%@ Register TagPrefix="wsp" TagName="CollapsiblePanel" Src="../UserControls/CollapsiblePanel.ascx" %>
<script language="javascript">
function SelectAllCheckboxes(box)
{
function SelectAllCheckboxes(box) {
var state = box.checked;
var elm = box.parentElement.parentElement.parentElement.parentElement.getElementsByTagName("INPUT");
for(i = 0; i < elm.length; i++)
if(elm[i].type == "checkbox" && elm[i].id != box.id && elm[i].checked != state && !elm[i].disabled)
for (i = 0; i < elm.length; i++)
if (elm[i].type == "checkbox" && elm[i].id != box.id && elm[i].checked != state && !elm[i].disabled)
elm[i].checked = state;
}
</script>

View file

@ -1,4 +1,4 @@
// Copyright (c) 2012, Outercurve Foundation.
// Copyright (c) 2011, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
@ -51,6 +51,7 @@ namespace WebsitePanel.Portal.ExchangeServer
BindEmails();
}
}
private void BindEmails()

View file

@ -1,7 +1,6 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.42
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@ -10,25 +9,178 @@
namespace WebsitePanel.Portal.ExchangeServer {
public partial class ExchangeDistributionListEmailAddresses {
protected WebsitePanel.Portal.ExchangeServer.UserControls.Breadcrumb breadcrumb;
protected WebsitePanel.Portal.ExchangeServer.UserControls.Menu menu;
protected System.Web.UI.WebControls.Image Image1;
protected System.Web.UI.WebControls.Localize locTitle;
protected System.Web.UI.WebControls.Literal litDisplayName;
protected WebsitePanel.Portal.ExchangeServer.UserControls.DistributionListTabs tabs;
protected WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox;
protected System.Web.UI.WebControls.Label lblAddEmail;
protected System.Web.UI.WebControls.Localize locAccount;
protected WebsitePanel.Portal.ExchangeServer.UserControls.EmailAddress email;
protected System.Web.UI.WebControls.Button btnAddEmail;
protected WebsitePanel.Portal.CollapsiblePanel secExistingAddresses;
protected System.Web.UI.WebControls.Panel ExistingAddresses;
protected System.Web.UI.WebControls.GridView gvEmails;
protected System.Web.UI.WebControls.Localize locTotal;
protected System.Web.UI.WebControls.Label lblTotal;
protected System.Web.UI.WebControls.Button btnSetAsPrimary;
protected System.Web.UI.WebControls.Button btnDeleteAddresses;
protected System.Web.UI.WebControls.Localize FormComments;
/// <summary>
/// breadcrumb control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Breadcrumb breadcrumb;
/// <summary>
/// menu control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.Menu menu;
/// <summary>
/// Image1 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.Image Image1;
/// <summary>
/// locTitle 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 locTitle;
/// <summary>
/// litDisplayName 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.Literal litDisplayName;
/// <summary>
/// tabs control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.DistributionListTabs tabs;
/// <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>
/// lblAddEmail 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 lblAddEmail;
/// <summary>
/// locAccount 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 locAccount;
/// <summary>
/// email control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.EmailAddress email;
/// <summary>
/// btnAddEmail 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 btnAddEmail;
/// <summary>
/// secExistingAddresses control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::WebsitePanel.Portal.CollapsiblePanel secExistingAddresses;
/// <summary>
/// ExistingAddresses 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 ExistingAddresses;
/// <summary>
/// gvEmails 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 gvEmails;
/// <summary>
/// locTotal 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 locTotal;
/// <summary>
/// lblTotal 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 lblTotal;
/// <summary>
/// btnSetAsPrimary 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 btnSetAsPrimary;
/// <summary>
/// btnDeleteAddresses 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 btnDeleteAddresses;
/// <summary>
/// FormComments 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 FormComments;
}
}

View file

@ -39,6 +39,7 @@ using System.Web.UI.HtmlControls;
using WebsitePanel.Providers.HostedSolution;
using Microsoft.Security.Application;
using WebsitePanel.EnterpriseServer;
namespace WebsitePanel.Portal.ExchangeServer
{
@ -50,6 +51,8 @@ namespace WebsitePanel.Portal.ExchangeServer
{
BindSettings();
}
}
private void BindSettings()

Some files were not shown because too many files have changed in this diff Show more