Пример #1
0
        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));
        }
Пример #3
0
        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));
 }