From 31fb739b1838e31f665408b37bb356e1cb042544 Mon Sep 17 00:00:00 2001 From: robvde Date: Wed, 1 Aug 2012 21:38:51 +0400 Subject: [PATCH] Added ability to apply exchange and lync plan templates to all tenants. Plan will only be added is the planName does not exist yet for this tenant. Added ability to match exchange plan (based on size and mapi) to mail enabled users (room and equipment) and add the mailbox plan to the object for all users who has no plan assigned yet configured generate_es_proxies.bat added Allowed admins to delete reseller space --- .../ExchangeServerProxy.cs | 76 +++++++- .../esExchangeServer.asmx.cs | 7 + .../WebsitePanel_SharedResources.ascx.resx | 18 ++ ...ttingsExchangeMailboxPlansPolicy.ascx.resx | 6 + .../SettingsExchangeMailboxPlansPolicy.ascx | 17 +- ...SettingsExchangeMailboxPlansPolicy.ascx.cs | 183 ++++++++++++++++++ ...xchangeMailboxPlansPolicy.ascx.designer.cs | 66 ++++--- .../SettingsLyncUserPlansPolicy.ascx | 9 +- .../SettingsLyncUserPlansPolicy.ascx.cs | 69 +++++++ ...ttingsLyncUserPlansPolicy.ascx.designer.cs | 58 +++--- .../WebsitePanel/SpaceDetails.ascx.cs | 2 +- WebsitePanel/Sources/generate_es_proxies.bat | 98 ++++++++++ 12 files changed, 545 insertions(+), 64 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/ExchangeServerProxy.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/ExchangeServerProxy.cs index 341ae893..b074daa5 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/ExchangeServerProxy.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/ExchangeServerProxy.cs @@ -26,7 +26,6 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - //------------------------------------------------------------------------------ // // This code was generated by a tool. @@ -114,6 +113,8 @@ namespace WebsitePanel.EnterpriseServer { private System.Threading.SendOrPostCallback DisableMailboxOperationCompleted; + private System.Threading.SendOrPostCallback GetMailboxAdvancedSettingsOperationCompleted; + private System.Threading.SendOrPostCallback GetMailboxGeneralSettingsOperationCompleted; private System.Threading.SendOrPostCallback SetMailboxGeneralSettingsOperationCompleted; @@ -304,6 +305,9 @@ namespace WebsitePanel.EnterpriseServer { /// public event DisableMailboxCompletedEventHandler DisableMailboxCompleted; + /// + public event GetMailboxAdvancedSettingsCompletedEventHandler GetMailboxAdvancedSettingsCompleted; + /// public event GetMailboxGeneralSettingsCompletedEventHandler GetMailboxGeneralSettingsCompleted; @@ -1775,6 +1779,50 @@ namespace WebsitePanel.EnterpriseServer { } } + /// + [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetMailboxAdvancedSettings", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] + public ExchangeMailbox GetMailboxAdvancedSettings(int itemId, int accountId) { + object[] results = this.Invoke("GetMailboxAdvancedSettings", new object[] { + itemId, + accountId}); + return ((ExchangeMailbox)(results[0])); + } + + /// + public System.IAsyncResult BeginGetMailboxAdvancedSettings(int itemId, int accountId, System.AsyncCallback callback, object asyncState) { + return this.BeginInvoke("GetMailboxAdvancedSettings", new object[] { + itemId, + accountId}, callback, asyncState); + } + + /// + public ExchangeMailbox EndGetMailboxAdvancedSettings(System.IAsyncResult asyncResult) { + object[] results = this.EndInvoke(asyncResult); + return ((ExchangeMailbox)(results[0])); + } + + /// + public void GetMailboxAdvancedSettingsAsync(int itemId, int accountId) { + this.GetMailboxAdvancedSettingsAsync(itemId, accountId, null); + } + + /// + public void GetMailboxAdvancedSettingsAsync(int itemId, int accountId, object userState) { + if ((this.GetMailboxAdvancedSettingsOperationCompleted == null)) { + this.GetMailboxAdvancedSettingsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetMailboxAdvancedSettingsOperationCompleted); + } + this.InvokeAsync("GetMailboxAdvancedSettings", new object[] { + itemId, + accountId}, this.GetMailboxAdvancedSettingsOperationCompleted, userState); + } + + private void OnGetMailboxAdvancedSettingsOperationCompleted(object arg) { + if ((this.GetMailboxAdvancedSettingsCompleted != null)) { + System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg)); + this.GetMailboxAdvancedSettingsCompleted(this, new GetMailboxAdvancedSettingsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)); + } + } + /// [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://smbsaas/websitepanel/enterpriseserver/GetMailboxGeneralSettings", RequestNamespace="http://smbsaas/websitepanel/enterpriseserver", ResponseNamespace="http://smbsaas/websitepanel/enterpriseserver", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] public ExchangeMailbox GetMailboxGeneralSettings(int itemId, int accountId) { @@ -5196,6 +5244,32 @@ namespace WebsitePanel.EnterpriseServer { } } + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + public delegate void GetMailboxAdvancedSettingsCompletedEventHandler(object sender, GetMailboxAdvancedSettingsCompletedEventArgs e); + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + public partial class GetMailboxAdvancedSettingsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs { + + private object[] results; + + internal GetMailboxAdvancedSettingsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) : + base(exception, cancelled, userState) { + this.results = results; + } + + /// + public ExchangeMailbox Result { + get { + this.RaiseExceptionIfNecessary(); + return ((ExchangeMailbox)(this.results[0])); + } + } + } + /// [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")] public delegate void GetMailboxGeneralSettingsCompletedEventHandler(object sender, GetMailboxGeneralSettingsCompletedEventArgs e); diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esExchangeServer.asmx.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esExchangeServer.asmx.cs index d3da1430..0dc14964 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esExchangeServer.asmx.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esExchangeServer.asmx.cs @@ -236,12 +236,19 @@ namespace WebsitePanel.EnterpriseServer } + [WebMethod] + public ExchangeMailbox GetMailboxAdvancedSettings(int itemId, int accountId) + { + return ExchangeServerController.GetMailboxAdvancedSettings(itemId, accountId); + } + [WebMethod] public ExchangeMailbox GetMailboxGeneralSettings(int itemId, int accountId) { return ExchangeServerController.GetMailboxGeneralSettings(itemId, accountId); } + [WebMethod] public int SetMailboxGeneralSettings(int itemId, int accountId, bool hideAddressBook, bool disabled) { diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx index ee430246..0f583fb1 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx @@ -5164,4 +5164,22 @@ Enable Lync User Plans Editing + + Failed to apply plans template + + + Succesfully applied plans template + + + Failed to match plans + + + Succesfully plans matched and applied + + + Failed to apply plans template + + + Succesfully applied plans template + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/SettingsExchangeMailboxPlansPolicy.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/SettingsExchangeMailboxPlansPolicy.ascx.resx index 055532df..84e8e718 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/SettingsExchangeMailboxPlansPolicy.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/App_LocalResources/SettingsExchangeMailboxPlansPolicy.ascx.resx @@ -213,4 +213,10 @@ * + + Add Mailbox Plans Template to All Tenants + + + Match Mailbox Plan to User + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangeMailboxPlansPolicy.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangeMailboxPlansPolicy.ascx index 9df47609..d1150ca3 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangeMailboxPlansPolicy.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangeMailboxPlansPolicy.ascx @@ -2,8 +2,11 @@ <%@ Register Src="ExchangeServer/UserControls/SizeBox.ascx" TagName="SizeBox" TagPrefix="wsp" %> <%@ Register Src="ExchangeServer/UserControls/DaysBox.ascx" TagName="DaysBox" TagPrefix="wsp" %> <%@ Register Src="UserControls/CollapsiblePanel.ascx" TagName="CollapsiblePanel" TagPrefix="wsp" %> +<%@ Register Src="UserControls/SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %> +<%@ Register Src="UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %> - + + @@ -184,5 +187,15 @@ Text="Add New Mailboxplan" CssClass="Button1" OnClick="btnAddMailboxPlan_Click" /> +
+ +
- +
+ +
+ \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangeMailboxPlansPolicy.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangeMailboxPlansPolicy.ascx.cs index c17886c6..7169e55a 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangeMailboxPlansPolicy.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangeMailboxPlansPolicy.ascx.cs @@ -238,5 +238,188 @@ namespace WebsitePanel.Portal settings[UserSettings.DEFAULT_MAILBOXPLANS] = writer.ToString(); } + + protected void btnAddMailboxPlanToOrganizations_Click(object sender, EventArgs e) + { + AddMailboxPlanToOrganizations("ServerAdmin"); + } + + private void AddMailboxPlanToOrganizations(string serverAdmin) + { + UserInfo ServerAdminInfo = ES.Services.Users.GetUserByUsername(serverAdmin); + + if (ServerAdminInfo == null) return; + + UserInfo[] UsersInfo = ES.Services.Users.GetUsers(ServerAdminInfo.UserId, true); + + try + { + foreach (UserInfo ui in UsersInfo) + { + PackageInfo[] Packages = ES.Services.Packages.GetPackages(ui.UserId); + + if ((Packages != null) & (Packages.GetLength(0) > 0)) + { + foreach (PackageInfo Package in Packages) + { + Providers.HostedSolution.Organization[] orgs = null; + + orgs = ES.Services.ExchangeServer.GetExchangeOrganizations(Package.PackageId, false); + + if ((orgs != null) & (orgs.GetLength(0) > 0)) + { + foreach (Organization org in orgs) + { + if (!string.IsNullOrEmpty(org.GlobalAddressList)) + { + ExchangeMailboxPlan[] plans = ES.Services.ExchangeServer.GetExchangeMailboxPlans(org.Id); + + foreach (ExchangeMailboxPlan p in list) + { + if (!PlanExists(p, plans)) ES.Services.ExchangeServer.AddExchangeMailboxPlan(org.Id, p); + } + } + } + } + } + } + } + messageBox.ShowSuccessMessage("EXCHANGE_APPLYPLANTEMPLATE"); + } + catch (Exception ex) + { + messageBox.ShowErrorMessage("EXCHANGE_APPLYPLANTEMPLATE", ex); + } + } + + private bool PlanExists(ExchangeMailboxPlan plan, ExchangeMailboxPlan[] plans) + { + bool result = false; + + foreach (ExchangeMailboxPlan p in plans) + { + if (p.MailboxPlan.ToLower() == plan.MailboxPlan.ToLower()) + { + result = true; + break; + } + } + return result; + } + + protected void btnMatchMailboxPlanToUser_Click(object sender, EventArgs e) + { + MatchMailboxPlanToUser("serverAdmin"); + } + + private void MatchMailboxPlanToUser(string serverAdmin) + { + UserInfo ServerAdminInfo = ES.Services.Users.GetUserByUsername(serverAdmin); + + if (ServerAdminInfo == null) return; + + UserInfo[] UsersInfo = ES.Services.Users.GetUsers(ServerAdminInfo.UserId, true); + + try + { + foreach (UserInfo ui in UsersInfo) + { + PackageInfo[] Packages = ES.Services.Packages.GetPackages(ui.UserId); + + if ((Packages != null) & (Packages.GetLength(0) > 0)) + { + foreach (PackageInfo Package in Packages) + { + Providers.HostedSolution.Organization[] orgs = null; + + orgs = ES.Services.ExchangeServer.GetExchangeOrganizations(Package.PackageId, false); + + if ((orgs != null) & (orgs.GetLength(0) > 0)) + { + foreach (Organization org in orgs) + { + if (!string.IsNullOrEmpty(org.GlobalAddressList)) + { + ExchangeMailboxPlan[] plans = ES.Services.ExchangeServer.GetExchangeMailboxPlans(org.Id); + + ExchangeAccount[] mailboxes = ES.Services.ExchangeServer.GetAccounts(org.Id, ExchangeAccountType.Mailbox); + + ExchangeAccount[] rooms = ES.Services.ExchangeServer.GetAccounts(org.Id, ExchangeAccountType.Room); + + ExchangeAccount[] equipment = ES.Services.ExchangeServer.GetAccounts(org.Id, ExchangeAccountType.Equipment); + + MatchExchangeAccountToPlan(org.Id, mailboxes, plans); + MatchExchangeAccountToPlan(org.Id, rooms, plans); + MatchExchangeAccountToPlan(org.Id, equipment, plans); + } + } + } + } + } + } + messageBox.ShowSuccessMessage("EXCHANGE_MATCHPLANS"); + } + catch (Exception ex) + { + messageBox.ShowErrorMessage("EXCHANGE_MATCHPLANS", ex); + } + } + + private void MatchExchangeAccountToPlan(int itemId, ExchangeAccount[] mailboxes, ExchangeMailboxPlan[] plans) + { + + foreach (ExchangeAccount a in mailboxes) + { + if (string.IsNullOrEmpty(a.MailboxPlan)) + { + ExchangeMailbox mailbox = ES.Services.ExchangeServer.GetMailboxAdvancedSettings(itemId, a.AccountId); + + if (mailbox != null) + { + List pl = new List(); + //sort a list of similar MAPI + foreach (ExchangeMailboxPlan p in plans) + { + if (p.EnableMAPI == mailbox.EnableMAPI) + pl.Add(p); + } + + //remove plans smaller than mailbox size + ExchangeMailboxPlan p3 = null; + foreach (ExchangeMailboxPlan p2 in pl) + { + if (p2.MailboxSizeMB >= (mailbox.ProhibitSendReceiveKB / 1024)) + { + if (p3 == null) + p3 = p2; + else + if ((p2.MailboxSizeMB) <= p3.MailboxSizeMB) + p3 = p2; + } + } + + // no matching plan, just match on size + if (p3 == null) + { + foreach (ExchangeMailboxPlan p in plans) + { + if (p.MailboxSizeMB >= (mailbox.ProhibitSendReceiveKB / 1024)) + { + if (p3 == null) + p3 = p; + else + if ((p.MailboxSizeMB) <= p3.MailboxSizeMB) + p3 = p; + } + } + } + + if (p3 != null) + ES.Services.ExchangeServer.SetExchangeMailboxPlan(itemId, a.AccountId, p3.MailboxPlanId); + } + } + } + } + } } \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangeMailboxPlansPolicy.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangeMailboxPlansPolicy.ascx.designer.cs index 949d2653..be8483e7 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangeMailboxPlansPolicy.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsExchangeMailboxPlansPolicy.ascx.designer.cs @@ -1,32 +1,4 @@ -// Copyright (c) 2012, Outercurve Foundation. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// - Redistributions of source code must retain the above copyright notice, this -// list of conditions and the following disclaimer. -// -// - Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// - Neither the name of the Outercurve Foundation nor the names of its -// contributors may be used to endorse or promote products derived from this -// software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ // // This code was generated by a tool. // @@ -40,6 +12,24 @@ namespace WebsitePanel.Portal { public partial class SettingsExchangeMailboxPlansPolicy { + /// + /// asyncTasks control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks; + + /// + /// messageBox control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox; + /// /// gvMailboxPlans control. /// @@ -381,5 +371,23 @@ namespace WebsitePanel.Portal { /// To modify move field declaration from designer file to code-behind file. ///
protected global::System.Web.UI.WebControls.Button btnAddMailboxPlan; + + /// + /// btnAddMailboxPlanToOrganizations control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnAddMailboxPlanToOrganizations; + + /// + /// btnMatchMailboxPlanToUser control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnMatchMailboxPlanToUser; } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsLyncUserPlansPolicy.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsLyncUserPlansPolicy.ascx index 26602358..3ac10731 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsLyncUserPlansPolicy.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsLyncUserPlansPolicy.ascx @@ -1,7 +1,10 @@ <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SettingsLyncUserPlansPolicy.ascx.cs" Inherits="WebsitePanel.Portal.SettingsLyncUserPlansPolicy" %> <%@ Register Src="UserControls/CollapsiblePanel.ascx" TagName="CollapsiblePanel" TagPrefix="wsp" %> +<%@ Register Src="UserControls/SimpleMessageBox.ascx" TagName="SimpleMessageBox" TagPrefix="wsp" %> +<%@ Register Src="UserControls/EnableAsyncTasksSupport.ascx" TagName="EnableAsyncTasksSupport" TagPrefix="wsp" %> - + + @@ -133,5 +136,9 @@ Text="Add New plan" CssClass="Button1" OnClick="btnAddPlan_Click" /> +
+ +
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsLyncUserPlansPolicy.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsLyncUserPlansPolicy.ascx.cs index 1ff83f72..a68f007b 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsLyncUserPlansPolicy.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsLyncUserPlansPolicy.ascx.cs @@ -256,6 +256,75 @@ namespace WebsitePanel.Portal settings[UserSettings.DEFAULT_LYNCUSERPLANS] = writer.ToString(); } + protected void btnAddPlanToOrganizations_Click(object sender, EventArgs e) + { + AddPlanToOrganizations("ServerAdmin"); + } + + + private void AddPlanToOrganizations(string serverAdmin) + { + UserInfo ServerAdminInfo = ES.Services.Users.GetUserByUsername(serverAdmin); + + if (ServerAdminInfo == null) return; + + UserInfo[] UsersInfo = ES.Services.Users.GetUsers(ServerAdminInfo.UserId, true); + + try + { + foreach (UserInfo ui in UsersInfo) + { + PackageInfo[] Packages = ES.Services.Packages.GetPackages(ui.UserId); + + if ((Packages != null) & (Packages.GetLength(0) > 0)) + { + foreach (PackageInfo Package in Packages) + { + Providers.HostedSolution.Organization[] orgs = null; + + orgs = ES.Services.ExchangeServer.GetExchangeOrganizations(Package.PackageId, false); + + if ((orgs != null) & (orgs.GetLength(0) > 0)) + { + foreach (Organization org in orgs) + { + if (!string.IsNullOrEmpty(org.LyncTenantId)) + { + LyncUserPlan[] plans = ES.Services.Lync.GetLyncUserPlans(org.Id); + + foreach (LyncUserPlan p in list) + { + if (!PlanExists(p, plans)) ES.Services.Lync.AddLyncUserPlan(org.Id, p); + } + } + } + } + } + } + } + messageBox.ShowSuccessMessage("LYNC_APPLYPLANTEMPLATE"); + } + catch (Exception ex) + { + messageBox.ShowErrorMessage("LYNC_APPLYPLANTEMPLATE", ex); + } + } + + private bool PlanExists(LyncUserPlan plan, LyncUserPlan[] plans) + { + bool result = false; + + foreach (LyncUserPlan p in plans) + { + if (p.LyncUserPlanName.ToLower() == plan.LyncUserPlanName.ToLower()) + { + result = true; + break; + } + } + return result; + } + } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsLyncUserPlansPolicy.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsLyncUserPlansPolicy.ascx.designer.cs index 887af2a4..813d06c8 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsLyncUserPlansPolicy.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SettingsLyncUserPlansPolicy.ascx.designer.cs @@ -1,33 +1,4 @@ -// Copyright (c) 2012, Outercurve Foundation. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, -// are permitted provided that the following conditions are met: -// -// - Redistributions of source code must retain the above copyright notice, this -// list of conditions and the following disclaimer. -// -// - Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// -// - Neither the name of the Outercurve Foundation nor the names of its -// contributors may be used to endorse or promote products derived from this -// software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ // // This code was generated by a tool. // @@ -41,6 +12,24 @@ namespace WebsitePanel.Portal { public partial class SettingsLyncUserPlansPolicy { + /// + /// asyncTasks control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.Portal.EnableAsyncTasksSupport asyncTasks; + + /// + /// messageBox control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.Portal.UserControls.SimpleMessageBox messageBox; + /// /// gvPlans control. /// @@ -229,5 +218,14 @@ namespace WebsitePanel.Portal { /// To modify move field declaration from designer file to code-behind file. ///
protected global::System.Web.UI.WebControls.Button btnAddPlan; + + /// + /// btnAddPlanToOrganizations control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Button btnAddPlanToOrganizations; } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SpaceDetails.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SpaceDetails.ascx.cs index 35bcfb94..b4ea5185 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SpaceDetails.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/SpaceDetails.ascx.cs @@ -88,7 +88,7 @@ namespace WebsitePanel.Portal lnkEditSpaceDetails.Visible = (PanelSecurity.PackageId > 1 && !ownSpace); lnkDelete.NavigateUrl = EditUrl(PortalUtils.SPACE_ID_PARAM, PanelSecurity.PackageId.ToString(), "delete"); - if (PanelSecurity.LoggedUser.Role != UserRole.Reseller) + if (!((PanelSecurity.LoggedUser.Role == UserRole.Reseller) | (PanelSecurity.LoggedUser.Role == UserRole.Administrator))) lnkDelete.Visible = false; else lnkDelete.Visible = ((PanelSecurity.SelectedUserId != PanelSecurity.EffectiveUserId) && (PanelSecurity.PackageId > 1)); diff --git a/WebsitePanel/Sources/generate_es_proxies.bat b/WebsitePanel/Sources/generate_es_proxies.bat index d190a83a..b6a921a1 100644 --- a/WebsitePanel/Sources/generate_es_proxies.bat +++ b/WebsitePanel/Sources/generate_es_proxies.bat @@ -2,5 +2,103 @@ SET WSDL="C:\Program Files (x86)\Microsoft WSE\v3.0\Tools\WseWsdl3.exe" SET WSE_CLEAN=..\Tools\WseClean.exe SET SERVER_URL=http://localhost:9005 +REM %WSDL% %SERVER_URL%/esApplicationsInstaller.asmx /out:.\WebsitePanel.EnterpriseServer.Client\ApplicationsInstallerProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\ApplicationsInstallerProxy.cs + +REM %WSDL% %SERVER_URL%/esAuditLog.asmx /out:.\WebsitePanel.EnterpriseServer.Client\AuditLogProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\AuditLogProxy.cs + +REM %WSDL% %SERVER_URL%/esAuthentication.asmx /out:.\WebsitePanel.EnterpriseServer.Client\AuthenticationProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\AuthenticationProxy.cs + +REM %WSDL% %SERVER_URL%/esBackup.asmx /out:.\WebsitePanel.EnterpriseServer.Client\BackupProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\BackupProxy.cs + +REM %WSDL% %SERVER_URL%/esBlackBerry.asmx /out:.\WebsitePanel.EnterpriseServer.Client\BlackBerryProxy.cs /namespace:WebsitePanel.EnterpriseServer.HostedSolution /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\BlackBerryProxy.cs + +REM %WSDL% %SERVER_URL%/esComments.asmx /out:.\WebsitePanel.EnterpriseServer.Client\CommentsProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\CommentsProxy.cs + +REM %WSDL% %SERVER_URL%/esCRM.asmx /out:.\WebsitePanel.EnterpriseServer.Client\CRMProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\CRMProxy.cs + +REM %WSDL% %SERVER_URL%/esDatabaseServers.asmx /out:.\WebsitePanel.EnterpriseServer.Client\DatabaseServersProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\DatabaseServersProxy.cs + +REM %WSDL% %SERVER_URL%/ecServiceHandler.asmx /out:.\WebsitePanel.EnterpriseServer.Client\ecServiceHandlerProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\ecServiceHandlerProxy.cs + +REM %WSDL% %SERVER_URL%/ecStorefront.asmx /out:.\WebsitePanel.EnterpriseServer.Client\ecStorefrontProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\ecStorefrontProxy.cs + +REM %WSDL% %SERVER_URL%/ecStorehouse.asmx /out:.\WebsitePanel.EnterpriseServer.Client\ecStorehouseProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\ecStorehouseProxy.cs + %WSDL% %SERVER_URL%/esExchangeServer.asmx /out:.\WebsitePanel.EnterpriseServer.Client\ExchangeServerProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\ExchangeServerProxy.cs + +REM %WSDL% %SERVER_URL%/esExchangeHostedEdition.asmx /out:.\WebsitePanel.EnterpriseServer.Client\ExchangeHostedEditionProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\ExchangeHostedEditionProxy.cs + +REM %WSDL% %SERVER_URL%/esFiles.asmx /out:.\WebsitePanel.EnterpriseServer.Client\FilesProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\FilesProxy.cs + +REM %WSDL% %SERVER_URL%/esHostedSharePointServers.asmx /out:.\WebsitePanel.EnterpriseServer.Client\HostedSharePointServersProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\HostedSharePointServersProxy.cs + +REM %WSDL% %SERVER_URL%/esImport.asmx /out:.\WebsitePanel.EnterpriseServer.Client\ImportProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\ImportProxy.cs + +REM %WSDL% %SERVER_URL%/esOCS.asmx /out:.\WebsitePanel.EnterpriseServer.Client\OCSProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\OCSProxy.cs + +REM %WSDL% %SERVER_URL%/esOperatingSystems.asmx /out:.\WebsitePanel.EnterpriseServer.Client\OperatingSystemsProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\OperatingSystemsProxy.cs + +REM %WSDL% %SERVER_URL%/esOrganizations.asmx /out:.\WebsitePanel.EnterpriseServer.Client\OrganizationProxy.cs /namespace:WebsitePanel.EnterpriseServer.HostedSolution /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\OrganizationProxy.cs + +REM %WSDL% %SERVER_URL%/esPackages.asmx /out:.\WebsitePanel.EnterpriseServer.Client\PackagesProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\PackagesProxy.cs + +REM %WSDL% %SERVER_URL%/esScheduler.asmx /out:.\WebsitePanel.EnterpriseServer.Client\SchedulerProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\SchedulerProxy.cs + +REM %WSDL% %SERVER_URL%/esServers.asmx /out:.\WebsitePanel.EnterpriseServer.Client\ServersProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\ServersProxy.cs + +REM %WSDL% %SERVER_URL%/esSharePointServers.asmx /out:.\WebsitePanel.EnterpriseServer.Client\SharePointServersProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\SharePointServersProxy.cs + +REM %WSDL% %SERVER_URL%/esSystem.asmx /out:.\WebsitePanel.EnterpriseServer.Client\SystemProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\SystemProxy.cs + +REM %WSDL% %SERVER_URL%/esTasks.asmx /out:.\WebsitePanel.EnterpriseServer.Client\TasksProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\TasksProxy.cs + +REM %WSDL% %SERVER_URL%/esUsers.asmx /out:.\WebsitePanel.EnterpriseServer.Client\UsersProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\UsersProxy.cs + +REM %WSDL% %SERVER_URL%/esVirtualizationServer.asmx /out:.\WebsitePanel.EnterpriseServer.Client\VirtualizationServerProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\VirtualizationServerProxy.cs + +REM %WSDL% %SERVER_URL%/esWebApplicationGallery.asmx /out:.\WebsitePanel.EnterpriseServer.Client\WebApplicationGalleryProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\WebApplicationGalleryProxy.cs + +REM %WSDL% %SERVER_URL%/esWebServers.asmx /out:.\WebsitePanel.EnterpriseServer.Client\WebServersProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\WebServersProxy.cs + +REM %WSDL% %SERVER_URL%/esVirtualizationServerForPrivateCloud.asmx /out:.\WebsitePanel.EnterpriseServer.Client\VirtualizationServerProxyForPrivateCloud.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\VirtualizationServerProxyForPrivateCloud.cs + +REM %WSDL% %SERVER_URL%/esLync.asmx /out:.\WebsitePanel.EnterpriseServer.Client\LyncProxy.cs /namespace:WebsitePanel.EnterpriseServer /type:webClient +REM %WSE_CLEAN% .\WebsitePanel.EnterpriseServer.Client\LyncProxy.cs + + + + + + + +