using System; using System.Collections.Generic; using System.Data; using System.Web.UI.WebControls; using CMS.CMSHelper; using CMS.GlobalHelper; using CMS.Newsletter; using CMS.SettingsProvider; using CMS.SiteProvider; using CMS.UIControls; public partial class CMSModules_Newsletters_Tools_Subscribers_Subscriber_Subscriptions : CMSNewsletterSubscribersPage { #region "Constants and variables" private const string SELECT = "SELECT"; private const string UNSUBSCRIBE = "UNSUBSCRIBE"; private const string SUBSCRIBE = "SUBSCRIBE"; private const string APPROVE = "APPROVE"; private const string REJECT = "REJECT"; private const string REMOVE = "REMOVE"; protected int subscriberId = 0; protected bool isRoleORContactGroup = false; #endregion protected void Page_Load(object sender, EventArgs e) { subscriberId = QueryHelper.GetInteger("subscriberid", 0); // Get subscriber by its ID and check its existence SubscriberInfo subscriberObj = SubscriberInfoProvider.GetSubscriberInfo(subscriberId); EditedObject = subscriberObj; // Check if it is role or contact group subscriber isRoleORContactGroup = (subscriberObj.SubscriberRelatedID > 0) && (subscriberObj.SubscriberType != null) && (subscriberObj.SubscriberType.EqualsCSafe(SiteObjectType.ROLE, true) || subscriberObj.SubscriberType.EqualsCSafe(PredefinedObjectType.CONTACTGROUP, true)); // Initialize page controls chkRequireOptIn.TextAlign = TextAlign.Right; chkSendConfirmation.TextAlign = TextAlign.Right; // Initialize uniselector for newsletters selectNewsletter.UniSelector.SelectionMode = SelectionModeEnum.MultipleButton; selectNewsletter.UniSelector.OnItemsSelected += new EventHandler(UniSelector_OnItemsSelected); selectNewsletter.UniSelector.ReturnColumnName = "NewsletterID"; selectNewsletter.UniSelector.ButtonImage = GetImageUrl("Objects/Newsletter_Newsletter/add.png"); selectNewsletter.UniSelector.DialogLink.CssClass = "MenuItemEdit"; selectNewsletter.ShowSiteFilter = false; selectNewsletter.ResourcePrefix = "newsletterselect"; selectNewsletter.UniSelector.DialogButton.CssClass = "LongButton"; selectNewsletter.IsLiveSite = false; // Initialize unigrid unigridNewsletters.WhereCondition = "SubscriberID = " + subscriberId.ToString(); unigridNewsletters.OnAction += new OnActionEventHandler(unigridNewsletters_OnAction); unigridNewsletters.OnExternalDataBound += new OnExternalDataBoundEventHandler(unigridNewsletters_OnExternalDataBound); // Initialize mass actions if (drpActions.Items.Count == 0) { drpActions.Items.Add(new ListItem(GetString("general.selectaction"), SELECT)); drpActions.Items.Add(new ListItem(GetString("newsletter.unsubscribelink"), UNSUBSCRIBE)); drpActions.Items.Add(new ListItem(GetString("newsletter.renewsubscription"), SUBSCRIBE)); drpActions.Items.Add(new ListItem(GetString("newsletter.approvesubscription"), APPROVE)); drpActions.Items.Add(new ListItem(GetString("newsletter.rejectsubscription"), REJECT)); drpActions.Items.Add(new ListItem(GetString("newsletter.deletesubscription"), REMOVE)); } } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); // Display/hide mass action dialog under the unigrid pnlActions.Visible = !DataHelper.DataSourceIsEmpty(unigridNewsletters.GridView.DataSource); // Display/hide double opt-in option plcRequireOptIn.Visible = !isRoleORContactGroup; } /// /// Uniselector item selected event handler. /// protected void UniSelector_OnItemsSelected(object sender, EventArgs e) { // Check permissions if (!CMSContext.CurrentUser.IsAuthorizedPerResource("cms.newsletter", "ManageSubscribers")) { RedirectToCMSDeskAccessDenied("cms.newsletter", "ManageSubscribers"); } // Get new items from selector string newValues = ValidationHelper.GetString(selectNewsletter.Value, null); string[] newItems = null; SubscriberNewsletterInfo subscription = null; int newsletterId = 0; newItems = newValues.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (newItems != null) { // Get all selected newsletters foreach (string item in newItems) { newsletterId = ValidationHelper.GetInteger(item, 0); // Get subscription subscription = SubscriberNewsletterInfoProvider.GetSubscriberNewsletterInfo(subscriberId, newsletterId); // If not already subscribed if (subscription == null) { // Subscribe role if (isRoleORContactGroup) { SubscriberInfoProvider.Subscribe(subscriberId, newsletterId, DateTime.Now, chkSendConfirmation.Checked, false); } // Subscribe users and subscribers else { SubscriberInfoProvider.Subscribe(subscriberId, newsletterId, DateTime.Now, chkSendConfirmation.Checked, chkRequireOptIn.Checked); } } } } selectNewsletter.Value = null; unigridNewsletters.ReloadData(); pnlUpdate.Update(); } /// /// Unigrid databound handler. /// protected object unigridNewsletters_OnExternalDataBound(object sender, string sourceName, object parameter) { bool approved = false; switch (sourceName.ToLowerCSafe()) { case "subscribe": ((ImageButton)sender).Visible = !ValidationHelper.GetBoolean(((DataRowView)((GridViewRow)parameter).DataItem).Row["SubscriptionEnabled"], true); break; case "unsubscribe": ((ImageButton)sender).Visible = ValidationHelper.GetBoolean(((DataRowView)((GridViewRow)parameter).DataItem).Row["SubscriptionEnabled"], true); break; case "status": return GetSubscriptionStatus(parameter as DataRowView); case "approve": approved = ValidationHelper.GetBoolean(((DataRowView)((GridViewRow)parameter).DataItem).Row["SubscriptionApproved"], false); if (approved) { ImageButton button = ((ImageButton)sender); button.Visible = false; } break; case "reject": approved = ValidationHelper.GetBoolean(((DataRowView)((GridViewRow)parameter).DataItem).Row["SubscriptionApproved"], false); if (!approved) { ImageButton button = ((ImageButton)sender); button.Visible = false; } break; } return null; } /// /// Unigrid newsletters action handler. /// protected void unigridNewsletters_OnAction(string actionName, object actionArgument) { // Check 'configure' permission if (!CMSContext.CurrentUser.IsAuthorizedPerResource("cms.newsletter", "ManageSubscribers")) { RedirectToCMSDeskAccessDenied("cms.newsletter", "ManageSubscribers"); } int newsletterId = ValidationHelper.GetInteger(actionArgument, 0); switch (actionName.ToLowerCSafe()) { // Renew subscription case "subscribe": SubscriberInfoProvider.RenewSubscription(subscriberId, newsletterId, chkSendConfirmation.Checked); break; // Unsubscribe selected subscriber case "unsubscribe": SubscriberInfoProvider.Unsubscribe(subscriberId, newsletterId, chkSendConfirmation.Checked); break; // Unsubscribe selected subscriber case "remove": SubscriberInfoProvider.DeleteSubscription(subscriberId, newsletterId, chkSendConfirmation.Checked); break; // Approve selected subscription case "approve": { SubscriberNewsletterInfo subscriptionInfo = SubscriberNewsletterInfoProvider.GetSubscriberNewsletterInfo(subscriberId, newsletterId); if ((subscriptionInfo != null) && (!subscriptionInfo.SubscriptionApproved)) { subscriptionInfo.SubscriptionApproved = true; subscriptionInfo.SubscriptionApprovedWhen = DateTime.Now; SubscriberNewsletterInfoProvider.SetSubscriberNewsletterInfo(subscriptionInfo); } } break; // Reject selected subscription case "reject": { SubscriberNewsletterInfo subscriptionInfo = SubscriberNewsletterInfoProvider.GetSubscriberNewsletterInfo(subscriberId, newsletterId); if ((subscriptionInfo != null) && (subscriptionInfo.SubscriptionApproved)) { subscriptionInfo.SubscriptionApproved = false; subscriptionInfo.SubscriptionApprovedWhen = DateTime.MinValue; SubscriberNewsletterInfoProvider.SetSubscriberNewsletterInfo(subscriptionInfo); } } break; } } /// /// Returns colored status of the subscription /// private string GetSubscriptionStatus(DataRowView rowView) { bool approved = ValidationHelper.GetBoolean(DataHelper.GetDataRowValue(rowView.Row, "SubscriptionApproved"), false); bool enabled = ValidationHelper.GetBoolean(DataHelper.GetDataRowValue(rowView.Row, "SubscriptionEnabled"), true); if (!approved && enabled) { return "" + ResHelper.GetString("administration.users_header.myapproval") + ""; } else if (approved && enabled) { return "" + ResHelper.GetString("general.approved") + ""; } else { return "" + ResHelper.GetString("newsletterview.headerunsubscribed") + ""; } } /// /// Handles multiple selector actions. /// protected void btnOk_Clicked(object sender, EventArgs e) { // Check permissions if (!CMSContext.CurrentUser.IsAuthorizedPerResource("cms.newsletter", "ManageSubscribers")) { RedirectToCMSDeskAccessDenied("cms.newsletter", "ManageSubscribers"); } // Return if no action was selected if (drpActions.SelectedValue.EqualsCSafe(SELECT, true)) { return; } // Get selected items List list = unigridNewsletters.SelectedItems; if (list.Count == 0) { ltlScript.Text += ScriptHelper.GetAlertScript(GetString("general.noitems")); return; } int newsletterId; SubscriberNewsletterInfo subscriptionInfo; foreach (string id in list) { newsletterId = ValidationHelper.GetInteger(id, 0); switch (drpActions.SelectedValue) { // Subscribe case SUBSCRIBE: SubscriberInfoProvider.RenewSubscription(subscriberId, newsletterId, chkSendConfirmation.Checked); break; // Unsubscribe case UNSUBSCRIBE: SubscriberInfoProvider.Unsubscribe(subscriberId, newsletterId, chkSendConfirmation.Checked); break; // Remove subscription case "REMOVE": SubscriberInfoProvider.DeleteSubscription(subscriberId, newsletterId, chkSendConfirmation.Checked); break; // Approve subscription case "APPROVE": subscriptionInfo = SubscriberNewsletterInfoProvider.GetSubscriberNewsletterInfo(subscriberId, newsletterId); if ((subscriptionInfo != null) && (!subscriptionInfo.SubscriptionApproved)) { subscriptionInfo.SubscriptionApproved = true; subscriptionInfo.SubscriptionApprovedWhen = DateTime.Now; SubscriberNewsletterInfoProvider.SetSubscriberNewsletterInfo(subscriptionInfo); } break; // Reject subscription case "REJECT": subscriptionInfo = SubscriberNewsletterInfoProvider.GetSubscriberNewsletterInfo(subscriberId, newsletterId); if ((subscriptionInfo != null) && (subscriptionInfo.SubscriptionApproved)) { subscriptionInfo.SubscriptionApproved = false; subscriptionInfo.SubscriptionApprovedWhen = DateTime.MinValue; SubscriberNewsletterInfoProvider.SetSubscriberNewsletterInfo(subscriptionInfo); } break; } } unigridNewsletters.ResetSelection(); unigridNewsletters.ReloadData(); } }