private bool SetAvatar(ContactFacetData data, XConnect.Contact contact, XConnectClient client)
        {
            var url      = data.AvatarUrl;
            var mimeType = data.AvatarMimeType;

            if (string.IsNullOrEmpty(url) || string.IsNullOrEmpty(mimeType))
            {
                return(false);
            }
            try
            {
                var web             = new WebClient();
                var pictureData     = web.DownloadData(url);
                var pictureMimeType = mimeType;

                var avatar = contact.Avatar();
                if (avatar == null)
                {
                    avatar = new Avatar(pictureMimeType, pictureData);
                }
                else
                {
                    avatar.MimeType = pictureMimeType;
                    avatar.Picture  = pictureData;
                }
                client.SetFacet(contact, Avatar.DefaultFacetKey, avatar);
                return(true);
            }
            catch (Exception exception)
            {
                Log.Warn($"Could not download profile picture {url}", exception, this);
                return(false);
            }
        }
        public ContactFacetData GetContactData()
        {
            ContactFacetData data = new ContactFacetData();

            var id = this.GetContactId();

            if (id != null)
            {
                var contactReference = new IdentifiedContactReference(id.Source, id.Identifier);

                using (var client = SitecoreXConnectClientConfiguration.GetClient())
                {
                    try
                    {
                        var contact = client.Get(contactReference, new ContactExpandOptions(this.facetsToUpdate));

                        if (contact != null)
                        {
                            PersonalInformation personalInformation = contact.Personal();
                            if (personalInformation != null)
                            {
                                data.FirstName  = personalInformation.FirstName;
                                data.MiddleName = personalInformation.MiddleName;
                                data.LastName   = personalInformation.LastName;
                                data.Birthday   = personalInformation.Birthdate.ToString();
                                data.Gender     = personalInformation.Gender;
                                data.Language   = personalInformation.PreferredLanguage;
                            }

                            var email = contact.Emails();
                            if (email != null)
                            {
                                data.EmailAddress = email.PreferredEmail?.SmtpAddress;
                            }

                            var phones = contact.PhoneNumbers();
                            if (phones != null)
                            {
                                data.PhoneNumber = phones.PreferredPhoneNumber?.Number;
                            }

                            if (contact.Facets.ContainsKey(SportType.DefaultKey))
                            {
                                data.SportType = ((SportType)contact.Facets[SportType.DefaultKey]).Value;
                            }
                            if (contact.Facets.ContainsKey(SportName.DefaultKey))
                            {
                                data.SportName = ((SportName)contact.Facets[SportName.DefaultKey]).Value;
                            }
                        }
                    }
                    catch (XdbExecutionException ex)
                    {
                        Log.Error($"Could not get the xConnect contact facets", ex, this);
                    }
                }
            }

            return(data);
        }
Exemplo n.º 3
0
        private bool SetPhone(ContactFacetData data, XConnect.Contact contact, XConnectClient client)
        {
            var phoneNumber = data.PhoneNumber;

            if (string.IsNullOrEmpty(phoneNumber))
            {
                return(false);
            }
            var phoneNumbers = contact.PhoneNumbers();

            if (phoneNumbers == null)
            {
                phoneNumbers = new PhoneNumberList(new PhoneNumber(null, phoneNumber), null);
            }
            else
            {
                if (phoneNumbers.PreferredPhoneNumber?.Number == phoneNumber)
                {
                    return(false);
                }
                phoneNumbers.PreferredPhoneNumber = new PhoneNumber(null, phoneNumber);
            }
            client.SetFacet(contact, PhoneNumberList.DefaultFacetKey, phoneNumbers);
            return(true);
        }
