using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using ScrewTurn.Wiki.PluginFramework; namespace ScrewTurn.Wiki { public partial class AdminLog : BasePage { private const int MaxEntries = 100; protected void Page_Load(object sender, EventArgs e) { AdminMaster.RedirectToLoginIfNeeded(); if(!AdminMaster.CanManageConfiguration(SessionFacade.GetCurrentUsername(), SessionFacade.GetCurrentGroupNames())) UrlTools.Redirect("AccessDenied.aspx"); if(!Page.IsPostBack) { // Load log entries rptLog.DataBind(); } } protected void chkFilter_CheckedChanged(object sender, EventArgs e) { rptLog.DataBind(); } protected void btnNoLimit_Click(object sender, EventArgs e) { lblLimit.Visible = false; btnNoLimit.Visible = false; rptLog.DataBind(); } protected void rptLog_DataBinding(object sender, EventArgs e) { List entries = Log.ReadEntries(); List result = new List(entries.Count); int maxEntries = btnNoLimit.Visible ? MaxEntries : int.MaxValue; foreach(LogEntry entry in entries) { if(IsEntryIncluded(entry.EntryType)) { result.Add(new LogEntryRow(entry)); } } if(!Page.IsPostBack) { if(result.Count <= MaxEntries) { lblLimit.Visible = false; btnNoLimit.Visible = false; } } rptLog.DataSource = result.Take(maxEntries); } /// /// Decides whether a log entry must be displayed based on the current filtering options. /// /// The log entry type. /// true if the entry must be displayed, false otherwise. private bool IsEntryIncluded(EntryType type) { return type == EntryType.General && chkMessages.Checked || type == EntryType.Warning && chkWarnings.Checked || type == EntryType.Error && chkErrors.Checked; } protected void btnClearLog_Click(object sender, EventArgs e) { Log.ClearLog(); rptLog.DataBind(); } } /// /// Represents a log entry for display purposes. /// public class LogEntryRow { private string imageTag, dateTime, user, message, additionalClass; /// /// Initializes a new instance of the class. /// /// The original log entry. public LogEntryRow(LogEntry entry) { imageTag = entry.EntryType.ToString(); dateTime = Preferences.AlignWithTimezone(entry.DateTime).ToString(Settings.DateTimeFormat).Replace(" ", " "); user = entry.User.Replace(" ", " "); message = entry.Message.Replace("&", "&"); if(entry.EntryType == EntryType.Error) additionalClass = " error"; else if(entry.EntryType == EntryType.Warning) additionalClass = " warning"; else additionalClass = ""; } /// /// Gets the image tag. /// public string ImageTag { get { return imageTag; } } /// /// Gets the date/time. /// public string DateTime { get { return dateTime; } } /// /// Gets the user. /// public string User { get { return user; } } /// /// Gets the message. /// public string Message { get { return message; } } /// /// Gets the additional CSS class. /// public string AdditionalClass { get { return additionalClass; } } } }