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.GlobalHelper; using CMS.Forums; using CMS.CMSHelper; using CMS.WebAnalytics; using CMS.ExtendedControls; public partial class CMSModules_Forums_Controls_SubscriptionApproval : CMSUserControl { #region "Private variables" private string mSubscriptionHash = null; private string mRequestTime = null; private ForumSubscriptionInfo mSubscriptionObject = null; #endregion #region "Public properties" /// /// Gets or sets successful approval text. /// public string SuccessfulConfirmationText { get; set; } /// /// Gets or sets unsuccessful approval text. /// public string UnsuccessfulConfirmationText { get; set; } /// /// Gets or sets the confirmation info label text. /// public string ConfirmationInfoText { get; set; } /// /// Gets or sets the confirmation button text. /// public string ConfirmationButtonText { get; set; } /// /// Gets or sets the confirmation label CSS class. /// public string ConfirmationTextCssClass { get; set; } /// /// Gets or sets the confirmation button CSS class. /// public string ConfirmationButtonCssClass { get; set; } /// /// Get message board subscription object /// public ForumSubscriptionInfo SubscriptionObject { get { if (mSubscriptionObject == null) { mSubscriptionObject = ForumSubscriptionInfoProvider.GetForumSubscriptionInfo(mSubscriptionHash); } return mSubscriptionObject; } } #endregion #region "Methods" protected void Page_Load(object sender, EventArgs e) { // If StopProcessing flag is set, do nothing if (StopProcessing) { Visible = false; return; } else { // Validate hash if (!QueryHelper.ValidateHash("hash", "aliaspath", false)) { URLHelper.Redirect(ResolveUrl("~/CMSMessages/Error.aspx?title=" + ResHelper.GetString("dialogs.badhashtitle") + "&text=" + ResHelper.GetString("dialogs.badhashtext"))); } // Get data from query string mSubscriptionHash = QueryHelper.GetString("forumsubscriptionhash", string.Empty); mRequestTime = QueryHelper.GetString("datetime", string.Empty); bool controlPb = false; if (RequestHelper.IsPostBack()) { Control pbCtrl = ControlsHelper.GetPostBackControl(Page); if (pbCtrl == btnConfirm) { controlPb = true; } } // Setup controls SetupControls(!controlPb); if (!controlPb) { CheckAndSubscribe(mSubscriptionHash, mRequestTime, true); } } } /// /// Button confirmation click event /// protected void btnConfirm_Click(object sender, EventArgs e) { CheckAndSubscribe(mSubscriptionHash, mRequestTime, false); } /// /// Initialize controls properties /// private void SetupControls(bool forceReload) { lblInfo.CssClass = DataHelper.GetNotEmpty(ConfirmationTextCssClass, "InfoLabel"); btnConfirm.CssClass = DataHelper.GetNotEmpty(ConfirmationButtonCssClass, "LongButton"); if (forceReload) { btnConfirm.Text = DataHelper.GetNotEmpty(ConfirmationButtonText, GetString("general.subscription_confirmbutton")); lblInfo.Text = DataHelper.GetNotEmpty(ConfirmationInfoText, GetString("general.subscription_confirmtext")); } } /// /// Check that subscription hash is valid and subscription didn't expire /// /// Subscription hash to check /// Date time of subscription request /// Indicates if only check will be performed private void CheckAndSubscribe(string subscriptionHash, string requestTime, bool checkOnly) { // Get date and time DateTime datetime = DateTimeHelper.ZERO_TIME; // Get date and time if (!string.IsNullOrEmpty(requestTime)) { try { datetime = DateTime.ParseExact(requestTime, SecurityHelper.EMAIL_CONFIRMATION_DATETIME_FORMAT, null); } catch { DisplayError(DataHelper.GetNotEmpty(UnsuccessfulConfirmationText, GetString("general.subscription_failed"))); return; } } // Initialize opt-in result OptInApprovalResultEnum result = OptInApprovalResultEnum.NotFound; // Check only data consistency if (checkOnly) { if (SubscriptionObject != null) { // Validate hash result = ForumSubscriptionInfoProvider.ValidateHash(SubscriptionObject, subscriptionHash, CMSContext.CurrentSiteName, datetime); if ((result == OptInApprovalResultEnum.Success) && (SubscriptionObject.SubscriptionApproved)) { result = OptInApprovalResultEnum.NotFound; } } } else { // Try to approve subscription result = ForumSubscriptionInfoProvider.ApproveSubscription(SubscriptionObject, mSubscriptionHash, false, CMSContext.CurrentSiteName, datetime); } // Process result switch (result) { // Approving subscription was successful case OptInApprovalResultEnum.Success: if (!checkOnly) { ShowInfo(DataHelper.GetNotEmpty(SuccessfulConfirmationText, GetString("general.subscription_approval"))); ForumSubscriptionInfoProvider.LogSubscriptionActivity(SubscriptionObject, null, QueryHelper.GetInteger("cid", 0), QueryHelper.GetInteger("siteid", 0), QueryHelper.GetText("url", ""), QueryHelper.GetInteger("docid", 0), QueryHelper.GetText("camp", ""), PredefinedActivityType.SUBSCRIPTION_FORUM_POST, true); } break; // Subscription was already approved case OptInApprovalResultEnum.Failed: DisplayError(DataHelper.GetNotEmpty(UnsuccessfulConfirmationText, GetString("general.subscription_failed"))); break; case OptInApprovalResultEnum.TimeExceeded: ForumSubscriptionInfoProvider.DeleteForumSubscriptionInfo(SubscriptionObject); DisplayError(DataHelper.GetNotEmpty(UnsuccessfulConfirmationText, GetString("general.subscription_timeexceeded"))); break; // Subscription not found default: case OptInApprovalResultEnum.NotFound: DisplayError(DataHelper.GetNotEmpty(UnsuccessfulConfirmationText, GetString("general.subscription_invalid"))); 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 }