/// <summary>
    /// UIForm's OnAfterValidate event handler.
    /// </summary>
    protected void EditForm_OnAfterValidate(object sender, EventArgs e)
    {
        SubscriberInfo subscriberObj = EditedObject as SubscriberInfo;

        if (subscriberObj != null)
        {
            string emailNew     = ValidationHelper.GetString(EditForm.GetFieldValue("SubscriberEmail"), String.Empty);
            string emailCurrent = subscriberObj.SubscriberEmail;

            // Check email
            if (emailNew == string.Empty)
            {
                EditForm.StopProcessing = true;
                ShowError(GetString("Subscriber_Edit.ErrorEmptyEmail"));
            }
            else if ((emailNew.ToLowerCSafe() != emailCurrent.ToLowerCSafe()) && (SubscriberInfoProvider.EmailExists(emailNew)))
            {
                EditForm.StopProcessing = true;
                ShowError(GetString("Subscriber_Edit.EmailAlreadyExists"));
            }
        }
        else
        {
            EditForm.StopProcessing = true;
            ShowError(GetString("Subscriber_Edit.SubscriberDoesNotExists"));
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        IssueInfo issue = EditedObject as IssueInfo;

        if (issue == null)
        {
            RedirectToAccessDenied(GetString("general.invalidparameters"));
        }

        if (!issue.CheckPermissions(PermissionsEnum.Read, CurrentSiteName, CurrentUser))
        {
            RedirectToAccessDenied(issue.TypeInfo.ModuleName, "AuthorIssues");
        }

        Guid           subscriberGuid = QueryHelper.GetGuid("subscriberguid", Guid.Empty);
        SubscriberInfo subscriber     = SubscriberInfoProvider.GetSubscriberInfo(subscriberGuid, SiteContext.CurrentSiteID);

        using (var context = new CMSActionContext())
        {
            // Switch culture to the site culture, so the e-mail isn't rendered in the editor's culture
            string culture = CultureHelper.GetDefaultCultureCode(SiteContext.CurrentSiteName);
            context.Culture = CultureHelper.GetCultureInfo(culture);

            string htmlPage = NewsletterHelper.GetPreviewHTML(issue, subscriber);
            Response.Clear();
            Response.Write(htmlPage);
        }

        RequestHelper.EndResponse();
    }
    /// <summary>
    /// Gets and bulk updates subscribers. Called when the "Get and bulk update subscribers" button is pressed.
    /// Expects the CreateSubscriber method to be run first.
    /// </summary>
    private bool GetAndBulkUpdateSubscribers()
    {
        // Prepare the parameters
        string where = "SubscriberEmail LIKE N'[email protected]%'";

        // Get the data
        DataSet subscribers = SubscriberInfoProvider.GetSubscribers(where, null);

        if (!DataHelper.DataSourceIsEmpty(subscribers))
        {
            // Loop through the individual items
            foreach (DataRow subscriberDr in subscribers.Tables[0].Rows)
            {
                // Create object from DataRow
                SubscriberInfo modifySubscriber = new SubscriberInfo(subscriberDr);

                // Update the properties
                modifySubscriber.SubscriberFullName = modifySubscriber.SubscriberFullName.ToUpper();

                // Save the changes
                SubscriberInfoProvider.SetSubscriberInfo(modifySubscriber);
            }

            return(true);
        }

        return(false);
    }
Exemple #4
0
    /// <summary>
    /// Uniselector item selected event handler.
    /// </summary>
    protected void UniSelector_OnItemsSelected(object sender, EventArgs e)
    {
        // Check permissions
        if (!MembershipContext.AuthenticatedUser.IsAuthorizedPerResource("cms.newsletter", "ManageSubscribers"))
        {
            RedirectToAccessDenied("cms.newsletter", "ManageSubscribers");
        }

        // Get new items from selector
        string newValues = ValidationHelper.GetString(selectNewsletter.Value, null);

        string[] newItems = newValues.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

        // Get all selected newsletters
        foreach (string item in newItems)
        {
            int newsletterId = ValidationHelper.GetInteger(item, 0);

            // Get subscription
            SubscriberNewsletterInfo subscription = SubscriberNewsletterInfoProvider.GetSubscriberNewsletterInfo(mSubscriberId, newsletterId);

            // If not already subscribed
            if (subscription == null)
            {
                // Send confirmation only when subscriber is not Role or CG type and only when Double opt-in is enabled.
                SubscriberInfoProvider.Subscribe(mSubscriberId, newsletterId, DateTime.Now, chkSendConfirmation.Checked, !mIsMultipleSubscriber && chkRequireOptIn.Checked);
            }
        }

        selectNewsletter.Value = null;
        unigridNewsletters.ReloadData();
        pnlUpdate.Update();
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        // Check read permission
        ContactHelper.AuthorizedReadContact(CMSContext.CurrentSiteID, true);

        string siteName = CMSContext.CurrentSiteName;

        // Get bounce limit
        mBounceLimit = NewsletterHelper.BouncedEmailsLimit(siteName);
        // Get info if bounced e-mail tracking is available
        mBounceInfoAvailable = NewsletterHelper.MonitorBouncedEmails(siteName);

        // Check if parent object exist
        SubscriberInfo sb = SubscriberInfoProvider.GetSubscriberInfo(QueryHelper.GetInteger("subscriberid", 0));

        EditedObject = sb;

        // Initialize unigrid
        UniGrid.OnAction            += uniGrid_OnAction;
        UniGrid.OnExternalDataBound += uniGrid_OnExternalDataBound;
        UniGrid.WhereCondition       = "ContactID IN (SELECT ContactGroupMemberRelatedID FROM OM_ContactGroupMember WHERE ContactGroupMemberContactGroupID = "
                                       + QueryHelper.GetInteger("groupid", 0) + " AND ContactGroupMemberType = 0) AND ContactSiteID = " + CMSContext.CurrentSiteID
                                       + " AND ContactMergedWithContactID IS NULL";
        UniGrid.ShowObjectMenu = false;
    }
        private SubscriberInfo CreateSubscriber(
            string email,
            string firstName,
            string lastName,
            string fullName,
            ContactInfo contact)
        {
            var subscriberByEmail = SubscriberInfoProvider.GetSubscriberByEmail(email, _mSite.SiteID);

            if (subscriberByEmail != null)
            {
                return(subscriberByEmail);
            }

            var subscriber = new SubscriberInfo
            {
                SubscriberEmail     = email,
                SubscriberFirstName = firstName,
                SubscriberLastName  = lastName,
                SubscriberSiteID    = _mSite.SiteID,
                SubscriberFullName  = fullName,
                SubscriberRelatedID = contact.ContactID,
                SubscriberType      = "om.contact"
            };

            SubscriberInfoProvider.SetSubscriberInfo(subscriber);
            return(subscriber);
        }
    protected void OnBeforeSave(object sender, EventArgs e)
    {
        // Check license
        if (!SubscriberInfoProvider.LicenseVersionCheck(RequestContext.CurrentDomain, FeatureEnum.Subscribers, ObjectActionEnum.Insert))
        {
            NewForm.StopProcessing = true;

            ShowError(GetString("LicenseVersionCheck.Subscribers"));
        }

        // Set SiteID
        NewForm.Data.SetValue("SubscriberSiteID", SiteContext.CurrentSiteID);

        string firstName = ValidationHelper.GetString(NewForm.GetFieldValue("SubscriberFirstName"), string.Empty);
        string lastName  = ValidationHelper.GetString(NewForm.GetFieldValue("SubscriberLastName"), string.Empty);

        // Set full name
        NewForm.Data.SetValue("SubscriberFullName", string.Concat(firstName, " ", lastName));

        string email = ValidationHelper.GetString(NewForm.GetFieldValue("SubscriberEmail"), string.Empty);

        // Check email
        if (email == string.Empty)
        {
            NewForm.StopProcessing = true;

            ShowError(GetString("Subscriber_Edit.ErrorEmptyEmail"));
        }
        else if (SubscriberInfoProvider.EmailExists(email))
        {
            NewForm.StopProcessing = true;

            ShowError(GetString("Subscriber_Edit.EmailAlreadyExists"));
        }
    }
    /// <summary>
    /// Performs action on given subscriber.
    /// </summary>
    /// <param name="subscriberId">Id of subscriber</param>
    /// <param name="actionName">Name of action</param>
    private void DoSubscriberAction(int subscriberId, string actionName)
    {
        try
        {
            // Check manage subscribers permission
            var subscriber = SubscriberInfoProvider.GetSubscriberInfo(subscriberId);
            if (!subscriber.CheckPermissions(PermissionsEnum.Modify, SiteContext.CurrentSiteName, MembershipContext.AuthenticatedUser))
            {
                RedirectToAccessDenied(subscriber.TypeInfo.ModuleName, "ManageSubscribers");
            }

            switch (actionName.ToUpperInvariant())
            {
            // Subscribe
            case SUBSCRIBE:
                var subscription = SubscriberNewsletterInfoProvider.GetSubscriberNewsletterInfo(subscriberId, mNewsletter.NewsletterID);
                if ((subscription == null) || subscription.SubscriptionEnabled)
                {
                    return;
                }

                SubscriberInfoProvider.RenewSubscription(subscriberId, mNewsletter.NewsletterID, chkSendConfirmation.Checked);
                SubscriberNewsletterInfoProvider.SetApprovalStatus(subscriberId, mNewsletter.NewsletterID, !chkRequireOptIn.Checked);
                if (chkRequireOptIn.Checked)
                {
                    IssueInfoProvider.SendDoubleOptInEmail(subscriberId, mNewsletter.NewsletterID);
                }
                break;

            // Unsubscribe
            case UNSUBSCRIBE:
                SubscriberInfoProvider.Unsubscribe(subscriberId, mNewsletter.NewsletterID, chkSendConfirmation.Checked);
                break;

            // Remove subscription
            case REMOVE:
                SubscriberInfoProvider.DeleteSubscription(subscriberId, mNewsletter.NewsletterID, chkSendConfirmation.Checked);
                break;

            // Approve subscription
            case APPROVE:
                SubscriberNewsletterInfoProvider.ApproveSubscription(subscriberId, mNewsletter.NewsletterID);
                break;

            // Block selected subscriber
            case BLOCK:
                SubscriberInfoProvider.BlockSubscriber(subscriberId);
                break;

            // Un-block selected subscriber
            case UNBLOCK:
                SubscriberInfoProvider.UnblockSubscriber(subscriberId);
                break;
            }
        }
        catch (Exception e)
        {
            LogAndShowError("Newsletter subscriber", "NEWSLETTERS", e);
        }
    }
Exemple #9
0
            public void ConfirmSubscription_Hash_DateTime_SubscriptionIsConfirmed()
            {
                var email    = "a-guid-" + Guid.NewGuid() + "@domain.com";
                var dateTime = DateTime.Now;
                var contact  = GetContact(email);

                mNewsletterSubscriptionService.Subscribe(contact, mNewsletter, mNewsletterSubscriptionSettings);

                // Get the expected subscriber and binding to newsletter so that hash for their subscription confirmation can be faked
                // (the newsletters API allows to retrieve current hash, but not the corresponding timestamp which is necessary to pass the validation).
                var expectedSubscriber = SubscriberInfoProvider.GetSubscriberByEmail(email, mSite.SiteID);
                var confirmationHash   = SecurityHelper.GenerateConfirmationEmailHash(mNewsletter.NewsletterGUID + "|" + expectedSubscriber.SubscriberGUID, dateTime);

                var expectedSubscriberNewsletter = SubscriberNewsletterInfoProvider.GetSubscriberNewsletterInfo(expectedSubscriber.SubscriberID, mNewsletter.NewsletterID);

                expectedSubscriberNewsletter.SubscriptionApprovalHash = confirmationHash;
                SubscriberNewsletterInfoProvider.SetSubscriberNewsletterInfo(expectedSubscriberNewsletter);

                var approvalResult = mNewsletterSubscriptionService.ConfirmSubscription(expectedSubscriberNewsletter.SubscriptionApprovalHash, false, dateTime);

                // Retrieve the subscriber-newsletter binding again so that approval state can be validated
                expectedSubscriberNewsletter = SubscriberNewsletterInfoProvider.GetSubscriberNewsletterInfo(expectedSubscriber.SubscriberID, mNewsletter.NewsletterID);

                Assert.AreEqual(ApprovalResult.Success, approvalResult, "Subscription confirmation was not successful.");
                Assert.IsTrue(expectedSubscriberNewsletter.SubscriptionApproved, $"Subscription is not approved after confirmation.");
            }
    /// <summary>
    /// DataForm's OnAfterValidate event handler.
    /// </summary>
    protected void formCustomFields_OnAfterValidate(object sender, EventArgs e)
    {
        // Get subscriber's email
        FormEngineUserControl control = (FormEngineUserControl)formCustomFields.BasicForm.FieldControls["SubscriberEmail"];

        if (control != null)
        {
            string mail = ValidationHelper.GetString(control.Value, String.Empty).Trim();
            // Get original subscriber
            SubscriberInfo subscriberObj = SubscriberInfoProvider.GetSubscriberInfo(subscriberId);
            if (subscriberObj != null)
            {
                // Check the email changes
                if ((subscriberObj.SubscriberEmail.ToLowerCSafe() != mail.ToLowerCSafe()) && (SubscriberInfoProvider.EmailExists(mail)))
                {
                    // Show error message if the email address is already used by another subscriber
                    formCustomFields.BasicForm.StopProcessing = true;
                    ShowError(GetString("Subscriber_Edit.EmailAlreadyExists"));
                }
            }
            else
            {
                formCustomFields.BasicForm.StopProcessing = true;
                ShowError(GetString("Subscriber_Edit.SubscriberDoesNotExists"));
            }
        }
    }
Exemple #11
0
        /// <summary>
        /// Creates a subscriber object. If the subscriber with the given e-mail address already exists, returns the existing subscriber.
        /// </summary>
        /// <param name="email">Subscriber's e-mail address</param>
        /// <returns>Returns new subscriber object. If the subscriber with the given email already exists, returns the existing subscriber.</returns>
        private SubscriberInfo SaveSubscriber(string email)
        {
            // Gets information about subscriber based on email address and current site
            SubscriberInfo subscriber = SubscriberInfoProvider.GetSubscriberInfo(email, SiteId);

            if (subscriber == null)
            {
                // Creates new subscriber
                subscriber = new SubscriberInfo
                {
                    SubscriberEmail  = email,
                    SubscriberSiteID = SiteId
                };

                // Checks subscriber license limitation
                if (!SubscriberInfoProvider.LicenseVersionCheck(RequestContext.CurrentDomain, FeatureEnum.Subscribers, ObjectActionEnum.Insert))
                {
                    CoreServices.EventLog.LogEvent("W", "Newsletters", "SaveSubscriber", "Subscriber could not be added due to license limitations.");
                    return(null);
                }

                // Saves subscriber info
                SubscriberInfoProvider.SetSubscriberInfo(subscriber);
            }

            return(subscriber);
        }
    /// <summary>
    /// Logs activity for unsubscribing.
    /// </summary>
    /// <param name="sb">Subscriber (optional - can be null if subscriber ID is used)</param>
    /// <param name="subscriberId">Subscriber ID (optional - can be zero if subscriber object is used)</param>
    /// <param name="newsletterId">Newsletter ID</param>
    /// <param name="issueId">Issue ID</param>
    /// <param name="contactId">Contact ID is present if the mail is sent to a contact or a contact group</param>
    private void LogActivity(SubscriberInfo sb, int subscriberId, int newsletterId, int issueId, int contactId)
    {
        bool isFromContactGroup = !string.IsNullOrEmpty(sb.SubscriberType) && sb.SubscriberType.EqualsCSafe(PredefinedObjectType.CONTACTGROUP, true);

        if (contactId <= 0)
        {
            contactId = ActivityTrackingHelper.GetContactID(sb);
        }

        if (sb == null)
        {
            sb = SubscriberInfoProvider.GetSubscriberInfo(subscriberId);
        }

        if (contactId > 0)
        {
            NewsletterInfo news = NewsletterInfoProvider.GetNewsletterInfo(newsletterId);

            Activity activity = new ActivityNewsletterUnsubscribing(sb, news, CMSContext.ActivityEnvironmentVariables);
            if (activity.Data != null)
            {
                activity.Data.ContactID    = contactId;
                activity.Data.ItemDetailID = issueId;
                activity.Data.Value        = isFromContactGroup ? "contactgroup(" + sb.SubscriberRelatedID + ")" : null;
                activity.Log();
            }
        }
    }
Exemple #13
0
    /// <summary>
    /// Performs action on given subscriber.
    /// </summary>
    /// <param name="subscriberId">Id of subscriber</param>
    /// <param name="actionName">Name of action</param>
    private void DoSubscriberAction(int subscriberId, string actionName)
    {
        try
        {
            // Check manage subscribers permission
            var subscriber = SubscriberInfoProvider.GetSubscriberInfo(subscriberId);
            if (!subscriber.CheckPermissions(PermissionsEnum.Modify, SiteContext.CurrentSiteName, MembershipContext.AuthenticatedUser))
            {
                RedirectToAccessDenied(subscriber.TypeInfo.ModuleName, "ManageSubscribers");
            }

            switch (actionName.ToUpperInvariant())
            {
                // Remove subscription
                case REMOVE:
                    mSubscriptionService.RemoveSubscription(subscriberId, mNewsletter.NewsletterID, false);
                    break;

                // Approve subscription
                case APPROVE:
                    SubscriberNewsletterInfoProvider.ApproveSubscription(subscriberId, mNewsletter.NewsletterID);
                    break;
            }
        }
        catch (Exception exception)
        {
            LogAndShowError("Newsletter subscriber", "NEWSLETTERS", exception);
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        string currentSubscriber = GetString("Subscriber_Edit.NewItemCaption");

        // Get subscriber id from querystring
        subscriberId = QueryHelper.GetInteger("subscriberid", 0);

        // Get subscriber object
        SubscriberInfo subscriberObj = SubscriberInfoProvider.GetSubscriberInfo(subscriberId);

        if (subscriberObj != null)
        {
            if (!DataHelper.IsEmpty(subscriberObj.SubscriberEmail))
            {
                // Get e-mail for breadcrumbs
                currentSubscriber = subscriberObj.SubscriberEmail;
            }
            else
            {
                string type = null;
                switch (subscriberObj.SubscriberType)
                {
                case SiteObjectType.USER:
                    type = GetString("objecttype.cms_user");
                    break;

                case SiteObjectType.ROLE:
                    type = GetString("objecttype.cms_role");
                    break;

                case PredefinedObjectType.CONTACTGROUP:
                    type = GetString("objecttype.om_contactgroup");
                    break;

                case PredefinedObjectType.CONTACT:
                    type = GetString("objecttype.om_contact");
                    break;
                }

                // Get first, last names and type for breadcrumbs
                currentSubscriber = string.Format("{0} ({1})", string.Concat(subscriberObj.SubscriberFirstName, " ", subscriberObj.SubscriberLastName), type.ToLowerCSafe());
            }
        }

        // Initializes page title
        string[,] breadcrumbs = new string[2, 3];
        breadcrumbs[0, 0]     = GetString("Subscriber_Edit.ItemListLink");
        breadcrumbs[0, 1]     = "~/CMSModules/Newsletters/Tools/Subscribers/Subscriber_List.aspx";
        breadcrumbs[0, 2]     = "newslettersContent";
        breadcrumbs[1, 0]     = currentSubscriber;

        CurrentMaster.Title.Breadcrumbs = breadcrumbs;

        // Initialize tabs
        InitalizeMenu(subscriberObj);
    }
    /// <summary>
    /// Deletes subscriber. Called when the "Delete subscriber" button is pressed.
    /// Expects the CreateSubscriber method to be run first.
    /// </summary>
    private bool DeleteSubscriber()
    {
        // Get the subscriber
        SubscriberInfo deleteSubscriber = SubscriberInfoProvider.GetSubscriberInfo("*****@*****.**", SiteContext.CurrentSiteID);

        // Delete the subscriber
        SubscriberInfoProvider.DeleteSubscriberInfo(deleteSubscriber);

        return(deleteSubscriber != null);
    }
Exemple #16
0
    private SubscriberInfo GetSubscriber()
    {
        var sb = SubscriberInfoProvider.GetSubscriberInfo(email, siteId);

        if (sb == null)
        {
            sb = SubscriberInfoProvider.GetSubscriberInfo(PredefinedObjectType.USER, customerUserId, siteId);
        }

        return(sb);
    }
    /// <summary>
    /// Unigrid newsletters action handler.
    /// </summary>
    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;
        }
    }
    /// <summary>
    /// Sets data to database.
    /// </summary>
    protected void btnOK_Click(object sender, EventArgs e)
    {
        // Check "Manage subscribers" permission
        if (!CMSContext.CurrentUser.IsAuthorizedPerResource("cms.newsletter", "managesubscribers"))
        {
            RedirectToCMSDeskAccessDenied("cms.newsletter", "managesubscribers");
        }

        string email = txtSubscriberEmail.Text.Trim();

        // Check entered values
        string errorMessage = new Validator().NotEmpty(email, GetString("Subscriber_Edit.ErrorEmptyEmail"))
                              .IsEmail(email, GetString("NewsletterSubscription.ErrorInvalidEmail"))
                              .Result;

        if (string.IsNullOrEmpty(errorMessage))
        {
            if (!SubscriberInfoProvider.EmailExists(email))
            {
                // Create new subscriber info and set values
                SubscriberInfo subscriberObj = new SubscriberInfo();

                subscriberObj.SubscriberID        = 0;
                subscriberObj.SubscriberLastName  = txtSubscriberLastName.Text.Trim();
                subscriberObj.SubscriberEmail     = email;
                subscriberObj.SubscriberFirstName = txtSubscriberFirstName.Text.Trim();
                subscriberObj.SubscriberFullName  = (subscriberObj.SubscriberFirstName + " " + subscriberObj.SubscriberLastName).Trim();
                subscriberObj.SubscriberSiteID    = CMSContext.CurrentSiteID;
                subscriberObj.SubscriberGUID      = Guid.NewGuid();

                if (SubscriberInfoProvider.LicenseVersionCheck(URLHelper.GetCurrentDomain(), FeatureEnum.Subscribers, VersionActionEnum.Insert))
                {
                    // Save subscriber to DB
                    SubscriberInfoProvider.SetSubscriberInfo(subscriberObj);
                    // Redirect to edit page
                    URLHelper.Redirect("Subscriber_Frameset.aspx?subscriberid=" + Convert.ToString(subscriberObj.SubscriberID) + "&saved=1");
                }
                else
                {
                    ShowError(GetString("LicenseVersionCheck.Subscribers"));
                }
            }
            else
            {
                ShowError(GetString("Subscriber_Edit.EmailAlreadyExists"));
            }
        }
        else
        {
            ShowError(errorMessage);
        }
    }