Exemplo n.º 4
0
        private bool SetEmail(ContactFacetData data, XConnect.Contact contact, XConnectClient client)
        {
            var email = data.EmailAddress;

            if (string.IsNullOrEmpty(email))
            {
                return(false);
            }
            var emails = contact.Emails();

            if (emails == null)
            {
                emails = new EmailAddressList(new EmailAddress(email, false), null);
            }
            else
            {
                if (emails.PreferredEmail?.SmtpAddress == email)
                {
                    return(false);
                }
                emails.PreferredEmail = new EmailAddress(email, false);
            }
            client.SetFacet(contact, EmailAddressList.DefaultFacetKey, emails);
            return(true);
        }
 private static bool SetGender(ContactFacetData data, PersonalInformation personalInfo)
 {
     if (personalInfo.Gender == data.Gender)
     {
         return(false);
     }
     personalInfo.Gender = data.Gender;
     return(true);
 }
 private static bool SetLanguage(ContactFacetData data, PersonalInformation personalInfo)
 {
     if (personalInfo.PreferredLanguage == data.Language)
     {
         return(false);
     }
     personalInfo.PreferredLanguage = data.Language;
     return(true);
 }
        protected override bool Execute(IdentifyContactActionData data, FormSubmitContext formSubmitContext)
        {
            Assert.ArgumentNotNull(formSubmitContext, "formSubmitContext");
            if (data == null || !(data.ReferenceId != Guid.Empty))
            {
                // submit action was not configured properly
                Log.Error(string.Format("IdentifyContactAction failed: Submit action settings were not configured properly for form {0}.", formSubmitContext.FormId), this);
                return(false);
            }

            //todo: use the data.ReferenceId to retrieve mapping of fields to contact facets
            var item = Context.Database.GetItem(new ID(data.ReferenceId));

            if (item == null || !item.IsDerived(Templates.ContactIdentificationActionSettings.ID))
            {
                // submit action was not configured properly
                Log.Error(string.Format("IdentifyContactAction failed: Submit action settings for form {0} point to an invalid item.", formSubmitContext.FormId), this);
                return(false);
            }

            ContactFacetData contactFacetData = new ContactFacetData();

            foreach (var field in formSubmitContext.Fields)
            {
                if (field != null)
                {
                    var mapSettingsItem = item.Children.FirstOrDefault(x =>
                                                                       x[Templates.ContactIdentificationActionMapping.Fields.FacetValue].ToLower() == field.Name.ToLower());
                    if (mapSettingsItem != null)
                    {
                        Item facetItem;

                        using (new SecurityDisabler())
                        {
                            facetItem = Sitecore.Configuration.Factory.GetDatabase("core").GetItem(mapSettingsItem[Templates.ContactIdentificationActionMapping.Fields.FacetKey]);
                        }

                        if (facetItem != null)
                        {
                            contactFacetData[facetItem.Name] = field.GetValue();
                        }
                    }
                }
            }

            if (!string.IsNullOrEmpty(contactFacetData.EmailAddress))
            {
                _trackerService.IdentifyContact(Context.Site.Domain.Name, contactFacetData.EmailAddress);
            }

            _contactFacetService.UpdateContactFacets(contactFacetData);

            return(true);
        }
Exemplo n.º 8
0
        private bool SetPhone(ContactFacetData data, XConnect.Contact contact, XConnectClient client)
        {
            var phoneNumber = data.PhoneNumber;

            if (string.IsNullOrEmpty(phoneNumber))
            {
                return(false);
            }
            var phoneNumberFacet = new PhoneNumberList(new PhoneNumber(String.Empty, phoneNumber), "Work Phone");

            client.SetFacet(contact, PhoneNumberList.DefaultFacetKey, phoneNumberFacet);
            return(true);
        }
