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