public int ApproveMember(int id) { if (Members.IsAdmin() == false) throw new Exception("You cannot approve this member"); var memberService = UmbracoContext.Application.Services.MemberService; var member = memberService.GetById(id); if (member == null) throw new Exception("Member not found"); var minimumKarma = 71; if (member.GetValue<int>("reputationCurrent") < minimumKarma) { member.SetValue("reputationCurrent", minimumKarma); member.SetValue("reputationTotal", minimumKarma); memberService.Save(member); } var rolesForUser = Roles.GetRolesForUser(member.Username); if(rolesForUser.Contains("potentialspam")) memberService.DissociateRole(member.Id, "potentialspam"); if(rolesForUser.Contains("newaccount")) memberService.DissociateRole(member.Id, "newaccount"); var topicService = new TopicService(ApplicationContext.Current.DatabaseContext); var commentService = new CommentService(ApplicationContext.Current.DatabaseContext, topicService); var comments = commentService.GetAllCommentsForMember(member.Id); foreach (var comment in comments) { if (comment.IsSpam) { comment.IsSpam = false; commentService.Save(comment); var topic = topicService.GetById(comment.TopicId); var topicUrl = topic.GetUrl(); var commentUrl = string.Format("{0}#comment-{1}", topicUrl, comment.Id); var memberName = member.Name; commentService.SendNotifications(comment, memberName, commentUrl); } } var topics = topicService.GetLatestTopicsForMember(member.Id, false, 100); foreach (var topic in topics) { if (topic.IsSpam) { topic.IsSpam = false; topicService.Save(topic); topicService.SendNotifications(topic, member.Name, topic.GetUrl()); } } var newForumTopicNotification = new NotificationsCore.Notifications.AccountApproved(); newForumTopicNotification.SendNotification(member.Email); SendSlackNotification(BuildBlockedNotifactionPost(Members.GetCurrentMember().Name, member.Id, false)); return minimumKarma; }
void TopicSolved(object sender, ActionEventArgs e) { var ts = new TopicService(ApplicationContext.Current.DatabaseContext); var cs = new CommentService(ApplicationContext.Current.DatabaseContext, ts); Action a = (Action)sender; if (a.Alias == "TopicSolved") { var c = cs.GetById(e.ItemId); if (c != null) { var t = ts.GetById(c.TopicId); //if performer and author of the topic is the same... go ahead.. if ((e.PerformerId == t.MemberId || ModeratorRoles.Split(',').Any(x => Roles.IsUserInRole(x))) && t.Answer == 0) { //receiver of points is the comment author. e.ReceiverId = c.MemberId; //remove any previous votes by the author on this comment to ensure the solution is saved instead of just the vote a.ClearVotes(e.PerformerId, e.ItemId); //this uses a non-standard coloumn in the forum schema, so this is added manually.. t.Answer = c.Id; ts.Save(t); } } } }
public CommentService(DatabaseContext dbContext, TopicService topicService) { if (dbContext == null) throw new ArgumentNullException("dbContext"); if (topicService == null) throw new ArgumentNullException("topicService"); _databaseContext = dbContext; _topicService = topicService; }
public SimpleDataSet CreateNewDocument(int id) { var ts = new TopicService(ApplicationContext.Current.DatabaseContext); var forumTopic = ts.QueryById(id); var simpleDataSet = new SimpleDataSet { NodeDefinition = new IndexedNode(), RowData = new Dictionary<string, string>() }; return MapTopicToSimpleDataIndexItem(forumTopic, simpleDataSet, forumTopic.Id, "forum"); }
public void SendNotification(Comment comment, string memberName, string url) { var topicService = new TopicService(ApplicationContext.Current.DatabaseContext); var topic = topicService.GetById(comment.TopicId); var db = ApplicationContext.Current.DatabaseContext.Database; var sql = new Sql().Select("memberId") .From("forumTopicSubscribers") .Where("topicId = @topicId", new { topicId = topic.Id }); var results = db.Query<int>(sql).ToList(); using (ContextHelper.EnsureHttpContext()) { var memberShipHelper = new MembershipHelper(UmbracoContext.Current); foreach (var memberId in results.Where(memberId => memberId != comment.MemberId)) { try { var member = memberShipHelper.GetById(memberId); if (member.GetPropertyValue<bool>("bugMeNot")) continue; var from = new MailAddress(_details.SelectSingleNode("//from/email").InnerText, _details.SelectSingleNode("//from/name").InnerText); var subject = string.Format(_details.SelectSingleNode("//subject").InnerText, topic.Title); var domain = _details.SelectSingleNode("//domain").InnerText; var body = _details.SelectSingleNode("//body").InnerText; body = string.Format(body, topic.Title, "https://" + domain + url + "#comment-" + comment.Id, memberName, HttpUtility.HtmlDecode(umbraco.library.StripHtml(comment.Body))); var mailMessage = new MailMessage { Subject = subject, Body = body }; mailMessage.To.Add(member.GetPropertyValue<string>("Email")); mailMessage.From = @from; using (var smtpClient = new SmtpClient()) { smtpClient.Send(mailMessage); } } catch (Exception exception) { LogHelper.Error<NewForumComment>( string.Format("Error sending mail to member id {0}", memberId), exception); } } } }
public IEnumerable<SimpleDataSet> GetAllData(string indexType) { var ts = new TopicService(ApplicationContext.Current.DatabaseContext); foreach (var topic in ts.QueryAll(maxCount:int.MaxValue)) { //Add the item to the index.. var simpleDataSet = new SimpleDataSet { NodeDefinition = new IndexedNode(), RowData = new Dictionary<string, string>() }; yield return MapTopicToSimpleDataIndexItem(topic, simpleDataSet, topic.Id, "forum"); } }
void TopicVote(object sender, ActionEventArgs e) { var ts = new TopicService(ApplicationContext.Current.DatabaseContext); Action a = (Action)sender; if (a.Alias == "LikeTopic" || a.Alias == "DisLikeTopic") { var t = ts.GetById(e.ItemId); e.ReceiverId = t.MemberId; } }
public int ApproveMember(int id) { if (Members.IsAdmin() == false) throw new Exception("You cannot approve this member"); var memberService = UmbracoContext.Application.Services.MemberService; var member = memberService.GetById(id); if (member == null) throw new Exception("Member not found"); var minimumKarma = 71; if (member.GetValue<int>("reputationCurrent") < minimumKarma) { member.SetValue("reputationCurrent", minimumKarma); member.SetValue("reputationTotal", minimumKarma); memberService.Save(member); } var rolesForUser = Roles.GetRolesForUser(member.Username); if(rolesForUser.Contains("potentialspam")) memberService.DissociateRole(member.Id, "potentialspam"); if(rolesForUser.Contains("newaccount")) memberService.DissociateRole(member.Id, "newaccount"); var topicService = new TopicService(ApplicationContext.Current.DatabaseContext); var commentService = new CommentService(ApplicationContext.Current.DatabaseContext, topicService); var comments = commentService.GetAllCommentsForMember(member.Id); foreach (var comment in comments) { if (comment.IsSpam) { comment.IsSpam = false; commentService.Save(comment); } } var topics = topicService.GetLatestTopicsForMember(member.Id, false, 100); foreach (var topic in topics) { if (topic.IsSpam) { topic.IsSpam = false; topicService.Save(topic); } } return minimumKarma; }
public static void SendSlackSpamReport(string postBody, int topicId, string commentType, int memberId) { var ts = new TopicService(ApplicationContext.Current.DatabaseContext); using (var client = new WebClient()) { var topic = ts.GetById(topicId); var post = string.Format("Topic title: *{0}*\n\n Link to topic: http://our.umbraco.org{1}\n\n", topic.Title, topic.GetUrl()); post = post + string.Format("{0} text: {1}\n\n", commentType, postBody); post = post + string.Format("Go to member http://our.umbraco.org/member/{0}\n\n", memberId); var body = string.Format("The following forum post was marked as spam by the spam system, if this is incorrect make sure to mark it as ham.\n\n{0}", post); if (memberId != 0) { var member = ApplicationContext.Current.Services.MemberService.GetById(memberId); if (member != null) { var querystring = string.Format("api?ip={0}&email={1}&f=json", Utils.GetIpAddress(), HttpUtility.UrlEncode(member.Email)); body = body + string.Format("Check the StopForumSpam rating: http://api.stopforumspam.org/{0}", querystring); } } body = body.Replace("&", "&").Replace("<", "<").Replace(">", ">"); var values = new NameValueCollection { {"channel", ConfigurationManager.AppSettings["SlackChannel"]}, {"token", ConfigurationManager.AppSettings["SlackToken"]}, {"username", ConfigurationManager.AppSettings["SlackUsername"]}, { "icon_url", ConfigurationManager.AppSettings["SlackIconUrl"]}, {"text", body} }; try { var data = client.UploadValues("https://slack.com/api/chat.postMessage", "POST", values); var response = client.Encoding.GetString(data); } catch (Exception ex) { Log.Add(LogTypes.Error, new User(0), -1, string.Format("Posting update to Slack failed {0} {1}", ex.Message, ex.StackTrace)); } } }
void CommentService_Created(object sender, CommentEventArgs e) { var ts = new TopicService(ApplicationContext.Current.DatabaseContext); //Subscribe to topic var ns = new NotificationService(ApplicationContext.Current.DatabaseContext); ns.SubscribeToForumTopic(e.Comment.TopicId, e.Comment.MemberId); //data for notification: var membershipHelper = new MembershipHelper(Umbraco.Web.UmbracoContext.Current); var member = membershipHelper.GetById(e.Comment.MemberId); var memberName = string.Empty; if (member != null) memberName = member.Name; var topic = ts.GetById(e.Comment.TopicId); //send notifications InstantNotification not = new InstantNotification(); not.Invoke(Config.ConfigurationFile, Config.AssemblyDir, "NewComment", e.Comment, topic, topic.GetUrl(), memberName); }
void CommentVote(object sender, ActionEventArgs e) { Action a = (Action)sender; var ts = new TopicService(ApplicationContext.Current.DatabaseContext); var cs = new CommentService(ApplicationContext.Current.DatabaseContext, ts); if (a.Alias == "LikeComment" || a.Alias == "DisLikeComment") { var c = cs.GetById(e.ItemId); if (c != null) { e.ReceiverId = c.MemberId; } } else if (a.Alias == "TopicSolved") { var c = cs.GetById(e.ItemId); var t = ts.GetById(c.TopicId); e.Cancel = t.Answer > 0; } }
private static bool NewAndPostsALot(IMember member) { var ts = new TopicService(ApplicationContext.Current.DatabaseContext); var topics = ts.GetAuthorLatestTopics(member.Id); var topicsInHourAfterSignup = new List<ReadOnlyTopic>(); var topicsInFirstDayAfterSignup = new List<ReadOnlyTopic>(); foreach (var topic in topics) { if((topic.Created - member.CreateDate).Hours <= 1) topicsInHourAfterSignup.Add(topic); if ((topic.Created - member.CreateDate).Days <= 1) topicsInFirstDayAfterSignup.Add(topic); } if (topicsInHourAfterSignup.Count >= 3) return true; if (topicsInFirstDayAfterSignup.Count >= 5) return true; var cs = new CommentService(ApplicationContext.Current.DatabaseContext, ts); var comments = cs.GetAllCommentsForMember(member.Id); var commentsInHourAfterSignup = new List<Comment>(); var commentsInFirstDayAfterSignup = new List<Comment>(); foreach (var comment in comments) { if ((comment.Created - member.CreateDate).Hours <= 1) commentsInHourAfterSignup.Add(comment); if ((comment.Created - member.CreateDate).Days <= 1) commentsInFirstDayAfterSignup.Add(comment); } if (commentsInHourAfterSignup.Count >= 3) return true; if (commentsInFirstDayAfterSignup.Count >= 5) return true; return false; }
protected ForumControllerBase() { TopicService = new TopicService(DatabaseContext); CommentService = new CommentService(DatabaseContext, TopicService); ForumService = new ForumService(DatabaseContext); }
public void Flag(Flag flag) { var post = string.Format("A {0} has been flagged as spam for a moderator to check\n", flag.TypeOfPost); var member = Members.GetById(flag.MemberId); post = post + string.Format("Flagged by member {0} https://our.umbraco.org/member/{1}\n", member.Name, member.Id); var topicId = flag.Id; var posterId = 0; var ts = new TopicService(ApplicationContext.Current.DatabaseContext); if (flag.TypeOfPost == "comment") { var cs = new CommentService(ApplicationContext.Current.DatabaseContext, ts); var comment = cs.GetById(flag.Id); topicId = comment.TopicId; posterId = comment.MemberId; } var topic = ts.GetById(topicId); if (flag.TypeOfPost == "thread") { posterId = topic.MemberId; } post = post + string.Format("Topic title: *{0}*\nLink to author: http://our.umbraco.org/member/{1}\n Link to {2}: http://our.umbraco.org{3}{4}\n\n", topic.Title, posterId, flag.TypeOfPost, topic.GetUrl(), flag.TypeOfPost == "comment" ? "#comment-" + flag.Id : string.Empty); SendSlackNotification(post); }
public void DeleteMemberPlus(int id) { if (Members.IsHq() == false) throw new Exception("You cannot delete this member"); var memberService = UmbracoContext.Application.Services.MemberService; var member = memberService.GetById(id); if (member == null) throw new Exception("Member not found"); var topicService = new TopicService(ApplicationContext.Current.DatabaseContext); var commentService = new CommentService(ApplicationContext.Current.DatabaseContext, topicService); var comments = commentService.GetAllCommentsForMember(member.Id); foreach (var comment in comments) { commentService.Delete(comment); } var topics = topicService.GetLatestTopicsForMember(member.Id, false, 100); foreach (var topic in topics) { // Only delete if this member started the topic if(topic.MemberId == member.Id) topicService.Delete(topic); } memberService.Delete(member); }