public void Reply(PrivateMessage pm, string fullText, User user) { if (pm == null || pm.PMID == 0) throw new ArgumentException("Can't reply to a PM that hasn't been persisted.", "pm"); if (String.IsNullOrWhiteSpace(fullText)) throw new ArgumentNullException("fullText"); if (user == null) throw new ArgumentNullException("user"); if (!IsUserInPM(user, pm)) throw new Exception("Can't add a PM reply for a user not part of the PM."); var post = new PrivateMessagePost { FullText = TextParsingService.ForumCodeToHtml(fullText), Name = user.Name, PMID = pm.PMID, PostTime = DateTime.UtcNow, UserID = user.UserID }; PrivateMessageRepository.AddPost(post); var users = PrivateMessageRepository.GetUsers(pm.PMID); foreach (var u in users) PrivateMessageRepository.SetArchive(pm.PMID, u.UserID, false); var now = DateTime.UtcNow; PrivateMessageRepository.UpdateLastPostTime(pm.PMID, now); PrivateMessageRepository.SetLastViewTime(pm.PMID, user.UserID, now); }
public PrivateMessage Create(string subject, string fullText, User user, List<User> toUsers) { if (String.IsNullOrWhiteSpace(subject)) throw new ArgumentNullException("subject"); if (String.IsNullOrWhiteSpace(fullText)) throw new ArgumentNullException("fullText"); if (user == null) throw new ArgumentNullException("user"); if (toUsers == null || toUsers.Count == 0) throw new ArgumentException("toUsers must include at least one user.", "toUsers"); var names = user.Name; foreach (var toUser in toUsers) names += ", " + toUser.Name; var now = DateTime.UtcNow; var pm = new PrivateMessage { Subject = TextParsingService.EscapeHtmlAndCensor(subject), UserNames = names, LastPostTime = now }; pm.PMID = PrivateMessageRepository.CreatePrivateMessage(pm); PrivateMessageRepository.AddUsers(pm.PMID, new List<int> {user.UserID}, now, true); PrivateMessageRepository.AddUsers(pm.PMID, toUsers.Select(u => u.UserID).ToList(), now.AddSeconds(-1), false); var post = new PrivateMessagePost { FullText = TextParsingService.ForumCodeToHtml(fullText), Name = user.Name, PMID = pm.PMID, PostTime = now, UserID = user.UserID }; PrivateMessageRepository.AddPost(post); return pm; }
public virtual int CreatePrivateMessage(PrivateMessage pm) { _sqlObjectFactory.GetConnection().Using(connection => pm.PMID = Convert.ToInt32( connection.Command("INSERT INTO pf_PrivateMessage (Subject, LastPostTime, UserNames) VALUES (@Subject, @LastPostTime, @UserNames)") .AddParameter("@Subject", pm.Subject) .AddParameter("@LastPostTime", pm.LastPostTime) .AddParameter("@UserNames", pm.UserNames) .ExecuteAndReturnIdentity())); return pm.PMID; }
public PrivateMessage Get(int pmID) { PrivateMessage pm = null; _sqlObjectFactory.GetConnection().Using(connection => connection.Command("SELECT PMID, Subject, LastPostTime, UserNames FROM pf_PrivateMessage WHERE PMID = @PMID") .AddParameter("@PMID", pmID) .ExecuteReader() .ReadOne(r => pm = new PrivateMessage { PMID = r.GetInt32(0), Subject = r.GetString(1), LastPostTime = r.GetDateTime(2), UserNames = r.GetString(3)})); return pm; }
public void IsUserInPMFalse() { var service = GetService(); var user = new User(1, DateTime.MinValue); var pm = new PrivateMessage { PMID = 2 }; _mockPMRepo.Setup(p => p.GetUsers(pm.PMID)).Returns(new List<PrivateMessageUser> { new PrivateMessageUser { UserID = 765 } }); Assert.False(service.IsUserInPM(user, pm)); }
public void ReplyMapsAndPresistsPost() { var service = GetService(); var post = new PrivateMessagePost(); _mockPMRepo.Setup(p => p.AddPost(It.IsAny<PrivateMessagePost>())).Callback<PrivateMessagePost>(p => post = p); var user = new User(1, DateTime.MinValue) {Name = "jeff"}; var pm = new PrivateMessage {PMID = 2}; var text = "mah message"; _mockTextParse.Setup(t => t.ForumCodeToHtml(text)).Returns(text); _mockPMRepo.Setup(p => p.GetUsers(pm.PMID)).Returns(new List<PrivateMessageUser> {new PrivateMessageUser {UserID = user.UserID}}); service.Reply(pm, text, user); Assert.AreEqual(text, post.FullText); Assert.AreEqual(user.Name, post.Name); Assert.AreEqual(user.UserID, post.UserID); Assert.AreEqual(pm.PMID, post.PMID); }
public void CreatePMPersistedIDReturned() { var service = GetService(); var persist = new PrivateMessage(); _mockPMRepo.Setup(p => p.CreatePrivateMessage(It.IsAny<PrivateMessage>())).Returns(69).Callback<PrivateMessage>(p => persist = p); _mockTextParse.Setup(t => t.EscapeHtmlAndCensor("ohqefwwf")).Returns("ohqefwwf"); var pm = service.Create("ohqefwwf", "oihefio", new User(12, DateTime.MinValue) { Name = "jeff" }, new List<User> { new User(45, DateTime.MinValue) { Name = "diana" }, new User(67, DateTime.MinValue) { Name = "simon"} }); Assert.AreEqual(69, pm.PMID); Assert.AreEqual("ohqefwwf", persist.Subject); Assert.AreEqual("jeff, diana, simon", persist.UserNames); }
public List<PrivateMessagePost> GetPosts(PrivateMessage pm) { return PrivateMessageRepository.GetPosts(pm.PMID); }
public void Unarchive(User user, PrivateMessage pm) { PrivateMessageRepository.SetArchive(pm.PMID, user.UserID, false); }
public void MarkPMRead(User user, PrivateMessage pm) { PrivateMessageRepository.SetLastViewTime(pm.PMID, user.UserID, DateTime.UtcNow); }
public bool IsUserInPM(User user, PrivateMessage pm) { var pmUsers = PrivateMessageRepository.GetUsers(pm.PMID); return (pmUsers.Where(p => p.UserID == user.UserID).Count() != 0); }
public static MvcHtmlString PMReadIndicator(this HtmlHelper helper, PrivateMessage pm, string path, string cssClass) { var alt = Resources.NoNewPosts; var image = "NoNewIndicator.png"; if (pm.LastPostTime > pm.LastViewDate) { alt = Resources.NewPosts; image = "NewIndicator.png"; } var build = new StringBuilder(); build.Append("<img src=\""); build.Append(path); build.Append(image); build.Append("\" alt=\""); build.Append(alt); build.Append("\""); if (!String.IsNullOrEmpty(cssClass)) { build.Append(" class=\""); build.Append(cssClass); build.Append("\""); } build.Append(" />"); return MvcHtmlString.Create(build.ToString()); }
public static MvcHtmlString PMReadIndicator(this HtmlHelper helper, PrivateMessage pm, string path) { return PMReadIndicator(helper, pm, path, null); }