示例#1
0
        public async Task <ActionResult> DeleteComment(int commentId)
        {
            var commentToDelete = _db.Comments.Find(commentId);

            if (commentToDelete != null && !commentToDelete.IsDeleted)
            {
                var commentSubverse = commentToDelete.Submission.Subverse;

                // delete comment if the comment author is currently logged in user
                if (commentToDelete.UserName == User.Identity.Name)
                {
                    commentToDelete.IsDeleted = true;
                    commentToDelete.Content   = "deleted by author at " + DateTime.Now;
                    await _db.SaveChangesAsync();
                }

                // delete comment if delete request is issued by subverse moderator
                else if (UserHelper.IsUserSubverseModerator(User.Identity.Name, commentSubverse))
                {
                    // notify comment author that his comment has been deleted by a moderator
                    MesssagingUtility.SendPrivateMessage(
                        "Voat",
                        commentToDelete.UserName,
                        "Your comment has been deleted by a moderator",
                        "Your [comment](/v/" + commentSubverse + "/comments/" + commentToDelete.SubmissionID + "/" + commentToDelete.ID + ") has been deleted by: " +
                        "/u/" + User.Identity.Name + " on: " + DateTime.Now + "  " + Environment.NewLine +
                        "Original comment content was: " + Environment.NewLine +
                        "---" + Environment.NewLine +
                        commentToDelete.Content
                        );

                    commentToDelete.IsDeleted = true;

                    // move the comment to removal log
                    var removalLog = new CommentRemovalLog
                    {
                        CommentID    = commentToDelete.ID,
                        Moderator    = User.Identity.Name,
                        Reason       = "This feature is not yet implemented",
                        CreationDate = DateTime.Now
                    };

                    _db.CommentRemovalLogs.Add(removalLog);

                    commentToDelete.Content = "deleted by a moderator at " + DateTime.Now;
                    await _db.SaveChangesAsync();
                }
            }
            if (Request.IsAjaxRequest())
            {
                return(new HttpStatusCodeResult(HttpStatusCode.OK));
            }
            var url = Request.UrlReferrer.AbsolutePath;

            return(Redirect(url));
        }
示例#2
0
        public async Task <ActionResult> DeleteComment(int commentId)
        {
            var commentToDelete = _db.Comments.Find(commentId);

            if (commentToDelete != null)
            {
                var commentSubverse = commentToDelete.Message.Subverse;

                // delete comment if the comment author is currently logged in user
                if (commentToDelete.Name == User.Identity.Name)
                {
                    commentToDelete.Name           = "deleted";
                    commentToDelete.CommentContent = "deleted by author at " + DateTime.Now;
                    await _db.SaveChangesAsync();
                }

                // delete comment if delete request is issued by subverse moderator
                else if (Utils.User.IsUserSubverseAdmin(User.Identity.Name, commentSubverse) || Utils.User.IsUserSubverseModerator(User.Identity.Name, commentSubverse))
                {
                    // notify comment author that his comment has been deleted by a moderator
                    MesssagingUtility.SendPrivateMessage(
                        "Voat",
                        commentToDelete.Name,
                        "Your comment has been deleted by a moderator",
                        "Your [comment](/v/" + commentSubverse + "/comments/" + commentToDelete.MessageId + "/" + commentToDelete.Id + ") has been deleted by: " +
                        "/u/" + User.Identity.Name + " on: " + DateTime.Now + "  " + Environment.NewLine +
                        "Original comment content was: " + Environment.NewLine +
                        "---" + Environment.NewLine +
                        commentToDelete.CommentContent
                        );

                    commentToDelete.Name = "deleted";

                    // move the comment to removal log
                    var removalLog = new CommentRemovalLog
                    {
                        CommentId        = commentToDelete.Id,
                        Moderator        = User.Identity.Name,
                        ReasonForRemoval = "This feature is not yet implemented",
                        RemovalTimestamp = DateTime.Now
                    };

                    _db.CommentRemovalLogs.Add(removalLog);

                    commentToDelete.CommentContent = "deleted by a moderator at " + DateTime.Now;
                    await _db.SaveChangesAsync();
                }
            }

            var url = Request.UrlReferrer.AbsolutePath;

            return(Redirect(url));
        }
