public void AddRecipient(RecipientData recipient) { Recipients.Add(RockEmailMessageRecipient.CreateAnonymous(recipient.To, recipient.MergeFields)); }
/// <summary> /// Executes the specified workflow. /// </summary> /// <param name="rockContext">The rock context.</param> /// <param name="action">The action.</param> /// <param name="entity">The entity.</param> /// <param name="errorMessages">The error messages.</param> /// <returns></returns> public override bool Execute( RockContext rockContext, WorkflowAction action, Object entity, out List<string> errorMessages ) { errorMessages = new List<string>(); var mergeFields = GetMergeFields( action ); int? fromId = null; Guid? fromGuid = GetAttributeValue( action, "From" ).AsGuidOrNull(); if ( fromGuid.HasValue ) { var fromValue = DefinedValueCache.Read( fromGuid.Value, rockContext ); if ( fromValue != null ) { fromId = fromValue.Id; } } var recipients = new List<RecipientData>(); string toValue = GetAttributeValue( action, "To" ); Guid guid = toValue.AsGuid(); if ( !guid.IsEmpty() ) { var attribute = AttributeCache.Read( guid, rockContext ); if ( attribute != null ) { string toAttributeValue = action.GetWorklowAttributeValue( guid ); if ( !string.IsNullOrWhiteSpace( toAttributeValue ) ) { switch ( attribute.FieldType.Class ) { case "Rock.Field.Types.TextFieldType": { recipients.Add( new RecipientData( toAttributeValue ) ); break; } case "Rock.Field.Types.PersonFieldType": { Guid personAliasGuid = toAttributeValue.AsGuid(); if ( !personAliasGuid.IsEmpty() ) { var phoneNumber = new PersonAliasService( rockContext ).Queryable() .Where( a => a.Guid.Equals( personAliasGuid ) ) .SelectMany( a => a.Person.PhoneNumbers ) .Where( p => p.IsMessagingEnabled ) .FirstOrDefault(); if ( phoneNumber == null ) { action.AddLogEntry( "Invalid Recipient: Person or valid SMS phone number not found", true ); } else { string smsNumber = phoneNumber.Number; if ( !string.IsNullOrWhiteSpace( phoneNumber.CountryCode ) ) { smsNumber = "+" + phoneNumber.CountryCode + phoneNumber.Number; } var recipient = new RecipientData( smsNumber ); recipients.Add( recipient ); var person = new PersonAliasService( rockContext ).GetPerson( personAliasGuid ); if ( person != null ) { recipient.MergeFields.Add( "Person", person ); } } } break; } case "Rock.Field.Types.GroupFieldType": case "Rock.Field.Types.SecurityRoleFieldType": { int? groupId = toAttributeValue.AsIntegerOrNull(); Guid? groupGuid = toAttributeValue.AsGuidOrNull(); IQueryable<GroupMember> qry = null; // Handle situations where the attribute value is the ID if ( groupId.HasValue ) { qry = new GroupMemberService( rockContext ).GetByGroupId( groupId.Value ); } // Handle situations where the attribute value stored is the Guid else if ( groupGuid.HasValue ) { qry = new GroupMemberService( rockContext ).GetByGroupGuid( groupGuid.Value ); } else { action.AddLogEntry( "Invalid Recipient: No valid group id or Guid", true ); } if ( qry != null ) { foreach ( var person in qry .Where( m => m.GroupMemberStatus == GroupMemberStatus.Active ) .Select( m => m.Person ) ) { var phoneNumber = person.PhoneNumbers .Where( p => p.IsMessagingEnabled ) .FirstOrDefault(); if ( phoneNumber != null ) { string smsNumber = phoneNumber.Number; if ( !string.IsNullOrWhiteSpace( phoneNumber.CountryCode ) ) { smsNumber = "+" + phoneNumber.CountryCode + phoneNumber.Number; } var recipient = new RecipientData( smsNumber ); recipients.Add( recipient ); recipient.MergeFields.Add( "Person", person ); } } } break; } } } } } else { if ( !string.IsNullOrWhiteSpace( toValue ) ) { recipients.Add( new RecipientData( toValue.ResolveMergeFields( mergeFields ) ) ); } } string message = GetAttributeValue( action, "Message" ); Guid messageGuid = message.AsGuid(); if ( !messageGuid.IsEmpty() ) { var attribute = AttributeCache.Read( messageGuid, rockContext ); if ( attribute != null ) { string messageAttributeValue = action.GetWorklowAttributeValue( messageGuid ); if ( !string.IsNullOrWhiteSpace( messageAttributeValue ) ) { if ( attribute.FieldType.Class == "Rock.Field.Types.TextFieldType" ) { message = messageAttributeValue; } } } } if ( recipients.Any() && !string.IsNullOrWhiteSpace( message ) ) { var mediumEntity = EntityTypeCache.Read( Rock.SystemGuid.EntityType.COMMUNICATION_MEDIUM_SMS.AsGuid(), rockContext ); if ( mediumEntity != null ) { var medium = MediumContainer.GetComponent( mediumEntity.Name ); if ( medium != null && medium.IsActive ) { var transport = medium.Transport; if ( transport != null && transport.IsActive ) { var appRoot = GlobalAttributesCache.Read( rockContext ).GetValue( "InternalApplicationRoot" ); foreach ( var recipient in recipients ) { var recipientMergeFields = new Dictionary<string, object>( mergeFields ); foreach ( var mergeField in recipient.MergeFields ) { recipientMergeFields.Add( mergeField.Key, mergeField.Value ); } var mediumData = new Dictionary<string, string>(); mediumData.Add( "FromValue", fromId.Value.ToString() ); mediumData.Add( "Message", message.ResolveMergeFields( recipientMergeFields ) ); var number = new List<string> { recipient.To }; transport.Send( mediumData, number, appRoot, string.Empty ); } } } } } return true; }
/// <summary> /// Adds the recipient. /// </summary> /// <param name="recipient">The recipient.</param> public void AddRecipient(RecipientData recipient) { _recipients.Add(recipient); }