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 }