/// <summary>
        /// Gets the Mailchimp list id from the provided <see cref="ConnectorFormDataContext"/>.
        /// </summary>
        /// <param name="dataContext">The data context around the submitted form fields.</param>
        /// <returns>The Mailchimp list id.</returns>
        protected virtual string GetListId(ConnectorFormDataContext dataContext)
        {
            if (dataContext == null)
            {
                throw new ArgumentNullException("dataContext");
            }

            string        formFieldName = dataContext.FormDescriptionAttributeSettings[MailchimpFormsConnectorDefinitionsExtender.MailchimpListNameFieldName];
            MailchimpList list          = this.mailchimpListsClient.GetLists().FirstOrDefault(f => f.Name == formFieldName);

            return(list.Id);
        }
        /// <inheritdoc/>
        public bool ShouldSendFormData(ConnectorFormDataContext dataContext)
        {
            bool shouldPostDataToMailchimp = bool.Parse(dataContext.WidgetDesignerSettings[MailchimpFormsConnectorDesignerExtender.PostDataToMailchimpPropertyName]);

            if (!shouldPostDataToMailchimp)
            {
                return(false);
            }

            string formName = dataContext.FormDescriptionAttributeSettings[MailchimpFormsConnectorDefinitionsExtender.MailchimpListNameFieldName];

            if (string.IsNullOrWhiteSpace(formName))
            {
                return(false);
            }

            return(true);
        }
        /// <inheritdoc/>
        public void SendFormData(IDictionary <string, string> data, ConnectorFormDataContext dataContext)
        {
            try
            {
                string listId = this.GetListId(dataContext);

                string email = data[FieldNameConstants.Email];
                data.Remove(FieldNameConstants.Email);

                data = this.ReplaceKeysWithMergeFieldTags(listId, data);

                MailchimpListMember mailchimpListMember = new MailchimpListMember();
                mailchimpListMember.Email       = email;
                mailchimpListMember.MergeFields = data;
                mailchimpListMember.Status      = SubscriberStatus.Subscribed;

                this.mailchimpListsClient.CreateMember(listId, mailchimpListMember);
            }
            catch (Exception ex)
            {
                Log.Write(ex, TraceEventType.Error);
            }
        }