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("
");
}
}
}