Exemplo n.º 1
0
        public void GetMailrelaySubscribersAlwaysIncludeGroups()
        {
            Subscriber          subscriber = new Subscriber(_mailrelayConnection);
            getSubscribersReply reply      = subscriber.GetMailrelaySubscribers("*****@*****.**");

            Assert.AreEqual(1, reply.groups.Count);
        }
Exemplo n.º 2
0
        public MailrelayBoolReply UpdateFromReply(getSubscribersReply replyToUpdate)
        {
            updateSubscriber update = new updateSubscriber()
            {
                customFields = replyToUpdate.fields,
                email        = replyToUpdate.email,
                name         = replyToUpdate.name,
                groups       = replyToUpdate.groups.Select(groupString => int.Parse(groupString)).ToList(),
                id           = int.Parse(replyToUpdate.id),
            };

            AbstractMailrelayReply reply = _mailrelayConnection.Send(update);

            return((MailrelayBoolReply)reply);
        }
        private bool FindNewCustomFields(MailrelayInformation information, getSubscribersReply ExistingSubscriber, Dictionary <string, string> customFieldsResult)
        {
            Dictionary <string, string> customFieldsInInformation        = information.GetCustomFields();
            Dictionary <string, string> customFieldsInExistingSubscriber = ExistingSubscriber.fields;

            List <string> allKeys = customFieldsInInformation.Keys.Union(customFieldsInExistingSubscriber.Keys).ToList();

            bool isChanged = false;

            foreach (string key in allKeys)
            {
                if (customFieldsInExistingSubscriber.ContainsKey(key))
                {
                    customFieldsResult.Add(key, customFieldsInExistingSubscriber[key]);
                    continue;
                }
                isChanged = true;
                customFieldsResult.Add(key, customFieldsInInformation[key]);
            }

            return(isChanged);
        }
        private UpdateResultEnum AddToMailrelay(DynamicsCrmConnection dynamicsCrmConnection, MailrelayInformation mailrelayInformation, int groupId)
        {
            if (mailrelayInformation.new_mailrelaysubscriberid != null)
            {
                return(UpdateResultEnum.AlreadyUpToDate);
            }

            Subscriber subscriber = new Subscriber(_mailrelayConnection);

            try
            {
                getSubscribersReply reply = subscriber.GetMailrelaySubscribers(mailrelayInformation.emailaddress1);

                if (reply == null)
                {
                    mailrelayInformation.new_mailrelaysubscriberid = subscriber.AddNewSubscriber(mailrelayInformation.fullname, mailrelayInformation.emailaddress1, new List <int>()
                    {
                        groupId
                    }, mailrelayInformation.GetCustomFields());
                }
                else
                {
                    reply.groups.Add(groupId.ToString());

                    subscriber.UpdateFromReply(reply);

                    mailrelayInformation.new_mailrelaysubscriberid = int.Parse(reply.id);
                }
            }
            catch (Exception exception)
            {
                Log.Write(Connection, exception.Message, typeof(ExportContactToMailrelay), exception.StackTrace, DataLayer.MongoData.Config.LogLevelEnum.OptionError);
                return(UpdateResultEnum.Failed);
            }

            mailrelayInformation.UpdateContactMailrelaySubscriberid(dynamicsCrmConnection);

            return(UpdateResultEnum.Updated);
        }
Exemplo n.º 5
0
        private bool FindNewCustomFields(getSubscribersReply subscriberInMailrelay, Dictionary <string, string> customFieldsInCrm, Dictionary <string, string> customFieldsResult)
        {
            Dictionary <string, string> customFieldsInSubscriberInMailrelay = subscriberInMailrelay.fields;

            if (customFieldsInSubscriberInMailrelay == null)
            {
                customFieldsInSubscriberInMailrelay = new Dictionary <string, string>();
            }

            List <string> allKeys = customFieldsInCrm.Keys.Union(customFieldsInSubscriberInMailrelay.Keys).ToList();

            bool isChanged = false;

            foreach (string key in allKeys)
            {
                if (customFieldsInSubscriberInMailrelay.ContainsKey(key))
                {
                    if (customFieldsInCrm.ContainsKey(key) == false)
                    {
                        customFieldsResult.Add(key, customFieldsInSubscriberInMailrelay[key]);
                        continue;
                    }

                    customFieldsResult.Add(key, customFieldsInCrm[key]);

                    if (customFieldsInCrm[key] != customFieldsInSubscriberInMailrelay[key])
                    {
                        isChanged = true;
                    }

                    continue;
                }
                isChanged = true;
                customFieldsResult.Add(key, customFieldsInCrm[key]);
            }

            return(isChanged);
        }
