Ejemplo n.º 1
0
        public async Task <IActionResult> AddTag(CardEditorModel model)
        {
            var user = await _userManager.GetUserAsync(User);

            var deck = await _context.Decks.FindAsync(model.DeckId);

            if (deck.CreatorId == user.Id && !String.IsNullOrEmpty(model.TagInput))
            {
                var card = await _context.Cards
                           .Where(card => card.Id == model.Id)
                           .Include(card => card.Tags)
                           .FirstOrDefaultAsync();

                string tagName = model.TagInput
                                 .ToLower()
                                 .Split(' ')
                                 .Aggregate((x, y) => x += "_" + y);

                var tag = await _context.CardTags.FindAsync(tagName);

                if (tag is null)
                {
                    tag = new CardTag {
                        Name = tagName
                    };
                    await _context.CardTags.AddAsync(tag);
                }

                card.Tags.Add(tag);
                _context.Cards.Update(card);
                await _context.SaveChangesAsync();
            }

            return(RedirectToAction(nameof(EditCard), new { deckId = model.DeckId, cardId = model.Id }));
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> EditCard(long deckId, long cardId = 0)
        {
            var user = await _userManager.GetUserAsync(User);

            var deck = await _context.Decks.FindAsync(deckId);

            var card = await _context.Cards
                       .Where(card => card.Id == cardId)
                       .Include(card => card.Tags)
                       .FirstOrDefaultAsync();

            string errors = TempData["ErrorMessage"] as string;

            string[] errorsArray = Array.Empty <string>();

            if (errors is not null)
            {
                errorsArray = errors.Split(", ");
            }

            if (user.Id == deck.CreatorId)
            {
                if (card is null)
                {
                    var returnModel = new CardEditorModel
                    {
                        Username = (await _userManager.GetUserAsync(User)).UserName,
                        DeckId   = deck.Id,
                        Tags     = new List <TagModel>(),
                        Errors   = errorsArray,
                    };

                    TempData["ErrorMessage"] = null;
                    return(View(returnModel));
                }
                else
                {
                    var returnModel = new CardEditorModel
                    {
                        Username      = (await _userManager.GetUserAsync(User)).UserName,
                        DeckId        = deck.Id,
                        Id            = card.Id,
                        Word          = card.Word,
                        Transcription = card.Transcription,
                        Description   = card.Description,
                        Difficulty    = card.Difficulty,
                        Tags          = card.Tags.Select(tag => new TagModel {
                            Name = tag.Name
                        }).ToList(),
                        Errors = errorsArray,
                    };

                    TempData["ErrorMessage"] = null;
                    return(View(returnModel));
                }
            }

            return(BadRequest());
        }
Ejemplo n.º 3
0
 public IActionResult EditCard([FromRoute] long deckId, [FromForm] CardEditorModel model)
 => RedirectToAction(nameof(EditCard), new { deckId, cardId = model.Id });
Ejemplo n.º 4
0
        public async Task <IActionResult> SaveChanges(CardEditorModel model)
        {
            if (ModelState.IsValid)
            {
                var deck = await _context.Decks
                           .Where(deck => deck.Id == model.DeckId)
                           .Include(deck => deck.Cards)
                           .FirstOrDefaultAsync();

                Card card;
                long returnCardId = 0;

                if (model.ExistingId == 0)
                {
                    card = deck.Cards
                           .Where(card => card.Id == model.Id)
                           .FirstOrDefault();
                }
                else
                {
                    card = await _context.Cards
                           .Where(card => card.Id == model.ExistingId)
                           .FirstOrDefaultAsync();
                }

                if (deck is not null)
                {
                    if (card is not null)
                    {
                        using (var ms = new MemoryStream())
                        {
                            if (model.Image is not null)
                            {
                                model.Image.CopyTo(ms);
                                card.Image = ms.ToArray();
                            }
                            else if (model.ImageRemoved)
                            {
                                card.Image = null;
                            }
                        }

                        card.Word          = model.Word;
                        card.Description   = model.Description;
                        card.Transcription = model.Transcription;
                        card.Difficulty    = model.Difficulty;

                        if (model.ExistingId == 0)
                        {
                            _context.Cards.Update(card);
                            returnCardId = card.Id;
                        }
                        else
                        {
                            var newCard = new Card
                            {
                                Word          = card.Word,
                                Description   = card.Description,
                                Transcription = card.Transcription,
                                Difficulty    = card.Difficulty,
                                Image         = card.Image,
                            };

                            deck.Cards.Add(newCard);
                            deck.CardNumber++;
                            _context.Decks.Update(deck);

                            await _context.SaveChangesAsync();

                            returnCardId = newCard.Id;
                        }
                    }
                    else
                    {
                        card = new Card
                        {
                            Word          = model.Word,
                            Description   = model.Description,
                            Transcription = model.Transcription,
                            Difficulty    = model.Difficulty,
                        };

                        using (var ms = new MemoryStream())
                        {
                            if (model.Image is not null)
                            {
                                model.Image.CopyTo(ms);
                                card.Image = ms.ToArray();
                            }
                            else if (model.ImageRemoved)
                            {
                                card.Image = null;
                            }
                        }

                        deck.Cards.Add(card);
                        deck.CardNumber++;
                        _context.Decks.Update(deck);
                        await _context.SaveChangesAsync();

                        returnCardId = card.Id;
                    }

                    await _context.SaveChangesAsync();
                }

                TempData["ErrorMessage"] = "";
                return(RedirectToAction(nameof(EditCard), new { deckId = model.DeckId, cardId = returnCardId }));
            }

            TempData["ErrorMessage"] = ModelState.Values
                                       .Where(x => x.Errors.Count > 0)
                                       .Select(x => x.Errors[0].ErrorMessage)
                                       .Aggregate((x, y) => x + ", " + y);

            return(RedirectToAction(nameof(EditCard), new { deckId = model.DeckId, cardId = model.Id }));
        }