Exemple #19
0
            public void Subscribe_Contact_ContactIsSubscribed()
            {
                var email   = "a-guid-" + Guid.NewGuid() + "@domain.com";
                var contact = GetContact(email);

                var result             = mNewsletterSubscriptionService.Subscribe(contact, mNewsletter, mNewsletterSubscriptionSettings);
                var expectedSubscriber = SubscriberInfoProvider.GetSubscriberByEmail(email, mSite.SiteID);

                CMSAssert.All(
                    () => Assert.IsTrue(result, "New subscription is expected."),
                    () => Assert.NotNull(expectedSubscriber, $"No subscriber for email '{email}' was created.")
                    );
            }
Exemple #20
0
            public void ConfirmSubscription_SubscriptionIsNotConfirmedByDefault()
            {
                var email   = "a-guid-" + Guid.NewGuid() + "@domain.com";
                var contact = GetContact(email);

                mNewsletterSubscriptionService.Subscribe(contact, mNewsletter, mNewsletterSubscriptionSettings);

                var expectedSubscriber = SubscriberInfoProvider.GetSubscriberByEmail(email, mSite.SiteID);

                var expectedSubscriberNewsletter = SubscriberNewsletterInfoProvider.GetSubscriberNewsletterInfo(expectedSubscriber.SubscriberID, mNewsletter.NewsletterID);

                Assert.IsFalse(expectedSubscriberNewsletter.SubscriptionApproved, $"Subscription must not be approved when double opt-in is enabled.");
            }
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        string email  = txtEmail.Text.Trim();
        string result = new Validator().IsEmail(email, GetString("unsubscribe.invalidemailformat")).Result;

        if (String.IsNullOrEmpty(result))
        {
            bool requestSent = false;
            var  site        = SiteContext.CurrentSite;

            var newsletter = NewsletterInfoProvider.GetNewsletterInfo(NewsletterName, site.SiteID);
            if (newsletter != null)
            {
                var unsubscriptionProvider = Service <IUnsubscriptionProvider> .Entry();

                if (!unsubscriptionProvider.IsUnsubscribedFromSingleNewsletter(email, newsletter.NewsletterID, newsletter.NewsletterSiteID))
                {
                    var subscriber = SubscriberInfoProvider.GetSubscriberByEmail(email, site.SiteID);
                    if (subscriber != null)
                    {
                        SendUnsubscriptionRequest(subscriber, newsletter, site.SiteName);
                        requestSent = true;
                    }
                }
            }

            // Unsubscription failed if none confirmation e-mail was sent
            if (!requestSent)
            {
                // Use default error message if none is specified
                result = String.IsNullOrEmpty(ErrorText) ? GetString("unsubscribe.notsubscribed") : ErrorText;
            }
        }

        // Display error message if set
        if (!string.IsNullOrEmpty(result))
        {
            lblError.Text    = result;
            lblError.Visible = true;
        }
        else
        {
            // Display unsubscription confirmation
            lblInfo.Visible   = true;
            lblInfo.Text      = String.IsNullOrEmpty(ResultText) ? GetString("unsubscribe.confirmtext") : ResultText;
            lblError.Visible  = false;
            txtEmail.Visible  = false;
            btnSubmit.Visible = false;
        }
    }
    /// <summary>
    /// Creates and sends unsubscription e-mail.
    /// </summary>
    /// <param name="subscriber">Subscriber object</param>
    /// <param name="news">Newsletter object</param>
    /// <param name="subscription">Subscription object</param>
    /// <param name="siteName">Site name</param>
    protected void SendUnsubscriptionRequest(SubscriberInfo subscriber, NewsletterInfo news, SubscriberNewsletterInfo subscription, string siteName)
    {
        // Get global e-mail template with unsubscription request
        EmailTemplateInfo et = EmailTemplateProvider.GetEmailTemplate("newsletter.unsubscriptionrequest", siteName);

        if (et != null)
        {
            // Get subscriber member
            SortedDictionary <int, SubscriberInfo> subscribers = SubscriberInfoProvider.GetSubscribers(subscriber, 1, 0);
            foreach (KeyValuePair <int, SubscriberInfo> item in subscribers)
            {
                // Get 1st subscriber's member
                SubscriberInfo sb = item.Value;

                string body      = et.TemplateText;
                string plainBody = et.TemplatePlainText;

                // Resolve newsletter macros (first name, last name etc.)
                IssueHelper ih = new IssueHelper();
                if (ih.LoadDynamicFields(sb, news, subscription, null, false, siteName, null, null, null))
                {
                    body      = ih.ResolveDynamicFieldMacros(body);
                    plainBody = ih.ResolveDynamicFieldMacros(plainBody);
                }

                // Create e-mail
                EmailMessage msg = new EmailMessage();
                msg.EmailFormat   = EmailFormatEnum.Default;
                msg.From          = EmailHelper.GetSender(et, news.NewsletterSenderEmail);
                msg.Recipients    = sb.SubscriberEmail;
                msg.BccRecipients = et.TemplateBcc;
                msg.CcRecipients  = et.TemplateCc;
                msg.Subject       = ResHelper.LocalizeString(et.TemplateSubject);
                msg.Body          = URLHelper.MakeLinksAbsolute(body);
                msg.PlainTextBody = URLHelper.MakeLinksAbsolute(plainBody);

                // Add attachments and send e-mail
                MetaFileInfoProvider.ResolveMetaFileImages(msg, et.TemplateID, EmailObjectType.EMAILTEMPLATE, MetaFileInfoProvider.OBJECT_CATEGORY_TEMPLATE);

                EmailSender.SendEmail(siteName, msg);
            }
        }
        else
        {
            // Log missing template
            EventLogProvider ev = new EventLogProvider();
            ev.LogEvent(EventLogProvider.EVENT_TYPE_ERROR, DateTime.Now, "UnsubscriptionRequest", "Unsubscription request e-mail template is missing.");
        }
    }
    /// <summary>
    /// Performs action on given subscriber.
    /// </summary>
    /// <param name="subscriberId">Id of subscriber</param>
    /// <param name="actionName">Name of action</param>
    private void DoSubscriberAction(int subscriberId, string actionName)
    {
        try
        {
            // Check manage subscribers permission
            var subscriber = SubscriberInfoProvider.GetSubscriberInfo(subscriberId);
            if (!subscriber.CheckPermissions(PermissionsEnum.Modify, SiteContext.CurrentSiteName, MembershipContext.AuthenticatedUser))
            {
                RedirectToAccessDenied(subscriber.TypeInfo.ModuleName, "ManageSubscribers");
            }

            Func <bool> subscriberIsUserAndIsDisabled = () =>
            {
                var user = GetSubscriberUser(subscriber);
                return((user != null) && !user.UserEnabled);
            };

            switch (actionName.ToUpperInvariant())
            {
            // Remove subscription
            case REMOVE:
                mSubscriptionService.RemoveSubscription(subscriberId, mNewsletter.NewsletterID, chkSendConfirmation.Checked);
                break;

            // Approve subscription
            case APPROVE:
                if (subscriberIsUserAndIsDisabled())
                {
                    return;
                }
                SubscriberNewsletterInfoProvider.ApproveSubscription(subscriberId, mNewsletter.NewsletterID);
                break;

            // Block selected subscriber
            case BLOCK:
                SubscriberInfoProvider.BlockSubscriber(subscriberId);
                break;

            // Un-block selected subscriber
            case UNBLOCK:
                SubscriberInfoProvider.UnblockSubscriber(subscriberId);
                break;
            }
        }
        catch (Exception exception)
        {
            LogAndShowError("Newsletter subscriber", "NEWSLETTERS", exception);
        }
    }
    /// <summary>
    /// Subscribes subscriber to a newsletter. Called when the "Unsubscribe from newsletter" button is pressed.
    /// Expects the CreateSubscriber method to be run first.
    /// </summary>
    private bool UnsubscribeFromNewsletter()
    {
        // Get the subscriber and newsletter
        SubscriberInfo subscriber = SubscriberInfoProvider.GetSubscriberInfo("*****@*****.**", SiteContext.CurrentSiteID);
        NewsletterInfo newsletter = NewsletterInfoProvider.GetNewsletterInfo("MyNewStaticNewsletter", SiteContext.CurrentSiteID);

        if ((subscriber != null) && (newsletter != null))
        {
            // Unubscribe from 'My new static newsletter'
            SubscriberInfoProvider.Unsubscribe(subscriber.SubscriberID, newsletter.NewsletterID);

            return(true);
        }

        return(false);
    }
    /// <summary>
    /// Subscribes subscriber to a newsletter. Called when the "Subscribe to newsletter" button is pressed.
    /// Expects the CreateSubscriber method to be run first.
    /// </summary>
    private bool SubscribeToNewsletter()
    {
        // Get the subscriber and newsletter
        SubscriberInfo subscriber = SubscriberInfoProvider.GetSubscriberInfo("*****@*****.**", CMSContext.CurrentSiteID);
        NewsletterInfo newsletter = NewsletterInfoProvider.GetNewsletterInfo("MyNewStaticNewsletter", CMSContext.CurrentSiteID);

        if ((subscriber != null) && (newsletter != null))
        {
            // Subscribe to 'My new static newsletter'
            SubscriberInfoProvider.Subscribe(subscriber.SubscriberID, newsletter.NewsletterID, DateTime.Now);

            return(true);
        }

        return(false);
    }
    /// <summary>
    /// Uniselector item selected event handler.
    /// </summary>
    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();
    }
    /// <summary>
    /// Handles export button click.
    /// </summary>
    /// <param name="sender">Sender</param>
    /// <param name="e">Event arguments</param>
    protected void btnExport_Click(object sender, EventArgs e)
    {
        // Check "manage subscribers" permission
        if (!CMSContext.CurrentUser.IsAuthorizedPerResource("cms.newsletter", "managesubscribers"))
        {
            RedirectToCMSDeskAccessDenied("cms.newsletter", "managesubscribers");
        }

        // Get selected newsletters
        List <int> newsletterIds = new List <int>();
        string     values        = ValidationHelper.GetString(usNewsletters.Value, null);

        if (!String.IsNullOrEmpty(values))
        {
            string[] newItems = values.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
            if (newItems != null)
            {
                foreach (string item in newItems)
                {
                    newsletterIds.Add(ValidationHelper.GetInteger(item, 0));
                }
            }
        }

        // Export subscribers
        string subscribers = null;

        if (CMSContext.CurrentSite != null)
        {
            subscribers = SubscriberInfoProvider.ExportSubscribersFromSite(newsletterIds, CMSContext.CurrentSiteID, true, ValidationHelper.GetInteger(rblExportList.SelectedValue, 0));
        }

        // No subscribers exported
        if (string.IsNullOrEmpty(subscribers))
        {
            ShowInformation(GetString("Subscriber_Export.noSubscribersExported"));
            txtExportSub.Enabled = false;
        }
        else
        {
            ShowInformation(GetString("Subscriber_Export.subscribersExported"));
            txtExportSub.Enabled = true;
        }

        txtExportSub.Text = subscribers;
    }
    /// <summary>
    /// DataForm's OnAfterSave event handler.
    /// </summary>
    protected void formCustomFields_OnAfterSave(object sender, EventArgs e)
    {
        if (!formCustomFields.BasicForm.StopProcessing)
        {
            // Save with provider to log synchronization
            SubscriberInfo subscriberObj = SubscriberInfoProvider.GetSubscriberInfo(subscriberId);
            EditedObject = subscriberObj;

            subscriberObj.SubscriberFullName = (subscriberObj.SubscriberFirstName + " " + subscriberObj.SubscriberLastName).Trim();
            SubscriberInfoProvider.SetSubscriberInfo(subscriberObj);

            ShowChangesSaved();

            // Refresh header with display name
            ScriptHelper.RefreshTabHeader(Page, null);
        }
    }
    /// <summary>
    /// Creates subscriber. Called when the "Create subscriber" button is pressed.
    /// </summary>
    private bool CreateSubscriber()
    {
        // Create new subscriber object
        SubscriberInfo newSubscriber = new SubscriberInfo();

        // Set the properties
        newSubscriber.SubscriberFirstName = "Name";
        newSubscriber.SubscriberLastName  = "Surname";
        newSubscriber.SubscriberFullName  = "Name Surname";
        newSubscriber.SubscriberEmail     = "*****@*****.**";
        newSubscriber.SubscriberSiteID    = SiteContext.CurrentSiteID;

        // Save the subscriber
        SubscriberInfoProvider.SetSubscriberInfo(newSubscriber);

        return(true);
    }
    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));
        }
    }