/// <summary> /// On action event handling. /// </summary> /// <param name="actionName">Name of the action.</param> /// <param name="actionArgument">Parameter for the action.</param> protected void boardSubscriptions_OnAction(string actionName, object actionArgument) { int boardSubscriptionId = ValidationHelper.GetInteger(actionArgument, 0); switch (actionName.ToLowerCSafe()) { case "delete": if (RaiseOnCheckPermissions(PERMISSION_MANAGE, this)) { if (StopProcessing) { return; } } try { BoardSubscriptionInfoProvider.DeleteBoardSubscriptionInfo(boardSubscriptionId); } catch (Exception ex) { ShowError(ex.Message); } break; case "approve": if (RaiseOnCheckPermissions(PERMISSION_MANAGE, this)) { if (StopProcessing) { return; } } // Approve BoardSubscriptionInfo object BoardSubscriptionInfo bsi = BoardSubscriptionInfoProvider.GetBoardSubscriptionInfo(boardSubscriptionId); if ((bsi != null) && !bsi.SubscriptionApproved) { bsi.SubscriptionApproved = true; BoardSubscriptionInfoProvider.SetBoardSubscriptionInfo(bsi); // Send confirmation mail BoardInfo bi = BoardInfoProvider.GetBoardInfo(bsi.SubscriptionBoardID); if ((bi != null) && bi.BoardSendOptInConfirmation) { BoardSubscriptionInfoProvider.SendConfirmationEmail(bsi, true); } // Log activity if (MembershipContext.AuthenticatedUser.UserID == UserID) { Service <ICurrentContactMergeService> .Entry().UpdateCurrentContactEmail(bsi.SubscriptionEmail, MembershipContext.AuthenticatedUser); BoardSubscriptionInfoProvider.LogSubscriptionActivity(bsi, bi, PredefinedActivityType.SUBSCRIPTION_MESSAGE_BOARD, false); } } break; } }
/// <summary> /// Check that subscription hash is valid and subscription didn't expire /// </summary> /// <param name="subscriptionHash">Subscription hash to check</param> /// <param name="requestTime">Date time of subscription request</param> /// <param name="checkOnly">Indicates if only check will be performed</param> 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 = DateTimeUrlFormatter.Parse(requestTime); } 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 = BoardSubscriptionInfoProvider.ValidateHash(SubscriptionObject, subscriptionHash, SiteContext.CurrentSiteName, datetime); if ((result == OptInApprovalResultEnum.Success) && (SubscriptionObject.SubscriptionApproved)) { result = OptInApprovalResultEnum.NotFound; } } } else { // Try to approve subscription result = BoardSubscriptionInfoProvider.ApproveSubscription(SubscriptionObject, subscriptionHash, false, SiteContext.CurrentSiteName, datetime); } // Process result switch (result) { // Approving subscription was successful case OptInApprovalResultEnum.Success: if (!checkOnly) { ShowInfo(DataHelper.GetNotEmpty(SuccessfulConfirmationText, GetString("general.subscription_approval"))); Service.Resolve <ICurrentContactMergeService>().UpdateCurrentContactEmail(SubscriptionObject.SubscriptionEmail, MembershipContext.AuthenticatedUser); BoardSubscriptionInfoProvider.LogSubscriptionActivity(SubscriptionObject, null, QueryHelper.GetInteger("cid", 0), QueryHelper.GetInteger("siteid", 0), QueryHelper.GetText("url", ""), QueryHelper.GetInteger("docid", 0), QueryHelper.GetText("camp", ""), PredefinedActivityType.SUBSCRIPTION_MESSAGE_BOARD, true); } break; // Subscription failed due to parameters case OptInApprovalResultEnum.Failed: DisplayError(DataHelper.GetNotEmpty(UnsuccessfulConfirmationText, GetString("general.subscription_failed"))); break; case OptInApprovalResultEnum.TimeExceeded: BoardSubscriptionInfoProvider.DeleteBoardSubscriptionInfo(SubscriptionObject); DisplayError(DataHelper.GetNotEmpty(UnsuccessfulConfirmationText, GetString("general.subscription_timeexceeded"))); break; // Subscription not found default: DisplayError(DataHelper.GetNotEmpty(UnsuccessfulConfirmationText, GetString("general.subscription_invalid"))); break; } }