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());
        }
Beispiel #2
0
        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) + " &raquo; " + 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) ? "&amp;" : "?";

            //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());
        }
Beispiel #4
0
        //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);
        }
Beispiel #5
0
        //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);
        }