Exemplo n.º 6
0
        public UpdateResultEnum UpdateIfNeeded(int id, string fullname, string email, Dictionary <string, string> customFields, int?groupInCrm)
        {
            getSubscribersReply subscriberInMailrelay = GetMailrelaySubscribers(id);

            if (subscriberInMailrelay == null)
            {
                return(UpdateResultEnum.Failed);
            }

            Dictionary <string, string> customFieldsResult = new Dictionary <string, string>();
            bool customFieldsChanged = FindNewCustomFields(subscriberInMailrelay, customFields, customFieldsResult);

            List <int> groups = subscriberInMailrelay.groups.Select(group => int.Parse(group)).ToList();

            bool groupsChanged = false;

            if (groupInCrm.HasValue && groups.Contains(groupInCrm.Value) == false)
            {
                groups.Add(groupInCrm.Value);
                groupsChanged = true;
            }

            if
            (
                customFieldsChanged == true ||
                groupsChanged == true ||
                fullname != subscriberInMailrelay.name ||
                email != subscriberInMailrelay.email
            )
            {
                UpdateSubscriber(id, email, customFieldsResult, groups, fullname);
                return(UpdateResultEnum.Updated);
            }

            return(UpdateResultEnum.AlreadyUpToDate);
        }
        private void UdpateExistingSubscriberIfNeeded(MailrelayInformation information, getSubscribersReply ExistingSubscriber, string email, int subscriberId)
        {
            Dictionary <string, string> customFieldsResult = new Dictionary <string, string>();

            bool isChanged = FindNewCustomFields(information, ExistingSubscriber, customFieldsResult);

            List <int> groups = ExistingSubscriber.groups.Select(group => int.Parse(group)).ToList();

            if (groups.Contains(information.campaign_new_mailrelaygroupid.Value) == false)
            {
                groups.Add(information.campaign_new_mailrelaygroupid.Value);
                isChanged = true;
            }

            if (information.fullname != ExistingSubscriber.name)
            {
                isChanged = true;
            }

            if (isChanged)
            {
                UpdateSubscriber(email, customFieldsResult, groups, information.fullname, subscriberId);
            }
        }
        public override void ExecuteOption(OptionReport report)
        {
            string urlLoginName = _databaseAddMailrelaySubscriberFromLead.urlLoginName;
            string email        = _databaseAddMailrelaySubscriberFromLead.email;
            Guid   leadId       = _databaseAddMailrelaySubscriberFromLead.leadId;

            DatabaseUrlLogin      login = DatabaseUrlLogin.GetUrlLogin(Connection, urlLoginName);
            DynamicsCrmConnection dynamicsCrmConnection = DynamicsCrmConnection.GetConnection(login.Url, login.Username, login.Password);

            DatabaseWebCampaign webCampaign = DatabaseWebCampaign.ReadByIdBytesSingleOrDefault(Connection, _databaseAddMailrelaySubscriberFromLead.WebCampaignIdValue());

            if (webCampaign == null)
            {
                Log.Write(Connection, $"Could not find campaign for {_databaseAddMailrelaySubscriberFromLead.Name}", typeof(AddMailrelaySubscriberFromLead), DataLayer.MongoData.Config.LogLevelEnum.OptionError);
                report.Success = false;
                return;
            }

            MailrelayInformation information = GetInformationFromFetchXml(dynamicsCrmConnection, webCampaign, email);

            if (information == null)
            {
                Log.Write(Connection, $"Information for lead {leadId} on {email} could not be found", typeof(AddMailrelaySubscriberFromLead), DataLayer.MongoData.Config.LogLevelEnum.OptionMessage);
                report.Success = true;
                return;
            }

            if (information.campaign_new_mailrelaygroupid.HasValue == false)
            {
                Log.Write(Connection, $"Subscriber not added, campaign {webCampaign.FormId} has no group", typeof(AddMailrelaySubscriberFromLead), DataLayer.MongoData.Config.LogLevelEnum.OptionMessage);
                report.Success = true;
                return;
            }

            getSubscribersReply ExistingSubscriber = GetExistingSubscribers(email);

            int subscriberId;

            if (ExistingSubscriber == null)
            {
                addSubscriber add = GetSubscriberFromFetchXml(information, email);

                subscriberId = SendSubscriberToMailrelay(add);
            }
            else
            {
                subscriberId = int.Parse(ExistingSubscriber.id);
                UdpateExistingSubscriberIfNeeded(information, ExistingSubscriber, email, subscriberId);
            }

            try
            {
                Lead.UpdateSubscriberId(dynamicsCrmConnection, leadId, subscriberId);
            }
            catch (Exception exception)
            {
                Log.Write(Connection, exception.Message, typeof(AddMailrelaySubscriberFromLead), exception.StackTrace, DataLayer.MongoData.Config.LogLevelEnum.OptionError);
            }

            report.Success = true;
        }