diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/ExchangeServer/ExchangeServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/ExchangeServer/ExchangeServerController.cs index 9bbfd587..099e23a1 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/ExchangeServer/ExchangeServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/ExchangeServer/ExchangeServerController.cs @@ -836,7 +836,7 @@ namespace WebsitePanel.EnterpriseServer // get stats int exchangeServiceId = GetExchangeServiceID(org.PackageId); ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId); - return exchange.GetPublicFoldersStatistics(folderNames.ToArray()); + return exchange.GetPublicFoldersStatistics(org.OrganizationId, folderNames.ToArray()); } catch (Exception ex) { @@ -4073,7 +4073,7 @@ namespace WebsitePanel.EnterpriseServer PackageController.UpdatePackageItem(org); } - exchange.CreatePublicFolder( + exchange.CreatePublicFolder(org.DistinguishedName, org.OrganizationId, org.SecurityGroup, parentFolder, @@ -4084,7 +4084,7 @@ namespace WebsitePanel.EnterpriseServer domain); - ExchangePublicFolder folder = exchange.GetPublicFolderGeneralSettings(parentFolder + "\\" + folderName); + ExchangePublicFolder folder = exchange.GetPublicFolderGeneralSettings(org.OrganizationId, parentFolder + "\\" + folderName); // add meta-item int accountId = AddAccount(itemId, ExchangeAccountType.PublicFolder, accountName, @@ -4146,8 +4146,8 @@ namespace WebsitePanel.EnterpriseServer // delete folder int exchangeServiceId = GetExchangeServiceID(org.PackageId); ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId); - - exchange.DeletePublicFolder(account.DisplayName); + + exchange.DeletePublicFolder(org.OrganizationId, account.DisplayName); // unregister account DeleteAccount(itemId, accountId); @@ -4268,8 +4268,8 @@ namespace WebsitePanel.EnterpriseServer int exchangeServiceId = GetExchangeServiceID(org.PackageId); ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId); - - exchange.DisableMailPublicFolder(account.DisplayName); + + exchange.DisableMailPublicFolder(org.OrganizationId, account.DisplayName); // update and save account @@ -4335,8 +4335,8 @@ namespace WebsitePanel.EnterpriseServer int exchangeServiceId = GetExchangeServiceID(org.PackageId); ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId); - - ExchangePublicFolder folder = exchange.GetPublicFolderGeneralSettings(account.DisplayName); + + ExchangePublicFolder folder = exchange.GetPublicFolderGeneralSettings(org.OrganizationId, account.DisplayName); folder.MailEnabled = account.MailEnabledPublicFolder; folder.DisplayName = account.DisplayName; return folder; @@ -4381,6 +4381,7 @@ namespace WebsitePanel.EnterpriseServer ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId); exchange.SetPublicFolderGeneralSettings( + org.OrganizationId, account.DisplayName, newName, hideAddressBook, @@ -4448,8 +4449,8 @@ namespace WebsitePanel.EnterpriseServer // get mailbox settings int exchangeServiceId = GetExchangeServiceID(org.PackageId); ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId); - - ExchangePublicFolder folder = exchange.GetPublicFolderMailFlowSettings(account.DisplayName); + + ExchangePublicFolder folder = exchange.GetPublicFolderMailFlowSettings(org.OrganizationId, account.DisplayName); folder.DisplayName = account.DisplayName; return folder; } @@ -4491,8 +4492,8 @@ namespace WebsitePanel.EnterpriseServer // get mailbox settings int exchangeServiceId = GetExchangeServiceID(org.PackageId); ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId); - - exchange.SetPublicFolderMailFlowSettings(account.DisplayName, + + exchange.SetPublicFolderMailFlowSettings(org.OrganizationId, account.DisplayName, acceptAccounts, rejectAccounts, requireSenderAuthentication); @@ -4565,6 +4566,7 @@ namespace WebsitePanel.EnterpriseServer ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId); exchange.SetPublicFolderEmailAddresses( + org.OrganizationId, account.DisplayName, GetAccountSimpleEmailAddresses(itemId, accountId)); @@ -4609,6 +4611,7 @@ namespace WebsitePanel.EnterpriseServer ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId); exchange.SetPublicFolderPrimaryEmailAddress( + org.OrganizationId, account.DisplayName, emailAddress); @@ -4664,6 +4667,7 @@ namespace WebsitePanel.EnterpriseServer ExchangeServer exchange = GetExchangeServer(exchangeServiceId, org.ServiceId); exchange.SetPublicFolderEmailAddresses( + org.OrganizationId, account.DisplayName, GetAccountSimpleEmailAddresses(itemId, accountId)); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/ReportController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/ReportController.cs index b934d5e0..b67dccf5 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/ReportController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/ReportController.cs @@ -78,7 +78,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution try { - item.TotalPublicFoldersSize = exchange.GetPublicFolderSize("\\" + org.OrganizationId); + item.TotalPublicFoldersSize = exchange.GetPublicFolderSize(org.OrganizationId, "\\" + org.OrganizationId); } catch (Exception ex) { diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/IExchangeServer.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/IExchangeServer.cs index 56ba3f08..b2a71770 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/IExchangeServer.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/IExchangeServer.cs @@ -96,20 +96,20 @@ namespace WebsitePanel.Providers.HostedSolution 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); - void DeletePublicFolder(string folder); + void CreatePublicFolder(string organizationDistinguishedName, string organizationId, string securityGroup, string parentFolder, string folderName, bool mailEnabled, string accountName, string name, string domain); + void DeletePublicFolder(string organizationId, string folder); void EnableMailPublicFolder(string organizationId, string folder, string accountName, string name, string domain); - void DisableMailPublicFolder(string folder); - ExchangePublicFolder GetPublicFolderGeneralSettings(string folder); - void SetPublicFolderGeneralSettings(string folder, string newFolderName, bool hideFromAddressBook, ExchangeAccount[] accounts ); - ExchangePublicFolder GetPublicFolderMailFlowSettings(string folder); - void SetPublicFolderMailFlowSettings(string folder, string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication); - ExchangeEmailAddress[] GetPublicFolderEmailAddresses(string folder); - void SetPublicFolderEmailAddresses(string folder, string[] emailAddresses); - void SetPublicFolderPrimaryEmailAddress(string folder, string emailAddress); - ExchangeItemStatistics[] GetPublicFoldersStatistics(string[] folders); - string[] GetPublicFoldersRecursive(string parent); - long GetPublicFolderSize(string folder); + void DisableMailPublicFolder(string organizationId, string folder); + ExchangePublicFolder GetPublicFolderGeneralSettings(string organizationId, string folder); + void SetPublicFolderGeneralSettings(string organizationId, string folder, string newFolderName, bool hideFromAddressBook, ExchangeAccount[] accounts); + ExchangePublicFolder GetPublicFolderMailFlowSettings(string organizationId, string folder); + void SetPublicFolderMailFlowSettings(string organizationId, string folder, string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication); + ExchangeEmailAddress[] GetPublicFolderEmailAddresses(string organizationId, string folder); + void SetPublicFolderEmailAddresses(string organizationId, string folder, string[] emailAddresses); + void SetPublicFolderPrimaryEmailAddress(string organizationId, string folder, string emailAddress); + ExchangeItemStatistics[] GetPublicFoldersStatistics(string organizationId, string[] folders); + string[] GetPublicFoldersRecursive(string organizationId, string parent); + long GetPublicFolderSize(string organizationId, string folder); //ActiveSync void CreateOrganizationActiveSyncPolicy(string organizationId); diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/TransactionAction.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/TransactionAction.cs index 8f1b8c7e..768fe780 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/TransactionAction.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/TransactionAction.cs @@ -83,6 +83,7 @@ namespace WebsitePanel.Providers.HostedSolution CreateMailbox, CreateContact, CreatePublicFolder, + CreatePublicFolderMailbox, CreateActiveSyncPolicy, AddMailboxFullAccessPermission, AddSendAsPermission, diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.Exchange2013/Exchange2013.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.Exchange2013/Exchange2013.cs index 142414c9..01a6cd40 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.Exchange2013/Exchange2013.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.Exchange2013/Exchange2013.cs @@ -431,16 +431,16 @@ namespace WebsitePanel.Providers.HostedSolution #endregion #region Public folders - public void CreatePublicFolder(string organizationId, string securityGroup, string parentFolder, + public void CreatePublicFolder(string organizationDistinguishedName, string organizationId, string securityGroup, string parentFolder, string folderName, bool mailEnabled, string accountName, string name, string domain) { - CreatePublicFolderInternal(organizationId, securityGroup, parentFolder, folderName, + CreatePublicFolderInternal(organizationDistinguishedName, organizationId, securityGroup, parentFolder, folderName, mailEnabled, accountName, name, domain); } - public void DeletePublicFolder(string folder) + public void DeletePublicFolder(string organizationId, string folder) { - DeletePublicFolderInternal(folder); + DeletePublicFolderInternal(organizationId, folder); } public void EnableMailPublicFolder(string organizationId, string folder, string accountName, @@ -521,60 +521,60 @@ namespace WebsitePanel.Providers.HostedSolution } - public void DisableMailPublicFolder(string folder) + public void DisableMailPublicFolder(string organizationId, string folder) { - DisableMailPublicFolderInternal(folder); + DisableMailPublicFolderInternal(organizationId, folder); } - public ExchangePublicFolder GetPublicFolderGeneralSettings(string folder) + public ExchangePublicFolder GetPublicFolderGeneralSettings(string organizationId, string folder) { - return GetPublicFolderGeneralSettingsInternal(folder); + return GetPublicFolderGeneralSettingsInternal(organizationId, folder); } - public void SetPublicFolderGeneralSettings(string folder, string newFolderName, + public void SetPublicFolderGeneralSettings(string organizationId, string folder, string newFolderName, bool hideFromAddressBook, ExchangeAccount[] accounts) { - SetPublicFolderGeneralSettingsInternal(folder, newFolderName, hideFromAddressBook, accounts); + SetPublicFolderGeneralSettingsInternal(organizationId, folder, newFolderName, hideFromAddressBook, accounts); } - public ExchangePublicFolder GetPublicFolderMailFlowSettings(string folder) + public ExchangePublicFolder GetPublicFolderMailFlowSettings(string organizationId, string folder) { - return GetPublicFolderMailFlowSettingsInternal(folder); + return GetPublicFolderMailFlowSettingsInternal(organizationId, folder); } - public void SetPublicFolderMailFlowSettings(string folder, + public void SetPublicFolderMailFlowSettings(string organizationId, string folder, string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication) { - SetPublicFolderMailFlowSettingsInternal(folder, acceptAccounts, rejectAccounts, requireSenderAuthentication); + SetPublicFolderMailFlowSettingsInternal(organizationId, folder, acceptAccounts, rejectAccounts, requireSenderAuthentication); } - public ExchangeEmailAddress[] GetPublicFolderEmailAddresses(string folder) + public ExchangeEmailAddress[] GetPublicFolderEmailAddresses(string organizationId, string folder) { - return GetPublicFolderEmailAddressesInternal(folder); + return GetPublicFolderEmailAddressesInternal(organizationId, folder); } - public void SetPublicFolderEmailAddresses(string folder, string[] emailAddresses) + public void SetPublicFolderEmailAddresses(string organizationId, string folder, string[] emailAddresses) { - SetPublicFolderEmailAddressesInternal(folder, emailAddresses); + SetPublicFolderEmailAddressesInternal(organizationId, folder, emailAddresses); } - public void SetPublicFolderPrimaryEmailAddress(string folder, string emailAddress) + public void SetPublicFolderPrimaryEmailAddress(string organizationId, string folder, string emailAddress) { - SetPublicFolderPrimaryEmailAddressInternal(folder, emailAddress); + SetPublicFolderPrimaryEmailAddressInternal(organizationId, folder, emailAddress); } - public ExchangeItemStatistics[] GetPublicFoldersStatistics(string[] folders) + public ExchangeItemStatistics[] GetPublicFoldersStatistics(string organizationId, string[] folders) { - return GetPublicFoldersStatisticsInternal(folders); + return GetPublicFoldersStatisticsInternal(organizationId, folders); } - public string[] GetPublicFoldersRecursive(string parent) + public string[] GetPublicFoldersRecursive(string organizationId, string parent) { - return GetPublicFoldersRecursiveInternal(parent); + return GetPublicFoldersRecursiveInternal(organizationId, parent); } - public long GetPublicFolderSize(string folder) + public long GetPublicFolderSize(string organizationId, string folder) { - return GetPublicFolderSizeInternal(folder); + return GetPublicFolderSizeInternal(organizationId, folder); } #endregion @@ -1128,10 +1128,8 @@ namespace WebsitePanel.Providers.HostedSolution { cmd = new Command("Get-PublicFolder"); cmd.Parameters.Add("Identity", "\\" + organizationId); + cmd.Parameters.Add("Mailbox", GetPublicFolderMailboxName(organizationId)); cmd.Parameters.Add("GetChildren", new SwitchParameter(true)); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); - result = ExecuteShellCommand(runSpace, cmd); if (result != null && result.Count > 0) ret = false; @@ -1159,7 +1157,7 @@ namespace WebsitePanel.Providers.HostedSolution id = ObjToString(GetPSObjectProperty(obj, "Identity")); RemoveDevicesInternal(runSpace, id); - RemoveMailbox(runSpace, id); + RemoveMailbox(runSpace, id, false); } catch (Exception ex) { @@ -1243,7 +1241,8 @@ namespace WebsitePanel.Providers.HostedSolution string publicFolder = "\\" + organizationId; try { - RemovePublicFolder(runSpace, publicFolder); + DisableMailPublicFolderRecursiveInternal(runSpace, organizationId, publicFolder); + RemovePublicFolder(runSpace, GetPublicFolderMailboxName(organizationId), publicFolder); } catch (Exception ex) { @@ -1393,7 +1392,7 @@ namespace WebsitePanel.Providers.HostedSolution size += CalculateMailboxDiskSpace(runSpace, organizationDistinguishedName); - size += CalculatePublicFolderDiskSpace(runSpace, "\\" + organizationId); + size += CalculatePublicFolderDiskSpace(runSpace, GetPublicFolderMailboxName(organizationId), "\\" + organizationId); } finally { @@ -1434,7 +1433,7 @@ namespace WebsitePanel.Providers.HostedSolution return size; } - internal virtual long CalculatePublicFolderDiskSpace(Runspace runSpace, string folder) + internal virtual long CalculatePublicFolderDiskSpace(Runspace runSpace, string mailbox, string folder) { ExchangeLog.LogStart("CalculatePublicFolderDiskSpace"); ExchangeLog.DebugInfo("Folder: {0}", folder); @@ -1447,8 +1446,7 @@ namespace WebsitePanel.Providers.HostedSolution { cmd = new Command("Get-PublicFolderStatistics"); cmd.Parameters.Add("Identity", folder); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); + cmd.Parameters.Add("Mailbox", mailbox); result = ExecuteShellCommand(runSpace, cmd); if (result != null && result.Count > 0) { @@ -1460,14 +1458,13 @@ namespace WebsitePanel.Providers.HostedSolution cmd = new Command("Get-PublicFolder"); cmd.Parameters.Add("Identity", folder); + cmd.Parameters.Add("Mailbox", mailbox); cmd.Parameters.Add("GetChildren", new SwitchParameter(true)); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); result = ExecuteShellCommand(runSpace, cmd); foreach (PSObject obj in result) { string id = ObjToString(GetPSObjectProperty(obj, "Identity")); - size += CalculatePublicFolderDiskSpace(runSpace, id); + size += CalculatePublicFolderDiskSpace(runSpace, mailbox, id); } } else @@ -2027,7 +2024,7 @@ namespace WebsitePanel.Providers.HostedSolution RemoveDevicesInternal(runSpace, accountName); - RemoveMailbox(runSpace, accountName); + RemoveMailbox(runSpace, accountName, false); if (addressbookPolicy == (upn + " AP")) { @@ -2077,15 +2074,42 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogStart("GetDatabase"); ExchangeLog.LogInfo("DAG: " + dagName); - //Get Dag Servers + // this part of code handles mailboxnames like in the old 2007 provider + // check if DAG is in reality DAG\mailboxdatabase + string dagNameDAG = string.Empty; + string dagNameMBX = string.Empty; + bool isFixedDatabase = false; + if (dagName.Contains("\\")) + { + // split the two parts and extract DAG-Name and mailboxdatabase-name + string[] parts = dagName.Split(new char[] { '\\' }, 2, StringSplitOptions.None); + dagNameDAG = parts[0]; + dagNameMBX = parts[1]; + // check that we realy have a database name + if (!String.IsNullOrEmpty(dagNameMBX)) + { + isFixedDatabase = true; + } + } + else + { + // there is no mailboxdatabase-name use the loadbalancing-code + dagNameDAG = dagName; + isFixedDatabase = false; + } + + //Get Dag Servers - with the name of the database availability group Collection dags = null; Command cmd = new Command("Get-DatabaseAvailabilityGroup"); - cmd.Parameters.Add("Identity", dagName); + cmd.Parameters.Add("Identity", dagNameDAG); dags = ExecuteShellCommand(runSpace, cmd); if (htBbalancer == null) htBbalancer = new Hashtable(); + // use fully qualified dagName for loadbalancer. Thus if there are two services and one of them + // contains only the DAG, the "fixed" database could also be used in loadbalancing. If you do not want this, + // set either IsExcludedFromProvisioning or IsSuspendedFromProvisioning - it is not evaluated for fixed databases if (htBbalancer[dagName] == null) htBbalancer.Add(dagName, 0); @@ -2098,35 +2122,56 @@ namespace WebsitePanel.Providers.HostedSolution { System.Collections.Generic.List lstDatabase = new System.Collections.Generic.List(); - foreach (object objServer in servers) + if (!isFixedDatabase) // "old" loadbalancing code + { + foreach (object objServer in servers) + { + Collection 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); + } + } + } + } + } + else // new fixed database code { Collection databases = null; cmd = new Command("Get-MailboxDatabase"); - cmd.Parameters.Add("Server", ObjToString(objServer)); + cmd.Parameters.Add("Identity", dagNameMBX); databases = ExecuteShellCommand(runSpace, cmd); + // do not check "IsExcludedFromProvisioning" or "IsSuspended", just check if it is a member of the DAG foreach (PSObject objDatabase in databases) { - if (((bool)GetPSObjectProperty(objDatabase, "IsExcludedFromProvisioning") == false) && - ((bool)GetPSObjectProperty(objDatabase, "IsSuspendedFromProvisioning") == false)) + string dagSetting = ObjToString(GetPSObjectProperty(objDatabase, "MasterServerOrAvailabilityGroup")); + if (dagNameDAG.Equals(dagSetting, StringComparison.OrdinalIgnoreCase)) { - 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); - } + lstDatabase.Add(dagNameMBX); + ExchangeLog.LogInfo("AddFixedDatabase: " + dagNameMBX); } } } @@ -2144,13 +2189,15 @@ namespace WebsitePanel.Providers.HostedSolution return database; } - internal void RemoveMailbox(Runspace runSpace, string id) + + internal void RemoveMailbox(Runspace runSpace, string id, bool isPublicFolder) { ExchangeLog.LogStart("RemoveMailbox"); Command cmd = new Command("Remove-Mailbox"); cmd.Parameters.Add("Identity", id); cmd.Parameters.Add("Permanent", false); cmd.Parameters.Add("Confirm", false); + if (isPublicFolder) cmd.Parameters.Add("PublicFolder"); ExecuteShellCommand(runSpace, cmd); ExchangeLog.LogEnd("RemoveMailbox"); } @@ -2220,6 +2267,7 @@ namespace WebsitePanel.Providers.HostedSolution info.DisplayName = (string)GetPSObjectProperty(mailbox, "DisplayName"); info.HideFromAddressBook = (bool)GetPSObjectProperty(mailbox, "HiddenFromAddressListsEnabled"); + info.EnableLitigationHold = (bool)GetPSObjectProperty(mailbox, "LitigationHoldEnabled"); Command cmd = new Command("Get-User"); cmd.Parameters.Add("Identity", accountName); @@ -2895,6 +2943,7 @@ namespace WebsitePanel.Providers.HostedSolution string path = AddADPrefix(dn); DirectoryEntry entry = GetADObject(path); info.Enabled = !(bool)entry.InvokeGet("AccountDisabled"); + info.LitigationHoldEnabled = (bool)GetPSObjectProperty(mailbox, "LitigationHoldEnabled"); info.DisplayName = (string)GetPSObjectProperty(mailbox, "DisplayName"); SmtpAddress smtpAddress = (SmtpAddress)GetPSObjectProperty(mailbox, "PrimarySmtpAddress"); @@ -2926,8 +2975,10 @@ namespace WebsitePanel.Providers.HostedSolution Unlimited totalItemSize = (Unlimited)GetPSObjectProperty(statistics, "TotalItemSize"); info.TotalSize = ConvertUnlimitedToBytes(totalItemSize); + uint? itemCount = (uint?)GetPSObjectProperty(statistics, "ItemCount"); info.TotalItems = ConvertNullableToInt32(itemCount); + DateTime? lastLogoffTime = (DateTime?)GetPSObjectProperty(statistics, "LastLogoffTime"); DateTime? lastLogonTime = (DateTime?)GetPSObjectProperty(statistics, "LastLogonTime"); info.LastLogoff = ConvertNullableToDateTime(lastLogoffTime); @@ -2940,6 +2991,29 @@ namespace WebsitePanel.Providers.HostedSolution info.LastLogoff = DateTime.MinValue; info.LastLogon = DateTime.MinValue; } + + if (info.LitigationHoldEnabled) + { + cmd = new Command("Get-MailboxFolderStatistics"); + cmd.Parameters.Add("FolderScope", "RecoverableItems"); + cmd.Parameters.Add("Identity", id); + result = ExecuteShellCommand(runSpace, cmd); + if (result.Count > 0) + { + PSObject statistics = result[0]; + ByteQuantifiedSize totalItemSize = (ByteQuantifiedSize)GetPSObjectProperty(statistics, "FolderAndSubfolderSize"); + info.LitigationHoldTotalSize = (totalItemSize == null) ? 0 : ConvertUnlimitedToBytes(totalItemSize); + + Int32 itemCount = (Int32)GetPSObjectProperty(statistics, "ItemsInFolder"); + info.LitigationHoldTotalItems = (itemCount == null) ? 0 : itemCount; + } + } + else + { + info.LitigationHoldTotalSize = 0; + info.LitigationHoldTotalItems = 0; + } + } finally { @@ -4139,7 +4213,7 @@ namespace WebsitePanel.Providers.HostedSolution #region Public folders - private void CreatePublicFolderInternal(string organizationId, string securityGroup, string parentFolder, + private void CreatePublicFolderInternal(string organizationDistinguishedName, string organizationId, string securityGroup, string parentFolder, string folderName, bool mailEnabled, string accountName, string name, string domain) { ExchangeLog.LogStart("CreatePublicFolderInternal"); @@ -4154,12 +4228,16 @@ namespace WebsitePanel.Providers.HostedSolution { runSpace = OpenRunspace(); + string orgCanonicalName = ConvertADPathToCanonicalName(organizationDistinguishedName); + + //create organization public folder mailbox if required + CheckOrganizationPublicFolderMailbox(runSpace, orgCanonicalName, organizationId); //create organization root folder if required - CheckOrganizationRootFolder(runSpace, organizationId, securityGroup); + CheckOrganizationRootFolder(runSpace, organizationId, securityGroup, orgCanonicalName, organizationId); - string id = AddPublicFolder(runSpace, folderName, parentFolder); - transaction.RegisterNewPublicFolder(id); + string id = AddPublicFolder(runSpace, folderName, parentFolder, orgCanonicalName+"/"+GetPublicFolderMailboxName(organizationId)); + transaction.RegisterNewPublicFolder(GetPublicFolderMailboxName(organizationId), id); SetPublicFolderPermissions(runSpace, id, securityGroup); @@ -4183,18 +4261,43 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogEnd("CreatePublicFolderInternal"); } - private void CheckOrganizationRootFolder(Runspace runSpace, string folder, string user) + private void CheckOrganizationPublicFolderMailbox(Runspace runSpace, string orgCanonicalName, string organizationId) { - ExchangeLog.LogStart("CheckOrganizationRootFolder"); + ExchangeLog.LogStart("CheckOrganizationPublicFolderMailbox"); - Collection result = GetPublicFolderObject(runSpace, "\\" + folder); + Collection result = GetPublicFolderMailbox(runSpace, orgCanonicalName, GetPublicFolderMailboxName(organizationId)); if (result == null || result.Count == 0) { ExchangeTransaction transaction = StartTransaction(); try { - string rootId = AddPublicFolder(runSpace, folder, "\\"); - transaction.RegisterNewPublicFolder(rootId); + string rootId = AddPublicFolderMailbox(runSpace, orgCanonicalName, GetPublicFolderMailboxName(organizationId)); + transaction.RegisterNewPublicFolderMailbox(orgCanonicalName + "/" + GetPublicFolderMailboxName(organizationId)); + } + catch + { + RollbackTransaction(transaction); + throw; + } + } + ExchangeLog.LogEnd("CheckOrganizationPublicFolderMailbox"); + } + + + + private void CheckOrganizationRootFolder(Runspace runSpace, string folder, string user, string orgCanonicalName, string organizationId) + { + ExchangeLog.LogStart("CheckOrganizationRootFolder"); + + Collection result = GetPublicFolderObject(runSpace, orgCanonicalName+"/"+GetPublicFolderMailboxName(organizationId), "\\" + folder); + if (result == null || result.Count == 0) + { + ExchangeTransaction transaction = StartTransaction(); + try + { + string rootId = AddPublicFolder(runSpace, folder, "\\", orgCanonicalName + "/" + GetPublicFolderMailboxName(organizationId)); + transaction.RegisterNewPublicFolder(orgCanonicalName + "/" + GetPublicFolderMailboxName(organizationId), rootId); + SetPublicFolderPermissions(runSpace, rootId, user); } catch @@ -4206,21 +4309,40 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogEnd("CheckOrganizationRootFolder"); } - private string AddPublicFolder(Runspace runSpace, string name, string path) + private string AddPublicFolder(Runspace runSpace, string name, string path, string mailbox) { ExchangeLog.LogStart("CreatePublicFolder"); Command cmd = new Command("New-PublicFolder"); cmd.Parameters.Add("Name", name); cmd.Parameters.Add("Path", path); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); + cmd.Parameters.Add("Mailbox", mailbox); Collection result = ExecuteShellCommand(runSpace, cmd); string id = GetResultObjectIdentity(result); ExchangeLog.LogEnd("CreatePublicFolder"); return id; } - private void DeletePublicFolderInternal(string folder) + private string AddPublicFolderMailbox(Runspace runSpace, string organizationDistinguishedName, string name) + { + ExchangeLog.LogStart("CreatePublicFolderMailbox"); + Command cmd = new Command("New-Mailbox"); + cmd.Parameters.Add("Name", name); + cmd.Parameters.Add("PublicFolder"); + cmd.Parameters.Add("OrganizationalUnit", organizationDistinguishedName); + string database = GetDatabase(runSpace, PrimaryDomainController, MailboxDatabase); + ExchangeLog.DebugInfo("database: " + database); + if (database != string.Empty) + { + cmd.Parameters.Add("Database", database); + } + Collection result = ExecuteShellCommand(runSpace, cmd); + string id = GetResultObjectIdentity(result); + ExchangeLog.LogEnd("CreatePublicFolderMailbox"); + return id; + } + + + private void DeletePublicFolderInternal(string organizationId, string folder) { ExchangeLog.LogStart("DeletePublicFolderInternal"); ExchangeLog.DebugInfo("Folder: {0}", folder); @@ -4229,8 +4351,8 @@ namespace WebsitePanel.Providers.HostedSolution try { runSpace = OpenRunspace(); - - RemovePublicFolder(runSpace, folder); + DisableMailPublicFolderRecursiveInternal(runSpace, organizationId, folder); + RemovePublicFolder(runSpace, GetPublicFolderMailboxName(organizationId), folder); } finally { @@ -4240,27 +4362,42 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogEnd("DeletePublicFolderInternal"); } - private Collection GetPublicFolderObject(Runspace runSpace, string id) + private Collection GetPublicFolderObject(Runspace runSpace, string mailbox, string id) { Command cmd = new Command("Get-PublicFolder"); cmd.Parameters.Add("Identity", id); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); + //cmd.Parameters.Add("Mailbox", mailbox); Collection result = ExecuteShellCommand(runSpace, cmd); return result; } - private bool PublicFolderExists(Runspace runSpace, string id) + private Collection GetPublicFolderMailbox(Runspace runSpace, string organizationDistinguishedName, string name) + { + Command cmd = new Command("Get-Mailbox"); + cmd.Parameters.Add("Identity", name); + cmd.Parameters.Add("PublicFolder"); + cmd.Parameters.Add("OrganizationalUnit", organizationDistinguishedName); + Collection result = ExecuteShellCommand(runSpace, cmd); + return result; + } + + + private string GetPublicFolderMailboxName(string organizationId) + { + return string.Format("{0} Public Folder Mailbox", organizationId); + } + + private bool PublicFolderExists(Runspace runSpace, string id, string organizationId) { ExchangeLog.LogStart("PublicFolderExists"); - Collection result = GetPublicFolderObject(runSpace, id); + Collection result = GetPublicFolderObject(runSpace, GetPublicFolderMailboxName(organizationId), id); bool ret = (result != null && result.Count == 1); ExchangeLog.LogEnd("PublicFolderExists"); return ret; } - private void RemovePublicFolder(Runspace runSpace, string id) + private void RemovePublicFolder(Runspace runSpace, string mailbox, string id) { ExchangeLog.LogStart("RemovePublicFolder"); @@ -4268,8 +4405,6 @@ namespace WebsitePanel.Providers.HostedSolution cmd.Parameters.Add("Identity", id); cmd.Parameters.Add("Recurse", new SwitchParameter(true)); cmd.Parameters.Add("Confirm", false); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); ExecuteShellCommand(runSpace, cmd); ExchangeLog.LogEnd("RemovePublicFolder"); @@ -4286,14 +4421,12 @@ namespace WebsitePanel.Providers.HostedSolution string permission) { ExchangeLog.LogStart("RemovePublicFolderClientPermission"); + ExchangeLog.DebugInfo("Id :{0}", id); Command cmd = new Command("Remove-PublicFolderClientPermission"); cmd.Parameters.Add("Identity", id); cmd.Parameters.Add("User", user); - cmd.Parameters.Add("AccessRights", permission); cmd.Parameters.Add("Confirm", false); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); ExecuteShellCommand(runSpace, cmd); ExchangeLog.LogEnd("RemovePublicFolderClientPermission"); } @@ -4306,18 +4439,15 @@ namespace WebsitePanel.Providers.HostedSolution cmd.Parameters.Add("Identity", id); cmd.Parameters.Add("User", user); cmd.Parameters.Add("AccessRights", permission); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); ExecuteShellCommand(runSpace, cmd); ExchangeLog.LogEnd("AddPublicFolderClientPermission"); } - private void GetPublicFolderClientPermission(Runspace runSpace, string id) + private void GetPublicFolderClientPermission(Runspace runSpace, string mailbox, string id) { Command cmd = new Command("Get-PublicFolderClientPermission"); cmd.Parameters.Add("Identity", id); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); + cmd.Parameters.Add("Mailbox", mailbox); Collection result = ExecuteShellCommand(runSpace, cmd); PSObject obj = result[0]; } @@ -4337,8 +4467,6 @@ namespace WebsitePanel.Providers.HostedSolution Command cmd = new Command("Enable-MailPublicFolder"); cmd.Parameters.Add("Identity", folder); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); ExecuteShellCommand(runSpace, cmd); string id = null; @@ -4350,8 +4478,6 @@ namespace WebsitePanel.Providers.HostedSolution { cmd = new Command("Get-MailPublicFolder"); cmd.Parameters.Add("Identity", folder); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); Collection result = ExecuteShellCommand(runSpace, cmd); if (result != null && result.Count > 0) { @@ -4418,9 +4544,10 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogEnd("EnableMailPublicFolderInternal"); } - private void DisableMailPublicFolderInternal(string folder) + private void DisableMailPublicFolderInternal(string organizationId, string folder) { ExchangeLog.LogStart("DisableMailPublicFolderInternal"); + ExchangeLog.DebugInfo("Organization: {0}", organizationId); ExchangeLog.DebugInfo("Folder: {0}", folder); Runspace runSpace = null; try @@ -4431,8 +4558,6 @@ namespace WebsitePanel.Providers.HostedSolution Command cmd = new Command("Disable-MailPublicFolder"); cmd.Parameters.Add("Identity", folder); cmd.Parameters.Add("Confirm", false); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); ExecuteShellCommand(runSpace, cmd); } finally @@ -4443,9 +4568,42 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogEnd("DisableMailPublicFolderInternal"); } - private ExchangePublicFolder GetPublicFolderGeneralSettingsInternal(string folder) + + private void DisableMailPublicFolderRecursiveInternal(Runspace runSpace, string organizationId, string folder) + { + ExchangeLog.LogStart("DisableMailPublicFolderRecursiveInternal"); + ExchangeLog.DebugInfo("Organization: {0}", organizationId); + ExchangeLog.DebugInfo("Folder: {0}", folder); + + Command cmd = new Command("Disable-MailPublicFolder"); + cmd.Parameters.Add("Identity", folder); + cmd.Parameters.Add("Confirm", false); + ExecuteShellCommand(runSpace, cmd); + + cmd = new Command("Get-PublicFolder"); + cmd.Parameters.Add("Identity", folder); + cmd.Parameters.Add("GetChildren"); + Collection result = ExecuteShellCommand(runSpace, cmd); + + if (result.Count > 0) + { + foreach (PSObject obj in result) + { + string name = (string)GetPSObjectProperty(obj, "Name"); + string parentPath = (string)GetPSObjectProperty(obj, "parentPath"); + + DisableMailPublicFolderRecursiveInternal(runSpace, organizationId, parentPath + "\\" + name); + } + } + + ExchangeLog.LogEnd("DisableMailPublicFolderRecursiveInternal"); + } + + + private ExchangePublicFolder GetPublicFolderGeneralSettingsInternal(string organizationId, string folder) { ExchangeLog.LogStart("GetPublicFolderGeneralSettingsInternal"); + ExchangeLog.DebugInfo("Organization: {0}", organizationId); ExchangeLog.DebugInfo("Folder: {0}", folder); ExchangePublicFolder info = new ExchangePublicFolder(); @@ -4454,26 +4612,25 @@ namespace WebsitePanel.Providers.HostedSolution { runSpace = OpenRunspace(); - Collection result = GetPublicFolderObject(runSpace, folder); + Collection result = GetPublicFolderObject(runSpace, GetPublicFolderMailboxName(organizationId), folder); PSObject publicFolder = result[0]; info.Name = (string)GetPSObjectProperty(publicFolder, "Name"); info.MailEnabled = (bool)GetPSObjectProperty(publicFolder, "MailEnabled"); - info.HideFromAddressBook = (bool)GetPSObjectProperty(publicFolder, "HiddenFromAddressListsEnabled"); + info.NETBIOS = GetNETBIOSDomainName(); - info.Accounts = GetPublicFolderAccounts(runSpace, folder); + info.Accounts = GetPublicFolderAccounts(runSpace, GetPublicFolderMailboxName(organizationId), folder); if (info.MailEnabled) { Command cmd = new Command("Get-MailPublicFolder"); cmd.Parameters.Add("Identity", folder); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); result = ExecuteShellCommand(runSpace, cmd); if (result.Count > 0) { publicFolder = result[0]; info.SAMAccountName = string.Format("{0}\\{1}", GetNETBIOSDomainName(), (string)GetPSObjectProperty(publicFolder, "Alias")); + info.HideFromAddressBook = (bool)GetPSObjectProperty(publicFolder, "HiddenFromAddressListsEnabled"); } } } @@ -4486,7 +4643,7 @@ namespace WebsitePanel.Providers.HostedSolution return info; } - private ExchangeAccount[] GetPublicFolderAccounts(Runspace runSpace, string folder) + private ExchangeAccount[] GetPublicFolderAccounts(Runspace runSpace, string mailbox, string folder) { ExchangeLog.LogStart("GetPublicFolderAccounts"); ExchangeLog.DebugInfo("Folder: {0}", folder); @@ -4496,8 +4653,7 @@ namespace WebsitePanel.Providers.HostedSolution Command cmd = new Command("Get-PublicFolderClientPermission"); cmd.Parameters.Add("Identity", folder); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); + cmd.Parameters.Add("Mailbox", mailbox); Collection result = ExecuteShellCommand(runSpace, cmd); foreach (PSObject obj in result) @@ -4522,7 +4678,7 @@ namespace WebsitePanel.Providers.HostedSolution return list.ToArray(); } - private void SetPublicFolderGeneralSettingsInternal(string folder, string newFolderName, + private void SetPublicFolderGeneralSettingsInternal(string organizationId, string folder, string newFolderName, bool hideFromAddressBook, ExchangeAccount[] accounts) { ExchangeLog.LogStart("SetPublicFolderGeneralSettingsInternal"); @@ -4534,10 +4690,10 @@ namespace WebsitePanel.Providers.HostedSolution { runSpace = OpenRunspace(); - Collection result = GetPublicFolderObject(runSpace, folder); + Collection result = GetPublicFolderObject(runSpace, GetPublicFolderMailboxName(organizationId), folder); PSObject publicFolder = result[0]; string folderName = (string)GetPSObjectProperty(publicFolder, "Name"); - ExchangeAccount[] allAccounts = GetPublicFolderAccounts(runSpace, folder); + ExchangeAccount[] allAccounts = GetPublicFolderAccounts(runSpace, GetPublicFolderMailboxName(organizationId), folder); //Remove all accounts and re-apply List accountsToDelete = new List(); @@ -4576,10 +4732,8 @@ namespace WebsitePanel.Providers.HostedSolution } //general settings - Command cmd = new Command("Set-PublicFolder"); + Command cmd = new Command("Set-MailPublicFolder"); cmd.Parameters.Add("Identity", folder); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); if (!folderName.Equals(newFolderName, StringComparison.OrdinalIgnoreCase)) { cmd.Parameters.Add("Name", newFolderName); @@ -4595,9 +4749,10 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogEnd("SetPublicFolderGeneralSettingsInternal"); } - private ExchangePublicFolder GetPublicFolderMailFlowSettingsInternal(string folder) + private ExchangePublicFolder GetPublicFolderMailFlowSettingsInternal(string organizationId, string folder) { ExchangeLog.LogStart("GetPublicFolderMailFlowSettingsInternal"); + ExchangeLog.DebugInfo("Organization: {0}", organizationId); ExchangeLog.DebugInfo("Folder: {0}", folder); ExchangePublicFolder info = new ExchangePublicFolder(); @@ -4610,8 +4765,6 @@ namespace WebsitePanel.Providers.HostedSolution Command cmd = new Command("Get-MailPublicFolder"); cmd.Parameters.Add("Identity", folder); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); Collection result = ExecuteShellCommand(runSpace, cmd); PSObject publicFolder = result[0]; @@ -4628,10 +4781,11 @@ namespace WebsitePanel.Providers.HostedSolution return info; } - private void SetPublicFolderMailFlowSettingsInternal(string folder, + private void SetPublicFolderMailFlowSettingsInternal(string organizationId, string folder, string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication) { ExchangeLog.LogStart("SetPublicFolderMailFlowSettingsInternal"); + ExchangeLog.DebugInfo("Organization: {0}", organizationId); ExchangeLog.DebugInfo("Folder: {0}", folder); Runspace runSpace = null; @@ -4667,9 +4821,10 @@ namespace WebsitePanel.Providers.HostedSolution } - private ExchangeEmailAddress[] GetPublicFolderEmailAddressesInternal(string folder) + private ExchangeEmailAddress[] GetPublicFolderEmailAddressesInternal(string organizationId, string folder) { ExchangeLog.LogStart("GetPublicFolderEmailAddressesInternal"); + ExchangeLog.DebugInfo("Organization: {0}", organizationId); ExchangeLog.DebugInfo("Folder: {0}", folder); List list = new List(); @@ -4681,8 +4836,6 @@ namespace WebsitePanel.Providers.HostedSolution Command cmd = new Command("Get-MailPublicFolder"); cmd.Parameters.Add("Identity", folder); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); Collection result = ExecuteShellCommand(runSpace, cmd); PSObject publicFolder = result[0]; @@ -4693,9 +4846,6 @@ namespace WebsitePanel.Providers.HostedSolution if (smtpAddress != null) primaryEmail = smtpAddress.ToString(); - //SmtpAddress winAddress = (SmtpAddress)GetPSObjectProperty(publicFolder, "WindowsEmailAddress"); - //if (winAddress != null) - // windowsEmail = winAddress.ToString(); windowsEmail = ObjToString(GetPSObjectProperty(publicFolder, "CustomAttribute3")); @@ -4721,9 +4871,10 @@ namespace WebsitePanel.Providers.HostedSolution return list.ToArray(); } - private void SetPublicFolderEmailAddressesInternal(string folder, string[] emailAddresses) + private void SetPublicFolderEmailAddressesInternal(string organizationId, string folder, string[] emailAddresses) { ExchangeLog.LogStart("SetDistributionListEmailAddressesInternal"); + ExchangeLog.DebugInfo("Organization: {0}", organizationId); ExchangeLog.DebugInfo("Folder: {0}", folder); Runspace runSpace = null; @@ -4734,8 +4885,6 @@ namespace WebsitePanel.Providers.HostedSolution Command cmd = new Command("Get-MailPublicFolder"); cmd.Parameters.Add("Identity", folder); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); Collection result = ExecuteShellCommand(runSpace, cmd); PSObject publicFolder = result[0]; @@ -4772,9 +4921,10 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogEnd("SetPublicFolderEmailAddressesInternal"); } - private void SetPublicFolderPrimaryEmailAddressInternal(string folder, string emailAddress) + private void SetPublicFolderPrimaryEmailAddressInternal(string organizationId, string folder, string emailAddress) { ExchangeLog.LogStart("SetPublicFolderPrimaryEmailAddressInternal"); + ExchangeLog.DebugInfo("Organization: {0}", organizationId); ExchangeLog.DebugInfo("Folder: {0}", folder); ExchangeLog.DebugInfo("Email: {0}", emailAddress); @@ -4799,9 +4949,10 @@ namespace WebsitePanel.Providers.HostedSolution ExchangeLog.LogEnd("SetPublicFolderPrimaryEmailAddressInternal"); } - private ExchangeItemStatistics[] GetPublicFoldersStatisticsInternal(string[] folders) + private ExchangeItemStatistics[] GetPublicFoldersStatisticsInternal(string organizationId, string[] folders) { ExchangeLog.LogStart("GetPublicFoldersStatisticsInternal"); + ExchangeLog.DebugInfo("Organization: {0}", organizationId); Runspace runSpace = null; List ret = new List(); @@ -4814,8 +4965,7 @@ namespace WebsitePanel.Providers.HostedSolution { Command cmd = new Command("Get-PublicFolderStatistics"); cmd.Parameters.Add("Identity", folder); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); + cmd.Parameters.Add("Mailbox", GetPublicFolderMailboxName(organizationId)); Collection result = ExecuteShellCommand(runSpace, cmd); if (result != null && result.Count > 0) { @@ -4845,9 +4995,10 @@ namespace WebsitePanel.Providers.HostedSolution return ret.ToArray(); } - private string[] GetPublicFoldersRecursiveInternal(string parent) + private string[] GetPublicFoldersRecursiveInternal(string organizationId, string parent) { ExchangeLog.LogStart("GetPublicFoldersRecursiveInternal"); + ExchangeLog.DebugInfo("Organization: {0}", organizationId); Runspace runSpace = null; List ret = new List(); @@ -4857,8 +5008,7 @@ namespace WebsitePanel.Providers.HostedSolution Command cmd = new Command("Get-PublicFolder"); cmd.Parameters.Add("Identity", parent); cmd.Parameters.Add("Recurse", true); - if (!string.IsNullOrEmpty(PublicFolderServer)) - cmd.Parameters.Add("Server", PublicFolderServer); + cmd.Parameters.Add("Mailbox", GetPublicFolderMailboxName(organizationId)); Collection result = ExecuteShellCommand(runSpace, cmd); if (result != null) @@ -4877,7 +5027,7 @@ namespace WebsitePanel.Providers.HostedSolution return ret.ToArray(); } - private long GetPublicFolderSizeInternal(string folder) + private long GetPublicFolderSizeInternal(string organizationId, string folder) { ExchangeLog.LogStart("GetPublicFolderSizeInternal"); long size = 0; @@ -4885,7 +5035,7 @@ namespace WebsitePanel.Providers.HostedSolution try { runSpace = OpenRunspace(); - size += CalculatePublicFolderDiskSpace(runSpace, folder); + size += CalculatePublicFolderDiskSpace(runSpace, GetPublicFolderMailboxName(organizationId), folder); } finally { @@ -6855,7 +7005,7 @@ namespace WebsitePanel.Providers.HostedSolution RemoveUPNSuffix(action.Id, action.Suffix); break; case TransactionAction.TransactionActionTypes.CreateMailbox: - RemoveMailbox(runspace, action.Id); + RemoveMailbox(runspace, action.Id, false); break; case TransactionAction.TransactionActionTypes.EnableMailbox: DisableMailbox(runspace, action.Id); @@ -6863,8 +7013,11 @@ namespace WebsitePanel.Providers.HostedSolution case TransactionAction.TransactionActionTypes.CreateContact: RemoveContact(runspace, action.Id); break; + case TransactionAction.TransactionActionTypes.CreatePublicFolderMailbox: + RemoveMailbox(runspace, action.Id, true); + break; case TransactionAction.TransactionActionTypes.CreatePublicFolder: - RemovePublicFolder(runspace, action.Id); + RemovePublicFolder(runspace, action.Account, action.Id); break; case TransactionAction.TransactionActionTypes.AddMailboxFullAccessPermission: RemoveMailboxAccessPermission(runspace, action.Account, action.Id, "FullAccess"); diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs index d04f90ce..e4634f08 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/Exchange2007.cs @@ -429,14 +429,14 @@ namespace WebsitePanel.Providers.HostedSolution #endregion #region Public folders - public void CreatePublicFolder(string organizationId, string securityGroup, string parentFolder, + public void CreatePublicFolder(string organizationDistinguishedName, string organizationId, string securityGroup, string parentFolder, string folderName, bool mailEnabled, string accountName, string name, string domain) { CreatePublicFolderInternal(organizationId, securityGroup, parentFolder, folderName, mailEnabled, accountName, name, domain); } - public void DeletePublicFolder(string folder) + public void DeletePublicFolder(string organizationId, string folder) { DeletePublicFolderInternal(folder); } @@ -475,58 +475,58 @@ namespace WebsitePanel.Providers.HostedSolution } ExchangeLog.LogEnd("DisableMailboxIntenal"); } - public void DisableMailPublicFolder(string folder) + public void DisableMailPublicFolder(string organizationId, string folder) { DisableMailPublicFolderInternal(folder); } - public ExchangePublicFolder GetPublicFolderGeneralSettings(string folder) + public ExchangePublicFolder GetPublicFolderGeneralSettings(string organizationId, string folder) { return GetPublicFolderGeneralSettingsInternal(folder); } - public void SetPublicFolderGeneralSettings(string folder, string newFolderName, + public void SetPublicFolderGeneralSettings(string organizationId, string folder, string newFolderName, bool hideFromAddressBook, ExchangeAccount[] accounts) { SetPublicFolderGeneralSettingsInternal(folder, newFolderName, hideFromAddressBook, accounts); } - public ExchangePublicFolder GetPublicFolderMailFlowSettings(string folder) + public ExchangePublicFolder GetPublicFolderMailFlowSettings(string organizationId, string folder) { return GetPublicFolderMailFlowSettingsInternal(folder); } - public void SetPublicFolderMailFlowSettings(string folder, + public void SetPublicFolderMailFlowSettings(string organizationId, string folder, string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication) { SetPublicFolderMailFlowSettingsInternal(folder, acceptAccounts, rejectAccounts, requireSenderAuthentication); } - public ExchangeEmailAddress[] GetPublicFolderEmailAddresses(string folder) + public ExchangeEmailAddress[] GetPublicFolderEmailAddresses(string organizationId, string folder) { return GetPublicFolderEmailAddressesInternal(folder); } - public void SetPublicFolderEmailAddresses(string folder, string[] emailAddresses) + public void SetPublicFolderEmailAddresses(string organizationId, string folder, string[] emailAddresses) { SetPublicFolderEmailAddressesInternal(folder, emailAddresses); } - public void SetPublicFolderPrimaryEmailAddress(string folder, string emailAddress) + public void SetPublicFolderPrimaryEmailAddress(string organizationId, string folder, string emailAddress) { SetPublicFolderPrimaryEmailAddressInternal(folder, emailAddress); } - public ExchangeItemStatistics[] GetPublicFoldersStatistics(string[] folders) + public ExchangeItemStatistics[] GetPublicFoldersStatistics(string organizationId, string[] folders) { return GetPublicFoldersStatisticsInternal(folders); } - public string[] GetPublicFoldersRecursive(string parent) + public string[] GetPublicFoldersRecursive(string organizationId, string parent) { return GetPublicFoldersRecursiveInternal(parent); } - public long GetPublicFolderSize(string folder) + public long GetPublicFolderSize(string organizationId, string folder) { return GetPublicFolderSizeInternal(folder); } @@ -4066,7 +4066,7 @@ namespace WebsitePanel.Providers.HostedSolution CheckOrganizationRootFolder(runSpace, organizationId, securityGroup); string id = AddPublicFolder(runSpace, folderName, parentFolder); - transaction.RegisterNewPublicFolder(id); + transaction.RegisterNewPublicFolder(string.Empty, id); SetPublicFolderPermissions(runSpace, id, securityGroup); @@ -4101,7 +4101,7 @@ namespace WebsitePanel.Providers.HostedSolution try { string rootId = AddPublicFolder(runSpace, folder, "\\"); - transaction.RegisterNewPublicFolder(rootId); + transaction.RegisterNewPublicFolder(string.Empty, rootId); SetPublicFolderPermissions(runSpace, rootId, user); } catch diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/ExchangeTransaction.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/ExchangeTransaction.cs index be3e4773..76d7d3a7 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/ExchangeTransaction.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution/ExchangeTransaction.cs @@ -162,11 +162,21 @@ namespace WebsitePanel.Providers.HostedSolution Actions.Add(action); } - public void RegisterNewPublicFolder(string id) + public void RegisterNewPublicFolder(string mailbox, string id) { TransactionAction action = new TransactionAction(); action.ActionType = TransactionAction.TransactionActionTypes.CreatePublicFolder; action.Id = id; + action.Account = mailbox; + Actions.Add(action); + } + + + public void RegisterNewPublicFolderMailbox(string id) + { + TransactionAction action = new TransactionAction(); + action.ActionType = TransactionAction.TransactionActionTypes.CreatePublicFolderMailbox; + action.Id = id; Actions.Add(action); } diff --git a/WebsitePanel/Sources/WebsitePanel.Server.Client/ExchangeServerProxy.cs b/WebsitePanel/Sources/WebsitePanel.Server.Client/ExchangeServerProxy.cs index 85a1d220..a934bf30 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server.Client/ExchangeServerProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server.Client/ExchangeServerProxy.cs @@ -48,8 +48,7 @@ namespace WebsitePanel.Providers.Exchange { using System.Diagnostics; using WebsitePanel.Providers.HostedSolution; - - + /// [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")] [System.Diagnostics.DebuggerStepThroughAttribute()] @@ -2940,8 +2939,9 @@ namespace WebsitePanel.Providers.Exchange { /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/CreatePublicFolder", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void CreatePublicFolder(string organizationId, string securityGroup, string parentFolder, string folderName, bool mailEnabled, string accountName, string name, string domain) { + public void CreatePublicFolder(string organizationDistinguishedName, string organizationId, string securityGroup, string parentFolder, string folderName, bool mailEnabled, string accountName, string name, string domain) { this.Invoke("CreatePublicFolder", new object[] { + organizationDistinguishedName, organizationId, securityGroup, parentFolder, @@ -2953,8 +2953,9 @@ namespace WebsitePanel.Providers.Exchange { } /// - public System.IAsyncResult BeginCreatePublicFolder(string organizationId, string securityGroup, string parentFolder, string folderName, bool mailEnabled, string accountName, string name, string domain, System.AsyncCallback callback, object asyncState) { + public System.IAsyncResult BeginCreatePublicFolder(string organizationDistinguishedName, string organizationId, string securityGroup, string parentFolder, string folderName, bool mailEnabled, string accountName, string name, string domain, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("CreatePublicFolder", new object[] { + organizationDistinguishedName, organizationId, securityGroup, parentFolder, @@ -2971,16 +2972,17 @@ namespace WebsitePanel.Providers.Exchange { } /// - public void CreatePublicFolderAsync(string organizationId, string securityGroup, string parentFolder, string folderName, bool mailEnabled, string accountName, string name, string domain) { - this.CreatePublicFolderAsync(organizationId, securityGroup, parentFolder, folderName, mailEnabled, accountName, name, domain, null); + public void CreatePublicFolderAsync(string organizationDistinguishedName, string organizationId, string securityGroup, string parentFolder, string folderName, bool mailEnabled, string accountName, string name, string domain) { + this.CreatePublicFolderAsync(organizationDistinguishedName, organizationId, securityGroup, parentFolder, folderName, mailEnabled, accountName, name, domain, null); } /// - public void CreatePublicFolderAsync(string organizationId, string securityGroup, string parentFolder, string folderName, bool mailEnabled, string accountName, string name, string domain, object userState) { + public void CreatePublicFolderAsync(string organizationDistinguishedName, string organizationId, string securityGroup, string parentFolder, string folderName, bool mailEnabled, string accountName, string name, string domain, object userState) { if ((this.CreatePublicFolderOperationCompleted == null)) { this.CreatePublicFolderOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCreatePublicFolderOperationCompleted); } this.InvokeAsync("CreatePublicFolder", new object[] { + organizationDistinguishedName, organizationId, securityGroup, parentFolder, @@ -3001,14 +3003,16 @@ namespace WebsitePanel.Providers.Exchange { /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/DeletePublicFolder", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void DeletePublicFolder(string folder) { + public void DeletePublicFolder(string organizationId, string folder) { this.Invoke("DeletePublicFolder", new object[] { + organizationId, folder}); } /// - public System.IAsyncResult BeginDeletePublicFolder(string folder, System.AsyncCallback callback, object asyncState) { + public System.IAsyncResult BeginDeletePublicFolder(string organizationId, string folder, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("DeletePublicFolder", new object[] { + organizationId, folder}, callback, asyncState); } @@ -3018,16 +3022,17 @@ namespace WebsitePanel.Providers.Exchange { } /// - public void DeletePublicFolderAsync(string folder) { - this.DeletePublicFolderAsync(folder, null); + public void DeletePublicFolderAsync(string organizationId, string folder) { + this.DeletePublicFolderAsync(organizationId, folder, null); } /// - public void DeletePublicFolderAsync(string folder, object userState) { + public void DeletePublicFolderAsync(string organizationId, string folder, object userState) { if ((this.DeletePublicFolderOperationCompleted == null)) { this.DeletePublicFolderOperationCompleted = new System.Threading.SendOrPostCallback(this.OnDeletePublicFolderOperationCompleted); } this.InvokeAsync("DeletePublicFolder", new object[] { + organizationId, folder}, this.DeletePublicFolderOperationCompleted, userState); } @@ -3093,14 +3098,16 @@ namespace WebsitePanel.Providers.Exchange { /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/DisableMailPublicFolder", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void DisableMailPublicFolder(string folder) { + public void DisableMailPublicFolder(string organizationId, string folder) { this.Invoke("DisableMailPublicFolder", new object[] { + organizationId, folder}); } /// - public System.IAsyncResult BeginDisableMailPublicFolder(string folder, System.AsyncCallback callback, object asyncState) { + public System.IAsyncResult BeginDisableMailPublicFolder(string organizationId, string folder, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("DisableMailPublicFolder", new object[] { + organizationId, folder}, callback, asyncState); } @@ -3110,16 +3117,17 @@ namespace WebsitePanel.Providers.Exchange { } /// - public void DisableMailPublicFolderAsync(string folder) { - this.DisableMailPublicFolderAsync(folder, null); + public void DisableMailPublicFolderAsync(string organizationId, string folder) { + this.DisableMailPublicFolderAsync(organizationId, folder, null); } /// - public void DisableMailPublicFolderAsync(string folder, object userState) { + public void DisableMailPublicFolderAsync(string organizationId, string folder, object userState) { if ((this.DisableMailPublicFolderOperationCompleted == null)) { this.DisableMailPublicFolderOperationCompleted = new System.Threading.SendOrPostCallback(this.OnDisableMailPublicFolderOperationCompleted); } this.InvokeAsync("DisableMailPublicFolder", new object[] { + organizationId, folder}, this.DisableMailPublicFolderOperationCompleted, userState); } @@ -3133,15 +3141,17 @@ namespace WebsitePanel.Providers.Exchange { /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetPublicFolderGeneralSettings", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public ExchangePublicFolder GetPublicFolderGeneralSettings(string folder) { + public ExchangePublicFolder GetPublicFolderGeneralSettings(string organizationId, string folder) { object[] results = this.Invoke("GetPublicFolderGeneralSettings", new object[] { + organizationId, folder}); return ((ExchangePublicFolder)(results[0])); } /// - public System.IAsyncResult BeginGetPublicFolderGeneralSettings(string folder, System.AsyncCallback callback, object asyncState) { + public System.IAsyncResult BeginGetPublicFolderGeneralSettings(string organizationId, string folder, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetPublicFolderGeneralSettings", new object[] { + organizationId, folder}, callback, asyncState); } @@ -3152,16 +3162,17 @@ namespace WebsitePanel.Providers.Exchange { } /// - public void GetPublicFolderGeneralSettingsAsync(string folder) { - this.GetPublicFolderGeneralSettingsAsync(folder, null); + public void GetPublicFolderGeneralSettingsAsync(string organizationId, string folder) { + this.GetPublicFolderGeneralSettingsAsync(organizationId, folder, null); } /// - public void GetPublicFolderGeneralSettingsAsync(string folder, object userState) { + public void GetPublicFolderGeneralSettingsAsync(string organizationId, string folder, object userState) { if ((this.GetPublicFolderGeneralSettingsOperationCompleted == null)) { this.GetPublicFolderGeneralSettingsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetPublicFolderGeneralSettingsOperationCompleted); } this.InvokeAsync("GetPublicFolderGeneralSettings", new object[] { + organizationId, folder}, this.GetPublicFolderGeneralSettingsOperationCompleted, userState); } @@ -3175,8 +3186,9 @@ namespace WebsitePanel.Providers.Exchange { /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/SetPublicFolderGeneralSettings", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void SetPublicFolderGeneralSettings(string folder, string newFolderName, bool hideFromAddressBook, ExchangeAccount[] accounts) { + public void SetPublicFolderGeneralSettings(string organizationId, string folder, string newFolderName, bool hideFromAddressBook, ExchangeAccount[] accounts) { this.Invoke("SetPublicFolderGeneralSettings", new object[] { + organizationId, folder, newFolderName, hideFromAddressBook, @@ -3184,8 +3196,9 @@ namespace WebsitePanel.Providers.Exchange { } /// - public System.IAsyncResult BeginSetPublicFolderGeneralSettings(string folder, string newFolderName, bool hideFromAddressBook, ExchangeAccount[] accounts, System.AsyncCallback callback, object asyncState) { + public System.IAsyncResult BeginSetPublicFolderGeneralSettings(string organizationId, string folder, string newFolderName, bool hideFromAddressBook, ExchangeAccount[] accounts, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("SetPublicFolderGeneralSettings", new object[] { + organizationId, folder, newFolderName, hideFromAddressBook, @@ -3198,16 +3211,17 @@ namespace WebsitePanel.Providers.Exchange { } /// - public void SetPublicFolderGeneralSettingsAsync(string folder, string newFolderName, bool hideFromAddressBook, ExchangeAccount[] accounts) { - this.SetPublicFolderGeneralSettingsAsync(folder, newFolderName, hideFromAddressBook, accounts, null); + public void SetPublicFolderGeneralSettingsAsync(string organizationId, string folder, string newFolderName, bool hideFromAddressBook, ExchangeAccount[] accounts) { + this.SetPublicFolderGeneralSettingsAsync(organizationId, folder, newFolderName, hideFromAddressBook, accounts, null); } /// - public void SetPublicFolderGeneralSettingsAsync(string folder, string newFolderName, bool hideFromAddressBook, ExchangeAccount[] accounts, object userState) { + public void SetPublicFolderGeneralSettingsAsync(string organizationId, string folder, string newFolderName, bool hideFromAddressBook, ExchangeAccount[] accounts, object userState) { if ((this.SetPublicFolderGeneralSettingsOperationCompleted == null)) { this.SetPublicFolderGeneralSettingsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSetPublicFolderGeneralSettingsOperationCompleted); } this.InvokeAsync("SetPublicFolderGeneralSettings", new object[] { + organizationId, folder, newFolderName, hideFromAddressBook, @@ -3224,15 +3238,17 @@ namespace WebsitePanel.Providers.Exchange { /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetPublicFolderMailFlowSettings", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public ExchangePublicFolder GetPublicFolderMailFlowSettings(string folder) { + public ExchangePublicFolder GetPublicFolderMailFlowSettings(string organizationId, string folder) { object[] results = this.Invoke("GetPublicFolderMailFlowSettings", new object[] { + organizationId, folder}); return ((ExchangePublicFolder)(results[0])); } /// - public System.IAsyncResult BeginGetPublicFolderMailFlowSettings(string folder, System.AsyncCallback callback, object asyncState) { + public System.IAsyncResult BeginGetPublicFolderMailFlowSettings(string organizationId, string folder, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetPublicFolderMailFlowSettings", new object[] { + organizationId, folder}, callback, asyncState); } @@ -3243,16 +3259,17 @@ namespace WebsitePanel.Providers.Exchange { } /// - public void GetPublicFolderMailFlowSettingsAsync(string folder) { - this.GetPublicFolderMailFlowSettingsAsync(folder, null); + public void GetPublicFolderMailFlowSettingsAsync(string organizationId, string folder) { + this.GetPublicFolderMailFlowSettingsAsync(organizationId, folder, null); } /// - public void GetPublicFolderMailFlowSettingsAsync(string folder, object userState) { + public void GetPublicFolderMailFlowSettingsAsync(string organizationId, string folder, object userState) { if ((this.GetPublicFolderMailFlowSettingsOperationCompleted == null)) { this.GetPublicFolderMailFlowSettingsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetPublicFolderMailFlowSettingsOperationCompleted); } this.InvokeAsync("GetPublicFolderMailFlowSettings", new object[] { + organizationId, folder}, this.GetPublicFolderMailFlowSettingsOperationCompleted, userState); } @@ -3266,8 +3283,9 @@ namespace WebsitePanel.Providers.Exchange { /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/SetPublicFolderMailFlowSettings", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void SetPublicFolderMailFlowSettings(string folder, string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication) { + public void SetPublicFolderMailFlowSettings(string organizationId, string folder, string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication) { this.Invoke("SetPublicFolderMailFlowSettings", new object[] { + organizationId, folder, acceptAccounts, rejectAccounts, @@ -3275,8 +3293,9 @@ namespace WebsitePanel.Providers.Exchange { } /// - public System.IAsyncResult BeginSetPublicFolderMailFlowSettings(string folder, string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication, System.AsyncCallback callback, object asyncState) { + public System.IAsyncResult BeginSetPublicFolderMailFlowSettings(string organizationId, string folder, string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("SetPublicFolderMailFlowSettings", new object[] { + organizationId, folder, acceptAccounts, rejectAccounts, @@ -3289,16 +3308,17 @@ namespace WebsitePanel.Providers.Exchange { } /// - public void SetPublicFolderMailFlowSettingsAsync(string folder, string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication) { - this.SetPublicFolderMailFlowSettingsAsync(folder, acceptAccounts, rejectAccounts, requireSenderAuthentication, null); + public void SetPublicFolderMailFlowSettingsAsync(string organizationId, string folder, string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication) { + this.SetPublicFolderMailFlowSettingsAsync(organizationId, folder, acceptAccounts, rejectAccounts, requireSenderAuthentication, null); } /// - public void SetPublicFolderMailFlowSettingsAsync(string folder, string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication, object userState) { + public void SetPublicFolderMailFlowSettingsAsync(string organizationId, string folder, string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication, object userState) { if ((this.SetPublicFolderMailFlowSettingsOperationCompleted == null)) { this.SetPublicFolderMailFlowSettingsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSetPublicFolderMailFlowSettingsOperationCompleted); } this.InvokeAsync("SetPublicFolderMailFlowSettings", new object[] { + organizationId, folder, acceptAccounts, rejectAccounts, @@ -3315,15 +3335,17 @@ namespace WebsitePanel.Providers.Exchange { /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetPublicFolderEmailAddresses", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public ExchangeEmailAddress[] GetPublicFolderEmailAddresses(string folder) { + public ExchangeEmailAddress[] GetPublicFolderEmailAddresses(string organizationId, string folder) { object[] results = this.Invoke("GetPublicFolderEmailAddresses", new object[] { + organizationId, folder}); return ((ExchangeEmailAddress[])(results[0])); } /// - public System.IAsyncResult BeginGetPublicFolderEmailAddresses(string folder, System.AsyncCallback callback, object asyncState) { + public System.IAsyncResult BeginGetPublicFolderEmailAddresses(string organizationId, string folder, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetPublicFolderEmailAddresses", new object[] { + organizationId, folder}, callback, asyncState); } @@ -3334,16 +3356,17 @@ namespace WebsitePanel.Providers.Exchange { } /// - public void GetPublicFolderEmailAddressesAsync(string folder) { - this.GetPublicFolderEmailAddressesAsync(folder, null); + public void GetPublicFolderEmailAddressesAsync(string organizationId, string folder) { + this.GetPublicFolderEmailAddressesAsync(organizationId, folder, null); } /// - public void GetPublicFolderEmailAddressesAsync(string folder, object userState) { + public void GetPublicFolderEmailAddressesAsync(string organizationId, string folder, object userState) { if ((this.GetPublicFolderEmailAddressesOperationCompleted == null)) { this.GetPublicFolderEmailAddressesOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetPublicFolderEmailAddressesOperationCompleted); } this.InvokeAsync("GetPublicFolderEmailAddresses", new object[] { + organizationId, folder}, this.GetPublicFolderEmailAddressesOperationCompleted, userState); } @@ -3357,15 +3380,17 @@ namespace WebsitePanel.Providers.Exchange { /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/SetPublicFolderEmailAddresses", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void SetPublicFolderEmailAddresses(string folder, string[] emailAddresses) { + public void SetPublicFolderEmailAddresses(string organizationId, string folder, string[] emailAddresses) { this.Invoke("SetPublicFolderEmailAddresses", new object[] { + organizationId, folder, emailAddresses}); } /// - public System.IAsyncResult BeginSetPublicFolderEmailAddresses(string folder, string[] emailAddresses, System.AsyncCallback callback, object asyncState) { + public System.IAsyncResult BeginSetPublicFolderEmailAddresses(string organizationId, string folder, string[] emailAddresses, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("SetPublicFolderEmailAddresses", new object[] { + organizationId, folder, emailAddresses}, callback, asyncState); } @@ -3376,16 +3401,17 @@ namespace WebsitePanel.Providers.Exchange { } /// - public void SetPublicFolderEmailAddressesAsync(string folder, string[] emailAddresses) { - this.SetPublicFolderEmailAddressesAsync(folder, emailAddresses, null); + public void SetPublicFolderEmailAddressesAsync(string organizationId, string folder, string[] emailAddresses) { + this.SetPublicFolderEmailAddressesAsync(organizationId, folder, emailAddresses, null); } /// - public void SetPublicFolderEmailAddressesAsync(string folder, string[] emailAddresses, object userState) { + public void SetPublicFolderEmailAddressesAsync(string organizationId, string folder, string[] emailAddresses, object userState) { if ((this.SetPublicFolderEmailAddressesOperationCompleted == null)) { this.SetPublicFolderEmailAddressesOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSetPublicFolderEmailAddressesOperationCompleted); } this.InvokeAsync("SetPublicFolderEmailAddresses", new object[] { + organizationId, folder, emailAddresses}, this.SetPublicFolderEmailAddressesOperationCompleted, userState); } @@ -3400,15 +3426,17 @@ namespace WebsitePanel.Providers.Exchange { /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/SetPublicFolderPrimaryEmailAddress", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public void SetPublicFolderPrimaryEmailAddress(string folder, string emailAddress) { + public void SetPublicFolderPrimaryEmailAddress(string organizationId, string folder, string emailAddress) { this.Invoke("SetPublicFolderPrimaryEmailAddress", new object[] { + organizationId, folder, emailAddress}); } /// - public System.IAsyncResult BeginSetPublicFolderPrimaryEmailAddress(string folder, string emailAddress, System.AsyncCallback callback, object asyncState) { + public System.IAsyncResult BeginSetPublicFolderPrimaryEmailAddress(string organizationId, string folder, string emailAddress, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("SetPublicFolderPrimaryEmailAddress", new object[] { + organizationId, folder, emailAddress}, callback, asyncState); } @@ -3419,16 +3447,17 @@ namespace WebsitePanel.Providers.Exchange { } /// - public void SetPublicFolderPrimaryEmailAddressAsync(string folder, string emailAddress) { - this.SetPublicFolderPrimaryEmailAddressAsync(folder, emailAddress, null); + public void SetPublicFolderPrimaryEmailAddressAsync(string organizationId, string folder, string emailAddress) { + this.SetPublicFolderPrimaryEmailAddressAsync(organizationId, folder, emailAddress, null); } /// - public void SetPublicFolderPrimaryEmailAddressAsync(string folder, string emailAddress, object userState) { + public void SetPublicFolderPrimaryEmailAddressAsync(string organizationId, string folder, string emailAddress, object userState) { if ((this.SetPublicFolderPrimaryEmailAddressOperationCompleted == null)) { this.SetPublicFolderPrimaryEmailAddressOperationCompleted = new System.Threading.SendOrPostCallback(this.OnSetPublicFolderPrimaryEmailAddressOperationCompleted); } this.InvokeAsync("SetPublicFolderPrimaryEmailAddress", new object[] { + organizationId, folder, emailAddress}, this.SetPublicFolderPrimaryEmailAddressOperationCompleted, userState); } @@ -3443,15 +3472,17 @@ namespace WebsitePanel.Providers.Exchange { /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetPublicFoldersStatistics", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public ExchangeItemStatistics[] GetPublicFoldersStatistics(string[] folders) { + public ExchangeItemStatistics[] GetPublicFoldersStatistics(string organizationId, string[] folders) { object[] results = this.Invoke("GetPublicFoldersStatistics", new object[] { + organizationId, folders}); return ((ExchangeItemStatistics[])(results[0])); } /// - public System.IAsyncResult BeginGetPublicFoldersStatistics(string[] folders, System.AsyncCallback callback, object asyncState) { + public System.IAsyncResult BeginGetPublicFoldersStatistics(string organizationId, string[] folders, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetPublicFoldersStatistics", new object[] { + organizationId, folders}, callback, asyncState); } @@ -3462,16 +3493,17 @@ namespace WebsitePanel.Providers.Exchange { } /// - public void GetPublicFoldersStatisticsAsync(string[] folders) { - this.GetPublicFoldersStatisticsAsync(folders, null); + public void GetPublicFoldersStatisticsAsync(string organizationId, string[] folders) { + this.GetPublicFoldersStatisticsAsync(organizationId, folders, null); } /// - public void GetPublicFoldersStatisticsAsync(string[] folders, object userState) { + public void GetPublicFoldersStatisticsAsync(string organizationId, string[] folders, object userState) { if ((this.GetPublicFoldersStatisticsOperationCompleted == null)) { this.GetPublicFoldersStatisticsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetPublicFoldersStatisticsOperationCompleted); } this.InvokeAsync("GetPublicFoldersStatistics", new object[] { + organizationId, folders}, this.GetPublicFoldersStatisticsOperationCompleted, userState); } @@ -3485,15 +3517,17 @@ namespace WebsitePanel.Providers.Exchange { /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetPublicFoldersRecursive", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public string[] GetPublicFoldersRecursive(string parent) { + public string[] GetPublicFoldersRecursive(string organizationId, string parent) { object[] results = this.Invoke("GetPublicFoldersRecursive", new object[] { + organizationId, parent}); return ((string[])(results[0])); } /// - public System.IAsyncResult BeginGetPublicFoldersRecursive(string parent, System.AsyncCallback callback, object asyncState) { + public System.IAsyncResult BeginGetPublicFoldersRecursive(string organizationId, string parent, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetPublicFoldersRecursive", new object[] { + organizationId, parent}, callback, asyncState); } @@ -3504,16 +3538,17 @@ namespace WebsitePanel.Providers.Exchange { } /// - public void GetPublicFoldersRecursiveAsync(string parent) { - this.GetPublicFoldersRecursiveAsync(parent, null); + public void GetPublicFoldersRecursiveAsync(string organizationId, string parent) { + this.GetPublicFoldersRecursiveAsync(organizationId, parent, null); } /// - public void GetPublicFoldersRecursiveAsync(string parent, object userState) { + public void GetPublicFoldersRecursiveAsync(string organizationId, string parent, object userState) { if ((this.GetPublicFoldersRecursiveOperationCompleted == null)) { this.GetPublicFoldersRecursiveOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetPublicFoldersRecursiveOperationCompleted); } this.InvokeAsync("GetPublicFoldersRecursive", new object[] { + organizationId, parent}, this.GetPublicFoldersRecursiveOperationCompleted, userState); } @@ -3527,15 +3562,17 @@ namespace WebsitePanel.Providers.Exchange { /// [System.Web.Services.Protocols.SoapHeaderAttribute("ServiceProviderSettingsSoapHeaderValue")] [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/server/GetPublicFolderSize", RequestNamespace="http://smbsaas/websitepanel/server/", ResponseNamespace="http://smbsaas/websitepanel/server/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] - public long GetPublicFolderSize(string folder) { + public long GetPublicFolderSize(string organizationId, string folder) { object[] results = this.Invoke("GetPublicFolderSize", new object[] { + organizationId, folder}); return ((long)(results[0])); } /// - public System.IAsyncResult BeginGetPublicFolderSize(string folder, System.AsyncCallback callback, object asyncState) { + public System.IAsyncResult BeginGetPublicFolderSize(string organizationId, string folder, System.AsyncCallback callback, object asyncState) { return this.BeginInvoke("GetPublicFolderSize", new object[] { + organizationId, folder}, callback, asyncState); } @@ -3546,16 +3583,17 @@ namespace WebsitePanel.Providers.Exchange { } /// - public void GetPublicFolderSizeAsync(string folder) { - this.GetPublicFolderSizeAsync(folder, null); + public void GetPublicFolderSizeAsync(string organizationId, string folder) { + this.GetPublicFolderSizeAsync(organizationId, folder, null); } /// - public void GetPublicFolderSizeAsync(string folder, object userState) { + public void GetPublicFolderSizeAsync(string organizationId, string folder, object userState) { if ((this.GetPublicFolderSizeOperationCompleted == null)) { this.GetPublicFolderSizeOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetPublicFolderSizeOperationCompleted); } this.InvokeAsync("GetPublicFolderSize", new object[] { + organizationId, folder}, this.GetPublicFolderSizeOperationCompleted, userState); } diff --git a/WebsitePanel/Sources/WebsitePanel.Server/ExchangeServer.asmx.cs b/WebsitePanel/Sources/WebsitePanel.Server/ExchangeServer.asmx.cs index 06800bc3..8999ac9d 100644 --- a/WebsitePanel/Sources/WebsitePanel.Server/ExchangeServer.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.Server/ExchangeServer.asmx.cs @@ -822,13 +822,13 @@ namespace WebsitePanel.Server #region Public Folders [WebMethod, SoapHeader("settings")] - public void CreatePublicFolder(string organizationId, string securityGroup, string parentFolder, + public void CreatePublicFolder(string organizationDistinguishedName, string organizationId, string securityGroup, string parentFolder, string folderName, bool mailEnabled, string accountName, string name, string domain) { try { LogStart("CreatePublicFolder"); - ES.CreatePublicFolder(organizationId, securityGroup, parentFolder, folderName, + ES.CreatePublicFolder(organizationDistinguishedName, organizationId, securityGroup, parentFolder, folderName, mailEnabled, accountName, name, domain); LogEnd("CreatePublicFolder"); @@ -841,12 +841,12 @@ namespace WebsitePanel.Server } [WebMethod, SoapHeader("settings")] - public void DeletePublicFolder(string folder) + public void DeletePublicFolder(string organizationId, string folder) { try { LogStart("DeletePublicFolder"); - ES.DeletePublicFolder(folder); + ES.DeletePublicFolder(organizationId, folder); LogEnd("DeletePublicFolder"); } catch (Exception ex) @@ -874,12 +874,12 @@ namespace WebsitePanel.Server } [WebMethod, SoapHeader("settings")] - public void DisableMailPublicFolder(string folder) + public void DisableMailPublicFolder(string organizationId, string folder) { try { LogStart("DisableMailPublicFolder"); - ES.DisableMailPublicFolder(folder); + ES.DisableMailPublicFolder(organizationId, folder); LogEnd("DisableMailPublicFolder"); } catch (Exception ex) @@ -890,12 +890,12 @@ namespace WebsitePanel.Server } [WebMethod, SoapHeader("settings")] - public ExchangePublicFolder GetPublicFolderGeneralSettings(string folder) + public ExchangePublicFolder GetPublicFolderGeneralSettings(string organizationId, string folder) { try { LogStart("GetPublicFolderGeneralSettings"); - ExchangePublicFolder ret = ES.GetPublicFolderGeneralSettings(folder); + ExchangePublicFolder ret = ES.GetPublicFolderGeneralSettings(organizationId, folder); LogEnd("GetPublicFolderGeneralSettings"); return ret; } @@ -907,13 +907,13 @@ namespace WebsitePanel.Server } [WebMethod, SoapHeader("settings")] - public void SetPublicFolderGeneralSettings(string folder, string newFolderName, + public void SetPublicFolderGeneralSettings(string organizationId, string folder, string newFolderName, bool hideFromAddressBook, ExchangeAccount[] accounts) { try { LogStart("SetPublicFolderGeneralSettings"); - ES.SetPublicFolderGeneralSettings(folder, newFolderName, hideFromAddressBook, accounts); + ES.SetPublicFolderGeneralSettings(organizationId, folder, newFolderName, hideFromAddressBook, accounts); LogEnd("SetPublicFolderGeneralSettings"); } catch (Exception ex) @@ -924,12 +924,12 @@ namespace WebsitePanel.Server } [WebMethod, SoapHeader("settings")] - public ExchangePublicFolder GetPublicFolderMailFlowSettings(string folder) + public ExchangePublicFolder GetPublicFolderMailFlowSettings(string organizationId, string folder) { try { LogStart("GetPublicFolderMailFlowSettings"); - ExchangePublicFolder ret = ES.GetPublicFolderMailFlowSettings(folder); + ExchangePublicFolder ret = ES.GetPublicFolderMailFlowSettings(organizationId, folder); LogEnd("GetPublicFolderMailFlowSettings"); return ret; } @@ -941,13 +941,13 @@ namespace WebsitePanel.Server } [WebMethod, SoapHeader("settings")] - public void SetPublicFolderMailFlowSettings(string folder, + public void SetPublicFolderMailFlowSettings(string organizationId, string folder, string[] acceptAccounts, string[] rejectAccounts, bool requireSenderAuthentication) { try { LogStart("SetPublicFolderMailFlowSettings"); - ES.SetPublicFolderMailFlowSettings(folder, acceptAccounts, rejectAccounts, requireSenderAuthentication); + ES.SetPublicFolderMailFlowSettings(organizationId, folder, acceptAccounts, rejectAccounts, requireSenderAuthentication); LogEnd("SetPublicFolderMailFlowSettings"); } catch (Exception ex) @@ -958,12 +958,12 @@ namespace WebsitePanel.Server } [WebMethod, SoapHeader("settings")] - public ExchangeEmailAddress[] GetPublicFolderEmailAddresses(string folder) + public ExchangeEmailAddress[] GetPublicFolderEmailAddresses(string organizationId, string folder) { try { LogStart("GetPublicFolderEmailAddresses"); - ExchangeEmailAddress[] ret = ES.GetPublicFolderEmailAddresses(folder); + ExchangeEmailAddress[] ret = ES.GetPublicFolderEmailAddresses(organizationId, folder); LogEnd("GetPublicFolderEmailAddresses"); return ret; } @@ -975,12 +975,12 @@ namespace WebsitePanel.Server } [WebMethod, SoapHeader("settings")] - public void SetPublicFolderEmailAddresses(string folder, string[] emailAddresses) + public void SetPublicFolderEmailAddresses(string organizationId, string folder, string[] emailAddresses) { try { LogStart("SetPublicFolderEmailAddresses"); - ES.SetPublicFolderEmailAddresses(folder, emailAddresses); + ES.SetPublicFolderEmailAddresses(organizationId, folder, emailAddresses); LogEnd("SetPublicFolderEmailAddresses"); } catch (Exception ex) @@ -991,12 +991,12 @@ namespace WebsitePanel.Server } [WebMethod, SoapHeader("settings")] - public void SetPublicFolderPrimaryEmailAddress(string folder, string emailAddress) + public void SetPublicFolderPrimaryEmailAddress(string organizationId, string folder, string emailAddress) { try { LogStart("SetPublicFolderPrimaryEmailAddress"); - ES.SetPublicFolderPrimaryEmailAddress(folder, emailAddress); + ES.SetPublicFolderPrimaryEmailAddress(organizationId, folder, emailAddress); LogEnd("SetPublicFolderPrimaryEmailAddress"); } catch (Exception ex) @@ -1007,12 +1007,12 @@ namespace WebsitePanel.Server } [WebMethod, SoapHeader("settings")] - public ExchangeItemStatistics[] GetPublicFoldersStatistics(string[] folders) + public ExchangeItemStatistics[] GetPublicFoldersStatistics(string organizationId, string[] folders) { try { LogStart("GetPublicFoldersStatistics"); - ExchangeItemStatistics[] ret = ES.GetPublicFoldersStatistics(folders); + ExchangeItemStatistics[] ret = ES.GetPublicFoldersStatistics(organizationId, folders); LogEnd("GetPublicFoldersStatistics"); return ret; } @@ -1024,12 +1024,12 @@ namespace WebsitePanel.Server } [WebMethod, SoapHeader("settings")] - public string[] GetPublicFoldersRecursive(string parent) + public string[] GetPublicFoldersRecursive(string organizationId, string parent) { try { LogStart("GetPublicFoldersRecursive"); - string[] ret = ES.GetPublicFoldersRecursive(parent); + string[] ret = ES.GetPublicFoldersRecursive(organizationId, parent); LogEnd("GetPublicFoldersRecursive"); return ret; } @@ -1041,12 +1041,12 @@ namespace WebsitePanel.Server } [WebMethod, SoapHeader("settings")] - public long GetPublicFolderSize(string folder) + public long GetPublicFolderSize(string organizationId, string folder) { try { LogStart("GetPublicFolderSize"); - long ret = ES.GetPublicFolderSize(folder); + long ret = ES.GetPublicFolderSize(organizationId, folder); LogEnd("GetPublicFolderSize"); return ret; }