protected object UniGrid_OnExternalDataBound(object sender, string sourceName, object parameter)
    {
        DataRowView row = (DataRowView)parameter;
        int         subscriberId;

        switch (sourceName)
        {
        case "name":
            subscriberId = ValidationHelper.GetInteger(DataHelper.GetDataRowValue(row.Row, "SubscriberID"), 0);
            if (subscriberId == 0)
            {
                // Get full name for contact group member (contact)
                string name = ValidationHelper.GetString(DataHelper.GetDataRowValue(row.Row, "SubscriberFullName"), string.Empty);

                // Return encoded name
                return(HTMLHelper.HTMLEncode(name));
            }
            else
            {
                // Add the field transformation control that handles the translation
                var tr = new ObjectTransformation("newsletter.subscriber", subscriberId);
                tr.Transformation = "SubscriberFullName";

                return(tr);
            }

        case "email":
            subscriberId = ValidationHelper.GetInteger(DataHelper.GetDataRowValue(row.Row, "SubscriberID"), 0);
            string email = null;
            if (subscriberId == 0)
            {
                // Get email for contact group member (contact)
                email = ValidationHelper.GetString(DataHelper.GetDataRowValue(row.Row, "SubscriberEmail"), string.Empty);
            }
            else
            {
                SubscriberInfo subscriber = SubscriberInfoProvider.GetSubscriberInfo(subscriberId);
                if (subscriber != null)
                {
                    if (subscriber.SubscriberType == null)
                    {
                        // Get email for classic subscriber
                        email = subscriber.SubscriberEmail;
                    }
                    else
                    {
                        switch (subscriber.SubscriberType)
                        {
                        case UserInfo.OBJECT_TYPE:
                            UserInfo user = UserInfoProvider.GetUserInfo(subscriber.SubscriberRelatedID);
                            if (user != null)
                            {
                                // Get email for user subscriber
                                email = user.Email;
                            }
                            break;

                        case PredefinedObjectType.CONTACT:
                            DataSet ds = ModuleCommands.OnlineMarketingGetContactForNewsletters(subscriber.SubscriberRelatedID, "ContactEmail");
                            if (!DataHelper.DataSourceIsEmpty(ds))
                            {
                                // Get email from contact subscriber
                                email = ValidationHelper.GetString(ds.Tables[0].Rows[0]["ContactEmail"], string.Empty);
                            }
                            break;
                        }
                    }
                }
            }

            if (!string.IsNullOrEmpty(email))
            {
                // Return encoded email
                email = HTMLHelper.HTMLEncode(email);
            }

            return(email);

        default:
            return(parameter);
        }
    }
    protected object UniGrid_OnExternalDataBound(object sender, string sourceName, object parameter)
    {
        DataRowView row = null;

        if (parameter is DataRowView)
        {
            row = (DataRowView)parameter;
        }
        int subscriberId = 0;

        switch (sourceName)
        {
        case "name":
            subscriberId = ValidationHelper.GetInteger(DataHelper.GetDataRowValue(row.Row, "SubscriberID"), 0);
            string name = null;
            if (subscriberId == 0)
            {
                // Get full name for contact group member (contact)
                name = ValidationHelper.GetString(DataHelper.GetDataRowValue(row.Row, "SubscriberFullName"), string.Empty);

                // Return encoded name
                return(HTMLHelper.HTMLEncode(name));
            }
            else
            {
                // Add the field transformation control that handles the translation
                var tr = new ObjectTransformation("newsletter.subscriber", subscriberId);
                tr.Transformation = "SubscriberFullName";

                return(tr);
            }

        case "email":
            subscriberId = ValidationHelper.GetInteger(DataHelper.GetDataRowValue(row.Row, "SubscriberID"), 0);
            string email = null;
            if (subscriberId == 0)
            {
                // Get email for contact group member (contact)
                email = ValidationHelper.GetString(DataHelper.GetDataRowValue(row.Row, "SubscriberEmail"), string.Empty);
            }
            else
            {
                SubscriberInfo subscriber = SubscriberInfoProvider.GetSubscriberInfo(subscriberId);
                if (subscriber != null)
                {
                    if (subscriber.SubscriberType == null)
                    {
                        // Get email for classic subscriber
                        email = subscriber.SubscriberEmail;
                    }
                    else
                    {
                        switch (subscriber.SubscriberType)
                        {
                        case PredefinedObjectType.USER:
                            UserInfo user = UserInfoProvider.GetUserInfo(subscriber.SubscriberRelatedID);
                            if (user != null)
                            {
                                // Get email for user subscriber
                                email = user.Email;
                            }
                            break;

                        case PredefinedObjectType.CONTACT:
                            DataSet ds = ModuleCommands.OnlineMarketingGetContactForNewsletters(subscriber.SubscriberRelatedID, "ContactEmail");
                            if (!DataHelper.DataSourceIsEmpty(ds))
                            {
                                // Get email from contact subscriber
                                email = ValidationHelper.GetString(ds.Tables[0].Rows[0]["ContactEmail"], string.Empty);
                            }
                            break;
                        }
                    }
                }
            }

            if (!string.IsNullOrEmpty(email))
            {
                // Return encoded email
                email = HTMLHelper.HTMLEncode(email);
            }

            return(email);

        case "variantname":
            if (!isMainABTestIssue)
            {
                return(null);
            }

            IssueInfo issue       = IssueInfoProvider.GetIssueInfo(ValidationHelper.GetInteger(parameter, 0));
            string    variantName = null;

            if (issue != null)
            {
                if (!issue.IssueIsVariant)
                {
                    // Get varinat name from the winner issue
                    if (winnerIssue == null)
                    {
                        ABTestInfo test = ABTestInfoProvider.GetABTestInfoForIssue(issue.IssueID);
                        if (test != null)
                        {
                            // Get A/B test winner variant
                            winnerIssue = IssueInfoProvider.GetIssueInfo(test.TestWinnerIssueID);
                        }
                    }

                    if (winnerIssue != null)
                    {
                        // Get variant name
                        variantName = winnerIssue.IssueVariantName;
                    }
                }
                else
                {
                    // Get variant name
                    variantName = issue.IssueVariantName;
                }
            }

            return(variantName);

        default:
            return(parameter);
        }
    }
    /// <summary>
    /// Contact items selected event handler.
    /// </summary>
    protected void ContactSelector_OnItemsSelected(object sender, EventArgs e)
    {
        // Check permissions
        CheckAuthorization();

        if (cSelector == null)
        {
            return;
        }
        int siteId = SiteContext.CurrentSiteID;

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

        // Get added items
        string[] newItems = newValues.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
        foreach (string item in newItems)
        {
            // Check limited number of subscribers
            if (!SubscriberInfoProvider.LicenseVersionCheck(RequestContext.CurrentDomain, FeatureEnum.Subscribers, ObjectActionEnum.Insert))
            {
                ShowError(GetString("licenselimitations.subscribers.errormultiple"));
                break;
            }

            // Get contact ID
            int contactID = ValidationHelper.GetInteger(item, 0);

            // Try to get subscriber
            SubscriberInfo subscriber = SubscriberInfoProvider.GetSubscriberInfo(PredefinedObjectType.CONTACT, contactID, siteId);
            if (subscriber == null)
            {
                // Get contact's info
                DataSet contactData = ModuleCommands.OnlineMarketingGetContactForNewsletters(contactID, "ContactFirstName,ContactMiddleName,ContactLastName,ContactEmail");
                if (DataHelper.DataSourceIsEmpty(contactData))
                {
                    continue;
                }

                string firstName  = ValidationHelper.GetString(contactData.Tables[0].Rows[0]["ContactFirstName"], string.Empty);
                string lastName   = ValidationHelper.GetString(contactData.Tables[0].Rows[0]["ContactLastName"], string.Empty);
                string middleName = ValidationHelper.GetString(contactData.Tables[0].Rows[0]["ContactMiddleName"], string.Empty);
                string email      = ValidationHelper.GetString(contactData.Tables[0].Rows[0]["ContactEmail"], string.Empty);

                // Create new subscriber of contact type
                subscriber = new SubscriberInfo();
                subscriber.SubscriberFirstName = firstName;
                subscriber.SubscriberLastName  = lastName;
                subscriber.SubscriberEmail     = email;
                subscriber.SubscriberFullName  = new SubscriberFullNameFormater().GetContactSubscriberName(firstName, middleName, lastName);
                subscriber.SubscriberSiteID    = siteId;
                subscriber.SubscriberType      = PredefinedObjectType.CONTACT;
                subscriber.SubscriberRelatedID = contactID;

                CheckPermissionsForSubscriber(subscriber);

                SubscriberInfoProvider.SetSubscriberInfo(subscriber);
            }

            if (!mSubscriptionService.IsSubscribed(subscriber.SubscriberID, mNewsletter.NewsletterID))
            {
                mSubscriptionService.Subscribe(subscriber.SubscriberID, mNewsletter.NewsletterID, new SubscribeSettings()
                {
                    SendConfirmationEmail = chkSendConfirmation.Checked,
                    RequireOptIn          = chkRequireOptIn.Checked,
                    RemoveAlsoUnsubscriptionFromAllNewsletters = false,
                });
            }
        }

        cSelector.Value = null;
        UniGridSubscribers.ReloadData();
        pnlUpdate.Update();
    }
    /// <summary>
    /// Contact items selected event handler.
    /// </summary>
    protected void ContactSelector_OnItemsSelected(object sender, EventArgs e)
    {
        // Check permissions
        CheckAuthorization();

        if (cSelector == null)
        {
            return;
        }
        int contactID = 0;

        string[]       newItems    = null;
        SubscriberInfo sb          = null;
        int            siteId      = CMSContext.CurrentSiteID;
        string         cType       = PredefinedObjectType.CONTACT;
        DataSet        contactData = null;

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

        // Get added items
        newItems = newValues.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
        if (newItems != null)
        {
            foreach (string item in newItems)
            {
                // Check limited number of subscribers
                if (!SubscriberInfoProvider.LicenseVersionCheck(URLHelper.GetCurrentDomain(), FeatureEnum.Subscribers, VersionActionEnum.Insert))
                {
                    ShowError(GetString("licenselimitations.subscribers.errormultiple"));
                    break;
                }

                // Get contact ID
                contactID = ValidationHelper.GetInteger(item, 0);

                // Try to get subscriber
                sb = SubscriberInfoProvider.GetSubscriberInfo(cType, contactID, siteId);
                if (sb == null)
                {
                    // Get contact's info
                    contactData = ModuleCommands.OnlineMarketingGetContactForNewsletters(contactID, "ContactFirstName,ContactMiddleName,ContactLastName");
                    if (DataHelper.DataSourceIsEmpty(contactData))
                    {
                        continue;
                    }

                    string firstName  = ValidationHelper.GetString(contactData.Tables[0].Rows[0]["ContactFirstName"], string.Empty);
                    string lastName   = ValidationHelper.GetString(contactData.Tables[0].Rows[0]["ContactLastName"], string.Empty);
                    string middleName = ValidationHelper.GetString(contactData.Tables[0].Rows[0]["ContactMiddleName"], string.Empty);

                    // Create new subscriber of contact type
                    sb = new SubscriberInfo();
                    sb.SubscriberFirstName = firstName;
                    sb.SubscriberLastName  = lastName;
                    sb.SubscriberFullName  = string.Format("Contact '{0}{1}{2}'", string.IsNullOrEmpty(firstName) ? string.Empty : firstName + " ", string.IsNullOrEmpty(middleName) ? string.Empty : middleName + " ", lastName);
                    sb.SubscriberSiteID    = siteId;
                    sb.SubscriberType      = cType;
                    sb.SubscriberRelatedID = contactID;
                    SubscriberInfoProvider.SetSubscriberInfo(sb);
                }

                // If subscriber exists and is not subscribed, subscribe him
                if ((sb != null) && (!SubscriberInfoProvider.IsSubscribed(sb.SubscriberID, newsletterId)))
                {
                    try
                    {
                        SubscriberInfoProvider.Subscribe(sb.SubscriberID, newsletterId, DateTime.Now, chkSendConfirmation.Checked, chkRequireOptIn.Checked);
                    }
                    catch
                    {
                    }
                }
            }
        }

        cSelector.Value = null;
        UniGridSubscribers.ReloadData();
        pnlUpdate.Update();
    }