using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CMS.UIControls;
using CMS.MessageBoard;
using CMS.GlobalHelper;
using CMS.CMSHelper;
using CMS.ExtendedControls;
public partial class CMSModules_MessageBoards_Controls_Unsubscription : CMSUserControl
{
#region "Private variables"
private Guid mSubGuid = Guid.Empty;
string mSubscriptionHash = null;
string mRequestTime = null;
private BoardSubscriptionInfo mSubscriptionObject = null;
private BoardInfo mSubscriptionSubject = null;
#endregion
#region "Public properties"
///
/// Gets or sets successful approval text.
///
public string SuccessfulUnsubscriptionText
{
get;
set;
}
///
/// Gets or sets unsuccessful approval text.
///
public string UnsuccessfulUnsubscriptionText
{
get;
set;
}
///
/// Gets or sets the confirmation info label text.
///
public string UnsubscriptionInfoText
{
get;
set;
}
///
/// Gets or sets the confirmation button text.
///
public string UnsubscriptionButtonText
{
get;
set;
}
///
/// Gets or sets the confirmation label CSS class.
///
public string UnsubscriptionInfoCssClass
{
get;
set;
}
///
/// Gets or sets the confirmation button CSS class.
///
public string UnsubscriptionButtonCssClass
{
get;
set;
}
///
/// Get message board subscription object
///
private BoardSubscriptionInfo SubscriptionObject
{
get
{
if (mSubscriptionObject == null)
{
mSubscriptionObject = BoardSubscriptionInfoProvider.GetBoardSubscriptionInfo(mSubGuid);
if (mSubscriptionObject == null)
{
mSubscriptionObject = BoardSubscriptionInfoProvider.GetBoardSubscriptionInfo(mSubscriptionHash);
}
}
return mSubscriptionObject;
}
}
///
/// Get subject of subscription
///
public BoardInfo SubscriptionSubject
{
get
{
if ((mSubscriptionSubject == null) && (SubscriptionObject != null))
{
mSubscriptionSubject = BoardInfoProvider.GetBoardInfo(SubscriptionObject.SubscriptionBoardID);
}
return mSubscriptionSubject;
}
}
#endregion
#region "Control methods"
protected void Page_Init(object sender, EventArgs e)
{
// Get data from query string
mSubGuid = QueryHelper.GetGuid("boardsubguid", Guid.Empty);
mSubscriptionHash = QueryHelper.GetString("boardsubscriptionhash", string.Empty);
mRequestTime = QueryHelper.GetString("datetime", string.Empty);
}
///
/// Page load event
///
protected void Page_Load(object sender, EventArgs e)
{
// If StopProcessing flag is set, do nothing
if (StopProcessing)
{
Visible = false;
return;
}
else
{
bool controlPb = false;
if (RequestHelper.IsPostBack())
{
Control pbCtrl = ControlsHelper.GetPostBackControl(Page);
if (pbCtrl == btnConfirm)
{
controlPb = true;
}
}
// Setup controls
SetupControls(!controlPb);
if (!controlPb)
{
CheckAndUnsubscribe(mSubGuid, mSubscriptionHash, mRequestTime, true);
}
}
}
///
/// Button confirmation click event
///
protected void btnConfirm_Click(object sender, EventArgs e)
{
btnConfirm.Visible = false;
CheckAndUnsubscribe(mSubGuid, mSubscriptionHash, mRequestTime, false);
}
///
/// Initialize controls properties
/// Force reloading control
///
private void SetupControls(bool forceReload)
{
lblInfo.CssClass = DataHelper.GetNotEmpty(UnsubscriptionInfoCssClass, "InfoLabel");
btnConfirm.CssClass = DataHelper.GetNotEmpty(UnsubscriptionButtonCssClass, "LongButton");
if (forceReload)
{
lblInfo.Text = DataHelper.GetNotEmpty(UnsubscriptionInfoText, GetString("general.unsubscription_confirmtext"));
btnConfirm.Text = DataHelper.GetNotEmpty(UnsubscriptionButtonText, GetString("general.unsubscription_confirmbutton"));
}
}
///
/// Check that subscription hash is valid and subscription didn't expire
///
/// Subscription GUID for subscriptions without
/// Subscription hash to check
/// Date time of subscription request
/// Indicates if only check will be performed
private void CheckAndUnsubscribe(Guid subGuid, string subscriptionHash, string requestTime, bool checkOnly)
{
OptInApprovalResultEnum result = OptInApprovalResultEnum.NotFound;
// Get date and time
DateTime datetime = DateTimeHelper.ZERO_TIME;
if (!string.IsNullOrEmpty(requestTime))
{
try
{
datetime = DateTime.ParseExact(requestTime, SecurityHelper.EMAIL_CONFIRMATION_DATETIME_FORMAT, null);
}
catch
{
DisplayError(DataHelper.GetNotEmpty(UnsuccessfulUnsubscriptionText, GetString("general.unsubscription_unsuccessful")));
return;
}
}
if (subGuid != Guid.Empty)
{
if (SubscriptionObject != null)
{
if (!checkOnly)
{
result = BoardSubscriptionInfoProvider.Unsubscribe(SubscriptionObject, true);
}
}
}
// Check if subscription approval hash is supplied
else if (!string.IsNullOrEmpty(subscriptionHash))
{
if (checkOnly)
{
// Validate hash
result = BoardSubscriptionInfoProvider.ValidateHash(SubscriptionObject, subscriptionHash, CMSContext.CurrentSiteName, datetime);
}
else
{
// Check if hash is valid
result = BoardSubscriptionInfoProvider.Unsubscribe(subscriptionHash, true, CMSContext.CurrentSiteName, datetime);
}
}
switch (result)
{
// Approving subscription was successful
case OptInApprovalResultEnum.Success:
if (!checkOnly)
{
ShowInfo(DataHelper.GetNotEmpty(SuccessfulUnsubscriptionText, GetString("Unsubscribe.Unsubscribed")));
}
break;
// Subscription was already approved
case OptInApprovalResultEnum.Failed:
DisplayError(DataHelper.GetNotEmpty(UnsuccessfulUnsubscriptionText, GetString("general.unsubscription_unsuccessful")));
break;
case OptInApprovalResultEnum.TimeExceeded:
DisplayError(DataHelper.GetNotEmpty(UnsuccessfulUnsubscriptionText, GetString("general.unsubscription_timeexceeded")));
break;
// Subscription not found
default:
case OptInApprovalResultEnum.NotFound:
DisplayError(DataHelper.GetNotEmpty(UnsuccessfulUnsubscriptionText, GetString("general.unsubscription_NotSubscribed")));
break;
}
}
#endregion
#region "Helper methods"
///
/// Display error message
///
/// Error text to display
private void DisplayError(string errorText)
{
lblInfo.CssClass = "ErrorLabel";
lblInfo.Text = errorText;
btnConfirm.Visible = false;
}
///
/// Display information message
///
/// Information to display
private void ShowInfo(string infoText)
{
lblInfo.CssClass = "InfoLabel";
lblInfo.Text = infoText;
btnConfirm.Visible = false;
}
#endregion
}