Exemplo n.º 9
0
        private bool SetEmail(ContactFacetData data, XConnect.Contact contact, XConnectClient client)
        {
            var email = data.EmailAddress;

            if (string.IsNullOrEmpty(email))
            {
                return(false);
            }
            var emailFacet = new EmailAddressList(new EmailAddress(email, true), "Work Email");

            client.SetFacet(contact, EmailAddressList.DefaultFacetKey, emailFacet);
            return(true);
        }
        private static bool SetPersonalInfo(ContactFacetData data, XConnect.Contact contact, XConnectClient client)
        {
            var changed = false;

            var personalInfo = contact.Personal() ?? new PersonalInformation();

            changed |= SetBirthdate(data, personalInfo);
            changed |= SetName(data, personalInfo);
            changed |= SetGender(data, personalInfo);
            changed |= SetLanguage(data, personalInfo);
            if (!changed)
            {
                return(false);
            }
            client.SetFacet(contact, PersonalInformation.DefaultFacetKey, personalInfo);
            return(true);
        }
        private static bool SetBirthdate(ContactFacetData data, PersonalInformation personalInfo)
        {
            var birthDateString = data.Birthday;

            if (string.IsNullOrEmpty(birthDateString))
            {
                return(false);
            }
            DateTime birthDate;

            if (!DateTime.TryParse(birthDateString, out birthDate))
            {
                return(false);
            }
            personalInfo.Birthdate = birthDate;
            return(true);
        }
        public void UpdateContactFacets(UserProfile profile)
        {
            ContactFacetData data = new ContactFacetData
            {
                FirstName      = profile[Constants.UserProfile.Fields.FirstName],
                MiddleName     = profile[Constants.UserProfile.Fields.MiddleName],
                LastName       = profile[Constants.UserProfile.Fields.LastName],
                AvatarUrl      = profile[Constants.UserProfile.Fields.PictureUrl],
                AvatarMimeType = profile[Constants.UserProfile.Fields.PictureMimeType],
                EmailAddress   = profile.Email,
                PhoneNumber    = profile[Constants.UserProfile.Fields.PhoneNumber],
                Language       = profile[Constants.UserProfile.Fields.Language],
                Gender         = profile[Constants.UserProfile.Fields.Gender],
                Birthday       = profile[Constants.UserProfile.Fields.Birthday]
            };

            _contactFacetService.UpdateContactFacets(data);
        }
        private static bool SetName(ContactFacetData data, PersonalInformation personalInfo)
        {
            var changed = false;

            if (personalInfo.FirstName != data.FirstName && !String.IsNullOrWhiteSpace(data.FirstName))
            {
                personalInfo.FirstName = data.FirstName;
                changed = true;
            }
            if (personalInfo.MiddleName != data.MiddleName && !String.IsNullOrWhiteSpace(data.MiddleName))
            {
                personalInfo.MiddleName = data.MiddleName;
                changed = true;
            }
            if (personalInfo.LastName != data.LastName && !String.IsNullOrWhiteSpace(data.LastName))
            {
                personalInfo.LastName = data.LastName;
                changed = true;
            }
            return(changed);
        }
        private static bool SetSportsInterests(ContactFacetData data, XConnect.Contact contact, XConnectClient client)
        {
            bool changed = false;

            if (contact.Facets.ContainsKey(SportName.DefaultKey))
            {
                SportName facet = (SportName)contact.Facets[SportName.DefaultKey];
                if (!string.IsNullOrEmpty(data.SportName) && facet.Value != data.SportName)
                {
                    changed     = true;
                    facet.Value = data.SportName;
                    client.SetFacet(contact, SportName.DefaultKey, facet);
                }
            }
            else
            {
                client.SetFacet(contact, SportName.DefaultKey, new SportName {
                    Value = data.SportName
                });
            }

            if (contact.Facets.ContainsKey(SportType.DefaultKey))
            {
                SportType facet = (SportType)contact.Facets[SportType.DefaultKey];
                if (!string.IsNullOrEmpty(data.SportType) && facet.Value != data.SportType)
                {
                    changed     = true;
                    facet.Value = data.SportType;
                    client.SetFacet(contact, SportType.DefaultKey, facet);
                }
            }
            else
            {
                client.SetFacet(contact, SportType.DefaultKey, new SportType {
                    Value = data.SportType
                });
            }

            return(changed);
        }
        public void UpdateContactFacets(ContactFacetData data)
        {
            var id = this.GetContactId();

            if (id == null)
            {
                return;
            }

            var contactReference = new IdentifiedContactReference(id.Source, id.Identifier);

            using (var client = SitecoreXConnectClientConfiguration.GetClient())
            {
                try
                {
                    var contact = client.Get(contactReference, new ContactExpandOptions(this.facetsToUpdate));
                    if (contact == null)
                    {
                        return;
                    }
                    var changed = false;
                    changed |= SetPersonalInfo(data, contact, client);
                    changed |= this.SetPhone(data, contact, client);
                    changed |= this.SetEmail(data, contact, client);
                    changed |= this.SetAvatar(data, contact, client);
                    changed |= SetSportsInterests(data, contact, client);

                    if (changed)
                    {
                        client.Submit();
                        this.UpdateTracker();
                    }
                }
                catch (XdbExecutionException ex)
                {
                    Log.Error($"Could not update the xConnect contact facets", ex, this);
                }
            }
        }
        public object GetValue(string parameters)
        {
            ContactFacetData data = _contactFacetService.GetContactData();

            switch (parameters.ToLower())
            {
            case "email":
                return(data.EmailAddress);

            case "first name":
                return(data.FirstName);

            case "last name":
                return(data.LastName);

            case "phone":
                return(data.PhoneNumber);

            default:
                return(string.Empty);
            }
        }
        private bool SetPhone(ContactFacetData data, XConnect.Contact contact, XConnectClient client)
        {
            var phoneNumber = data.PhoneNumber;
            var phoneKey    = data.PhoneKey;

            if (string.IsNullOrEmpty(phoneNumber))
            {
                return(false);
            }

            if (contact.PhoneNumbers() != null)
            {
                contact.PhoneNumbers().PreferredPhoneNumber = new Sitecore.XConnect.Collection.Model.PhoneNumber(string.Empty, phoneNumber);
                contact.PhoneNumbers().PreferredKey         = phoneKey;
                client.SetFacet(contact, PhoneNumberList.DefaultFacetKey, contact.PhoneNumbers());
            }
            else
            {
                client.SetFacet(contact, PhoneNumberList.DefaultFacetKey, new PhoneNumberList(new PhoneNumber(string.Empty, phoneNumber), phoneKey));
            }

            return(true);
        }
        private bool SetEmail(ContactFacetData data, XConnect.Contact contact, XConnectClient client)
        {
            var email    = data.EmailAddress;
            var emailKey = data.EmailKey;

            if (string.IsNullOrEmpty(email))
            {
                return(false);
            }

            if (contact.Emails() != null)
            {
                contact.Emails().PreferredEmail = new EmailAddress(email, true);
                contact.Emails().PreferredKey   = emailKey;
                client.SetFacet(contact, EmailAddressList.DefaultFacetKey, contact.Emails());
            }
            else
            {
                client.SetFacet(contact, EmailAddressList.DefaultFacetKey, new EmailAddressList(new EmailAddress(email, true), emailKey));
            }

            return(true);
        }
