private static async Task <IWorkflowMessage> GetNotificationMessage(int userId, int revisionId, long transactionId, IBaseArtifactVersionControlInfo artifactInfo, string projectName, EmailNotificationAction notificationAction, string artifactUrl, string blueprintUrl, IUsersRepository usersRepository) { string messageHeader = I18NHelper.FormatInvariant("You are being notified because artifact with Id: {0} has been created.", artifactInfo.Id); var artifactPartUrl = artifactUrl ?? ServerUriHelper.GetArtifactUrl(artifactInfo.Id, true); if (artifactPartUrl == null) { return(null); } var baseUrl = blueprintUrl ?? ServerUriHelper.GetBaseHostUri()?.ToString(); var emails = await GetEmailValues(revisionId, artifactInfo.Id, notificationAction, usersRepository); var notificationMessage = new NotificationMessage { TransactionId = transactionId, ArtifactName = artifactInfo.Name, ProjectName = projectName, Subject = I18NHelper.FormatInvariant("Artifact {0} has been created.", artifactInfo.Id), From = notificationAction.FromDisplayName, To = emails, Message = notificationAction.Message, RevisionId = revisionId, UserId = userId, ArtifactTypeId = artifactInfo.ItemTypeId, ArtifactId = artifactInfo.Id, ArtifactUrl = artifactPartUrl, ArtifactTypePredefined = (int)artifactInfo.PredefinedType, ProjectId = artifactInfo.ProjectId, Header = messageHeader, BlueprintUrl = baseUrl }; return(notificationMessage); }
private static IWorkflowMessage GetPublishedMessage(int userId, int revisionId, long transactionId, IBaseArtifactVersionControlInfo artifactInfo, IDictionary <int, IList <Property> > modifiedProperties) { var message = new ArtifactsPublishedMessage { TransactionId = transactionId, UserId = userId, RevisionId = revisionId }; var artifacts = new List <PublishedArtifactInformation>(); var artifact = new PublishedArtifactInformation { Id = artifactInfo.Id, Name = artifactInfo.Name, Predefined = (int)artifactInfo.PredefinedType, IsFirstTimePublished = false, // State change always occurs on published artifacts ProjectId = artifactInfo.ProjectId, Url = ServerUriHelper.GetArtifactUrl(artifactInfo.Id, true), ModifiedProperties = new List <PublishedPropertyInformation>() }; IList <Property> artifactModifiedProperties; if (modifiedProperties?.Count > 0 && modifiedProperties.TryGetValue(artifactInfo.Id, out artifactModifiedProperties) && artifactModifiedProperties?.Count > 0) { artifact.ModifiedProperties.AddRange(artifactModifiedProperties.Select(p => new PublishedPropertyInformation { TypeId = p.PropertyTypeId, PredefinedType = (int)p.Predefined })); // Only add artifact to list if there is a list of modified properties artifacts.Add(artifact); } message.Artifacts = artifacts; return(message); }
private static async Task ProcessCustomPropertyChange(TenantInformation tenant, ArtifactsPublishedMessage message, IArtifactsPublishedRepository repository, List <EmailNotificationAction> notifications, HashSet <int> modifiedCustomPropertiesSet, SqlWorkFlowStateInformation currentStateInfo, List <PublishedArtifactInformation> updatedArtifacts, int artifactId, Dictionary <int, SqlWorkFlowStateInformation> workflowStates, List <SqlProject> projects, Dictionary <int, List <IWorkflowMessage> > notificationMessages) { if (modifiedCustomPropertiesSet.Count == 0) { return; } ////Dictionary<int, List<int>> instancePropertyTypeIds var instancePropertyTypeIds = await repository.GetInstancePropertyTypeIdsMap(modifiedCustomPropertiesSet); Logger.Log( $"{instancePropertyTypeIds.Count} instance property type IDs found: {string.Join(", ", instancePropertyTypeIds.Select(k => k.Key))}", message, tenant, LogLevel.Debug); foreach (var notificationAction in notifications) { Logger.Log("Processing notification action", message, tenant, LogLevel.Debug); if (!notificationAction.EventPropertyTypeId.HasValue) { continue; } int eventPropertyTypeId = notificationAction.EventPropertyTypeId.Value; if (!instancePropertyTypeIds.ContainsKey(eventPropertyTypeId)) { Logger.Log( $"The property type ID {notificationAction.EventPropertyTypeId} was not found in the dictionary of instance property type IDs.", message, tenant, LogLevel.Debug); continue; } List <int> propertyTypeIds; if (!instancePropertyTypeIds.TryGetValue(eventPropertyTypeId, out propertyTypeIds) || propertyTypeIds.IsEmpty()) { Logger.Log( $"The property type ID {notificationAction.EventPropertyTypeId} was not found in the dictionary of instance property type IDs.", message, tenant, LogLevel.Debug); continue; } if (notificationAction.ConditionalStateId.HasValue && (currentStateInfo == null || currentStateInfo.WorkflowStateId != notificationAction.ConditionalStateId.Value)) { // The conditional state id is present, but either the current state info is not present or the current state is not same as conditional state var currentStateId = currentStateInfo?.WorkflowStateId.ToString() ?? "none"; Logger.Log( $"Conditional state ID {notificationAction.ConditionalStateId.Value} does not match current state ID: {currentStateId}", message, tenant, LogLevel.Debug); continue; } var artifact = updatedArtifacts.First(a => a.Id == artifactId); string messageHeader = I18NHelper.FormatInvariant("You are being notified because artifact with Id: {0} has been updated.", artifactId); var artifactPartUrl = artifact.Url ?? ServerUriHelper.GetArtifactUrl(artifactId, true); var blueprintUrl = artifact.BaseUrl ?? ServerUriHelper.GetBaseHostUri()?.ToString(); var emails = await WorkflowEventsMessagesHelper.GetEmailValues(message.RevisionId, artifactId, notificationAction, repository.UsersRepository); var notificationMessage = new NotificationMessage { TransactionId = message.TransactionId, ArtifactName = workflowStates[artifactId].Name, ProjectName = projects.First(p => p.ItemId == artifact.ProjectId).Name, Subject = notificationAction.Subject, From = notificationAction.FromDisplayName, To = emails, Header = messageHeader, Message = notificationAction.Message, RevisionId = message.RevisionId, UserId = message.UserId, ArtifactTypeId = currentStateInfo.ItemTypeId, ArtifactId = artifactId, ArtifactUrl = artifactPartUrl, ArtifactTypePredefined = artifact.Predefined, ProjectId = artifact.ProjectId, BlueprintUrl = blueprintUrl }; if (notificationMessages.ContainsKey(artifactId)) { notificationMessages[artifactId].Add(notificationMessage); } else { notificationMessages.Add(artifactId, new List <IWorkflowMessage> { notificationMessage }); } } }
private static async Task ProcessSystemPropertyChange(TenantInformation tenant, ArtifactsPublishedMessage message, IArtifactsPublishedRepository repository, List <EmailNotificationAction> notifications, HashSet <PropertyTypePredefined> modifiedSystemPropertiesSet, SqlWorkFlowStateInformation currentStateInfo, List <PublishedArtifactInformation> updatedArtifacts, int artifactId, Dictionary <int, SqlWorkFlowStateInformation> workflowStates, List <SqlProject> projects, Dictionary <int, List <IWorkflowMessage> > notificationMessages) { if (modifiedSystemPropertiesSet.Count == 0) { return; } foreach (var notificationAction in notifications) { Logger.Log("Processing notification action", message, tenant, LogLevel.Debug); if (!notificationAction.EventPropertyTypeId.HasValue) { continue; } int eventPropertyTypeId = notificationAction.EventPropertyTypeId.Value; // If system property provided is neither name or description if (eventPropertyTypeId != WorkflowConstants.PropertyTypeFakeIdName && eventPropertyTypeId != WorkflowConstants.PropertyTypeFakeIdDescription) { Logger.Log( $"The system property type ID {notificationAction.EventPropertyTypeId} is not supported. Only Name and Description are supported.", message, tenant, LogLevel.Debug); continue; } // If modified properties does not conatin event property type Id if (!modifiedSystemPropertiesSet.Contains(GetPropertyTypePredefined(notificationAction.EventPropertyTypeId.Value))) { continue; } if (notificationAction.ConditionalStateId.HasValue && (currentStateInfo == null || currentStateInfo.WorkflowStateId != notificationAction.ConditionalStateId.Value)) { // The conditional state id is present, but either the current state info is not present or the current state is not same as conditional state var currentStateId = currentStateInfo?.WorkflowStateId.ToString() ?? "none"; Logger.Log( $"Conditional state ID {notificationAction.ConditionalStateId.Value} does not match current state ID: {currentStateId}", message, tenant, LogLevel.Debug); continue; } var artifact = updatedArtifacts.First(a => a.Id == artifactId); string messageHeader = I18NHelper.FormatInvariant("You are being notified because artifact with Id: {0} has been updated.", artifactId); var artifactPartUrl = artifact.Url ?? ServerUriHelper.GetArtifactUrl(artifactId, true); var blueprintUrl = artifact.BaseUrl ?? ServerUriHelper.GetBaseHostUri()?.ToString(); var emails = await WorkflowEventsMessagesHelper.GetEmailValues(message.RevisionId, artifactId, notificationAction, repository.UsersRepository); var notificationMessage = new NotificationMessage { TransactionId = message.TransactionId, ArtifactName = workflowStates[artifactId].Name, ProjectName = projects.First(p => p.ItemId == artifact.ProjectId).Name, Subject = notificationAction.Subject, From = notificationAction.FromDisplayName, To = emails, Header = messageHeader, Message = notificationAction.Message, RevisionId = message.RevisionId, UserId = message.UserId, ArtifactTypeId = currentStateInfo.ItemTypeId, ArtifactId = artifactId, ArtifactUrl = artifactPartUrl, ArtifactTypePredefined = artifact.Predefined, ProjectId = artifact.ProjectId, BlueprintUrl = blueprintUrl }; if (notificationMessages.ContainsKey(artifactId)) { notificationMessages[artifactId].Add(notificationMessage); } else { notificationMessages.Add(artifactId, new List <IWorkflowMessage> { notificationMessage }); } } }
private static async Task <IWorkflowMessage> GetNotificationMessage(int userId, int revisionId, long transactionId, IBaseArtifactVersionControlInfo artifactInfo, string projectName, EmailNotificationAction notificationAction, string artifactUrl, string blueprintUrl, IUsersRepository usersRepository, IDbTransaction transaction) { string messageHeader = I18NHelper.FormatInvariant("You are being notified because of an update to the artifact with Id: {0}.", artifactInfo.Id); var artifactPartUrl = artifactUrl ?? ServerUriHelper.GetArtifactUrl(artifactInfo.Id, true); if (artifactPartUrl == null) { return(null); } var baseUrl = blueprintUrl ?? ServerUriHelper.GetBaseHostUri()?.ToString(); var emails = new List <string>(); if (notificationAction.PropertyTypeId.HasValue && notificationAction.PropertyTypeId.Value > 0) { var userInfos = await usersRepository.GetUserInfoForWorkflowArtifactForAssociatedUserProperty (artifactInfo.Id, notificationAction.PropertyTypeId.Value, revisionId, transaction); // Make sure that email is provided emails.AddRange(from userInfo in userInfos where !string.IsNullOrWhiteSpace(userInfo?.Email) select userInfo.Email); } else { // Take email from list of provided emails emails.AddRange(notificationAction.Emails ?? new List <string>()); } var notificationMessage = new NotificationMessage { TransactionId = transactionId, ArtifactName = artifactInfo.Name, ProjectName = projectName, Subject = I18NHelper.FormatInvariant("Artifact {0} has been updated.", artifactInfo.Id), From = notificationAction.FromDisplayName, To = emails, Message = notificationAction.Message, RevisionId = revisionId, UserId = userId, ArtifactTypeId = artifactInfo.ItemTypeId, ArtifactId = artifactInfo.Id, ArtifactUrl = artifactPartUrl, ArtifactTypePredefined = (int)artifactInfo.PredefinedType, ProjectId = artifactInfo.ProjectId, Header = messageHeader, BlueprintUrl = baseUrl }; return(notificationMessage); }