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.Blogs; using CMS.CMSHelper; using CMS.WebAnalytics; using CMS.ExtendedControls; using CMS.DocumentEngine; using TreeNode = CMS.DocumentEngine.TreeNode; public partial class CMSModules_Blogs_Controls_SubscriptionApproval : CMSUserControl { #region "Private variables" private string mSubscriptionHash = null; private string mRequestTime = null; private BlogPostSubscriptionInfo mSubscriptionObject = null; private TreeNode mSubscriptionSubject = 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 /// private BlogPostSubscriptionInfo SubscriptionObject { get { if (mSubscriptionObject == null) { mSubscriptionObject = BlogPostSubscriptionInfoProvider.GetBlogPostSubscriptionInfo(mSubscriptionHash); } return mSubscriptionObject; } } /// /// Get subject of subscription /// public TreeNode SubscriptionSubject { get { if ((mSubscriptionSubject == null) && (SubscriptionObject != null)) { // Get blog post TreeProvider tp = new TreeProvider(); mSubscriptionSubject = tp.SelectSingleDocument(SubscriptionObject.SubscriptionPostDocumentID); } return mSubscriptionSubject; } } #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("blogsubscriptionhash", 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) { // Validate hash result = BlogPostSubscriptionInfoProvider.ValidateHash(SubscriptionObject, subscriptionHash, CMSContext.CurrentSiteName, datetime); if ((result == OptInApprovalResultEnum.Success) && (SubscriptionObject.SubscriptionApproved)) { result = OptInApprovalResultEnum.NotFound; } } else { // Try to approve subscription result = BlogPostSubscriptionInfoProvider.ApproveSubscription(SubscriptionObject, subscriptionHash, 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"))); BlogPostSubscriptionInfoProvider.LogSubscriptionActivity(SubscriptionObject, QueryHelper.GetInteger("cid", 0), QueryHelper.GetInteger("siteid", 0), QueryHelper.GetText("url", ""), QueryHelper.GetText("camp", ""), PredefinedActivityType.SUBSCRIPTION_BLOG_POST, true); } break; // Subscription was already approved case OptInApprovalResultEnum.Failed: DisplayError(DataHelper.GetNotEmpty(UnsuccessfulConfirmationText, GetString("general.subscription_failed"))); break; case OptInApprovalResultEnum.TimeExceeded: BlogPostSubscriptionInfoProvider.DeleteBlogPostSubscriptionInfo(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 }