public override ActionResult Index(ContentModel model) { var appDataFolder = Server.MapPath("~/App_Data"); var storageFolderPath = appDataFolder + "\\github\\umbrackathon"; var eventStatusModel = new EventStatusModel(model.Content) { GuestbookEntries = new List <GuestbookEntry>() }; if (!Directory.Exists(storageFolderPath)) { return(CurrentTemplate(eventStatusModel)); } foreach (var filename in Directory.GetFiles(storageFolderPath)) { var githubUser = Path.GetFileNameWithoutExtension(filename); eventStatusModel.GuestbookEntries.Add(new GuestbookEntry { GitHubUsername = githubUser }); } return(CurrentTemplate(eventStatusModel)); }
private async Task SendEmail(EventSaveModel input, EventStatusModel model, User currentUser, bool statusChanged, EventSignup eventSignup) { try { await _emailService.SendCustomEmail( eventSignup.User, input.Subject, input.Message, model, input.ReplyToMe?currentUser : null); if (statusChanged) { eventSignup.AuditLog.Add($"Moved to {input.Status} and sent email\n\n---\n\n> {input.Subject}\n\n{input.Message}", currentUser); } else { eventSignup.AuditLog.Add($"Sent email\n\n---\n\n> {input.Subject}\n\n{input.Message}", currentUser); } } catch (Exception e) { // Mail sending might fail, but that should't stop us eventSignup.AuditLog.Add($"Tried to send email, but failed with message {e.Message}", currentUser); _logger.LogError(e, "Failed to send email"); } }
public async Task SendCustomEmail(User to, string subject, string message, EventStatusModel eventStatusModel = null, User replyTo = null) { await _emailer.Send( new EmailAddress(to.Email, to.FullName), Replace(subject, to, eventStatusModel), Markdig.Markdown.ToHtml(Replace(message, to, eventStatusModel)), replyTo != null?new EmailAddress(replyTo.Email, replyTo.FullName) : null); }
private void LoadEventStatusOptions(EventStatusModel eventStatusModel) { eventStatusModel.Options = new ObservableCollection <EventOptionModel>(); var eventStatusOptions = eventStatusModel.EventStatus.EventStatusOptions.Select(x => x.EventOption); foreach (EventOption eventOption in EventOptions) { var eventOptionModel = new EventOptionModel(eventOption) { IsChecked = eventStatusOptions.Contains(eventOption) }; eventOptionModel.PropertyChanged += EventStatusOptionOnPropertyChanged; eventStatusModel.Options.Add(eventOptionModel); } }
private async void AddEventStatusCommandExecuted() { var status = new EventStatus { ID = Guid.NewGuid(), Name = "New Event Status", Colour = "#808080", PreferredName = "" }; _adminDataUnit.EventStatusesRepository.Add(status); await _adminDataUnit.SaveChanges(); var statusModel = new EventStatusModel(status); LoadEventStatusOptions(statusModel); EventStatuses.Add(statusModel); SelectedObject = statusModel; }
public async Task <IActionResult> View(Guid id, [FromForm] EventSaveModel input) { var currentUser = await GetCurrentUser(); var selected = input.GetSelected(); var statusChanged = input.Status != Status.Unknown; await _database.EditEvent(id, async eventEntry => { foreach (var signup in selected) { var eventSignup = eventEntry.Signups.Single(s => s.Id == signup); if (statusChanged) { eventSignup.Status = input.Status; } if (input.SendEmail) { var model = new EventStatusModel( eventSignup.User.FullName, eventEntry.Title, await SignupLink(eventSignup.User, eventEntry)); await SendEmail(input, model, currentUser, statusChanged, eventSignup); } else if (statusChanged) { eventSignup.AuditLog.Add($"Moved to {input.Status} ", currentUser); } } }); return(RedirectToAction(nameof(View), new { id })); }
private static string Replace(string value, User user, EventStatusModel model) => value .Replace("{TITLE}", model?.Title ?? string.Empty) .Replace("{NAME}", user.FullName) .Replace("{LINK}", model?.Link ?? string.Empty);
private static string Replace(string value, EventStatusModel model) => value .Replace("{TITLE}", model.Title) .Replace("{NAME}", model.Name) .Replace("{LINK}", model.Link);
public async Task SendCustomEmail(string email, string subject, string message, EventStatusModel eventStatusModel) { await _emailSender.SendEmailAsync( email, Replace(subject, eventStatusModel), Markdig.Markdown.ToHtml(Replace(message, eventStatusModel))); }