Ejemplo n.º 1
0
        public IActionResult UpdateArticle(ArticleModel model)
        {
            if (ModelState.IsValid)
            {
                using (var db = new FusekiContext())
                {
                    var article = db.Articles
                                  .Include(aa => aa.Tags)
                                  .First(el => el.Id == model.Id);
                    //allow extended chars in title. But links and finding will strip them.
                    article.Title = model.Title;

                    var normalized = Renderer.Normalize(model.Body);
                    article.Body = normalized;

                    var now = DateTime.Now;
                    article.Updated = now;

                    if (article.Created == DateTime.MinValue)
                    {
                        article.Created = now;
                    }

                    //rectify tags.
                    var empty = new List <string>();
                    var tags  = model.Tags?.Split(",").Select(el => el.Trim()) ?? new string[0];

                    var newTagNames = tags
                                      .Select(el => el.Trim())
                                      .Where(ee => !string.IsNullOrWhiteSpace(ee))
                                      .ToHashSet();

                    var existingTags = article.Tags.Select(el => el.Name).ToHashSet();

                    var todelete = existingTags.Except(newTagNames);
                    var toadd    = newTagNames.Except(existingTags);

                    foreach (var bad in todelete)
                    {
                        var tag = db.Tags.Where(el => el.ArticleId == article.Id && el.Name == bad).First();
                        db.Remove(tag);
                    }

                    foreach (var good in toadd)
                    {
                        var tag = CreateTag(article, good);
                        db.Add(tag);
                    }
                    db.SaveChanges();
                    return(Redirect($"../{model.Title}"));
                }
            }
            else
            {
                return(View());
            }
        }
Ejemplo n.º 2
0
        public IActionResult SetTags(int id, string tagLine = "")
        {
            if (string.IsNullOrEmpty(tagLine))
            {
                tagLine = "";
            }
            var newTags      = Helpers.TagLine2Tags(tagLine);
            var didSomething = false;
            var result       = "";

            using (var db = new FusekiContext())
            {
                var image = db.Images
                            .Include(el => el.ImageTags)
                            .FirstOrDefault(el => el.Id == id);
                var exiTags = image.ImageTags ?? new List <ImageTag>();
                //exiTags = new List<ImageTag>();
                var toDelete = new List <ImageTag>();
                foreach (var tag in newTags)
                {
                    if (exiTags.FirstOrDefault(el => el.Name == tag) == null)
                    {
                        var newImageTag = new ImageTag();
                        newImageTag.Image = image;
                        newImageTag.Name  = tag;
                        db.Add(newImageTag);
                        didSomething = true;
                        result      += $"\ncreated new tag for image: {tag}";
                    }
                }

                foreach (var exiTag in exiTags)
                {
                    if (newTags.FirstOrDefault(el => el == exiTag.Name) == null)
                    {
                        db.Remove(exiTag);
                        didSomething = true;
                        result      += $"\nremoved old tag on image: {exiTag.Name}";
                    }
                }
                if (didSomething)
                {
                    db.SaveChanges();
                }
            }

            var arm = new ActionResultModel();

            arm.NextLink            = "/image/viewall";
            arm.NextLinkDescription = "back to image list";
            arm.SetResult(result);

            return(View("ActionResult", arm));
        }