using System; using System.Data; using System.Configuration; using System.Collections; using System.Collections.Generic; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using ScrewTurn.Wiki.PluginFramework; using System.Text; namespace ScrewTurn.Wiki { public partial class Print : BasePage { PageInfo page = null; PageContent content = null; protected void Page_Load(object sender, EventArgs e) { page = Pages.FindPage(Request["Page"]); if(page == null) UrlTools.RedirectHome(); // Check permissions bool canView = false; if(Request["Discuss"] == null) { canView = AuthChecker.CheckActionForPage(page, Actions.ForPages.ReadPage, SessionFacade.GetCurrentUsername(), SessionFacade.GetCurrentGroupNames()); } else { canView = AuthChecker.CheckActionForPage(page, Actions.ForPages.ReadDiscussion, SessionFacade.GetCurrentUsername(), SessionFacade.GetCurrentGroupNames()); } if(!canView) UrlTools.Redirect("AccessDenied.aspx"); content = Content.GetPageContent(page, true); Page.Title = FormattingPipeline.PrepareTitle(content.Title, false, FormattingContext.PageContent, page) + " - " + Settings.WikiTitle; PrintContent(); } /// /// Prints the content. /// public void PrintContent() { StringBuilder sb = new StringBuilder(5000); string title = FormattingPipeline.PrepareTitle(content.Title, false, FormattingContext.PageContent, page); if(Request["Discuss"] == null) { sb.Append(@"

"); sb.Append(title); sb.Append("

"); sb.Append(Content.GetFormattedPageContent(page, true)); } else { sb.Append(@"

"); sb.Append(title); sb.Append(" - Discussion

"); PrintDiscussion(sb); } lblContent.Text = sb.ToString(); } /// /// Prints a discussion. /// /// The output . private void PrintDiscussion(StringBuilder sb) { List messages = new List(Pages.GetPageMessages(page)); if(messages.Count == 0) { sb.Append(""); sb.Append(Properties.Messages.NoMessages); sb.Append(""); } else PrintSubtree(messages, null, sb); } /// /// Prints a subtree of Messages depth-first. /// /// The Messages. private void PrintSubtree(IEnumerable messages, Message parent, StringBuilder sb) { foreach(Message msg in messages) { sb.Append(@""); PrintMessage(msg, parent, sb); PrintSubtree(msg.Replies, msg, sb); sb.Append(""); } } /// /// Prints a message. /// /// The message. /// The parent message. /// The output . private void PrintMessage(Message message, Message parent, StringBuilder sb) { // Header sb.Append(@"
"); sb.Append(Preferences.AlignWithTimezone(message.DateTime).ToString(Settings.DateTimeFormat)); sb.Append(" "); sb.Append(Properties.Messages.By); sb.Append(" "); sb.Append(Users.UserLink(message.Username)); // Subject if(message.Subject.Length > 0) { sb.Append(@"
"); sb.Append(FormattingPipeline.PrepareTitle(message.Subject, false, FormattingContext.MessageBody, page)); sb.Append(""); } sb.Append("
"); // Body sb.Append(@"
"); sb.Append(FormattingPipeline.FormatWithPhase3(FormattingPipeline.FormatWithPhase1And2(message.Body, false, FormattingContext.MessageBody, page), FormattingContext.MessageBody, page)); sb.Append("
"); } } }