public async Task <bool> CreateBugReport(CreateBugReportViewModel model, IUrlHelper url) { var bugReportCategory = _context.BugReportCategories.First(x => x.Index == (BugReportCategoriesEnum)model.SelectedCategory); var reportStatus = _context.ReportStatus.First(x => x.Index == ReportStatusEnum.WaitingForReview); string homePage = url.Action("Index", "Home", new {}, protocol: _httpContextAccessor.HttpContext.Request.Scheme); var html = await InterpolateDataIntoFile("link", homePage); AppUser user = _httpContextAccessor.HttpContext.User.Identity.IsAuthenticated ? await _userManager.FindByEmailAsync(_httpContextAccessor.HttpContext.User.Identity.Name) : null; var imageUploadResult = await _imgUrService.UploadImageAsync(model.ImageToUpload); var bugReport = new BugReport { Id = Guid.NewGuid(), AppUser = user, BugReportCategory = bugReportCategory, Status = reportStatus, Title = model.Title, Email = model.Email, Message = model.Message, DateTime = DateTime.UtcNow, ImgUrl = imageUploadResult?.Link }; try { _context.BugReports.Add(bugReport); await _context.SaveChangesAsync(); } catch (Exception e) { _logger.LogError("UserName: {0} | UserId: {1} | Request: {2} | Message: {3}", user != null ? user.LastName : "Null", user != null ? user.LastName : "Null", _httpContextAccessor.HttpContext.Request.GetRawTarget(), $"Error on saving bug report. Report Title: {model.Title}; Report Message: {model.Message}; User Email: {model.Email}; Error: {e.Message}; Inner exception: {e.InnerException?.Message}; Stacktrace:\n{e.StackTrace};"); return(false); } var sendEmailResult = await SendMailAsync(model.Email, "Bug report confirmation", html); var admins = await _userManager.GetUsersInRoleAsync(DefaultIdentity.RoleAdmin); foreach (var admin in admins) { await SendMailAsync(admin.Email, "New bug report received!", $"Hi {admin.FirstName} {admin.LastName}.<br>A new bug report was received. Please go to the admin panel and review it as soon as possible!"); } if (!sendEmailResult) { return(false); } return(true); }
public ActionResult Bugs() { var userId = User.Identity.GetUserId(); var user = db.Users.Find(userId); if (user == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } var model = new CreateBugReportViewModel(); model.UserId = userId; model.Email = user.Email; return(View(model)); }
public async Task <IActionResult> CreateBugReport([FromForm] CreateBugReportViewModel model) { if (!ModelState.IsValid) { var errors = ModelState.Values.SelectMany(x => x.Errors.Select(xx => xx.ErrorMessage)).ToList(); errors.ForEach(x => ModelState.AddModelError("", x)); return(View(model)); } var result = await _bugReportService.CreateBugReport(model, Url); if (!result) { return(RedirectToAction("SomethingWentWrong", "Home")); } return(View("BugReportWasSuccessfullySent")); }
public ActionResult Bugs(CreateBugReportViewModel model) { if (ModelState.IsValid) { var user = db.Users.Find(model.UserId); if (user == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } var bug = new Bug(); bug.Created = DateTime.Now; bug.Detail = model.Detail; bug.Email = model.Email; bug.Title = model.Title; bug.UserId = model.UserId; db.Bugs.Add(bug); db.SaveChanges(); ViewBag.Message = "Bug submitted successfully. Thank you for your feedback."; } return(View(model)); }