示例#1
0
 public void ArchiveAudit(Blog b, string auditor, BlogAudit.Action action, bool amend, string reason = "")
 {
     _taskQueue.QueueBackgroundWorkItem(Job.CreateJob(new ArchiveAuditArgs {
         Action = action, Auditor = auditor, BlogId = b.BlogID, IsAmend = amend, Reason = reason
     }));
 }
示例#2
0
        public async Task <JsonResult> Vote(int id, BlogAudit.Action auditAction, string reason)
        {
            if (!new[] { BlogAudit.Action.VoteApprove, BlogAudit.Action.VoteDeny, BlogAudit.Action.None }.Contains(auditAction))
            {
                return(Json(new { success = false }));
            }
            var blog = _db.Blogs.Include("blogAudits").SingleOrDefault(b => b.BlogID == id);
            var user = _udb.Users.Include("auditor").Where(u => u.UserName == User.Identity.Name).Single();

            if (blog == null || blog.isApproved != null)
            {
                return(Json(new { success = false, blogGone = true }));
            }
            if (user.auditor == null)
            {
                user.auditor = new Auditor();
                await _udb.SaveChangesAsync();
            }
            var version = blog.blogAudits.Where(ba => ba.AuditAction == BlogAudit.Action.Approve || ba.AuditAction == BlogAudit.Action.Deny)
                          .DefaultIfEmpty().Max(bm => bm == null ? 0 : bm.BlogVersion) + 1;
            var audit = _db.BlogAudits.Find(id, User.Identity.Name, version)
                        ?? _db.BlogAudits.Add(new BlogAudit {
                Auditor = User.Identity.Name, BlogID = id, BlogVersion = version
            });

            if (audit.AuditAction == auditAction)
            {
                return(Json(new { success = true }));
            }
            audit.AuditAction = auditAction;
            audit.AuditDate   = DateTime.Now;
            audit.Reason      = reason;
            await _db.SaveChangesAsync();

            // Calculate votes
            var   setting            = _dataSettings;
            var   latestAudits       = blog.blogAudits.Where(b => b.BlogVersion == version).ToList();
            var   latestAuditAuthors = latestAudits.Select(ba => ba.Auditor);
            var   auditors           = _udb.Auditors.Include(a => a.User).Where(a => latestAuditAuthors.Contains(a.User.UserName)).ToDictionary(a => a.User.UserName.ToLower());
            bool  needRefresh        = false;
            float denyScore          = latestAudits.Where(b => b.AuditAction == BlogAudit.Action.VoteDeny).Aggregate(0F, (score, ba) => score + auditors[ba.Auditor.ToLower()].Accuracy);

            if (denyScore >= setting.BlogDenyThreshold && setting.BlogDenyThreshold > 0)
            {
                DenyBlog(blog, "admin", true, latestAudits.Aggregate(new StringBuilder("投稿未通过审核。审核组给出的原因:<br>"),
                                                                     (sb, ba) => sb.AppendFormat("{0}:{1}<br>", ba.Auditor, string.IsNullOrEmpty(ba.Reason) ? "不通过" : ba.Reason)).ToString());
                needRefresh = true;
            }
            else
            {
                float approveScore = latestAudits.Where(b => b.AuditAction == BlogAudit.Action.VoteApprove).Aggregate(0F, (score, ba) => score + auditors[ba.Auditor.ToLower()].Accuracy);
                if (approveScore >= setting.BlogApproveThreshold && setting.BlogApproveThreshold > 0)
                {
                    ApproveBlog(blog, "admin", blog.Rating == 0);
                    needRefresh = true;
                }
            }
            await _db.SaveChangesAsync();

            return(Json(new { success = true, needRefresh = needRefresh }));
        }