diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/OrganizationProxy.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/OrganizationProxy.cs
index 87b2169c..088e33d6 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/OrganizationProxy.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Client/OrganizationProxy.cs
@@ -62,6 +62,8 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
[System.Xml.Serialization.XmlIncludeAttribute(typeof(ResultObject))]
[System.Xml.Serialization.XmlIncludeAttribute(typeof(ServiceProviderItem))]
public partial class esOrganizations : Microsoft.Web.Services3.WebServicesClientProtocol {
+
+ private System.Threading.SendOrPostCallback CheckOrgIdExistsOperationCompleted;
private System.Threading.SendOrPostCallback CreateOrganizationOperationCompleted;
@@ -117,6 +119,9 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
public esOrganizations() {
this.Url = "http://localhost:9002/esOrganizations.asmx";
}
+
+ ///
+ public event CheckOrgIdExistsCompletedEventHandler CheckOrgIdExistsCompleted;
///
public event CreateOrganizationCompletedEventHandler CreateOrganizationCompleted;
@@ -192,6 +197,55 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
///
public event GetPasswordPolicyCompletedEventHandler GetPasswordPolicyCompleted;
+
+ ///
+ [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/CheckOrgIdExists", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
+ public bool CheckOrgIdExists(string orgId)
+ {
+ object[] results = this.Invoke("CheckOrgIdExists", new object[] {
+ orgId});
+ return ((bool)(results[0]));
+ }
+
+ ///
+ public System.IAsyncResult BeginCheckOrgIdExists(string orgId, System.AsyncCallback callback, object asyncState)
+ {
+ return this.BeginInvoke("CheckOrgIdExists", new object[] {
+ orgId}, callback, asyncState);
+ }
+
+ ///
+ public bool EndCheckOrgIdExists(System.IAsyncResult asyncResult)
+ {
+ object[] results = this.EndInvoke(asyncResult);
+ return ((bool)(results[0]));
+ }
+
+ ///
+ public void CheckOrgIdExistsAsync(string orgId)
+ {
+ this.CheckOrgIdExistsAsync(orgId, null);
+ }
+
+ ///
+ public void CheckOrgIdExistsAsync(string orgId, object userState)
+ {
+ if ((this.CheckOrgIdExistsOperationCompleted == null))
+ {
+ this.CheckOrgIdExistsOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCheckOrgIdExistsOperationCompleted);
+ }
+ this.InvokeAsync("CheckOrgIdExists", new object[] {
+ orgId}, this.CheckOrgIdExistsOperationCompleted, userState);
+ }
+
+ private void OnCheckOrgIdExistsOperationCompleted(object arg)
+ {
+ if ((this.CheckOrgIdExistsCompleted != null))
+ {
+ System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
+ this.CheckOrgIdExistsCompleted(this, new CheckOrgIdExistsCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
+ }
+ }
///
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/CreateOrganization", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
@@ -204,6 +258,8 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
return ((int)(results[0]));
}
+
+
///
public System.IAsyncResult BeginCreateOrganization(int packageId, string organizationID, string organizationName, string domainName, System.AsyncCallback callback, object asyncState) {
return this.BeginInvoke("CreateOrganization", new object[] {
@@ -1585,6 +1641,36 @@ namespace WebsitePanel.EnterpriseServer.HostedSolution {
base.CancelAsync(userState);
}
}
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.17929")]
+ public delegate void CheckOrgIdExistsCompletedEventHandler(object sender, CheckOrgIdExistsCompletedEventArgs e);
+
+ ///
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.17929")]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ public partial class CheckOrgIdExistsCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs
+ {
+
+ private object[] results;
+
+ internal CheckOrgIdExistsCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
+ base(exception, cancelled, userState)
+ {
+ this.results = results;
+ }
+
+ ///
+ public bool Result
+ {
+ get
+ {
+ this.RaiseExceptionIfNecessary();
+ return ((bool)(this.results[0]));
+ }
+ }
+ }
///
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OrganizationController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OrganizationController.cs
index 41f27079..b9c816cf 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OrganizationController.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/HostedSolution/OrganizationController.cs
@@ -265,7 +265,7 @@ namespace WebsitePanel.EnterpriseServer
return itemId;
}
- private static bool OrganizationIdentifierExists(string organizationId)
+ public static bool OrganizationIdentifierExists(string organizationId)
{
return DataProvider.ExchangeOrganizationExists(organizationId);
}
diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esOrganizations.asmx.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esOrganizations.asmx.cs
index cc4a6b85..ac5a1e38 100644
--- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esOrganizations.asmx.cs
+++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/esOrganizations.asmx.cs
@@ -45,6 +45,12 @@ namespace WebsitePanel.EnterpriseServer
{
#region Organizations
+ [WebMethod]
+ public bool CheckOrgIdExists(string orgId)
+ {
+ return OrganizationController.OrganizationIdentifierExists(orgId);
+ }
+
[WebMethod]
public int CreateOrganization(int packageId, string organizationID, string organizationName, string domainName)
{
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx.cs
index 5e92633c..41241784 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/UserCreateSpace.ascx.cs
@@ -27,8 +27,11 @@
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
+using System.Collections.Generic;
+using System.Linq;
using System.Web.UI.WebControls;
using WebsitePanel.EnterpriseServer;
+using WebsitePanel.Providers.HostedSolution;
namespace WebsitePanel.Portal
{
@@ -173,11 +176,18 @@ namespace WebsitePanel.Portal
UserInfo user = UsersHelper.GetUser(PanelSecurity.SelectedUserId);
if (user != null)
- {
+ {
if (user.Role != UserRole.Reseller)
{
+ UserSettings settings = ES.Services.Users.GetUserSettings(user.UserId, UserSettings.EXCHANGE_POLICY);
+ string orgId = domainName.ToLower();
- ES.Services.Organizations.CreateOrganization(result.Result, domainName.ToLower(), domainName.ToLower(), domainName.ToLower());
+ if (settings != null && settings["OrgIdPolicy"] != null)
+ {
+ orgId = GetOrgId(settings["OrgIdPolicy"], domainName, result.Result);
+ }
+
+ ES.Services.Organizations.CreateOrganization(result.Result, orgId, domainName.ToLower(), domainName.ToLower());
if (result.Result < 0)
{
@@ -199,6 +209,39 @@ namespace WebsitePanel.Portal
Response.Redirect(PortalUtils.GetSpaceHomePageUrl(result.Result));
}
+ private string GetOrgId(string orgIdPolicy, string domainName, int packageId)
+ {
+ string[] values = orgIdPolicy.Split(';');
+
+ if (values.Length > 1 && Convert.ToBoolean(values[0]))
+ {
+ try
+ {
+ int maxLength = Convert.ToInt32(values[1]);
+
+ if (domainName.Length > maxLength)
+ {
+ domainName = domainName.Substring(0, maxLength);
+ string orgId = domainName;
+ int counter = 0;
+
+ while (ES.Services.Organizations.CheckOrgIdExists(orgId))
+ {
+ counter++;
+ orgId = maxLength > 3 ? string.Format("{0}{1}", orgId.Substring(0, orgId.Length - 3), counter.ToString("d3")) : counter.ToString("d3");
+ }
+
+ return orgId;
+ }
+ }
+ catch (Exception)
+ {
+ }
+ }
+
+ return domainName;
+ }
+
protected void ddlPlans_SelectedIndexChanged(object sender, EventArgs e)
{
BindHostingPlan();