protected void Page_PreRender(object sender, System.EventArgs e) { SharedBasePage requestPage = Page as SharedBasePage; Control root = this; HtmlGenericControl entry = new HtmlGenericControl("div"); if (SiteSecurity.GetUserByEmail(comment.AuthorEmail) == null) { entry.Attributes["class"] = "commentBoxStyle"; } else { entry.Attributes["class"] = "commentBoxStyle commentBoxAuthorStyle"; } root.Controls.Add(entry); HtmlGenericControl entryTitle = new HtmlGenericControl("div"); entryTitle.Attributes["class"] = "commentDateStyle"; //Add the unique anchor for each comment HtmlAnchor anchor = new HtmlAnchor(); anchor.Name = comment.EntryId; entryTitle.Controls.Add(anchor); if (requestPage.SiteConfig.AdjustDisplayTimeZone) { entryTitle.Controls.Add(new LiteralControl(requestPage.SiteConfig.GetConfiguredTimeZone().FormatAdjustedUniversalTime(comment.CreatedUtc))); } else { entryTitle.Controls.Add(new LiteralControl(comment.CreatedUtc.ToString("U") + " UTC")); } entry.Controls.Add(entryTitle); HtmlGenericControl entryBody = new HtmlGenericControl("div"); if (SiteSecurity.GetUserByEmail(comment.AuthorEmail) == null) { entryBody.Attributes["class"] = "commentBodyStyle"; } else { entryBody.Attributes["class"] = "commentBodyStyle commentBodyAuthorStyle"; } if (comment.Content != null) { entryBody.Controls.Add(new LiteralControl(Regex.Replace(comment.Content, "\n", "<br />"))); } if (!requestPage.HideAdminTools && SiteSecurity.IsInRole("admin")) { HtmlGenericControl spamStatus = new HtmlGenericControl("div"); spamStatus.Attributes["class"] = "commentSpamStateStyle"; spamStatus.InnerText = ApplicationResourceTable.GetSpamStateDescription(comment.SpamState); entryBody.Controls.Add(spamStatus); } entry.Controls.Add(entryBody); HtmlGenericControl footer = new HtmlGenericControl("div"); footer.Attributes["class"] = "commentBoxFooterStyle"; entry.Controls.Add(footer); if (requestPage.SiteConfig.CommentsAllowGravatar && String.IsNullOrEmpty(comment.AuthorEmail) == false) { string hash = ""; byte[] data, enc; data = Encoding.Default.GetBytes(comment.AuthorEmail.ToLowerInvariant()); using (MD5 md5 = new MD5CryptoServiceProvider()) { enc = md5.TransformFinalBlock(data, 0, data.Length); foreach (byte b in md5.Hash) { hash += Convert.ToString(b, 16).ToLower().PadLeft(2, '0'); } md5.Clear(); } string nogravpath = ""; if (requestPage.SiteConfig.CommentsGravatarNoImgPath != null) { if (requestPage.SiteConfig.CommentsGravatarNoImgPath != "") { if (requestPage.SiteConfig.CommentsGravatarNoImgPath.Substring(0, 4) == "http") { nogravpath = "&default=" + Server.UrlEncode(requestPage.SiteConfig.CommentsGravatarNoImgPath); } else { nogravpath = "&default=" + Server.UrlEncode(requestPage.SiteConfig.Root + requestPage.SiteConfig.CommentsGravatarNoImgPath); } } } if (String.IsNullOrEmpty(requestPage.SiteConfig.CommentsGravatarNoImgPath) == false) { if (requestPage.SiteConfig.CommentsGravatarNoImgPath == "identicon" || requestPage.SiteConfig.CommentsGravatarNoImgPath == "wavatar" || requestPage.SiteConfig.CommentsGravatarNoImgPath == "monsterid" || requestPage.SiteConfig.CommentsGravatarNoImgPath.Substring(0, 4) == "http") { nogravpath = "&default=" + Server.UrlEncode(requestPage.SiteConfig.CommentsGravatarNoImgPath); } else { nogravpath = "&default=" + Server.UrlEncode(requestPage.SiteConfig.Root + requestPage.SiteConfig.CommentsGravatarNoImgPath); } } string gravborder = ""; if (requestPage.SiteConfig.CommentsGravatarBorder != null) { if (requestPage.SiteConfig.CommentsGravatarBorder != "") { gravborder = "&border=" + requestPage.SiteConfig.CommentsGravatarBorder; } } string gravsize = ""; if (requestPage.SiteConfig.CommentsGravatarSize != null) { if (requestPage.SiteConfig.CommentsGravatarSize != "") { gravsize = "&size=" + requestPage.SiteConfig.CommentsGravatarSize; } } string gravrating = ""; if (requestPage.SiteConfig.CommentsGravatarRating != null) { if (requestPage.SiteConfig.CommentsGravatarRating != "") { gravrating = "&rating=" + requestPage.SiteConfig.CommentsGravatarRating; } } HtmlGenericControl entryGRAVATAR = new HtmlGenericControl("span"); entryGRAVATAR.Attributes["class"] = "commentGravatarBlock"; entryGRAVATAR.InnerHtml = "<img class=\"commentGravatar\" src=\"http://www.gravatar.com/avatar.php?gravatar_id=" + hash + gravrating + gravsize + nogravpath + gravborder + "\"/>"; footer.Controls.Add(entryGRAVATAR); } string authorLink = null; if (comment.AuthorHomepage != null && comment.AuthorHomepage.Length > 0) { authorLink = FixUrl(comment.AuthorHomepage); } else if (comment.AuthorEmail != null && comment.AuthorEmail.Length > 0) { if (!requestPage.SiteConfig.SupressEmailAddressDisplay) { authorLink = "mailto:" + SiteUtilities.SpamBlocker(comment.AuthorEmail); } } if (authorLink != null) { HyperLink link = new HyperLink(); link.Attributes["class"] = "commentPermalinkStyle"; link.NavigateUrl = authorLink; link.Text = comment.Author; link.Attributes.Add("rel", "nofollow"); footer.Controls.Add(link); if (comment.OpenId) { System.Web.UI.WebControls.Image i = new System.Web.UI.WebControls.Image(); i.ImageUrl = "~/images/openid-icon-small.gif"; i.CssClass = "commentOpenId"; link.Controls.Add(i); Literal l = new Literal(); l.Text = comment.Author; link.Controls.Add(l); } } else { Label l = new Label(); l.Attributes["class"] = "commentPermalinkStyle"; l.Text = comment.Author; footer.Controls.Add(l); } if (!requestPage.SiteConfig.SupressEmailAddressDisplay) { if (comment.AuthorEmail != null && comment.AuthorEmail.Length > 0) { footer.Controls.Add(new LiteralControl(" | ")); HtmlGenericControl mailto = new HtmlGenericControl("span"); footer.Controls.Add(mailto); HyperLink link = new HyperLink(); link.CssClass = "commentMailToStyle"; link.NavigateUrl = "mailto:" + SiteUtilities.SpamBlocker(comment.AuthorEmail); link.Text = SiteUtilities.SpamBlocker(comment.AuthorEmail); mailto.Controls.Add(link); } } if (!requestPage.HideAdminTools && SiteSecurity.IsInRole("admin")) { if (!string.IsNullOrEmpty(comment.AuthorIPAddress)) { try { if (requestPage.SiteConfig.ResolveCommenterIP == true) { System.Net.IPHostEntry hostInfo = System.Net.Dns.GetHostEntry(comment.AuthorIPAddress); footer.Controls.Add( new LiteralControl(" (" + comment.AuthorIPAddress + " " + hostInfo.HostName + ") ")); } else { footer.Controls.Add(new LiteralControl(" (" + comment.AuthorIPAddress + ") ")); } } catch { footer.Controls.Add(new LiteralControl(" (" + comment.AuthorIPAddress + ") ")); } } footer.Controls.Add(new LiteralControl(" ")); // create delete hyperlink HyperLink deleteHl = new HyperLink(); deleteHl.CssClass = "deleteLinkStyle"; System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image(); img.CssClass = "deleteLinkImageStyle"; img.ImageUrl = new Uri(new Uri(SiteUtilities.GetBaseUrl(requestPage.SiteConfig)), requestPage.GetThemedImageUrl("deletebutton")).ToString(); img.BorderWidth = 0; deleteHl.Controls.Add(img); deleteHl.NavigateUrl = String.Format("javascript:deleteComment(\"{0}\", \"{1}\", \"{2}\")", Comment.TargetEntryId, Comment.EntryId, Comment.Author == null ? String.Empty : Comment.Author.Replace("\"", "\\\"")); ResourceManager resmgr = resmgr = ApplicationResourceTable.Get(); if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "deleteCommentScript")) { // add the javascript to allow deletion of the comment string scriptString = "<script type=\"text/javascript\" language=\"JavaScript\">\n"; scriptString += "function deleteComment(entryId, commentId, commentFrom)\n"; scriptString += "{\n"; scriptString += String.Format(" if(confirm(\"{0} \\n\\n\" + commentFrom))\n", resmgr.GetString("text_delete_confirm")); scriptString += " {\n"; scriptString += " location.href=\"deleteItem.ashx?entryid=\" + entryId + \"&commentId=\" + commentId\n"; scriptString += " }\n"; scriptString += "}\n"; scriptString += "</script>"; Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "deleteCommentScript", scriptString); } footer.Controls.Add(deleteHl); // create approve hyperlink, when a comment is not public or if its marked as spam if ((!Comment.IsPublic) || (Comment.SpamState == SpamState.Spam)) { HyperLink approveHl = new HyperLink(); approveHl.CssClass = "approveLinkStyle"; System.Web.UI.WebControls.Image okImg = new System.Web.UI.WebControls.Image(); okImg.CssClass = "approveImageStyle"; okImg.ImageUrl = new Uri(new Uri(SiteUtilities.GetBaseUrl(requestPage.SiteConfig)), requestPage.GetThemedImageUrl("okbutton-list")).ToString(); okImg.BorderWidth = 0; approveHl.Controls.Add(okImg); approveHl.NavigateUrl = String.Format("javascript:approveComment(\"{0}\", \"{1}\")", Comment.TargetEntryId, Comment.EntryId); if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "approveCommentScript")) { string approveScript = "<script type=\"text/javascript\" language=\"JavaScript\">\n"; approveScript += "function approveComment(entryId, commentId)\n"; approveScript += "{\n"; approveScript += " location.href=\"approveItem.ashx?entryid=\" + entryId + \"&commentId=\" + commentId\n"; approveScript += "}\n"; approveScript += "</script>"; Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "approveCommentScript", approveScript); } footer.Controls.Add(approveHl); } ISpamBlockingService spamBlockingService = requestPage.SiteConfig.SpamBlockingService; if ((spamBlockingService != null) && (comment.SpamState != SpamState.Spam)) { HyperLink reportSpamLink = new HyperLink(); reportSpamLink.CssClass = "approveLinkStyle"; System.Web.UI.WebControls.Image spamImg = new System.Web.UI.WebControls.Image(); spamImg.CssClass = "approveImageStyle"; spamImg.ImageUrl = new Uri(new Uri(SiteUtilities.GetBaseUrl(requestPage.SiteConfig)), requestPage.GetThemedImageUrl("reportspambutton")).ToString(); spamImg.BorderWidth = 0; reportSpamLink.Controls.Add(spamImg); reportSpamLink.NavigateUrl = String.Format("javascript:reportComment(\"{0}\", \"{1}\", \"{2}\")", Comment.TargetEntryId, Comment.EntryId, Comment.Author == null ? String.Empty : Comment.Author.Replace("\"", "\\\"")); string reportScript = "<script type=\"text/javascript\" language=\"JavaScript\">\n"; reportScript += "function reportComment(entryId, commentId, commentFrom)\n"; reportScript += "{\n"; reportScript += String.Format(" if(confirm(\"{0} \\n\\n\" + commentFrom))\n", resmgr.GetString("text_reportspam_confirm")); reportScript += " {\n"; reportScript += " location.href=\"deleteItem.ashx?report=true&entryid=\" + entryId + \"&commentId=\" + commentId\n"; reportScript += " }\n"; reportScript += "}\n"; reportScript += "</script>"; if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "reportCommentScript")) { Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "reportCommentScript", reportScript); } footer.Controls.Add(reportSpamLink); } } }