public static string FormatTopicInfo(object messageId, object topicId, object userId, object topicSubject, object creationDate, int?msgCount, object msgBody) { StringBuilder retval = new StringBuilder(); string messageUrl = Various.GetTopicURL(topicId, topicSubject); string queryString = (messageUrl.IndexOf("?") > -1) ? "&" : "?"; //claculate link to last page if (!msgCount.HasValue) { msgCount = 0; } int pageCount = (int)Math.Ceiling(Convert.ToDouble(msgCount) / Settings.PageSize); if (pageCount > 1) { messageUrl += queryString + "page=" + (pageCount - 1); } messageUrl += "#post" + messageId; retval.Append("<a href=\""); retval.Append(messageUrl); retval.Append("\" title=\""); retval.Append(Formatting.StripBBCode(msgBody.ToString().Replace("\"", ""))); retval.Append("\">"); retval.Append(topicSubject.ToString().Left(20)); retval.Append("...</a>"); //retval.Append(creationDate.ToString("ddd, d MMM, yy, ")); if (creationDate != null && !(creationDate is DBNull)) { DateTime dtCreationDate = Convert.ToDateTime(creationDate); retval.Append("<div>" + ForumPage.ToAgoString(dtCreationDate) + "</div>"); } return(retval.ToString()); }
public static string GetForumBreadCrumbs(int forumID, DbConnection cn) { string retval = ""; //to save performance and prevent close/reopn connection a thousand times we do this bool openConn = (cn.State == ConnectionState.Open); if (!openConn) { cn.Open(); } //get the forum title object res = cn.ExecuteScalar("SELECT Title FROM Forums WHERE ForumID=" + forumID); if (res == null) { return(string.Empty); } string forumTitle = res.ToString(); retval = "<a href=\"" + Various.GetForumURL(forumID, forumTitle) + "\">" + forumTitle + "</a>"; //check if it's a subforum res = cn.ExecuteScalar("SELECT ParentForumID FROM ForumSubforums WHERE SubForumID=" + forumID); if (res != null) { retval = GetForumBreadCrumbs(Convert.ToInt32(res), cn) + " » " + retval; } if (!openConn) { cn.Close(); } return(retval); }
public static string FormatMessageInfo(object messageId, object topicId, object userId, object userName, object firstName, object lastName, object topicSubject, object creationDate, int?msgCount, object msgBody) { if (msgBody == null || msgBody is DBNull) //msgbody is null - probably cause messageId is wrong, probably cause LastMsgID is wrong { int?maxmsgid = RecalculateLastMessageID(Convert.ToInt32(topicId)); if (maxmsgid.HasValue) { return(GetMsgInfoByID(maxmsgid.Value, Utils.DB.CreateCommand())); } } StringBuilder retval = new StringBuilder(); string uname; if (userId != null && !(userId is DBNull) && Convert.ToInt32(userId) != 0) { uname = User.GetUserDisplayName(userName, firstName, lastName); } else { uname = Resources.various.Guest; } string messageUrl = Various.GetTopicURL(topicId, topicSubject); string queryString = (messageUrl.IndexOf("?") > -1) ? "&" : "?"; //claculate link to last page if (!msgCount.HasValue) { msgCount = 0; } int pageCount = (int)Math.Ceiling(Convert.ToDouble(msgCount) / Settings.PageSize); if (pageCount > 1) { messageUrl += queryString + "page=" + (pageCount - 1); } messageUrl += "#post" + messageId; retval.Append("<div class='gray2'>"); //retval.Append(creationDate.ToString("ddd, d MMM, yy, ")); if (creationDate != null && !(creationDate is DBNull)) { DateTime dtCreationDate = Convert.ToDateTime(creationDate); retval.Append(ForumPage.ToAgoString(dtCreationDate)); } retval.Append("<br>"); retval.Append(Resources.various.From); retval.Append(" <a href=\""); retval.Append(messageUrl); retval.Append("\" title=\""); retval.Append(Formatting.StripBBCode(msgBody.ToString().Replace("\"", ""))); retval.Append("\">"); retval.Append(uname); retval.Append("</a>"); retval.Append("</div>"); return(retval.ToString()); }
//the method sends notifications of new forum TOPICS public static void SendNewTopicNotificationEmails(int topicID, string msgBody, bool sendToModeratorsOnly, bool sendToAllButModerators) { if (!Settings.MailNotificationsEnabled) { return; } if (sendToAllButModerators && sendToModeratorsOnly) { return; //nonsense } DbCommand cmd = DB.CreateCommand(); cmd.Connection.Open(); //get topic subj and author cmd.CommandText = @"SELECT ForumTopics.UserID, ForumTopics.Subject, ForumTopics.ForumID, ForumUsers.UserName, ForumUsers.FirstName, ForumUsers.LastName FROM ForumTopics LEFT JOIN ForumUsers ON ForumTopics.UserID=ForumUsers.UserID WHERE TopicID=" + topicID; DbDataReader dr = cmd.ExecuteReader(); dr.Read(); string subject = dr["Subject"].ToString(); int userID = Convert.ToInt32(dr["UserID"]); int forumID = Convert.ToInt32(dr["ForumID"]); string msgAuthor = Utils.User.GetUserDisplayName(dr["UserName"], dr["FirstName"], dr["LastName"]); dr.Close(); List <string> recipients = new List <string>(); //notification recipients //addin subscribers to the recipients list if (!sendToModeratorsOnly) { cmd.CommandText = @"SELECT ForumUsers.Email FROM ForumNewTopicSubscriptions INNER JOIN ForumUsers ON ForumNewTopicSubscriptions.UserID = ForumUsers.UserID WHERE ForumUsers.Disabled=0 AND ForumUsers.UserID<>" + userID + " AND ForumNewTopicSubscriptions.ForumID=" + forumID; dr = cmd.ExecuteReader(); while (dr.Read()) { string email = dr["Email"].ToString(); if (!recipients.Contains(email)) { recipients.Add(email); } } dr.Close(); } //addin moderators to the recipients list if (Settings.NotifyModeratorOfNewMessages && !sendToAllButModerators) { cmd.CommandText = "SELECT ForumUsers.Email FROM ForumModerators INNER JOIN ForumUsers ON ForumModerators.UserID = ForumUsers.UserID WHERE ForumUsers.UserID<>" + userID + " AND ForumModerators.ForumID=" + forumID; dr = cmd.ExecuteReader(); while (dr.Read()) { string email = dr["Email"].ToString(); if (!recipients.Contains(email)) { recipients.Add(email); } } dr.Close(); } cmd.CommandText = "SELECT Title FROM Forums WHERE ForumID=" + forumID; string forumName = cmd.ExecuteScalar().ToString(); cmd.Connection.Close(); string topicurl = Various.ForumURL + Various.GetTopicURL(topicID, forumName); //adding "?lastpage=1" to the url if (topicurl.IndexOf("?") > -1) { topicurl += "&lastpage=1"; } else { topicurl += "?lastpage=1"; } //Create an HTML version of the messageBody as well. string htmlBody = Resources.various.NewThreadEmailBody + "<BR><P>\"" + forumName + "\" - \"" + subject + "\" - From: \"" + msgAuthor + "\"<BR><P>" + Formatting.FormatMessageHTML(msgBody) + "<BR><P><A HREF=\"" + topicurl + "\">" + topicurl + "</A>"; string mailsubj = Settings.ForumTitle + " - " + Resources.various.NewThreadEmailSubject; SendEmail(recipients.ToArray(), mailsubj, htmlBody, isHtml: true); }
//the method sends notifications of new forum MESSAGES public static void SendNewMsgNotificationEmails(int topicID, int messageID, bool sendToModeratorsOnly, bool sendToAllButModerators) { if (!Settings.MailNotificationsEnabled) { return; } int forumID; List <string> recipients = new List <string>(); string subj, msgBody, msgAuthor, forumName; using (DbConnection cn = DB.CreateOpenConnection()) { //getting topic info DbDataReader dr = cn.ExecuteReader("SELECT ForumID, Subject FROM ForumTopics WHERE TopicID=" + topicID); dr.Read(); forumID = Convert.ToInt32(dr["ForumID"]); subj = dr["Subject"].ToString(); dr.Close(); //getting the message text and author dr = cn.ExecuteReader(@"SELECT ForumMessages.UserID, ForumMessages.Body, ForumUsers.UserName, ForumUsers.FirstName, ForumUsers.LastName FROM ForumMessages LEFT JOIN ForumUsers ON ForumMessages.UserID=ForumUsers.UserID WHERE MessageID=" + messageID); dr.Read(); msgBody = dr["Body"].ToString(); int userID = Convert.ToInt32(dr["UserID"]); msgAuthor = Utils.User.GetUserDisplayName(dr["UserName"], dr["FirstName"], dr["LastName"]); dr.Close(); //addin TOPIC subscribers to the recipients list if (!sendToModeratorsOnly) { dr = cn.ExecuteReader(@"SELECT ForumUsers.Email FROM ForumSubscriptions INNER JOIN ForumUsers ON ForumSubscriptions.UserID = ForumUsers.UserID WHERE ForumUsers.Disabled=0 AND ForumUsers.UserID<>" + userID + " AND ForumSubscriptions.TopicID=" + topicID); while (dr.Read()) { string email = dr["Email"].ToString(); if (!recipients.Contains(email)) { recipients.Add(email); } } dr.Close(); //adding FORUM subscribers to the recipients list dr = cn.ExecuteReader(@"SELECT ForumUsers.Email FROM ForumNewForumMsgSubscriptions INNER JOIN ForumUsers ON ForumNewForumMsgSubscriptions.UserID = ForumUsers.UserID WHERE ForumUsers.Disabled=0 AND ForumUsers.UserID<>" + userID + " AND ForumNewForumMsgSubscriptions.ForumID=" + forumID); while (dr.Read()) { string email = dr["Email"].ToString(); if (!recipients.Contains(email)) { recipients.Add(email); } } dr.Close(); } //addin moderators to the recipients list if (Settings.NotifyModeratorOfNewMessages && !sendToAllButModerators) { dr = cn.ExecuteReader("SELECT ForumUsers.Email FROM ForumModerators INNER JOIN ForumUsers ON ForumModerators.UserID = ForumUsers.UserID WHERE ForumUsers.UserID<>" + userID + " AND ForumModerators.ForumID=" + forumID); while (dr.Read()) { string email = dr["Email"].ToString(); if (!recipients.Contains(email)) { recipients.Add(email); } } dr.Close(); } forumName = cn.ExecuteScalar("SELECT Title FROM Forums WHERE ForumID=" + forumID).ToString(); } string topicurl = Various.ForumURL + Various.GetTopicURL(topicID, subj); //adding "?lastpage=1" to the url if (topicurl.IndexOf("?") > -1) { topicurl += "&lastpage=1"; } else { topicurl += "?lastpage=1"; } //adding link to the actual post topicurl += "#post" + messageID.ToString(); string htmlBody = Resources.various.ThreadUpdatedEmailBody + "<BR><P>\"" + forumName + "\" - \"" + subj + "\" - From: \"" + msgAuthor + "\"<BR><P>" + Formatting.FormatMessageHTML(msgBody) + "<BR><P><A HREF=\"" + topicurl + "\">" + topicurl + "</A>"; string subject = Settings.ForumTitle + " - " + Resources.various.ThreadUpdatedEmailSubject; SendEmail(recipients.ToArray(), subject, htmlBody, isHtml: true); }