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)); }
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)); }
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; } }
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; } } } } }
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; } } }
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)); }
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)); }
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)); }
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; } }
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; } }