screwturn-4/WebApplication/Print.aspx.cs
2009-09-30 13:47:13 +00:00

128 lines
4.1 KiB
C#

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();
}
/// <summary>
/// Prints the content.
/// </summary>
public void PrintContent() {
StringBuilder sb = new StringBuilder(5000);
string title = FormattingPipeline.PrepareTitle(content.Title, false, FormattingContext.PageContent, page);
if(Request["Discuss"] == null) {
sb.Append(@"<h1 class=""pagetitle"">");
sb.Append(title);
sb.Append("</h1>");
sb.Append(Content.GetFormattedPageContent(page, true));
}
else {
sb.Append(@"<h1 class=""pagetitle"">");
sb.Append(title);
sb.Append(" - Discussion</h1>");
PrintDiscussion(sb);
}
lblContent.Text = sb.ToString();
}
/// <summary>
/// Prints a discussion.
/// </summary>
/// <param name="sb">The output <see cref="T:StringBuilder" />.</param>
private void PrintDiscussion(StringBuilder sb) {
List<Message> messages = new List<Message>(Pages.GetPageMessages(page));
if(messages.Count == 0) {
sb.Append("<i>");
sb.Append(Properties.Messages.NoMessages);
sb.Append("</i>");
}
else PrintSubtree(messages, null, sb);
}
/// <summary>
/// Prints a subtree of Messages depth-first.
/// </summary>
/// <param name="messages">The Messages.</param>
private void PrintSubtree(IEnumerable<Message> messages, Message parent, StringBuilder sb) {
foreach(Message msg in messages) {
sb.Append(@"<div" + (parent != null ? @" class=""messagecontainer""" : @" class=""rootmessagecontainer""") + ">");
PrintMessage(msg, parent, sb);
PrintSubtree(msg.Replies, msg, sb);
sb.Append("</div>");
}
}
/// <summary>
/// Prints a message.
/// </summary>
/// <param name="message">The message.</param>
/// <param name="parent">The parent message.</param>
/// <param name="sb">The output <see cref="T:StringBuilder" />.</param>
private void PrintMessage(Message message, Message parent, StringBuilder sb) {
// Header
sb.Append(@"<div class=""messageheader"">");
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(@"<br /><span class=""messagesubject"">");
sb.Append(FormattingPipeline.PrepareTitle(message.Subject, false, FormattingContext.MessageBody, page));
sb.Append("</span>");
}
sb.Append("</div>");
// Body
sb.Append(@"<div class=""messagebody"">");
sb.Append(FormattingPipeline.FormatWithPhase3(FormattingPipeline.FormatWithPhase1And2(message.Body, false, FormattingContext.MessageBody, page),
FormattingContext.MessageBody, page));
sb.Append("</div>");
}
}
}