/// <summary> /// Addresses the specified context. /// </summary> /// <param name="context">The context.</param> /// <param name="input">The input.</param> /// <param name="addressType">Type of the address.</param> /// <param name="qualifier">The qualifier.</param> /// <returns></returns> public static string Address(DotLiquid.Context context, object input, string addressType, string qualifier = "") { if (input != null && input is Person) { var person = (Person)input; Guid familyGuid = Rock.SystemGuid.GroupType.GROUPTYPE_FAMILY.AsGuid(); var location = new GroupMemberService(GetRockContext(context)) .Queryable("GroupLocations.Location") .Where(m => m.PersonId == person.Id && m.Group.GroupType.Guid == familyGuid) .SelectMany(m => m.Group.GroupLocations) .Where(gl => gl.GroupLocationTypeValue.Value == addressType) .Select(gl => gl.Location) .FirstOrDefault(); if (location != null) { if (qualifier == "") { return(location.GetFullStreetAddress()); } else { var matches = Regex.Matches(qualifier, @"\[\[([^\]]+)\]\]"); foreach (var match in matches) { string propertyKey = match.ToString().Replace("[", ""); propertyKey = propertyKey.ToString().Replace("]", ""); propertyKey = propertyKey.ToString().Replace(" ", ""); switch (propertyKey) { case "Street1": qualifier = qualifier.Replace(match.ToString(), location.Street1); break; case "Street2": qualifier = qualifier.Replace(match.ToString(), location.Street2); break; case "City": qualifier = qualifier.Replace(match.ToString(), location.City); break; case "State": qualifier = qualifier.Replace(match.ToString(), location.State); break; case "PostalCode": case "Zip": qualifier = qualifier.Replace(match.ToString(), location.PostalCode); break; case "Country": qualifier = qualifier.Replace(match.ToString(), location.Country); break; case "GeoPoint": if (location.GeoPoint != null) { qualifier = qualifier.Replace(match.ToString(), string.Format("{0},{1}", location.GeoPoint.Latitude.ToString(), location.GeoPoint.Longitude.ToString())); } else { qualifier = qualifier.Replace(match.ToString(), ""); } break; case "Latitude": if (location.GeoPoint != null) { qualifier = qualifier.Replace(match.ToString(), location.GeoPoint.Latitude.ToString()); } else { qualifier = qualifier.Replace(match.ToString(), ""); } break; case "Longitude": if (location.GeoPoint != null) { qualifier = qualifier.Replace(match.ToString(), location.GeoPoint.Longitude.ToString()); } else { qualifier = qualifier.Replace(match.ToString(), ""); } break; case "FormattedAddress": qualifier = qualifier.Replace(match.ToString(), location.FormattedAddress); break; case "FormattedHtmlAddress": qualifier = qualifier.Replace(match.ToString(), location.FormattedHtmlAddress); break; default: qualifier = qualifier.Replace(match.ToString(), ""); break; } } return(qualifier); } } } return(string.Empty); }