using System;
using System.Data;
using System.Web.UI.WebControls;
using CMS.EmailEngine;
using CMS.GlobalHelper;
using CMS.SettingsProvider;
using CMS.UIControls;
public partial class CMSModules_SMTPServers_Pages_Administration_Tab_Sites : CMSSMTPServersPage
{
#region "Variables"
private SMTPServerInfo smtpServer;
private DataSet serverSites;
private int smtpServerId;
private string currentValues;
#endregion
#region "Page events"
protected void Page_Load(object sender, EventArgs e)
{
smtpServerId = QueryHelper.GetInteger("smtpserverid", 0);
if (smtpServerId <= 0)
{
pnlAvailability.Visible = false;
return;
}
EditedObject = smtpServer = SMTPServerInfoProvider.GetSMTPServerInfo(smtpServerId);
if (!RequestHelper.IsPostBack())
{
if (smtpServer.ServerIsGlobal)
{
rblSites.SelectedIndex = 0;
usSites.Enabled = false;
}
else
{
rblSites.SelectedIndex = 1;
usSites.Enabled = true;
LoadSiteBindings();
}
}
usSites.OnSelectionChanged += usSites_OnSelectionChanged;
rblSites.SelectedIndexChanged += rblSites_SelectedIndexChanged;
}
#endregion
#region "Control event handlers"
///
/// Radiobutton event handler.
///
protected void rblSites_SelectedIndexChanged(object sender, EventArgs e)
{
usSites.Enabled = rblSites.SelectedValue == "site";
// Add/remove global availability
if (usSites.Enabled)
{
SMTPServerInfoProvider.DemoteSMTPServer(smtpServer);
}
else
{
SMTPServerInfoProvider.PromoteSMTPServer(smtpServer);
}
LoadSiteBindings();
}
///
/// Uniselector event handler.
///
protected void usSites_OnSelectionChanged(object sender, EventArgs e)
{
SaveSiteBindings();
}
#endregion
#region "Private methods"
///
/// Load control.
///
private void LoadSiteBindings()
{
GetCurrentSites();
usSites.Value = currentValues;
usSites.Reload(true);
}
///
/// Loads current sites from DB.
///
private void GetCurrentSites()
{
string where = string.Format("ServerID = {0}", smtpServer.ServerID);
serverSites = SMTPServerSiteInfoProvider.GetSMTPServerSites(where, "SiteID");
if (!DataHelper.DataSourceIsEmpty(serverSites))
{
currentValues = TextHelper.Join(";", SystemDataHelper.GetStringValues(serverSites.Tables[0], "SiteID"));
}
else
{
currentValues = string.Empty;
}
}
///
/// Save changes.
///
private void SaveSiteBindings()
{
if (RequestHelper.IsPostBack())
{
GetCurrentSites();
}
string newValues = ValidationHelper.GetString(usSites.Value, null);
RemoveOldRecords(newValues, currentValues);
AddNewRecords(newValues, currentValues);
currentValues = newValues;
}
///
/// Remove sites from SMTP server.
///
private void RemoveOldRecords(string newValues, string currentValues)
{
string items = DataHelper.GetNewItemsInList(newValues, currentValues);
if (!String.IsNullOrEmpty(items))
{
string[] modifiedItems = items.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
if (modifiedItems != null)
{
foreach (string item in modifiedItems)
{
SMTPServerSiteInfoProvider.RemoveSMTPServerFromSite(smtpServerId, ValidationHelper.GetInteger(item, 0));
}
}
}
}
///
/// Add sites to SMTP server.
///
private void AddNewRecords(string newValues, string currentValues)
{
string items = DataHelper.GetNewItemsInList(currentValues, newValues);
if (!String.IsNullOrEmpty(items))
{
string[] modifiedItems = items.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
if (modifiedItems != null)
{
foreach (string item in modifiedItems)
{
SMTPServerSiteInfoProvider.AddSMTPServerToSite(smtpServerId, ValidationHelper.GetInteger(item, 0));
}
}
}
}
#endregion
}