websitepanel/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/Ecommerce/UserControls/PlanDomainOption.ascx.cs

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()
);
}
}
}