public async Task <IActionResult> ImagesDelete(PerformerImagesViewModel model) { var settings = await _performerSchedulingService.GetSettingsAsync(); var schedulingStage = _performerSchedulingService.GetSchedulingStage(settings); if (schedulingStage != PsSchedulingStage.RegistrationOpen) { return(RedirectToAction(nameof(Index))); } var userId = GetId(ClaimType.UserId); var performer = await _performerSchedulingService.GetPerformerByUserIdAsync(userId); if (performer?.RegistrationCompleted != true) { return(RedirectToAction(nameof(Information))); } var imageIds = Newtonsoft.Json.JsonConvert .DeserializeObject <List <int> >(model.ImagesToDelete); if (imageIds.Count > 0) { foreach (var imageId in imageIds) { await _performerSchedulingService.RemovePerformerImageByIdAsync(imageId); } ShowAlertSuccess("Image(s) deleted!"); } return(RedirectToAction(nameof(Images))); }
public async Task <IActionResult> Images() { var settings = await _performerSchedulingService.GetSettingsAsync(); var schedulingStage = _performerSchedulingService.GetSchedulingStage(settings); if (schedulingStage < PsSchedulingStage.RegistrationOpen) { return(RedirectToAction(nameof(Index))); } var userId = GetId(ClaimType.UserId); var performer = await _performerSchedulingService.GetPerformerByUserIdAsync(userId, includeImages : true); if (performer?.RegistrationCompleted != true) { return(RedirectToAction(nameof(Information))); } var performerImages = performer.Images.ToList(); performerImages.ForEach(_ => _.Filename = _pathResolver.ResolveContentPath(_.Filename)); var viewModel = new PerformerImagesViewModel { IsEditable = schedulingStage == PsSchedulingStage.RegistrationOpen, MaxUploadMB = MaxUploadMB, PerformerImages = performerImages }; return(View(viewModel)); }
public async Task <IActionResult> Images(PerformerImagesViewModel model) { var settings = await _performerSchedulingService.GetSettingsAsync(); var schedulingStage = _performerSchedulingService.GetSchedulingStage(settings); if (schedulingStage != PsSchedulingStage.RegistrationOpen) { return(RedirectToAction(nameof(Index))); } var userId = GetId(ClaimType.UserId); var performer = await _performerSchedulingService.GetPerformerByUserIdAsync(userId, includeImages : true); if (performer?.RegistrationCompleted != true) { return(RedirectToAction(nameof(Information))); } if (model.Images == null) { ModelState.AddModelError("Images", "Please attach an image to submit."); } else if (model.Images.Count > 0) { var extensions = model.Images.Select(_ => Path.GetExtension(_.FileName).ToLower()); if (extensions.Any(_ => !ValidImageExtensions.Contains(_))) { ModelState.AddModelError("Images", $"Image must be one of the following types: {string.Join(", ", ValidImageExtensions)}"); } else if (model.Images.Sum(_ => _.Length) > MaxUploadMB * MBSize) { ModelState.AddModelError("Images", $"Please limit uploads to a max of {MaxUploadMB}MB."); } } if (ModelState.IsValid) { foreach (var image in model.Images) { using (var fileStream = image.OpenReadStream()) { using (var ms = new MemoryStream()) { fileStream.CopyTo(ms); await _performerSchedulingService.AddPerformerImageAsync( performer.Id, ms.ToArray(), Path.GetExtension(image.FileName)); } } } ShowAlertSuccess("Image(s) added!"); return(RedirectToAction(nameof(Images))); } var performerImages = performer.Images.ToList(); performerImages.ForEach(_ => _.Filename = _pathResolver.ResolveContentPath(_.Filename)); model.IsEditable = schedulingStage == PsSchedulingStage.RegistrationOpen; model.MaxUploadMB = MaxUploadMB; model.PerformerImages = performerImages; return(View(model)); }