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); }
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); }
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); }
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); }
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); }
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); }