public async Task <IActionResult> Edit(string id, [Bind("ID,Nome,Validade,DataDeCriacao,Password,ServicoFK,Enviado")] Partilhavel partilhavel, string PhotosIDs, string returnUrl) { if (id != partilhavel.ID) { return(NotFound()); } if (String.IsNullOrEmpty(PhotosIDs)) { ModelState.AddModelError("Fotografia", "Não foram selecionadas fotografias."); } if (ModelState.IsValid) { #region Associar fotografias ao partilhável try { var toRemoveArray = await _context.Partilhaveis_Fotografias.Where(pf => pf.PartilhavelFK.Equals(partilhavel.ID)).ToArrayAsync(); _context.RemoveRange(toRemoveArray); var toAddArray = PhotosIDs.Split(",").Select(f => new Partilhavel_Fotografia() { PartilhavelFK = partilhavel.ID, FotografiaFK = Int32.Parse(f) }).ToArray(); await _context.AddRangeAsync(toAddArray); } catch (Exception e) { await _logger.LogError( descricao : "Erro ao editar Partilhavel, Partilhaveis_Fotografias.", classe : "PartilhaveisController", metodo : "Edit", erro : e.Message ); } #endregion try { _context.Update(partilhavel); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException e) { if (!PartilhavelExists(partilhavel.ID)) { return(NotFound()); } else { await _logger.LogError( descricao : "Erro ao editar Partilhavel.", classe : "PartilhaveisController", metodo : "Edit", erro : e.Message ); } } TempData["Feedback"] = "Partilhável editado com sucesso."; TempData["Type"] = "success"; return(RedirectToAction("Details", new { id = partilhavel.ID })); } returnUrl = returnUrl ?? Url.Action("Index", "Partilhaveis"); ViewData["returnUrl"] = returnUrl; return(View(new PartilhavelEditViewModel() { Partilhavel = partilhavel, PhotosIDs = PhotosIDs })); }
public async Task <IActionResult> Create([Bind("ID,Nome,Validade,Password,ServicoFK")] Partilhavel partilhavel, string PhotosIDs, string returnUrl, bool usePassword = false) { if (String.IsNullOrEmpty(PhotosIDs)) { ModelState.AddModelError("Fotografia", "Não foram selecionadas fotografias."); } if (ModelState.IsValid) { #region Associar fotografias ao partilhável try { var pfList = PhotosIDs.Split(',').Select(photoId => new Partilhavel_Fotografia() { FotografiaFK = Int32.Parse(photoId), PartilhavelFK = partilhavel.ID }).ToList(); partilhavel.Partilhaveis_Fotografias = pfList; } catch (Exception e) { await _logger.LogError( descricao : "Erro associar fotografias a um novo partilhável.", classe : "PartilhaveisController", metodo : "Create", erro : e.Message ); } #endregion #region Tratamento da password // Caso o utilizador não deseje ser ele a escolher a password // Irá ser criada uma password pela aplicação if (!usePassword) { // Cria um id, ex: "a0f118c8-8e40-4433-a695-e5ca01788331", escolhe apenas "a0f118c8" partilhavel.Password = Guid.NewGuid().ToString().Split('-')[0]; } #endregion try { partilhavel.DataDeCriacao = DateTime.Now; partilhavel.Enviado = false; _context.Add(partilhavel); await _context.SaveChangesAsync(); } catch (Exception e) { await _logger.LogError( descricao : "Erro ao criar Partilhavel.", classe : "PartilhaveisController", metodo : "Create", erro : e.Message ); } TempData["Feedback"] = "Partilhável criado com sucesso."; TempData["Type"] = "success"; return(RedirectToAction("Details", new { id = partilhavel.ID })); } partilhavel.Servico = await _context.Servicos.FindAsync(partilhavel.ServicoFK); returnUrl = returnUrl ?? Url.Action("Index", "Partilhaveis"); ViewData["returnUrl"] = returnUrl; return(View(partilhavel)); }