示例#1
0
        public async Task <JsonResult> EditTag(string TagToAdd, int[] TagToDel, int BlogID)
        {
            var TagsToAdd = TagUtil.SplitTags(TagToAdd);

            if (TagsToAdd.Any(t => t.Length > 20))
            {
                return(Json(new { errmsg = "标签不得超过20字符" }));
            }
            else
            {
                Blog b = _db.Blogs.Find(BlogID);
                if (b == null || BlogID <= 0 || (b.option != null && b.option.LockTags))
                {
                    return(Json(new { errmsg = "无效id,请刷新重试" }));
                }
                var tibs = await _db.TagsInBlogs.Include(tib => tib.tag).Where(t => t.BlogID == BlogID).ToListAsync();

                // Remove TagToAdd items from TagsToDel
                var TagsToDel = TagToDel == null ?
                                new TagsInBlog[0] :
                                tibs.Where(tib => TagToDel.Contains(tib.TagID) && !TagsToAdd.Contains(tib.tag.TagName, SqlStringComparer.Instance)).ToArray();
                // Remove already exist tags from TagsToAdd
                TagsToAdd = TagsToAdd.Where(s => tibs.All(tib => !SqlStringComparer.Instance.Equals(tib.tag.TagName, s))).ToArray();

                if (tibs.Any(tib => !tib.IsRemovable(b.Author, User.Identity.Name, _blogUtil.CheckAdmin(), HarmonySettings.BlacklistTags) && TagToDel.Contains(tib.TagID)))
                {
                    return(Json(new { errmsg = "您不能删除作者添加的或黑名单标签" }));
                }
                if (tibs.Count + TagsToAdd.Length - TagsToDel.Length > 10)
                {
                    return(Json(new { errmsg = "标签不得超过10个" }));
                }
                else if (tibs.Count + TagsToAdd.Length - TagsToDel.Length < 1)
                {
                    return(Json(new { errmsg = "请至少添加一个标签" }));
                }
                List <Tag> AddedTags = _tagUtil.AddTagsForBlog(BlogID, TagsToAdd, User.Identity.Name);
                _db.TagHistories.AddRange(TagsToDel.Select(tib => new TagHistory
                {
                    AddBy    = tib.AddBy,
                    BlogID   = BlogID,
                    DeleteBy = User.Identity.Name,
                    TagName  = tib.tag.TagName,
                    Time     = DateTime.Now
                }));
                _db.TagsInBlogs.RemoveRange(TagsToDel);

                bool isHarmony = BlogHelper.BlogIsHarmony(_db, b, HarmonySettings);
                if (isHarmony != b.isHarmony)
                {
                    b.isHarmony = isHarmony;
                    _cacheService.ClearHPCache(this, null);
                }
                await _db.SaveChangesAsync();

                var currentTags = tibs.Except(TagsToDel).Select(tib => tib.tag).Concat(AddedTags).OrderBy(t => t.TagName);
                TriggerEditTags(b, currentTags);
                return(Json(AddedTags.ToDictionary(t => t.TagID.ToString(), t => t.TagName)));
            }
        }