Exemplo n.º 19
0
        protected override bool Execute(IdentifyContactActionData data, FormSubmitContext formSubmitContext)
        {
            if (Tracker.Current == null && Tracker.Enabled)
            {
                Tracker.StartTracking();
            }

            Assert.ArgumentNotNull(formSubmitContext, "formSubmitContext");
            if (data == null || !(data.ReferenceId != Guid.Empty))
            {
                // submit action was not configured properly
                Log.Error(string.Format("IdentifyContactAction failed: Submit action settings were not configured properly for form {0}.", formSubmitContext.FormId), this);
                return(false);
            }

            var item = Context.Database.GetItem(new ID(data.ReferenceId));

            if (item == null || !item.IsDerived(Templates.ContactIdentificationActionSettings.ID))
            {
                // submit action was not configured properly
                Log.Error(string.Format("IdentifyContactAction failed: Submit action settings for form {0} point to an invalid item.", formSubmitContext.FormId), this);
                return(false);
            }

            ContactFacetData contactFacetData = new ContactFacetData();

            foreach (var field in formSubmitContext.Fields)
            {
                if (field != null)
                {
                    var mapSettingsItem = item.Children.FirstOrDefault(x =>
                                                                       x[Templates.ContactIdentificationActionMapping.Fields.FacetValue].ToLower() == field.Name.ToLower());
                    if (mapSettingsItem != null)
                    {
                        string facetKey = mapSettingsItem[Templates.ContactIdentificationActionMapping.Fields.FacetKey];

                        if (!string.IsNullOrEmpty(facetKey))
                        {
                            string value = field.GetValue();
                            if (!string.IsNullOrEmpty(value))
                            {
                                contactFacetData[facetKey] = value;
                            }
                        }
                    }
                }
            }

            if (!string.IsNullOrEmpty(contactFacetData.PhoneNumber))
            {
                contactFacetData.PhoneKey = "Work Phone";
            }

            if (!string.IsNullOrEmpty(contactFacetData.EmailAddress))
            {
                contactFacetData.EmailKey = "Work Email";
                _trackerService.IdentifyContact(Context.Site.Domain.Name, contactFacetData.EmailAddress);
            }

            _contactFacetService.UpdateContactFacets(contactFacetData);

            return(true);
        }