using System;
using System.Data;
using System.Collections;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using CMS.CMSHelper;
using CMS.GlobalHelper;
using CMS.MessageBoard;
using CMS.SettingsProvider;
using CMS.SiteProvider;
using CMS.UIControls;
using CMS.ExtendedControls;
public partial class CMSModules_MessageBoards_Controls_Boards_BoardSubscription : CMSAdminEditControl
{
#region "Private variables"
private int mSubscriptionId = 0;
private int mBoardId = 0;
private int mGroupID = 0;
private BoardSubscriptionInfo mCurrentSubscription = null;
#endregion
#region "Private properties"
///
/// Currently edited subscriber.
///
private BoardSubscriptionInfo CurrentSubscription
{
get
{
if (mCurrentSubscription == null)
{
mCurrentSubscription = BoardSubscriptionInfoProvider.GetBoardSubscriptionInfo(SubscriptionID);
}
return mCurrentSubscription;
}
set
{
mCurrentSubscription = value;
}
}
#endregion
#region "Public properties"
///
/// Messages placeholder
///
public override MessagesPlaceHolder MessagesPlaceHolder
{
get
{
return plcMess;
}
}
///
/// Indicates if control is used on live site.
///
public override bool IsLiveSite
{
get
{
return base.IsLiveSite;
}
set
{
plcMess.IsLiveSite = value;
base.IsLiveSite = value;
}
}
///
/// ID of the current board.
///
public int BoardID
{
get
{
return mBoardId;
}
set
{
mBoardId = value;
}
}
///
/// ID of the current subscription.
///
public int SubscriptionID
{
get
{
return mSubscriptionId;
}
set
{
mSubscriptionId = value;
}
}
///
/// ID of the current subscription.
///
public int GroupID
{
get
{
return mGroupID;
}
set
{
mGroupID = value;
}
}
#endregion
protected void Page_Load(object sender, EventArgs e)
{
// If control should be hidden save view state memory
if (StopProcessing || !Visible)
{
EnableViewState = false;
}
// Initializes the controls
SetupControls();
// Reload data if necessary
if (!URLHelper.IsPostback() && !IsLiveSite)
{
ReloadData();
}
if (!RequestHelper.IsPostBack())
{
chkSendConfirmationEmail.Checked = true;
}
}
protected void Page_PreRender(object sender, EventArgs e)
{
// Reload data if is live site
if (!URLHelper.IsPostback() && IsLiveSite)
{
ReloadData();
}
}
#region "General methods"
///
/// Initializes the controls on the page.
///
private void SetupControls()
{
ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "UpdateForm", ScriptHelper.GetScript("function UpdateForm() {return;}"));
userSelector.SiteID = CMSContext.CurrentSiteID;
userSelector.ShowSiteFilter = false;
userSelector.IsLiveSite = IsLiveSite;
int groupId = QueryHelper.GetInteger("groupid", 0);
if (groupId > 0)
{
userSelector.GroupID = groupId;
}
else
{
userSelector.GroupID = GroupID;
}
// Initialize the labels
radAnonymousSubscription.Text = GetString("board.subscription.anonymous");
radRegisteredSubscription.Text = GetString("board.subscription.registered");
lblEmailAnonymous.Text = GetString("general.email") + ResHelper.Colon;
lblEmailRegistered.Text = GetString("general.email") + ResHelper.Colon;
lblUserRegistered.Text = GetString("general.username") + ResHelper.Colon;
rfvEmailAnonymous.ErrorMessage = GetString("board.subscription.noemail");
rfvEmailRegistered.ErrorMessage = GetString("board.subscription.noemail");
radRegisteredSubscription.CheckedChanged += new EventHandler(radRegisteredSubscription_CheckedChanged);
radAnonymousSubscription.CheckedChanged += new EventHandler(radAnonymousSubscription_CheckedChanged);
userSelector.UniSelector.OnSelectionChanged += new EventHandler(UniSelector_OnSelectionChanged);
ProcessDisabling(radAnonymousSubscription.Checked);
}
protected void UniSelector_OnSelectionChanged(object sender, EventArgs e)
{
int userId = ValidationHelper.GetInteger(userSelector.Value, 0);
if (userId > 0)
{
// Show users email
UserInfo ui = UserInfoProvider.GetUserInfo(userId);
if (ui != null)
{
txtEmailRegistered.Text = ui.Email;
}
}
}
public override void ReloadData()
{
ClearForm();
// Get current subscription ID
if (SubscriptionID > 0)
{
// Get current subscription info
CurrentSubscription = BoardSubscriptionInfoProvider.GetBoardSubscriptionInfo(SubscriptionID);
EditedObject = CurrentSubscription;
// Load existing subscription data
if (CurrentSubscription != null)
{
// If the subscription is related to the registered user
if (CurrentSubscription.SubscriptionUserID > 0)
{
// Load data
userSelector.Value = CurrentSubscription.SubscriptionUserID;
txtEmailRegistered.Text = CurrentSubscription.SubscriptionEmail;
radRegisteredSubscription.Checked = true;
radAnonymousSubscription.Checked = false;
ProcessDisabling(false);
}
else
{
// Load data
txtEmailAnonymous.Text = CurrentSubscription.SubscriptionEmail;
radAnonymousSubscription.Checked = true;
radRegisteredSubscription.Checked = false;
ProcessDisabling(true);
}
chkSendConfirmationEmail.Checked = pnlSendConfirmationEmail.Visible = false;
}
}
else
{
radAnonymousSubscription.Checked = true;
radRegisteredSubscription.Checked = false;
ProcessDisabling(true);
}
if (QueryHelper.GetBoolean("saved", false))
{
// Display info on success if subscription is edited
ShowChangesSaved();
}
}
///
/// Clears the form entries.
///
public override void ClearForm()
{
radAnonymousSubscription.Checked = true;
userSelector.Value = "";
txtEmailAnonymous.Text = "";
txtEmailRegistered.Text = "";
}
#endregion
#region "Private methods"
///
///
///
private string ValidateForm()
{
string errMsg = "";
string where = "";
// Check if the entered e-mail is non-empty string and valid e-mail address
if (radAnonymousSubscription.Checked)
{
errMsg = new Validator().NotEmpty(txtEmailAnonymous.Text, GetString("board.subscription.emailnotvalid")).IsEmail(txtEmailAnonymous.Text, GetString("board.subscription.emailnotvalid")).Result;
where = "SubscriptionEmail ='" + SqlHelperClass.GetSafeQueryString(txtEmailAnonymous.Text, false) + "'";
}
else
{
errMsg = new Validator().NotEmpty(txtEmailRegistered.Text, GetString("board.subscription.emailnotvalid")).IsEmail(txtEmailRegistered.Text, GetString("board.subscription.emailnotvalid")).NotEmpty(userSelector.Value, GetString("board.subscription.emptyuser")).Result;
where = "SubscriptionEmail ='" + SqlHelperClass.GetSafeQueryString(txtEmailRegistered.Text, false) + "'";
}
// Check if there is not the subscription for specified e-mail yet
if (string.IsNullOrEmpty(errMsg))
{
DataSet ds = BoardSubscriptionInfoProvider.GetSubscriptions(where, null);
if (!DataHelper.DataSourceIsEmpty(ds))
{
// If existing subscription is the current one
if ((ValidationHelper.GetInteger(ds.Tables[0].Rows[0]["SubscriptionID"], 0) != SubscriptionID) &&
(ValidationHelper.GetInteger(ds.Tables[0].Rows[0]["SubscriptionBoardID"], 0) == BoardID))
{
errMsg = GetString("board.subscription.emailexists");
}
}
}
return errMsg;
}
///
/// Handles enabling/disabling appropriate controls
///
private void ProcessDisabling(bool isTrue)
{
// Process registered user subscription displaying
lblEmailAnonymous.Enabled = isTrue;
txtEmailAnonymous.Enabled = isTrue;
rfvEmailAnonymous.Enabled = isTrue;
lblUserRegistered.Enabled = !isTrue;
lblEmailRegistered.Enabled = !isTrue;
txtEmailRegistered.Enabled = !isTrue;
rfvEmailRegistered.Enabled = !isTrue;
userSelector.Enabled = !isTrue;
}
#endregion
#region "Event handling"
protected void radRegisteredSubscription_CheckedChanged(object sender, EventArgs e)
{
ProcessDisabling(!radRegisteredSubscription.Checked);
}
protected void radAnonymousSubscription_CheckedChanged(object sender, EventArgs e)
{
ProcessDisabling(radAnonymousSubscription.Checked);
}
protected void btnOk_Click(object sender, EventArgs e)
{
if (!CheckPermissions("cms.messageboards", PERMISSION_MODIFY))
{
return;
}
string errMsg = ValidateForm();
// If entered form was validated successfully
if (string.IsNullOrEmpty(errMsg))
{
BoardSubscriptionInfo bsi = null;
// If existing subscription is edited
if (SubscriptionID > 0)
{
bsi = CurrentSubscription;
}
else
{
bsi = new BoardSubscriptionInfo();
}
// Get data according the selected type
if (radAnonymousSubscription.Checked)
{
bsi.SubscriptionEmail = txtEmailAnonymous.Text;
bsi.SubscriptionUserID = 0;
}
else
{
bsi.SubscriptionEmail = txtEmailRegistered.Text;
bsi.SubscriptionUserID = ValidationHelper.GetInteger(userSelector.Value, 0);
}
bsi.SubscriptionBoardID = BoardID;
// Save information on user
BoardSubscriptionInfoProvider.SetBoardSubscriptionInfo(bsi);
if (chkSendConfirmationEmail.Checked)
{
BoardSubscriptionInfoProvider.SendConfirmationEmail(bsi, true);
}
SubscriptionID = bsi.SubscriptionID;
RaiseOnSaved();
// Display info on success if subscription is edited
ShowChangesSaved();
}
else
{
// Inform user on error
ShowError(errMsg);
}
}
#endregion
}