示例#3
0
        internal static async Task SendSubmissionReplyNotification(IPrincipal user, Data.Models.Submission submission, Data.Models.Comment comment)
        {
            try
            {
                // comment reply is sent to a root comment which has no parent id, trigger post reply notification
                //var submission = DataCache.Submission.Retrieve(comment.SubmissionID);
                //var q = new QuerySubmission(comment.SubmissionID.Value);
                //var submission = await q.ExecuteAsync().ConfigureAwait(CONSTANTS.AWAIT_CAPTURE_CONTEXT);

                if (submission != null)
                {
                    // check if recipient exists
                    if (UserHelper.UserExists(submission.UserName))
                    {
                        // do not send notification if author is the same as comment author
                        if (submission.UserName != comment.UserName)
                        {
                            //BlockedUser Implementation - Submission Reply
                            if (!MesssagingUtility.IsSenderBlocked(comment.UserName, submission.UserName))
                            {
                                var message = new Domain.Models.Message();

                                message.IsAnonymized  = submission.IsAnonymized;
                                message.Recipient     = submission.UserName;
                                message.RecipientType = Domain.Models.IdentityType.User;
                                message.Sender        = comment.UserName;
                                message.SenderType    = Domain.Models.IdentityType.User;
                                message.Subverse      = submission.Subverse;
                                message.SubmissionID  = submission.ID;
                                message.CommentID     = comment.ID;
                                message.Type          = Domain.Models.MessageType.SubmissionReply;
                                message.CreationDate  = Repository.CurrentDate;

                                using (var repo = new Repository(user))
                                {
                                    var response = await repo.SendMessage(message);

                                    if (response.Success)
                                    {
                                        EventNotification.Instance.SendMessageNotice(message.Recipient, message.Sender, Domain.Models.MessageTypeFlag.CommentReply, Domain.Models.ContentType.Comment, comment.ID);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
示例#4
0
        internal static async Task SendUserMentionNotification(Submission submission, IEnumerable <string> users)
        {
            if (submission != null)
            {
                foreach (var user in users)
                {
                    if (UserHelper.UserExists(user))
                    {
                        try
                        {
                            string recipient = UserHelper.OriginalUsername(user);

                            //BlockedUser Implementation - Submission User Mention
                            if (!MesssagingUtility.IsSenderBlocked(submission.UserName, recipient))
                            {
                                if (await UserAllowsAnonMentions(user, submission.IsAnonymized))
                                {
                                    //var subverse = DataCache.Subverse.Retrieve(submission.Subverse);
                                    var message = new Domain.Models.Message();

                                    message.IsAnonymized  = submission.IsAnonymized;
                                    message.Recipient     = recipient;
                                    message.RecipientType = Domain.Models.IdentityType.User;
                                    message.Sender        = submission.UserName;
                                    message.SenderType    = Domain.Models.IdentityType.User;
                                    message.Subverse      = submission.Subverse;
                                    message.SubmissionID  = submission.ID;
                                    message.Type          = Domain.Models.MessageType.SubmissionMention;
                                    message.CreationDate  = Repository.CurrentDate;

                                    using (var repo = new Repository())
                                    {
                                        var response = await repo.SendMessage(message);

                                        if (response.Success)
                                        {
                                            EventNotification.Instance.SendMentionNotice(recipient, submission.UserName, Domain.Models.ContentType.Submission, submission.ID, submission.Content);
                                        }
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            throw ex;
                        }
                    }
                }
            }
        }
示例#5
0
        public static async Task SendUserMentionNotification(string user, Comment comment)
        {
            if (comment != null)
            {
                if (!UserHelper.UserExists(user))
                {
                    return;
                }
                try
                {
                    string recipient = UserHelper.OriginalUsername(user);

                    //BlockedUser Implementation - Comment User Mention
                    if (!MesssagingUtility.IsSenderBlocked(comment.UserName, recipient))
                    {
                        var submission = DataCache.Submission.Retrieve(comment.SubmissionID);
                        var subverse   = DataCache.Subverse.Retrieve(submission.Subverse);

                        var message = new Domain.Models.Message();

                        message.IsAnonymized  = comment.IsAnonymized;
                        message.Recipient     = recipient;
                        message.RecipientType = Domain.Models.IdentityType.User;
                        message.Sender        = comment.UserName;
                        message.SenderType    = Domain.Models.IdentityType.User;
                        message.Subverse      = subverse.Name;
                        message.SubmissionID  = submission.ID;
                        message.CommentID     = comment.ID;
                        message.Type          = Domain.Models.MessageType.CommentMention;
                        message.CreationDate  = Repository.CurrentDate;

                        using (var repo = new Repository())
                        {
                            var response = await repo.SendMessage(message);

                            if (response.Success)
                            {
                                EventNotification.Instance.SendMentionNotice(recipient, comment.UserName, Domain.Models.ContentType.Comment, comment.ID, comment.Content);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
示例#6
0
        public async Task <JsonResult> MarkAsRead(string itemType, bool?markAll, int?itemId)
        {
            if (markAll == null)
            {
                markAll = false;
            }

            // item status: true = unread, false = read
            switch (itemType)
            {
            case "privateMessage":
                if (await MesssagingUtility.MarkPrivateMessagesAsRead((bool)markAll, User.Identity.Name, itemId))
                {
                    UpdateNotificationCounts();     // update notification icon
                    Response.StatusCode = 200;
                    return(Json("Item marked as read.", JsonRequestBehavior.AllowGet));
                }
                break;
            }

            Response.StatusCode = (int)HttpStatusCode.BadRequest;
            return(Json("Bad request.", JsonRequestBehavior.AllowGet));
        }
示例#7
0
        public async Task <ActionResult> DeleteSubmission(int submissionId)
        {
            var submissionToDelete = _db.Messages.Find(submissionId);

            if (submissionToDelete != null)
            {
                // delete submission if delete request is issued by submission author
                if (submissionToDelete.Name == User.Identity.Name)
                {
                    submissionToDelete.Name = "deleted";

                    if (submissionToDelete.Type == 1)
                    {
                        submissionToDelete.MessageContent = "deleted by author at " + DateTime.Now;
                    }
                    else
                    {
                        submissionToDelete.MessageContent = "http://voat.co";
                    }

                    // remove sticky if submission was stickied
                    var existingSticky = _db.Stickiedsubmissions.FirstOrDefault(s => s.Submission_id == submissionId);
                    if (existingSticky != null)
                    {
                        _db.Stickiedsubmissions.Remove(existingSticky);
                    }

                    await _db.SaveChangesAsync();
                }

                // delete submission if delete request is issued by subverse moderator
                else if (Utils.User.IsUserSubverseAdmin(User.Identity.Name, submissionToDelete.Subverse) || Utils.User.IsUserSubverseModerator(User.Identity.Name, submissionToDelete.Subverse))
                {
                    // mark submission as deleted (TODO: don't use name, add a new bit field to messages table instead)
                    submissionToDelete.Name = "deleted";

                    // move the submission to removal log
                    var removalLog = new SubmissionRemovalLog
                    {
                        SubmissionId     = submissionToDelete.Id,
                        Moderator        = User.Identity.Name,
                        ReasonForRemoval = "This feature is not yet implemented",
                        RemovalTimestamp = DateTime.Now
                    };

                    _db.SubmissionRemovalLogs.Add(removalLog);

                    if (submissionToDelete.Type == 1)
                    {
                        // notify submission author that his submission has been deleted by a moderator
                        MesssagingUtility.SendPrivateMessage(
                            "Voat",
                            submissionToDelete.Name,
                            "Your submission has been deleted by a moderator",
                            "Your [submission](/v/" + submissionToDelete.Subverse + "/comments/" + submissionToDelete.Id + ") has been deleted by: " +
                            "/u/" + User.Identity.Name + " at " + DateTime.Now + "  " + Environment.NewLine +
                            "Original submission content was: " + Environment.NewLine +
                            "---" + Environment.NewLine +
                            "Submission title: " + submissionToDelete.Title + ", " + Environment.NewLine +
                            "Submission content: " + submissionToDelete.MessageContent
                            );
                    }
                    else
                    {
                        // notify submission author that his submission has been deleted by a moderator
                        MesssagingUtility.SendPrivateMessage(
                            "Voat",
                            submissionToDelete.Name,
                            "Your submission has been deleted by a moderator",
                            "Your [submission](/v/" + submissionToDelete.Subverse + "/comments/" + submissionToDelete.Id + ") has been deleted by: " +
                            "/u/" + User.Identity.Name + " at " + DateTime.Now + "  " + Environment.NewLine +
                            "Original submission content was: " + Environment.NewLine +
                            "---" + Environment.NewLine +
                            "Link description: " + submissionToDelete.Linkdescription + ", " + Environment.NewLine +
                            "Link URL: " + submissionToDelete.MessageContent
                            );
                    }

                    // remove sticky if submission was stickied
                    var existingSticky = _db.Stickiedsubmissions.FirstOrDefault(s => s.Submission_id == submissionId);
                    if (existingSticky != null)
                    {
                        _db.Stickiedsubmissions.Remove(existingSticky);
                    }

                    await _db.SaveChangesAsync();
                }
            }

            string url = Request.UrlReferrer.AbsolutePath;

            return(Redirect(url));
        }
示例#8
0
        public async Task <ActionResult> DeleteSubmission(int submissionId)
        {
            var submissionToDelete = _db.Messages.Find(submissionId);

            if (submissionToDelete != null)
            {
                // delete submission if delete request is issued by submission author
                if (submissionToDelete.Name == User.Identity.Name)
                {
                    submissionToDelete.Name = "deleted";

                    if (submissionToDelete.Type == 1)
                    {
                        submissionToDelete.MessageContent = "deleted by author at " + DateTime.Now;
                    }
                    else
                    {
                        submissionToDelete.MessageContent = "http://voat.co";
                    }

                    // remove sticky if submission was stickied
                    var existingSticky = _db.Stickiedsubmissions.FirstOrDefault(s => s.Submission_id == submissionId);
                    if (existingSticky != null)
                    {
                        _db.Stickiedsubmissions.Remove(existingSticky);
                    }

                    await _db.SaveChangesAsync();
                }
                // delete submission if delete request is issued by subverse moderator
                else if (Utils.User.IsUserSubverseAdmin(User.Identity.Name, submissionToDelete.Subverse) || Utils.User.IsUserSubverseModerator(User.Identity.Name, submissionToDelete.Subverse))
                {
                    if (submissionToDelete.Type == 1)
                    {
                        // notify submission author that his submission has been deleted by a moderator
                        MesssagingUtility.SendPrivateMessage(
                            "Whoaverse",
                            submissionToDelete.Name,
                            "Your submission has been deleted by a moderator",
                            "Your [submission](/v/" + submissionToDelete.Subverse + "/comments/" + submissionToDelete.Id + ") has been deleted by: " +
                            "[" + User.Identity.Name + "](/u/" + User.Identity.Name + ")" + " at " + DateTime.Now + "  " + Environment.NewLine +
                            "Original submission content was: " + Environment.NewLine +
                            "---" + Environment.NewLine +
                            "Submission title: " + submissionToDelete.Title + ", " + Environment.NewLine +
                            "Submission content: " + submissionToDelete.MessageContent
                            );

                        submissionToDelete.MessageContent = "deleted by a moderator at " + DateTime.Now;
                        submissionToDelete.Name           = "deleted";
                    }
                    else
                    {
                        // notify submission author that his submission has been deleted by a moderator
                        MesssagingUtility.SendPrivateMessage(
                            "Whoaverse",
                            submissionToDelete.Name,
                            "Your submission has been deleted by a moderator",
                            "Your [submission](/v/" + submissionToDelete.Subverse + "/comments/" + submissionToDelete.Id + ") has been deleted by: " +
                            "[" + User.Identity.Name + "](/u/" + User.Identity.Name + ")" + " at " + DateTime.Now + "  " + Environment.NewLine +
                            "Original submission content was: " + Environment.NewLine +
                            "---" + Environment.NewLine +
                            "Link description: " + submissionToDelete.Linkdescription + ", " + Environment.NewLine +
                            "Link URL: " + submissionToDelete.MessageContent
                            );

                        submissionToDelete.MessageContent = "http://voat.co";
                        submissionToDelete.Name           = "deleted";
                    }

                    // remove sticky if submission was stickied
                    var existingSticky = _db.Stickiedsubmissions.FirstOrDefault(s => s.Submission_id == submissionId);
                    if (existingSticky != null)
                    {
                        _db.Stickiedsubmissions.Remove(existingSticky);
                    }

                    await _db.SaveChangesAsync();
                }
            }

            string url = Request.UrlReferrer.AbsolutePath;

            return(Redirect(url));
        }
示例#9
0
        public static async Task SendCommentReplyNotification(Comment comment)
        {
            try
            {
                using (var _db = new voatEntities())
                {
                    Random _rnd = new Random();

                    if (comment.ParentID != null && comment.Content != null)
                    {
                        // find the parent comment and its author
                        var parentComment = _db.Comments.Find(comment.ParentID);
                        if (parentComment != null)
                        {
                            // check if recipient exists
                            if (UserHelper.UserExists(parentComment.UserName))
                            {
                                // do not send notification if author is the same as comment author
                                if (parentComment.UserName != comment.UserName)
                                {
                                    // send the message
                                    //BlockedUser Implementation - Comment Reply
                                    if (!MesssagingUtility.IsSenderBlocked(comment.UserName, parentComment.UserName))
                                    {
                                        var submission = DataCache.Submission.Retrieve(comment.SubmissionID);
                                        if (submission != null)
                                        {
                                            var subverse = DataCache.Subverse.Retrieve(submission.Subverse);

                                            var message = new Domain.Models.Message();

                                            message.IsAnonymized  = submission.IsAnonymized;
                                            message.Recipient     = parentComment.UserName;
                                            message.RecipientType = Domain.Models.IdentityType.User;
                                            message.Sender        = comment.UserName;
                                            message.SenderType    = Domain.Models.IdentityType.User;
                                            message.Subverse      = subverse.Name;
                                            message.SubmissionID  = submission.ID;
                                            message.CommentID     = comment.ID;
                                            message.Type          = Domain.Models.MessageType.CommentReply;
                                            message.CreationDate  = Repository.CurrentDate;

                                            using (var repo = new Repository())
                                            {
                                                var response = await repo.SendMessage(message);

                                                if (response.Success)
                                                {
                                                    EventNotification.Instance.SendMessageNotice(message.Recipient, message.Sender, Domain.Models.MessageTypeFlag.CommentReply, Domain.Models.ContentType.Comment, comment.ID);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
示例#10
0
        internal static async Task SendCommentReplyNotification(IPrincipal user, Data.Models.Submission submission, Data.Models.Comment comment)
        {
            try
            {
                using (var _db = new VoatOutOfRepositoryDataContextAccessor())
                {
                    Random _rnd = new Random();

                    if (comment.ParentID != null && comment.Content != null)
                    {
                        // find the parent comment and its author
                        var parentComment = _db.Comment.Find(comment.ParentID);
                        if (parentComment != null)
                        {
                            // check if recipient exists
                            if (UserHelper.UserExists(parentComment.UserName))
                            {
                                // do not send notification if author is the same as comment author
                                if (parentComment.UserName != comment.UserName)
                                {
                                    // send the message
                                    //BlockedUser Implementation - Comment Reply
                                    if (!MesssagingUtility.IsSenderBlocked(comment.UserName, parentComment.UserName))
                                    {
                                        //var submission = DataCache.Submission.Retrieve(comment.SubmissionID);
                                        //var q = new QuerySubmission(comment.SubmissionID.Value);
                                        //var submission = await q.ExecuteAsync().ConfigureAwait(CONSTANTS.AWAIT_CAPTURE_CONTEXT);

                                        if (submission != null)
                                        {
                                            //var subverse = DataCache.Subverse.Retrieve(submission.Subverse);

                                            var message = new Domain.Models.Message();

                                            message.IsAnonymized  = submission.IsAnonymized;
                                            message.Recipient     = parentComment.UserName;
                                            message.RecipientType = Domain.Models.IdentityType.User;
                                            message.Sender        = comment.UserName;
                                            message.SenderType    = Domain.Models.IdentityType.User;
                                            message.Subverse      = submission.Subverse;
                                            message.SubmissionID  = submission.ID;
                                            message.CommentID     = comment.ID;
                                            message.Type          = Domain.Models.MessageType.CommentReply;
                                            message.CreationDate  = Repository.CurrentDate;

                                            using (var repo = new Repository(user))
                                            {
                                                var response = await repo.SendMessage(message);

                                                if (response.Success)
                                                {
                                                    EventNotification.Instance.SendMessageNotice(message.Recipient, message.Sender, Domain.Models.MessageTypeFlag.CommentReply, Domain.Models.ContentType.Comment, comment.ID);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }