Beispiel #1
0
        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));
        }
Beispiel #2
0
        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");
            }
        }
Beispiel #3
0
 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);
 }
Beispiel #4
0
        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);
            }
        }
Beispiel #5
0
        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;
        }
Beispiel #6
0
        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 }));
        }
Beispiel #7
0
 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);
Beispiel #8
0
 private static string Replace(string value, EventStatusModel model)
 => value
 .Replace("{TITLE}", model.Title)
 .Replace("{NAME}", model.Name)
 .Replace("{LINK}", model.Link);
Beispiel #9
0
 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)));
 }