420 lines
No EOL
12 KiB
C#
420 lines
No EOL
12 KiB
C#
// Copyright (c) 2012, Outercurve Foundation.
|
|
// All rights reserved.
|
|
//
|
|
// Redistribution and use in source and binary forms, with or without modification,
|
|
// are permitted provided that the following conditions are met:
|
|
//
|
|
// - Redistributions of source code must retain the above copyright notice, this
|
|
// list of conditions and the following disclaimer.
|
|
//
|
|
// - Redistributions in binary form must reproduce the above copyright notice,
|
|
// this list of conditions and the following disclaimer in the documentation
|
|
// and/or other materials provided with the distribution.
|
|
//
|
|
// - Neither the name of the Outercurve Foundation nor the names of its
|
|
// contributors may be used to endorse or promote products derived from this
|
|
// software without specific prior written permission.
|
|
//
|
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
using System;
|
|
using System.Data;
|
|
using System.Configuration;
|
|
using System.Collections;
|
|
using System.Web;
|
|
using System.Web.Security;
|
|
using System.Web.UI;
|
|
using System.Web.UI.WebControls;
|
|
using System.Web.UI.WebControls.WebParts;
|
|
using System.Web.UI.HtmlControls;
|
|
|
|
using WebsitePanel.Portal;
|
|
using WebsitePanel.Ecommerce.EnterpriseServer;
|
|
|
|
namespace WebsitePanel.Ecommerce.Portal.UserControls
|
|
{
|
|
public partial class PlanDomainOption : ecControlBase
|
|
{
|
|
public const string VIEW_STATE_KEY = "__DomainOption";
|
|
|
|
public int DomainOption
|
|
{
|
|
get { return (int)ViewState[VIEW_STATE_KEY]; }
|
|
set
|
|
{
|
|
ViewState[VIEW_STATE_KEY] = value;
|
|
//
|
|
SyncDomainOption(value);
|
|
}
|
|
}
|
|
|
|
public bool DomainChecked
|
|
{
|
|
get
|
|
{
|
|
if (DomainOption == HostingPlan.DOMAIN_HIDE)
|
|
return false;
|
|
//
|
|
if (DomainOption == HostingPlan.DOMAIN_REQUIRED)
|
|
return true;
|
|
//
|
|
EnsureChildControls();
|
|
return chkSelected.Checked;
|
|
}
|
|
}
|
|
|
|
public OrderItem DomainOrderItem
|
|
{
|
|
get
|
|
{
|
|
// return nothing
|
|
if (DomainOption == HostingPlan.DOMAIN_HIDE || !DomainChecked)
|
|
return null;
|
|
// assemble a domain to be ordered
|
|
OrderItem item = OrderItem.GetTopLevelDomainItem(SelectedDomain, SelectedCycle, DomainName);
|
|
// add domain action flag
|
|
if (rbTransferDomain.Checked)
|
|
item["SPF_ACTION"] = DomainNameSvc.SPF_TRANSFER_ACTION;
|
|
else if (rbRegisterNew.Checked)
|
|
item["SPF_ACTION"] = DomainNameSvc.SPF_REGISTER_ACTION;
|
|
else
|
|
item["SPF_ACTION"] = DomainNameSvc.SPF_UPDATE_NS_ACTION;
|
|
// sync extensions if any
|
|
SyncDomainExtensionFields(item);
|
|
// return assembled domain order item
|
|
return item;
|
|
}
|
|
}
|
|
|
|
public string DomainName
|
|
{
|
|
get
|
|
{
|
|
EnsureChildControls();
|
|
//
|
|
if (rbRegisterNew.Checked)
|
|
{
|
|
return EnsureDomainCorrectness(txtDomainReg.Text) + "." + ddlTopLevelDoms.SelectedItem.Text;
|
|
}
|
|
else if (rbTransferDomain.Checked)
|
|
{
|
|
return EnsureDomainCorrectness(txtDomainTrans.Text) + "." + ddlTopLevelDomsTrans.SelectedItem.Text;
|
|
}
|
|
// default
|
|
return EnsureDomainCorrectness(txtDomainUpdate.Text);
|
|
}
|
|
}
|
|
|
|
public int SelectedDomain
|
|
{
|
|
get
|
|
{
|
|
EnsureChildControls();
|
|
if (rbRegisterNew.Checked)
|
|
return Convert.ToInt32(ddlTopLevelDoms.SelectedValue);
|
|
else if (rbTransferDomain.Checked)
|
|
return Convert.ToInt32(ddlTopLevelDomsTrans.SelectedValue);
|
|
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
public int SelectedCycle
|
|
{
|
|
get
|
|
{
|
|
EnsureChildControls();
|
|
if (rbRegisterNew.Checked)
|
|
return Convert.ToInt32(ddlDomCycles.SelectedValue);
|
|
else if (rbTransferDomain.Checked)
|
|
return Convert.ToInt32(ddlTransDomCycles.SelectedValue);
|
|
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
protected int ResellerId
|
|
{
|
|
get
|
|
{
|
|
return (Page.User.Identity.IsAuthenticated) ? PanelSecurity.LoggedUser.OwnerId :
|
|
ecPanelRequest.ResellerId;
|
|
}
|
|
}
|
|
|
|
protected void Page_Load(object sender, EventArgs e)
|
|
{
|
|
}
|
|
|
|
protected void btnCheckDomain_Click(object sender, EventArgs e)
|
|
{
|
|
ctxDomainValidator.Validate();
|
|
}
|
|
|
|
protected void ctxDomainValidator_EvaluatingContext(object sender, ManualValidationEventArgs e)
|
|
{
|
|
CheckDomain(e);
|
|
}
|
|
|
|
protected void chkSelected_OnCheckedChanged(object sender, EventArgs e)
|
|
{
|
|
ecUtils.ToggleControls(chkSelected.Checked, pnlTopLevelDomain);
|
|
}
|
|
|
|
protected void rbRegisterNew_OnCheckedChanged(object sender, EventArgs e)
|
|
{
|
|
// turn on
|
|
ecUtils.ToggleControls(rbRegisterNew.Checked, pnlDomainReg);
|
|
// turn off
|
|
ecUtils.ToggleControls(false, pnlDomainTrans, pnlUpdateNs);
|
|
//
|
|
BindTopLevelDomains(ddlTopLevelDoms, false);
|
|
}
|
|
|
|
protected void rbTransferDomain_OnCheckedChanged(object sender, EventArgs e)
|
|
{
|
|
// turn on
|
|
ecUtils.ToggleControls(rbTransferDomain.Checked, pnlDomainTrans);
|
|
// turn off
|
|
ecUtils.ToggleControls(false, pnlDomainReg, pnlUpdateNs);
|
|
//
|
|
BindTopLevelDomains(ddlTopLevelDomsTrans, true);
|
|
}
|
|
|
|
protected void rbUpdateNs_OnCheckedChanged(object sender, EventArgs e)
|
|
{
|
|
ecUtils.ToggleControls(true, pnlUpdateNs);
|
|
ecUtils.ToggleControls(false, pnlDomainReg, pnlDomainTrans);
|
|
}
|
|
|
|
protected void ddlTopLevelDoms_OnSelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
BindDomainCyclesForRegistration();
|
|
ShowExtensionFields();
|
|
}
|
|
|
|
protected void ddlTransDomCycles_OnSelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
BindDomainCyclesForTransfer();
|
|
}
|
|
|
|
private void CheckDomain(ManualValidationEventArgs args)
|
|
{
|
|
// ensure domain name not empty
|
|
reqDomainVal.Validate();
|
|
//
|
|
if (!reqDomainVal.IsValid)
|
|
return;
|
|
|
|
string domain = EnsureDomainCorrectness(txtDomainReg.Text);
|
|
//
|
|
CheckDomainResult result = StorefrontHelper.CheckDomain(ResellerId, domain, ddlTopLevelDoms.SelectedItem.Text);
|
|
|
|
// domain is available for purchase
|
|
if (result.Succeed && result.ResultCode == 0)
|
|
{
|
|
//
|
|
lblDomainAvailable.Visible = true;
|
|
//
|
|
args.ContextIsValid = true;
|
|
//
|
|
return;
|
|
}
|
|
|
|
//
|
|
if (result.Succeed && result.ResultCode != 0)
|
|
{
|
|
//
|
|
args.ContextIsValid = false;
|
|
// show error message
|
|
ctxDomainValidator.ErrorMessage = GetSharedLocalizedString(Keys.ModuleName, "CHECK_DOMAIN." + (result.ResultCode * -1));
|
|
//
|
|
return;
|
|
}
|
|
|
|
//
|
|
if (!result.Succeed)
|
|
{
|
|
//
|
|
args.ContextIsValid = false;
|
|
//
|
|
ctxDomainValidator.ErrorMessage = result.ErrorMessage;
|
|
//
|
|
return;
|
|
}
|
|
|
|
//
|
|
args.ContextIsValid = false;
|
|
}
|
|
|
|
private string EnsureDomainCorrectness(string domain)
|
|
{
|
|
string domainName = domain.Trim();
|
|
|
|
if (domainName.StartsWith("www."))
|
|
domainName = domainName.Substring(4);
|
|
|
|
return domainName;
|
|
}
|
|
|
|
private void SyncDomainOption(int domainOption)
|
|
{
|
|
// check for tlds in stock
|
|
if (!StorefrontHelper.HasTopLevelDomainsInStock(ResellerId))
|
|
{
|
|
ecUtils.ToggleControls(false, pnlTopLevelDomain, chkSelected);
|
|
ecUtils.ToggleControls(true, lclNoTLDsInStock);
|
|
return;
|
|
}
|
|
|
|
switch (domainOption)
|
|
{
|
|
case HostingPlan.DOMAIN_OPTIONAL:
|
|
// turn on
|
|
ecUtils.ToggleControls(true, chkSelected, this);
|
|
// turn off
|
|
ecUtils.ToggleControls(false, pnlTopLevelDomain);
|
|
break;
|
|
case HostingPlan.DOMAIN_REQUIRED:
|
|
// turn on
|
|
ecUtils.ToggleControls(true, this, pnlTopLevelDomain);
|
|
// turn off
|
|
ecUtils.ToggleControls(false, chkSelected);
|
|
//
|
|
chkSelected.Checked = false;
|
|
break;
|
|
case HostingPlan.DOMAIN_HIDE:
|
|
// turn off
|
|
ecUtils.ToggleControls(false, this);
|
|
//
|
|
chkSelected.Checked = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void BindTopLevelDomains(DropDownList ctl_list, bool transfer)
|
|
{
|
|
ctl_list.DataSource = StorefrontHelper.GetStorefrontProductsByType(ResellerId,
|
|
Product.TOP_LEVEL_DOMAIN);
|
|
ctl_list.DataBind();
|
|
// bind cycles
|
|
if (transfer)
|
|
BindDomainCyclesForTransfer();
|
|
else
|
|
BindDomainCyclesForRegistration();
|
|
//
|
|
ShowExtensionFields();
|
|
}
|
|
|
|
private void ShowExtensionFields()
|
|
{
|
|
if (ddlTopLevelDoms.SelectedItem.Text == "us")
|
|
{
|
|
ecUtils.ToggleControls(true, usTldFields);
|
|
ecUtils.ToggleControls(false, euTldFields, ukTldFields);
|
|
}
|
|
else if (ddlTopLevelDoms.SelectedItem.Text == "eu")
|
|
{
|
|
ecUtils.ToggleControls(true, euTldFields);
|
|
ecUtils.ToggleControls(false, usTldFields, ukTldFields);
|
|
}
|
|
else if (ddlTopLevelDoms.SelectedItem.Text.EndsWith(".uk"))
|
|
{
|
|
ecUtils.ToggleControls(true, ukTldFields);
|
|
ecUtils.ToggleControls(false, usTldFields, euTldFields);
|
|
}
|
|
}
|
|
|
|
private void SyncDomainExtensionFields(OrderItem domainItem)
|
|
{
|
|
// skip sync when user would like to update name servers only
|
|
if (rbUpdateNs.Checked)
|
|
return;
|
|
//
|
|
if (ddlTopLevelDoms.SelectedItem.Text == "us")
|
|
{
|
|
domainItem["NexusCategory"] = ddlNexusCategory.SelectedValue;
|
|
domainItem["ApplicationPurpose"] = ddlAppPurpose.SelectedValue;
|
|
}
|
|
else if (ddlTopLevelDoms.SelectedItem.Text.EndsWith(".uk"))
|
|
{
|
|
domainItem["RegisteredFor"] = txtRegisteredFor.Text.Trim();
|
|
domainItem["UK_LegalType"] = ddlUkLegalType.SelectedValue;
|
|
domainItem["UK_CompanyIdNumber"] = txtCompanyIdNum.Text.Trim();
|
|
domainItem["HideWhoisInfo"] = chkHideWhoisInfo.Checked ? "y" : "n";
|
|
}
|
|
else if (ddlTopLevelDoms.SelectedItem.Text.EndsWith("eu"))
|
|
{
|
|
domainItem["EU_WhoisPolicy"] = chkDtPolicyAgree.Checked ? "I Agree" : "";
|
|
domainItem["EU_AgreeDelete"] = chkDelPolicyAgree.Checked ? "YES" : "";
|
|
domainItem["EU_ADRLang"] = ddlEuAdrLang.SelectedValue;
|
|
}
|
|
}
|
|
|
|
private void BindDomainCyclesForRegistration()
|
|
{
|
|
// try parse product id
|
|
int productId = ecUtils.ParseInt(ddlTopLevelDoms.SelectedValue, 0);
|
|
// bind
|
|
if (productId > 0)
|
|
{
|
|
DomainNameCycle[] cycles = StorefrontHelper.GetTopLevelDomainCycles(
|
|
ResellerId, productId);
|
|
// cleanup all of items
|
|
ddlDomCycles.Items.Clear();
|
|
// re-create items from scratch
|
|
foreach (DomainNameCycle cycle in cycles)
|
|
{
|
|
ddlDomCycles.Items.Add(CreateDomainCycleItem(cycle, false));
|
|
}
|
|
}
|
|
}
|
|
|
|
private void BindDomainCyclesForTransfer()
|
|
{
|
|
// try parse product id
|
|
int productId = ecUtils.ParseInt(ddlTopLevelDomsTrans.SelectedValue, 0);
|
|
// bind
|
|
if (productId > 0)
|
|
{
|
|
DomainNameCycle[] cycles = StorefrontHelper.GetTopLevelDomainCycles(
|
|
ResellerId, productId);
|
|
// cleanup all of items
|
|
ddlTransDomCycles.Items.Clear();
|
|
// re-create items from scratch
|
|
foreach (DomainNameCycle cycle in cycles)
|
|
{
|
|
if (cycle.TransferFee > 0)
|
|
ddlTransDomCycles.Items.Add(CreateDomainCycleItem(cycle, true));
|
|
}
|
|
}
|
|
}
|
|
|
|
private ListItem CreateDomainCycleItem(DomainNameCycle cycleItem, bool transfer)
|
|
{
|
|
if (transfer)
|
|
return new ListItem(
|
|
String.Format("{0} - {1} {2:C} + {3} {4:C}",
|
|
cycleItem.CycleName, EcommerceSettings.CurrencyCodeISO,
|
|
cycleItem.TransferFee, EcommerceSettings.CurrencyCodeISO, cycleItem.SetupFee),
|
|
cycleItem.CycleId.ToString()
|
|
);
|
|
else
|
|
return new ListItem(
|
|
String.Format("{0} - {1} {2:C} + {3} {4:C}",
|
|
cycleItem.CycleName, EcommerceSettings.CurrencyCodeISO,
|
|
cycleItem.RecurringFee, EcommerceSettings.CurrencyCodeISO, cycleItem.SetupFee),
|
|
cycleItem.CycleId.ToString()
|
|
);
|
|
}
|
|
}
|
|
} |