コード例 #1
0
        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);
                }
            }
        }