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; using System.Globalization; namespace ScrewTurn.Wiki { public partial class AllPages : BasePage { /// /// The number of items in a page. /// public const int PageSize = 50; private int selectedPage = 0; private int rangeBegin = 0; private int rangeEnd = PageSize - 1; private IList currentPages = null; protected void Page_Load(object sender, EventArgs e) { Page.Title = Properties.Messages.AllPagesTitle + " - " + Settings.WikiTitle; LoginTools.VerifyReadPermissionsForCurrentNamespace(); if(Request["Cat"] != null) { if(Request["Cat"].Equals("-")) lblPages.Text = Properties.Messages.UncategorizedPages; else lblPages.Text = Properties.Messages.PagesOfCategory + " " + Request["Cat"] + ""; } if(!Page.IsPostBack) { lnkCategories.NavigateUrl = UrlTools.BuildUrl("Category.aspx"); lnkSearch.NavigateUrl = UrlTools.BuildUrl("Search.aspx"); currentPages = GetAllPages(); pageSelector.ItemCount = currentPages.Count; string p = Request["Page"]; if(!int.TryParse(p, out selectedPage)) selectedPage = 0; pageSelector.SelectPage(selectedPage); } // Important note // This page cannot use a repeater because the page list has particular elements used for grouping pages PrintPages(); } protected void pageSelector_SelectedPageChanged(object sender, SelectedPageChangedEventArgs e) { rangeBegin = e.SelectedPage * PageSize; rangeEnd = rangeBegin + e.ItemCount - 1; selectedPage = e.SelectedPage; PrintPages(); } /// /// Gets the creator of a page. /// /// The page. /// The creator. private string GetCreator(PageInfo page) { List baks = Pages.GetBackups(page); PageContent content = null; if(baks.Count > 0) { content = Pages.GetBackupContent(page, baks[0]); } else { content = Content.GetPageContent(page, false); } return content.User; } /// /// Gets all the pages in the namespace. /// /// The pages. private IList GetAllPages() { IList pages = null; // Categories Management if(Request["Cat"] != null) { if(Request["Cat"].Equals("-")) { pages = Pages.GetUncategorizedPages(DetectNamespaceInfo()); } else { CategoryInfo cat = Pages.FindCategory(Request["Cat"]); if(cat != null) { pages = new PageInfo[cat.Pages.Length]; for(int i = 0; i < cat.Pages.Length; i++) { pages[i] = Pages.FindPage(cat.Pages[i]); } } else return new List(); } } else { pages = Pages.GetPages(DetectNamespaceInfo()); } return pages; } /// /// Prints the pages. /// public void PrintPages() { StringBuilder sb = new StringBuilder(65536); if(currentPages == null) currentPages = GetAllPages(); // Prepare ExtendedPageInfo array ExtendedPageInfo[] tempPageList = new ExtendedPageInfo[rangeEnd - rangeBegin + 1]; PageContent cnt; for(int i = 0; i < tempPageList.Length; i++) { cnt = Content.GetPageContent(currentPages[rangeBegin + i], true); tempPageList[i] = new ExtendedPageInfo(currentPages[rangeBegin + i], cnt.Title, cnt.LastModified, GetCreator(currentPages[rangeBegin + i]), cnt.User); } // Prepare for sorting bool reverse = false; SortingMethod sortBy = SortingMethod.Title; if(Request["SortBy"] != null) { try { sortBy = (SortingMethod)Enum.Parse(typeof(SortingMethod), Request["SortBy"], true); } catch { // Backwards compatibility if(Request["SortBy"].ToLowerInvariant() == "date") sortBy = SortingMethod.DateTime; } if(Request["Reverse"] != null) reverse = true; } SortedDictionary> sortedPages = PageSortingTools.Sort(tempPageList, sortBy, reverse); sb.Append(@""); sb.Append(""); sb.Append(@""); // Page title sb.Append(@""); // Message count sb.Append(@""); // Creation date/time sb.Append(@""); // Mod. date/time sb.Append(@""); // Creator sb.Append(@""); // Last author sb.Append(@""); // Categories sb.Append(""); sb.Append(""); sb.Append(""); foreach(SortingGroup key in sortedPages.Keys) { List pageList = sortedPages[key]; for(int i = 0; i < pageList.Count; i++) { if(i == 0) { // Add group header sb.Append(@""); if(sortBy == SortingMethod.Title) { sb.AppendFormat("", key.Label); } else if(sortBy == SortingMethod.Creation) { sb.AppendFormat("", key.Label); } else if(sortBy == SortingMethod.DateTime) { sb.AppendFormat("", key.Label); } else if(sortBy == SortingMethod.Creator) { sb.AppendFormat("", key.Label); } else if(sortBy == SortingMethod.User) { sb.AppendFormat("", key.Label); } sb.Append(""); } sb.Append(@""); // Page title sb.Append(@""); // Message count sb.Append(@""); // Creation date/time sb.Append(@""); // Mod. date/time sb.Append(@""); // Creator sb.Append(@""); // Last author sb.Append(@""); // Categories CategoryInfo[] cats = Pages.GetCategoriesForPage(pageList[i].PageInfo); sb.Append(@""); sb.Append(""); } } sb.Append(""); sb.Append("
"); sb.Append(Properties.Messages.PageTitle); sb.Append((reverse && sortBy.Equals("title") ? " ↑" : "")); sb.Append((!reverse && sortBy.Equals("title") ? " ↓" : "")); sb.Append(""); sb.Append(Properties.Messages.CreatedOn.Replace(" ", " ")); sb.Append((reverse && sortBy.Equals("creation") ? " ↑" : "")); sb.Append((!reverse && sortBy.Equals("creation") ? " ↓" : "")); sb.Append(""); sb.Append(Properties.Messages.ModifiedOn.Replace(" ", " ")); sb.Append((reverse && sortBy.Equals("date") ? " ↑" : "")); sb.Append((!reverse && sortBy.Equals("date") ? " ↓" : "")); sb.Append(""); sb.Append(Properties.Messages.CreatedBy.Replace(" ", " ")); sb.Append((reverse && sortBy.Equals("creator") ? " ↑" : "")); sb.Append((!reverse && sortBy.Equals("creator") ? " ↓" : "")); sb.Append(""); sb.Append(Properties.Messages.ModifiedBy.Replace(" ", " ")); sb.Append((reverse && sortBy.Equals("user") ? " ↑" : "")); sb.Append((!reverse && sortBy.Equals("user") ? " ↓" : "")); sb.Append(""); sb.Append(Properties.Messages.Categories); sb.Append("
{0}{0}{0}{0}{0}
"); sb.Append(@""); sb.Append(pageList[i].Title); sb.Append(""); sb.Append(""); int msg = pageList[i].MessageCount; if(msg > 0) { sb.Append(@""); sb.Append(msg.ToString()); sb.Append(""); } else sb.Append(" "); sb.Append(""); sb.Append(Preferences.AlignWithTimezone(pageList[i].CreationDateTime).ToString(Settings.DateTimeFormat).Replace(" ", " ") + " "); sb.Append(""); sb.Append(Preferences.AlignWithTimezone(pageList[i].ModificationDateTime).ToString(Settings.DateTimeFormat).Replace(" ", " ") + " "); sb.Append(""); sb.Append(Users.UserLink(pageList[i].Creator)); sb.Append(""); sb.Append(Users.UserLink(pageList[i].LastAuthor)); sb.Append(""); if(cats.Length == 0) { sb.Append(@""); sb.Append(Properties.Messages.NC); sb.Append(""); } else { for(int k = 0; k < cats.Length; k++) { sb.Append(@""); sb.Append(NameTools.GetLocalName(cats[k].FullName)); sb.Append(""); if(k != cats.Length - 1) sb.Append(", "); } } sb.Append("
"); Literal lbl = new Literal(); lbl.Text = sb.ToString(); pnlPageList.Controls.Clear(); pnlPageList.Controls.Add(lbl); } } }