/// <summary> /// Manages the draft status display. /// </summary> private void ManageDraft() { if (isDraft) { chkSaveAsDraft.Checked = true; chkMinorChange.Enabled = false; pnlDraft.Visible = true; lblDraftInfo.Text = lblDraftInfo.Text.Replace("##USER##", Users.UserLink(currentWiki, currentPage.User, true)).Replace("##DATETIME##", Preferences.AlignWithTimezone(currentWiki, currentPage.LastModified).ToString(Settings.GetDateTimeFormat(currentWiki))).Replace("##VIEWCHANGES##", string.Format("<a href=\"{0}\" target=\"_blank\">{1}</a>", UrlTools.BuildUrl(currentWiki, "Diff.aspx?Page=", Tools.UrlEncode(currentPage.FullName), "&Rev1=Current&Rev2=Draft"), Properties.Messages.ViewChanges)); } else { pnlDraft.Visible = false; } }
protected void btnSave_Click(object sender, EventArgs e) { bool wasVisible = pnlPageName.Visible; pnlPageName.Visible = true; if (!wasVisible && Settings.GetAutoGeneratePageNames(currentWiki) && txtName.Enabled) { txtName.Text = GenerateAutoName(txtTitle.Text); } txtName.Text = txtName.Text.Trim(); Page.Validate("nametitle"); Page.Validate("captcha"); if (!Page.IsValid) { if (!rfvTitle.IsValid || !rfvName.IsValid || !cvName1.IsValid || !cvName2.IsValid) { pnlPageName.Visible = true; pnlManualName.Visible = false; } return; } pnlPageName.Visible = wasVisible; // Check permissions if (currentPage == null) { // Check permissions for creating new pages if (!canCreateNewPages) { UrlTools.Redirect("AccessDenied.aspx"); } } else { // Check permissions for editing current page if (!canEdit && !canEditWithApproval) { UrlTools.Redirect("AccessDenied.aspx"); } } chkMinorChange.Visible = true; chkSaveAsDraft.Visible = true; // Verify edit with approval if (!canEdit && canEditWithApproval) { chkSaveAsDraft.Checked = true; } // Check for scripts (Administrators can always add SCRIPT tags) if (!SessionFacade.GetCurrentGroupNames(currentWiki).Contains(Settings.GetAdministratorsGroup(currentWiki)) && !Settings.GetScriptTagsAllowed(currentWiki)) { Regex r = new Regex(@"\<script.*?\>", RegexOptions.Compiled | RegexOptions.IgnoreCase); if (r.Match(editor.GetContent()).Success) { lblResult.Text = @"<span style=""color: #FF0000;"">" + Properties.Messages.ScriptDetected + "</span>"; return; } } bool redirect = true; if (sender == btnSaveAndContinue) { redirect = false; } lblResult.Text = ""; lblResult.CssClass = ""; string username = ""; if (SessionFacade.LoginKey == null) { username = Request.UserHostAddress; } else { username = SessionFacade.CurrentUsername; } IPagesStorageProviderV40 provider = FindAppropriateProvider(); // Create list of selected categories List <CategoryInfo> categories = new List <CategoryInfo>(); for (int i = 0; i < lstCategories.Items.Count; i++) { if (lstCategories.Items[i].Selected) { CategoryInfo cat = Pages.FindCategory(currentWiki, lstCategories.Items[i].Value); // Sanity check if (cat.Provider == provider) { categories.Add(cat); } } } txtComment.Text = txtComment.Text.Trim(); txtDescription.Text = txtDescription.Text.Trim(); SaveMode saveMode = SaveMode.Backup; if (chkSaveAsDraft.Checked) { saveMode = SaveMode.Draft; } if (chkMinorChange.Checked) { saveMode = SaveMode.Normal; } if (txtName.Enabled) { // Find page, if inexistent create it Log.LogEntry("Page update requested for " + txtName.Text, EntryType.General, username, currentWiki); string nspace = DetectNamespaceInfo() != null?DetectNamespaceInfo().Name : null; PageContent pg = Pages.FindPage(NameTools.GetFullName(DetectNamespace(), txtName.Text), provider); if (pg == null) { saveMode = SaveMode.Normal; pg = Pages.SetPageContent(currentWiki, nspace, txtName.Text, provider, txtTitle.Text, username, DateTime.UtcNow, txtComment.Text, editor.GetContent(), GetKeywords(), txtDescription.Text, saveMode); attachmentManager.CurrentPage = pg; } else { Pages.SetPageContent(currentWiki, nspace, txtName.Text, provider, txtTitle.Text, username, DateTime.UtcNow, txtComment.Text, editor.GetContent(), GetKeywords(), txtDescription.Text, saveMode); } // Save categories binding Pages.Rebind(pg, categories.ToArray()); // If not a draft, remove page draft if (saveMode != SaveMode.Draft) { Pages.DeleteDraft(pg.FullName, pg.Provider); isDraft = false; } else { isDraft = true; } ManageDraft(); lblResult.CssClass = "resultok"; lblResult.Text = Properties.Messages.PageSaved; // This is a new page, so only who has page management permissions can execute this code // No notification must be sent for drafts awaiting approval if (redirect) { Collisions.CancelEditingSession(pg, username); string target = UrlTools.BuildUrl(currentWiki, Tools.UrlEncode(txtName.Text), GlobalSettings.PageExtension, "?NoRedirect=1"); UrlTools.Redirect(target); } else { // Disable PageName, because the name cannot be changed anymore txtName.Enabled = false; pnlManualName.Visible = false; } } else { // Used for redirecting to a specific section after editing it string anchor = ""; if (currentPage == null) { currentPage = Pages.FindPage(currentWiki, NameTools.GetFullName(DetectNamespace(), txtName.Text)); } // Save data Log.LogEntry("Page update requested for " + currentPage.FullName, EntryType.General, username, currentWiki); if (!isDraft && currentSection != -1) { StringBuilder sb = new StringBuilder(currentPage.Content.Length); int start, len; ExtractSection(currentPage.Content, currentSection, out start, out len, out anchor); if (start > 0) { sb.Append(currentPage.Content.Substring(0, start)); } sb.Append(editor.GetContent()); if (start + len < currentPage.Content.Length - 1) { sb.Append(currentPage.Content.Substring(start + len)); } Pages.SetPageContent(currentPage.Provider.CurrentWiki, NameTools.GetNamespace(currentPage.FullName), NameTools.GetLocalName(currentPage.FullName), txtTitle.Text, username, DateTime.UtcNow, txtComment.Text, sb.ToString(), GetKeywords(), txtDescription.Text, saveMode); } else { Pages.SetPageContent(currentPage.Provider.CurrentWiki, NameTools.GetNamespace(currentPage.FullName), NameTools.GetLocalName(currentPage.FullName), txtTitle.Text, username, DateTime.UtcNow, txtComment.Text, editor.GetContent(), GetKeywords(), txtDescription.Text, saveMode); } // Save Categories binding Pages.Rebind(currentPage, categories.ToArray()); // If not a draft, remove page draft if (saveMode != SaveMode.Draft) { Pages.DeleteDraft(currentPage.FullName, currentPage.Provider); isDraft = false; } else { isDraft = true; } ManageDraft(); lblResult.CssClass = "resultok"; lblResult.Text = Properties.Messages.PageSaved; // This code is executed every time the page is saved, even when "Save & Continue" is clicked // This causes a draft approval notification to be sent multiple times for the same page, // but this is the only solution because the user might navigate away from the page after // clicking "Save & Continue" but not "Save" or "Cancel" - in other words, it is necessary // to take every chance to send a notification because no more chances might be available if (!canEdit && canEditWithApproval) { Pages.SendEmailNotificationForDraft(currentPage.Provider.CurrentWiki, currentPage.FullName, txtTitle.Text, txtComment.Text, username); } if (redirect) { Collisions.CancelEditingSession(currentPage, username); string target = UrlTools.BuildUrl(currentWiki, Tools.UrlEncode(currentPage.FullName), GlobalSettings.PageExtension, "?NoRedirect=1", (!string.IsNullOrEmpty(anchor) ? ("#" + anchor + "_" + currentSection.ToString()) : "")); UrlTools.Redirect(target); } } }
/// <summary> /// Prepares the message deletion GUI. /// </summary> private void PrepareDeleteMessage() { string ms = Request["Message"]; string pg = Request["Page"]; if (ms == null || ms.Length == 0 || pg == null || pg.Length == 0) { UrlTools.RedirectHome(currentWiki); } PageContent page = Pages.FindPage(currentWiki, pg); if (page == null) { UrlTools.RedirectHome(currentWiki); } if (page.Provider.ReadOnly) { UrlTools.Redirect(UrlTools.BuildUrl(currentWiki, page.FullName, GlobalSettings.PageExtension)); } AuthChecker authChecker = new AuthChecker(Collectors.CollectorsBox.GetSettingsProvider(currentWiki)); bool canManageDiscussion = authChecker.CheckActionForPage(page.FullName, Actions.ForPages.ManageDiscussion, SessionFacade.GetCurrentUsername(), SessionFacade.GetCurrentGroupNames(currentWiki)); if (!canManageDiscussion) { UrlTools.Redirect("AccessDenied.aspx"); } int id = -1; try { id = int.Parse(ms); } catch { UrlTools.RedirectHome(currentWiki); } Message message = Pages.FindMessage(Pages.GetPageMessages(page), id); if (message == null) { UrlTools.RedirectHome(currentWiki); } StringBuilder sb = new StringBuilder(500); sb.Append("<b>"); sb.Append(FormattingPipeline.PrepareTitle(currentWiki, message.Subject, false, FormattingContext.MessageBody, page.FullName)); sb.Append("</b><br /><small>"); sb.Append(Properties.Messages.Posted); sb.Append(" "); sb.Append(Preferences.AlignWithTimezone(currentWiki, message.DateTime).ToString(Settings.GetDateTimeFormat(currentWiki))); sb.Append(" "); sb.Append(Properties.Messages.By); sb.Append(" "); sb.Append(Users.UserLink(currentWiki, message.Username)); sb.Append("</small><br /><br />"); sb.Append(FormattingPipeline.FormatWithPhase3(currentWiki, FormattingPipeline.FormatWithPhase1And2(currentWiki, message.Body, false, FormattingContext.MessageBody, page.FullName), FormattingContext.MessageBody, page.FullName)); lblDeleteMessageContent.Text = sb.ToString(); }
/// <summary> /// Prints the pages. /// </summary> 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 <SortingGroup, List <ExtendedPageInfo> > sortedPages = PageSortingTools.Sort(tempPageList, sortBy, reverse); sb.Append(@"<table id=""PageListTable"" class=""generic"" cellpadding=""0"" cellspacing=""0"">"); sb.Append("<thead>"); sb.Append(@"<tr class=""tableheader"">"); // Page title sb.Append(@"<th><a rel=""nofollow"" href="""); UrlTools.BuildUrl(sb, "AllPages.aspx?SortBy=Title", (!reverse && sortBy == SortingMethod.Title ? "&Reverse=1" : ""), (Request["Cat"] != null ? "&Cat=" + Tools.UrlEncode(Request["Cat"]) : ""), "&Page=", selectedPage.ToString()); sb.Append(@""" title="""); sb.Append(Properties.Messages.SortByTitle); sb.Append(@""">"); sb.Append(Properties.Messages.PageTitle); sb.Append((reverse && sortBy.Equals("title") ? " ↑" : "")); sb.Append((!reverse && sortBy.Equals("title") ? " ↓" : "")); sb.Append("</a></th>"); // Message count sb.Append(@"<th><img src=""Images/Comment.png"" alt=""Comments"" /></th>"); // Creation date/time sb.Append(@"<th><a rel=""nofollow"" href="""); UrlTools.BuildUrl(sb, "AllPages.aspx?SortBy=Creation", (!reverse && sortBy == SortingMethod.Creation ? "&Reverse=1" : ""), (Request["Cat"] != null ? "&Cat=" + Tools.UrlEncode(Request["Cat"]) : ""), "&Page=", selectedPage.ToString()); sb.Append(@""" title="""); sb.Append(Properties.Messages.SortByDate); sb.Append(@""">"); sb.Append(Properties.Messages.CreatedOn); sb.Append((reverse && sortBy.Equals("creation") ? " ↑" : "")); sb.Append((!reverse && sortBy.Equals("creation") ? " ↓" : "")); sb.Append("</a></th>"); // Mod. date/time sb.Append(@"<th><a rel=""nofollow"" href="""); UrlTools.BuildUrl(sb, "AllPages.aspx?SortBy=DateTime", (!reverse && sortBy == SortingMethod.DateTime ? "&Reverse=1" : ""), (Request["Cat"] != null ? "&Cat=" + Tools.UrlEncode(Request["Cat"]) : ""), "&Page=", selectedPage.ToString()); sb.Append(@""" title="""); sb.Append(Properties.Messages.SortByDate); sb.Append(@""">"); sb.Append(Properties.Messages.ModifiedOn); sb.Append((reverse && sortBy.Equals("date") ? " ↑" : "")); sb.Append((!reverse && sortBy.Equals("date") ? " ↓" : "")); sb.Append("</a></th>"); // Creator sb.Append(@"<th><a rel=""nofollow"" href="""); UrlTools.BuildUrl(sb, "AllPages.aspx?SortBy=Creator", (!reverse && sortBy == SortingMethod.Creator ? "&Reverse=1" : ""), (Request["Cat"] != null ? "&Cat=" + Tools.UrlEncode(Request["Cat"]) : ""), "&Page=", selectedPage.ToString()); sb.Append(@""" title="""); sb.Append(Properties.Messages.SortByUser); sb.Append(@""">"); sb.Append(Properties.Messages.CreatedBy); sb.Append((reverse && sortBy.Equals("creator") ? " ↑" : "")); sb.Append((!reverse && sortBy.Equals("creator") ? " ↓" : "")); sb.Append("</a></th>"); // Last author sb.Append(@"<th><a rel=""nofollow"" href="""); UrlTools.BuildUrl(sb, "AllPages.aspx?SortBy=User", (!reverse && sortBy == SortingMethod.User ? "&Reverse=1" : ""), (Request["Cat"] != null ? "&Cat=" + Tools.UrlEncode(Request["Cat"]) : ""), "&Page=", selectedPage.ToString()); sb.Append(@""" title="""); sb.Append(Properties.Messages.SortByUser); sb.Append(@""">"); sb.Append(Properties.Messages.ModifiedBy); sb.Append((reverse && sortBy.Equals("user") ? " ↑" : "")); sb.Append((!reverse && sortBy.Equals("user") ? " ↓" : "")); sb.Append("</a></th>"); // Categories sb.Append("<th>"); sb.Append(Properties.Messages.Categories); sb.Append("</th>"); sb.Append("</tr>"); sb.Append("</thead><tbody>"); foreach (SortingGroup key in sortedPages.Keys) { List <ExtendedPageInfo> pageList = sortedPages[key]; for (int i = 0; i < pageList.Count; i++) { if (i == 0) { // Add group header sb.Append(@"<tr class=""tablerow"">"); if (sortBy == SortingMethod.Title) { sb.AppendFormat("<td colspan=\"7\"><b>{0}</b></td>", key.Label); } else if (sortBy == SortingMethod.Creation) { sb.AppendFormat("<td colspan=\"2\"></td><td colspan=\"5\"><b>{0}</b></td>", key.Label); } else if (sortBy == SortingMethod.DateTime) { sb.AppendFormat("<td colspan=\"3\"></td><td colspan=\"4\"><b>{0}</b></td>", key.Label); } else if (sortBy == SortingMethod.Creator) { sb.AppendFormat("<td colspan=\"4\"></td><td colspan=\"3\"><b>{0}</b></td>", key.Label); } else if (sortBy == SortingMethod.User) { sb.AppendFormat("<td colspan=\"5\"></td><td colspan=\"2\"><b>{0}</b></td>", key.Label); } sb.Append("</tr>"); } sb.Append(@"<tr class=""tablerow"); if ((i + 1) % 2 == 0) { sb.Append("alternate"); } sb.Append(@""">"); // Page title sb.Append(@"<td>"); sb.Append(@"<a href="""); UrlTools.BuildUrl(sb, Tools.UrlEncode(pageList[i].PageInfo.FullName), Settings.PageExtension); sb.Append(@""">"); sb.Append(pageList[i].Title); sb.Append("</a>"); sb.Append("</td>"); // Message count sb.Append(@"<td>"); int msg = pageList[i].MessageCount; if (msg > 0) { sb.Append(@"<a href="""); UrlTools.BuildUrl(sb, Tools.UrlEncode(pageList[i].PageInfo.FullName), Settings.PageExtension, "?Discuss=1"); sb.Append(@""" title="""); sb.Append(Properties.Messages.Discuss); sb.Append(@""">"); sb.Append(msg.ToString()); sb.Append("</a>"); } else { sb.Append(" "); } sb.Append("</td>"); // Creation date/time sb.Append(@"<td>"); sb.Append(Preferences.AlignWithTimezone(pageList[i].CreationDateTime).ToString(Settings.DateTimeFormat) + " "); sb.Append("</td>"); // Mod. date/time sb.Append(@"<td>"); sb.Append(Preferences.AlignWithTimezone(pageList[i].ModificationDateTime).ToString(Settings.DateTimeFormat) + " "); sb.Append("</td>"); // Creator sb.Append(@"<td>"); sb.Append(Users.UserLink(pageList[i].Creator)); sb.Append("</td>"); // Last author sb.Append(@"<td>"); sb.Append(Users.UserLink(pageList[i].LastAuthor)); sb.Append("</td>"); // Categories CategoryInfo[] cats = Pages.GetCategoriesForPage(pageList[i].PageInfo); sb.Append(@"<td>"); if (cats.Length == 0) { sb.Append(@"<a href="""); UrlTools.BuildUrl(sb, "AllPages.aspx?Cat=-"); sb.Append(@""">"); sb.Append(Properties.Messages.NC); sb.Append("</a>"); } else { for (int k = 0; k < cats.Length; k++) { sb.Append(@"<a href="""); UrlTools.BuildUrl(sb, "AllPages.aspx?Cat=", Tools.UrlEncode(cats[k].FullName)); sb.Append(@""">"); sb.Append(NameTools.GetLocalName(cats[k].FullName)); sb.Append("</a>"); if (k != cats.Length - 1) { sb.Append(", "); } } } sb.Append("</td>"); sb.Append("</tr>"); } } sb.Append("</tbody>"); sb.Append("</table>"); Literal lbl = new Literal(); lbl.Text = sb.ToString(); pnlPageList.Controls.Clear(); pnlPageList.Controls.Add(lbl); }
/// <summary> /// Prints the history. /// </summary> public void PrintHistory() { if (page == null) { return; } StringBuilder sb = new StringBuilder(); if (Request["Revision"] == null) { // Show version list List <int> revisions = Pages.GetBackups(page); revisions.Reverse(); List <RevisionRow> result = new List <RevisionRow>(revisions.Count + 1); result.Add(new RevisionRow(-1, Content.GetPageContent(page, false), false)); foreach (int rev in revisions) { PageContent content = Pages.GetBackupContent(page, rev); result.Add(new RevisionRow(rev, content, canRollback)); } rptHistory.DataSource = result; rptHistory.DataBind(); } else { int rev = -1; if (!int.TryParse(Request["Revision"], out rev)) { UrlTools.Redirect(page.FullName + Settings.PageExtension); } List <int> backups = Pages.GetBackups(page); if (!backups.Contains(rev)) { UrlTools.Redirect(page.FullName + Settings.PageExtension); return; } PageContent revision = Pages.GetBackupContent(page, rev); sb.Append(@"<table class=""box"" cellpadding=""0"" cellspacing=""0""><tr><td>"); sb.Append(@"<p style=""text-align: center;""><b>"); if (rev > 0) { sb.Append(@"<a href="""); UrlTools.BuildUrl(sb, "History.aspx?Page=", Tools.UrlEncode(page.FullName), "&Revision=", Tools.GetVersionString((int)(rev - 1))); sb.Append(@""">« "); sb.Append(Properties.Messages.OlderRevision); sb.Append("</a>"); } else { sb.Append("« "); sb.Append(Properties.Messages.OlderRevision); } sb.Append(@" - <a href="""); UrlTools.BuildUrl(sb, "History.aspx?Page=", Tools.UrlEncode(page.FullName)); sb.Append(@""">"); sb.Append(Properties.Messages.BackToHistory); sb.Append("</a> - "); if (rev < backups.Count - 1) { sb.Append(@"<a href="""); UrlTools.BuildUrl(sb, "History.aspx?Page=", Tools.UrlEncode(page.FullName), "&Revision=", Tools.GetVersionString((int)(rev + 1))); sb.Append(@""">"); sb.Append(Properties.Messages.NewerRevision); sb.Append(" »</a>"); } else { sb.Append(@"<a href="""); UrlTools.BuildUrl(sb, Tools.UrlEncode(page.FullName), Settings.PageExtension); sb.Append(@""">"); sb.Append(Properties.Messages.CurrentRevision); sb.Append("</a>"); } sb.Append("</b></p></td></tr></table><br />"); sb.Append(@"<h3 class=""separator"">"); sb.Append(Properties.Messages.PageRevision); sb.Append(": "); sb.Append(Preferences.AlignWithTimezone(revision.LastModified).ToString(Settings.DateTimeFormat)); sb.Append("</h3><br />"); sb.Append(FormattingPipeline.FormatWithPhase3(FormattingPipeline.FormatWithPhase1And2(revision.Content, false, FormattingContext.PageContent, page).Replace(Formatter.EditSectionPlaceHolder, ""), FormattingContext.PageContent, page)); } lblHistory.Text = sb.ToString(); }
protected void btnCancelDeleteMessage_Click(object sender, EventArgs e) { UrlTools.Redirect(UrlTools.BuildUrl(currentWiki, Request["Page"], GlobalSettings.PageExtension, "?Discuss=1")); }
public void PrintDiff() { if (Request["Page"] == null || Request["Rev1"] == null || Request["Rev2"] == null) { Redirect(); return; } StringBuilder sb = new StringBuilder(); PageInfo page = Pages.FindPage(Request["Page"]); if (page == null) { Redirect(); return; } bool canView = AuthChecker.CheckActionForPage(page, Actions.ForPages.ReadPage, SessionFacade.GetCurrentUsername(), SessionFacade.GetCurrentGroupNames()); if (!canView) { UrlTools.Redirect("AccessDenied.aspx"); } int rev1 = -1; int rev2 = -1; string rev1Text = ""; string rev2Text = ""; PageContent rev1Content = null; PageContent rev2Content = null; bool draft = false; // Load rev1 content if (int.TryParse(Request["Rev1"], out rev1)) { rev1Content = Pages.GetBackupContent(page, rev1); rev1Text = rev1.ToString(); if (rev1 >= 0 && rev1Content == null && Pages.GetBackupContent(page, rev1 - 1) != null) { rev1Content = Content.GetPageContent(page, false); } if (rev1Content == null) { Redirect(); } } else { // Look for current if (Request["Rev1"].ToLowerInvariant() == "current") { rev1Content = Content.GetPageContent(page, false); rev1Text = Properties.Messages.Current; } else { Redirect(); } } if (int.TryParse(Request["Rev2"], out rev2)) { rev2Content = Pages.GetBackupContent(page, rev2); rev2Text = rev2.ToString(); if (rev2 >= 0 && rev2Content == null && Pages.GetBackupContent(page, rev2 - 1) != null) { rev2Content = Content.GetPageContent(page, false); } if (rev2Content == null) { Redirect(); } } else { // Look for current or draft if (Request["Rev2"].ToLowerInvariant() == "current") { rev2Content = Content.GetPageContent(page, false); rev2Text = Properties.Messages.Current; } else if (Request["Rev2"].ToLowerInvariant() == "draft") { rev2Content = Pages.GetDraft(page); rev2Text = Properties.Messages.Draft; draft = true; if (rev2Content == null) { Redirect(); } } else { Redirect(); } } PageContent content = Content.GetPageContent(page, true); lblTitle.Text = Properties.Messages.DiffingPageTitle.Replace("##PAGETITLE##", FormattingPipeline.PrepareTitle(content.Title, false, FormattingContext.PageContent, page)).Replace("##REV1##", rev1Text).Replace("##REV2##", rev2Text); lblBack.Text = string.Format(@"<a href=""{0}"">« {1}</a>", UrlTools.BuildUrl("History.aspx?Page=", Tools.UrlEncode(Request["Page"]), "&Rev1=", Request["Rev1"], "&Rev2=", Request["Rev2"]), Properties.Messages.Back); lblBack.Visible = !draft; sb.Append(Properties.Messages.DiffColorKey); sb.Append("<br /><br />"); string result = DiffTools.DiffRevisions(rev1Content.Content, rev2Content.Content); sb.Append(result); lblDiff.Text = sb.ToString(); }
protected void Page_Load(object sender, EventArgs e) { rssFeedsMode = Settings.RssFeedsMode; if (rssFeedsMode == RssFeedsMode.Disabled) { Response.Clear(); Response.StatusCode = 404; Response.End(); return; } string currentUsername = SessionFacade.GetCurrentUsername(); string[] currentGroups = SessionFacade.GetCurrentGroupNames(); currentNamespace = DetectNamespace(); if (string.IsNullOrEmpty(currentNamespace)) { currentNamespace = null; } if (SessionFacade.LoginKey == null) { // Look for username/password in the query string if (Request["Username"] != null && Request["Password"] != null) { // Try to authenticate UserInfo u = Users.FindUser(Request["Username"]); if (u != null) { // Very "dirty" way - pages should not access Providers if (u.Provider.TestAccount(u, Request["Password"])) { // Valid account currentUsername = Request["Username"]; currentGroups = Users.FindUser(currentUsername).Groups; } } else { // Check for built-in admin account if (Request["Username"].Equals("admin") && Request["Password"].Equals(Settings.MasterPassword)) { currentUsername = "******"; currentGroups = new string[] { Settings.AdministratorsGroup }; } } } } Response.ClearContent(); Response.ContentType = "text/xml;charset=UTF-8"; Response.ContentEncoding = System.Text.UTF8Encoding.UTF8; if (Request["Page"] != null) { PageInfo page = Pages.FindPage(Request["Page"]); if (page == null) { return; } PageContent content = Content.GetPageContent(page, true); if (Request["Discuss"] == null) { // Check permission for the page bool canReadPage = AuthChecker.CheckActionForPage(page, Actions.ForPages.ReadPage, currentUsername, currentGroups); if (!canReadPage) { Response.StatusCode = 401; return; } // Start an XML writer for the output stream using (XmlWriter rss = XmlWriter.Create(Response.OutputStream)) { // Build an RSS header BuildRssHeader(rss); // Build the channel element BuildChannelHead(rss, Settings.WikiTitle + " - " + Formatter.StripHtml(FormattingPipeline.PrepareTitle(content.Title, false, FormattingContext.PageContent, page)), Settings.MainUrl + page.FullName + Settings.PageExtension, Settings.MainUrl + UrlTools.BuildUrl("RSS.aspx?Page=", page.FullName), Formatter.StripHtml(content.Title) + " - " + Properties.Messages.PageUpdates); // Write the item element rss.WriteStartElement("item"); rss.WriteStartElement("title"); rss.WriteCData(Formatter.StripHtml(FormattingPipeline.PrepareTitle(content.Title, false, FormattingContext.PageContent, page))); rss.WriteEndElement(); rss.WriteElementString("link", Settings.MainUrl + page.FullName + Settings.PageExtension); UserInfo user = Users.FindUser(content.User); string username = user != null?Users.GetDisplayName(user) : content.User; // Create the description tag rss.WriteStartElement("description"); if (rssFeedsMode == RssFeedsMode.Summary) { rss.WriteCData(Formatter.StripHtml(content.Title) + ": " + Properties.Messages.ThePageHasBeenUpdatedBy + " " + username + (content.Comment.Length > 0 ? ".<br />" + content.Comment : ".")); } else { rss.WriteCData(Content.GetFormattedPageContent(page, false)); } rss.WriteEndElement(); // Write the remaining elements rss.WriteElementString("author", username); rss.WriteElementString("pubDate", content.LastModified.ToUniversalTime().ToString("R")); rss.WriteStartElement("guid"); rss.WriteAttributeString("isPermaLink", "false"); rss.WriteString(GetGuid(page.FullName, content.LastModified)); rss.WriteEndElement(); // Complete the item element CompleteCurrentElement(rss); // Complete the channel element CompleteCurrentElement(rss); // Complete the rss element CompleteCurrentElement(rss); // Finish off rss.Flush(); rss.Close(); } } else { // Check permission for the discussion bool canReadDiscussion = AuthChecker.CheckActionForPage(page, Actions.ForPages.ReadDiscussion, currentUsername, currentGroups); if (!canReadDiscussion) { Response.StatusCode = 401; return; } List <Message> messages = new List <Message>(Pages.GetPageMessages(page)); // Un-tree Messages messages = UnTreeMessages(messages); // Sort from newer to older messages.Sort(new MessageDateTimeComparer(true)); // Start an XML writer for the output stream using (XmlWriter rss = XmlWriter.Create(Response.OutputStream)) { // Build an RSS header BuildRssHeader(rss); // Build the channel element BuildChannelHead(rss, Settings.WikiTitle + " - " + Formatter.StripHtml(FormattingPipeline.PrepareTitle(content.Title, false, FormattingContext.PageContent, page)) + " - Discussion Updates", Settings.MainUrl + page.FullName + Settings.PageExtension + "?Discuss=1", Settings.MainUrl + UrlTools.BuildUrl("RSS.aspx?Page=", page.FullName, "&Discuss=1"), Settings.WikiTitle + " - " + Formatter.StripHtml(FormattingPipeline.PrepareTitle(content.Title, false, FormattingContext.PageContent, page)) + " - Discussion Updates"); for (int i = 0; i < messages.Count; i++) { // Write the item element rss.WriteStartElement("item"); rss.WriteStartElement("title"); rss.WriteCData(Formatter.StripHtml(FormattingPipeline.PrepareTitle(messages[i].Subject, false, FormattingContext.MessageBody, page))); rss.WriteEndElement(); rss.WriteElementString("link", Settings.MainUrl + page.FullName + Settings.PageExtension + "?Discuss=1"); UserInfo user = Users.FindUser(messages[i].Username); string username = user != null?Users.GetDisplayName(user) : messages[i].Username; // Create the description tag rss.WriteStartElement("description"); if (rssFeedsMode == RssFeedsMode.Summary) { rss.WriteCData(Properties.Messages.AMessageHasBeenPostedBy.Replace("##SUBJECT##", messages[i].Subject) + " " + username + "."); } else { rss.WriteCData(FormattingPipeline.FormatWithPhase3(FormattingPipeline.FormatWithPhase1And2(messages[i].Body, false, FormattingContext.MessageBody, page), FormattingContext.MessageBody, page)); } rss.WriteEndElement(); // Write the remaining elements rss.WriteElementString("author", username); rss.WriteElementString("pubDate", messages[i].DateTime.ToUniversalTime().ToString("R")); rss.WriteStartElement("guid"); rss.WriteAttributeString("isPermaLink", "false"); rss.WriteString(GetGuid(page.FullName + "-" + messages[i].ID, messages[i].DateTime)); rss.WriteEndElement(); // Complete the item element CompleteCurrentElement(rss); } // Complete the channel element CompleteCurrentElement(rss); // Complete the rss element CompleteCurrentElement(rss); // Finish off rss.Flush(); rss.Close(); } } } else { if (Request["Discuss"] == null) { // All page updates // Start an XML writer for the output stream using (XmlWriter rss = XmlWriter.Create(Response.OutputStream)) { // Build an RSS header BuildRssHeader(rss); bool useCat = false; string cat = ""; if (Request["Category"] != null) { useCat = true; cat = Request["Category"]; } // Build the channel element BuildChannelHead(rss, Settings.WikiTitle + " - " + Properties.Messages.PageUpdates, Settings.MainUrl, Settings.MainUrl + UrlTools.BuildUrl("RSS.aspx", (useCat ? ("?Category=" + cat) : "")), Properties.Messages.RecentPageUpdates); RecentChange[] ch = RecentChanges.GetAllChanges(); Array.Reverse(ch); for (int i = 0; i < ch.Length; i++) { // Suppress this entry if we've already reported this page (so we don't create duplicate entries in the feed page) bool duplicateFound = false; for (int j = 0; j < i; j++) { if (ch[j].Page == ch[i].Page) { duplicateFound = true; break; } } if (duplicateFound) { continue; } // Skip message-related entries if (!IsPageChange(ch[i].Change)) { continue; } PageInfo p = Pages.FindPage(ch[i].Page); if (p != null) { // Check permissions for every page bool canReadThisPage = AuthChecker.CheckActionForPage(p, Actions.ForPages.ReadPage, currentUsername, currentGroups); if (!canReadThisPage) { continue; } if (useCat) { CategoryInfo[] infos = Pages.GetCategoriesForPage(p); if (infos.Length == 0 && cat != "-") { continue; } if (infos.Length != 0) { bool found = false; for (int k = 0; k < infos.Length; k++) { if (infos[k].FullName == cat) { found = true; break; } } if (!found) { continue; } } } } // Check namespace if (p != null && NameTools.GetNamespace(p.FullName) != currentNamespace) { continue; } // Skip deleted pages as their category binding is unknown if (p == null && useCat) { continue; } // Write the item element rss.WriteStartElement("item"); rss.WriteStartElement("title"); rss.WriteCData(Formatter.StripHtml(FormattingPipeline.PrepareTitle(ch[i].Title, false, FormattingContext.PageContent, p))); rss.WriteEndElement(); if (ch[i].Change != Change.PageDeleted && p != null) { rss.WriteElementString("link", Settings.MainUrl + ch[i].Page + Settings.PageExtension); } else { rss.WriteElementString("link", Settings.MainUrl); } UserInfo user = Users.FindUser(ch[i].User); string username = user != null?Users.GetDisplayName(user) : ch[i].User; rss.WriteElementString("author", username); // Create the description tag StringBuilder sb = new StringBuilder(); if (rssFeedsMode == RssFeedsMode.Summary || p == null) { switch (ch[i].Change) { case Change.PageUpdated: sb.Append(Properties.Messages.ThePageHasBeenUpdatedBy); break; case Change.PageDeleted: sb.Append(Properties.Messages.ThePageHasBeenDeletedBy); break; case Change.PageRenamed: sb.Append(Properties.Messages.ThePageHasBeenRenamedBy); break; case Change.PageRolledBack: sb.Append(Properties.Messages.ThePageHasBeenRolledBackBy); break; } sb.Append(" " + username + (ch[i].Description.Length > 0 ? ".<br />" + ch[i].Description : ".")); } else { // p != null sb.Append(Content.GetFormattedPageContent(p, false)); } rss.WriteStartElement("description"); rss.WriteCData(sb.ToString()); rss.WriteEndElement(); // Write the remaining elements rss.WriteElementString("pubDate", ch[i].DateTime.ToUniversalTime().ToString("R")); rss.WriteStartElement("guid"); rss.WriteAttributeString("isPermaLink", "false"); rss.WriteString(GetGuid(ch[i].Page, ch[i].DateTime)); rss.WriteEndElement(); // Complete the item element rss.WriteEndElement(); } // Complete the channel element CompleteCurrentElement(rss); // Complete the rss element CompleteCurrentElement(rss); // Finish off rss.Flush(); rss.Close(); } } else { // All discussion updates // Start an XML writer for the output stream using (XmlWriter rss = XmlWriter.Create(Response.OutputStream)) { // Build an RSS header BuildRssHeader(rss); bool useCat = false; string cat = ""; if (Request["Category"] != null) { useCat = true; cat = Request["Category"]; } // Build the channel element BuildChannelHead(rss, Settings.WikiTitle + " - " + Properties.Messages.DiscussionUpdates, Settings.MainUrl, Settings.MainUrl + UrlTools.BuildUrl("RSS.aspx", (useCat ? ("?Category=" + cat) : "")), Properties.Messages.RecentDiscussionUpdates); RecentChange[] ch = RecentChanges.GetAllChanges(); Array.Reverse(ch); for (int i = 0; i < ch.Length; i++) { // Skip page-related entries if (!IsMessageChange(ch[i].Change)) { continue; } PageInfo p = Pages.FindPage(ch[i].Page); if (p != null) { // Check permissions for every page bool canReadThisPageDiscussion = AuthChecker.CheckActionForPage(p, Actions.ForPages.ReadDiscussion, currentUsername, currentGroups); if (!canReadThisPageDiscussion) { continue; } if (useCat) { CategoryInfo[] infos = Pages.GetCategoriesForPage(p); if (infos.Length == 0 && cat != "-") { continue; } if (infos.Length != 0) { bool found = false; for (int k = 0; k < infos.Length; k++) { if (infos[k].FullName == cat) { found = true; break; } } if (!found) { continue; } } } // Check namespace if (NameTools.GetNamespace(p.FullName) != currentNamespace) { continue; } // Write the item element rss.WriteStartElement("item"); rss.WriteStartElement("title"); rss.WriteCData(Properties.Messages.Discussion + ": " + Formatter.StripHtml(FormattingPipeline.PrepareTitle(ch[i].Title, false, FormattingContext.PageContent, p))); rss.WriteEndElement(); string id = Tools.GetMessageIdForAnchor(ch[i].DateTime); if (ch[i].Change != Change.MessageDeleted) { rss.WriteElementString("link", Settings.MainUrl + ch[i].Page + Settings.PageExtension + "?Discuss=1#" + id); } else { rss.WriteElementString("link", Settings.MainUrl + ch[i].Page + Settings.PageExtension + "?Discuss=1"); } string messageContent = FindMessageContent(ch[i].Page, id); UserInfo user = Users.FindUser(ch[i].User); string username = user != null?Users.GetDisplayName(user) : ch[i].User; // Create the description tag StringBuilder sb = new StringBuilder(); if (rssFeedsMode == RssFeedsMode.Summary || messageContent == null) { switch (ch[i].Change) { case Change.MessagePosted: sb.Append(Properties.Messages.AMessageHasBeenPostedBy.Replace("##SUBJECT##", ch[i].MessageSubject)); break; case Change.MessageEdited: sb.Append(Properties.Messages.AMessageHasBeenEditedBy.Replace("##SUBJECT##", ch[i].MessageSubject)); break; case Change.MessageDeleted: sb.Append(Properties.Messages.AMessageHasBeenDeletedBy.Replace("##SUBJECT##", ch[i].MessageSubject)); break; } sb.Append(" " + username + (ch[i].Description.Length > 0 ? ".<br />" + ch[i].Description : ".")); } else { sb.Append(FormattingPipeline.FormatWithPhase3(FormattingPipeline.FormatWithPhase1And2(messageContent, false, FormattingContext.MessageBody, null), FormattingContext.MessageBody, null)); } rss.WriteStartElement("description"); rss.WriteCData(sb.ToString()); rss.WriteEndElement(); // Write the remaining elements rss.WriteElementString("author", username); rss.WriteElementString("pubDate", ch[i].DateTime.ToUniversalTime().ToString("R")); rss.WriteStartElement("guid"); rss.WriteAttributeString("isPermaLink", "false"); rss.WriteString(GetGuid(ch[i].Page, ch[i].DateTime)); rss.WriteEndElement(); // Complete the item element rss.WriteEndElement(); } } // Complete the channel element CompleteCurrentElement(rss); // Complete the rss element CompleteCurrentElement(rss); // Finish off rss.Flush(); rss.Close(); } } } }
/// <summary> /// Prepares the previous and next pages link for navigation paths. /// </summary> /// <param name="previousPageLink">The previous page link.</param> /// <param name="nextPageLink">The next page link.</param> private void SetupAdjacentPages() { StringBuilder prev = new StringBuilder(50), next = new StringBuilder(50); if (Request["NavPath"] != null) { NavigationPath path = NavigationPaths.Find(Request["NavPath"]); if (path != null) { int idx = Array.IndexOf(path.Pages, currentPage.FullName); if (idx != -1) { if (idx > 0) { PageInfo prevPage = Pages.FindPage(path.Pages[idx - 1]); prev.Append(@"<a href="""); UrlTools.BuildUrl(prev, "Default.aspx?Page=", Tools.UrlEncode(prevPage.FullName), "&NavPath=", Tools.UrlEncode(path.FullName)); prev.Append(@""" title="""); prev.Append(Properties.Messages.PrevPage); prev.Append(": "); prev.Append(FormattingPipeline.PrepareTitle(Content.GetPageContent(prevPage, true).Title, false, FormattingContext.PageContent, currentPage)); prev.Append(@"""><b>«</b></a> "); } if (idx < path.Pages.Length - 1) { PageInfo nextPage = Pages.FindPage(path.Pages[idx + 1]); next.Append(@" <a href="""); UrlTools.BuildUrl(next, "Default.aspx?Page=", Tools.UrlEncode(nextPage.FullName), "&NavPath=", Tools.UrlEncode(path.FullName)); next.Append(@""" title="""); next.Append(Properties.Messages.NextPage); next.Append(": "); next.Append(FormattingPipeline.PrepareTitle(Content.GetPageContent(nextPage, true).Title, false, FormattingContext.PageContent, currentPage)); next.Append(@"""><b>»</b></a>"); } } } } if (prev.Length > 0) { lblPreviousPage.Text = prev.ToString(); } else { lblPreviousPage.Visible = false; } if (next.Length > 0) { lblNextPage.Text = next.ToString(); } else { lblNextPage.Visible = false; } }
protected void Page_Load(object sender, EventArgs e) { Page.Title = Properties.Messages.PostTitle + " - " + Settings.WikiTitle; if(Request["Page"] == null) UrlTools.RedirectHome(); page = Pages.FindPage(Request["Page"]); if(page == null) UrlTools.RedirectHome(); editor.CurrentPage = page; if(page.Provider.ReadOnly) UrlTools.Redirect(UrlTools.BuildUrl(page.FullName, Settings.PageExtension)); content = Content.GetPageContent(page, true); if(!Page.IsPostBack) lblTitle.Text += " - " + FormattingPipeline.PrepareTitle(content.Title, false, FormattingContext.MessageBody, page); // Verify permissions and setup captcha bool canPostMessage = AuthChecker.CheckActionForPage(page, Actions.ForPages.PostDiscussion, SessionFacade.GetCurrentUsername(), SessionFacade.GetCurrentGroupNames()); if(!canPostMessage) UrlTools.Redirect(UrlTools.BuildUrl(Tools.UrlEncode(page.FullName), Settings.PageExtension)); captcha.Visible = SessionFacade.LoginKey == null && !Settings.DisableCaptchaControl; if(Page.IsPostBack) return; editor.SetContent("", Settings.UseVisualEditorAsDefault); string username = Request.UserHostAddress; if(SessionFacade.LoginKey != null) username = SessionFacade.CurrentUsername; bool edit = Request["Edit"] != null; if(!edit) { if(Request["Parent"] != null) { try { int.Parse(Request["Parent"]); } catch { UrlTools.RedirectHome(); } Message[] messages = Pages.GetPageMessages(page); Message parent = Pages.FindMessage(messages, int.Parse(Request["Parent"])); if(parent != null) { txtSubject.Text = (!parent.Subject.ToLowerInvariant().StartsWith("re:") ? "Re: " : "") + parent.Subject; } } } else { try { int.Parse(Request["Edit"]); } catch { UrlTools.RedirectHome(); } Message[] messages = Pages.GetPageMessages(page); Message msg = Pages.FindMessage(messages, int.Parse(Request["Edit"])); if(msg != null) { txtSubject.Text = msg.Subject; editor.SetContent(msg.Body, Settings.UseVisualEditorAsDefault); } else throw new Exception("Message not found (" + page.FullName + "." + Request["Edit"] + ")."); } }
/// <summary> /// Gets the link to a category. /// </summary> /// <param name="category">The full name of the category.</param> /// <returns>The link URL.</returns> private string GetCategoryLink(string category) { return(UrlTools.BuildUrl("AllPages.aspx?Cat=", Tools.UrlEncode(category))); }
protected void Page_Load(object sender, EventArgs e) { discussMode = Request["Discuss"] != null; viewCodeMode = Request["Code"] != null && !discussMode; if (!Settings.EnableViewPageCodeFeature) { viewCodeMode = false; } currentPage = DetectPageInfo(true); VerifyAndPerformRedirects(); // The following actions are verified: // - View content (redirect to AccessDenied) // - Edit or Edit with Approval (for button display) // - Any Administrative activity (Rollback/Admin/Perms) (for button display) // - Download attachments (for button display - download permissions are also checked in GetFile) // - View discussion (for button display in content mode) // - Post discussion (for button display in discuss mode) string currentUsername = SessionFacade.GetCurrentUsername(); string[] currentGroups = SessionFacade.GetCurrentGroupNames(); bool canView = AuthChecker.CheckActionForPage(currentPage, Actions.ForPages.ReadPage, currentUsername, currentGroups); bool canEdit = false; bool canEditWithApproval = false; Pages.CanEditPage(currentPage, currentUsername, currentGroups, out canEdit, out canEditWithApproval); if (canEditWithApproval && canEdit) { canEditWithApproval = false; } bool canDownloadAttachments = AuthChecker.CheckActionForPage(currentPage, Actions.ForPages.DownloadAttachments, currentUsername, currentGroups); bool canSetPerms = AuthChecker.CheckActionForGlobals(Actions.ForGlobals.ManagePermissions, currentUsername, currentGroups); bool canAdmin = AuthChecker.CheckActionForPage(currentPage, Actions.ForPages.ManagePage, currentUsername, currentGroups); bool canViewDiscussion = AuthChecker.CheckActionForPage(currentPage, Actions.ForPages.ReadDiscussion, currentUsername, currentGroups); bool canPostDiscussion = AuthChecker.CheckActionForPage(currentPage, Actions.ForPages.PostDiscussion, currentUsername, currentGroups); bool canManageDiscussion = AuthChecker.CheckActionForPage(currentPage, Actions.ForPages.ManageDiscussion, currentUsername, currentGroups); if (!canView) { if (SessionFacade.LoginKey == null) { UrlTools.Redirect("Login.aspx?Redirect=" + Tools.UrlEncode(Tools.GetCurrentUrlFixed())); } else { UrlTools.Redirect(UrlTools.BuildUrl("AccessDenied.aspx")); } } attachmentViewer.Visible = canDownloadAttachments; attachmentViewer.PageInfo = currentPage; currentContent = Content.GetPageContent(currentPage, true); pnlPageInfo.Visible = Settings.EnablePageInfoDiv; SetupTitles(); SetupToolbarLinks(canEdit || canEditWithApproval, canViewDiscussion, canPostDiscussion, canDownloadAttachments, canAdmin, canAdmin, canSetPerms); SetupLabels(); SetupPrintAndRssLinks(); SetupMetaInformation(); VerifyAndPerformPageRedirection(); SetupRedirectionSource(); SetupNavigationPaths(); SetupAdjacentPages(); SessionFacade.Breadcrumbs.AddPage(currentPage); SetupBreadcrumbsTrail(); SetupDoubleClickHandler(); SetupEmailNotification(); SetupPageContent(canPostDiscussion, canManageDiscussion); if (currentPage != null) { Literal canonical = new Literal(); canonical.Text = Tools.GetCanonicalUrlTag(Request.Url.ToString(), currentPage, Pages.FindNamespace(NameTools.GetNamespace(currentPage.FullName))); Page.Header.Controls.Add(canonical); } }
/// <summary> /// Sets the content and visibility of all toolbar links. /// </summary> /// <param name="canEdit">A value indicating whether the current user can edit the page.</param> /// <param name="canViewDiscussion">A value indicating whether the current user can view the page discussion.</param> /// <param name="canPostMessages">A value indicating whether the current user can post messages in the page discussion.</param> /// <param name="canDownloadAttachments">A value indicating whether the current user can download attachments.</param> /// <param name="canRollback">A value indicating whether the current user can rollback the page.</param> /// <param name="canAdmin">A value indicating whether the current user can perform at least one administration task.</param> /// <param name="canSetPerms">A value indicating whether the current user can set page permissions.</param> private void SetupToolbarLinks(bool canEdit, bool canViewDiscussion, bool canPostMessages, bool canDownloadAttachments, bool canRollback, bool canAdmin, bool canSetPerms) { lblDiscussLink.Visible = !discussMode && !viewCodeMode && canViewDiscussion; if (lblDiscussLink.Visible) { lblDiscussLink.Text = string.Format(@"<a id=""DiscussLink"" title=""{0}"" href=""{3}?Discuss=1"">{1} ({2})</a>", Properties.Messages.Discuss, Properties.Messages.Discuss, Pages.GetMessageCount(currentPage), UrlTools.BuildUrl(NameTools.GetLocalName(currentPage.FullName), Settings.PageExtension)); } lblEditLink.Visible = Settings.EnablePageToolbar && !discussMode && !viewCodeMode && canEdit; if (lblEditLink.Visible) { lblEditLink.Text = string.Format(@"<a id=""EditLink"" title=""{0}"" href=""{1}"">{2}</a>", Properties.Messages.EditThisPage, UrlTools.BuildUrl("Edit.aspx?Page=", Tools.UrlEncode(currentPage.FullName)), Properties.Messages.Edit); } if (Settings.EnablePageToolbar && Settings.EnableViewPageCodeFeature) { lblViewCodeLink.Visible = !discussMode && !viewCodeMode && !canEdit; if (lblViewCodeLink.Visible) { lblViewCodeLink.Text = string.Format(@"<a id=""ViewCodeLink"" title=""{0}"" href=""{2}?Code=1"">{1}</a>", Properties.Messages.ViewPageCode, Properties.Messages.ViewPageCode, UrlTools.BuildUrl(NameTools.GetLocalName(currentPage.FullName), Settings.PageExtension)); } } else { lblViewCodeLink.Visible = false; } lblHistoryLink.Visible = Settings.EnablePageToolbar && !discussMode && !viewCodeMode; if (lblHistoryLink.Visible) { lblHistoryLink.Text = string.Format(@"<a id=""HistoryLink"" title=""{0}"" href=""{1}"">{2}</a>", Properties.Messages.ViewPageHistory, UrlTools.BuildUrl("History.aspx?Page=", Tools.UrlEncode(currentPage.FullName)), Properties.Messages.History); } int attachmentCount = GetAttachmentCount(); lblAttachmentsLink.Visible = canDownloadAttachments && !discussMode && !viewCodeMode && attachmentCount > 0; if (lblAttachmentsLink.Visible) { lblAttachmentsLink.Text = string.Format(@"<a id=""PageAttachmentsLink"" title=""{0}"" href=""#"" onclick=""javascript:return __ToggleAttachmentsMenu(event.clientX, event.clientY);"">{1}</a>", Properties.Messages.Attachments, Properties.Messages.Attachments); } attachmentViewer.Visible = lblAttachmentsLink.Visible; int bakCount = GetBackupCount(); lblAdminToolsLink.Visible = Settings.EnablePageToolbar && !discussMode && !viewCodeMode && ((canRollback && bakCount > 0) || canAdmin || canSetPerms); if (lblAdminToolsLink.Visible) { lblAdminToolsLink.Text = string.Format(@"<a id=""AdminToolsLink"" title=""{0}"" href=""#"" onclick=""javascript:return __ToggleAdminToolsMenu(event.clientX, event.clientY);"">{1}</a>", Properties.Messages.AdminTools, Properties.Messages.Admin); if (canRollback && bakCount > 0) { lblRollbackPage.Text = string.Format(@"<a href=""AdminPages.aspx?Rollback={0}"" onclick=""javascript:return __RequestConfirm();"" title=""{1}"">{2}</a>", Tools.UrlEncode(currentPage.FullName), Properties.Messages.RollbackThisPage, Properties.Messages.Rollback); } else { lblRollbackPage.Visible = false; } if (canAdmin) { lblAdministratePage.Text = string.Format(@"<a href=""AdminPages.aspx?Admin={0}"" title=""{1}"">{2}</a>", Tools.UrlEncode(currentPage.FullName), Properties.Messages.AdministrateThisPage, Properties.Messages.Administrate); } else { lblAdministratePage.Visible = false; } if (canSetPerms) { lblSetPagePermissions.Text = string.Format(@"<a href=""AdminPages.aspx?Perms={0}"" title=""{1}"">{2}</a>", Tools.UrlEncode(currentPage.FullName), Properties.Messages.SetPermissionsForThisPage, Properties.Messages.Permissions); } else { lblSetPagePermissions.Visible = false; } } lblPostMessageLink.Visible = discussMode && !viewCodeMode && canPostMessages; if (lblPostMessageLink.Visible) { lblPostMessageLink.Text = string.Format(@"<a id=""PostReplyLink"" title=""{0}"" href=""{1}"">{2}</a>", Properties.Messages.PostMessage, UrlTools.BuildUrl("Post.aspx?Page=", Tools.UrlEncode(currentPage.FullName)), Properties.Messages.PostMessage); } lblBackLink.Visible = discussMode || viewCodeMode; if (lblBackLink.Visible) { lblBackLink.Text = string.Format(@"<a id=""BackLink"" title=""{0}"" href=""{1}"">{2}</a>", Properties.Messages.Back, UrlTools.BuildUrl(Tools.UrlEncode(currentPage.FullName), Settings.PageExtension, "?NoRedirect=1"), Properties.Messages.Back); } }
protected void btnLogout_Click(object sender, EventArgs e) { Logout(); UrlTools.Redirect(UrlTools.BuildUrl("Login.aspx?Logout=1")); }
/// <summary> /// Prints a message. /// </summary> /// <param name="message">The message to print.</param> /// <param name="parent">The parent message, or <c>null</c>.</param> /// <param name="sb">The output <see cref="T:StringBuilder" />.</param> private void PrintMessage(Message message, Message parent, StringBuilder sb) { string currentWiki = Tools.DetectCurrentWiki(); // Print header sb.Append(@"<div class=""messageheader"">"); //sb.AppendFormat(@"<a id=""MSG_{0}""></a>", message.ID); if (!currentPage.Provider.ReadOnly) { // Print reply/edit/delete buttons only if provider is not read-only sb.Append(@"<div class=""reply"">"); if (canPostMessages) { sb.Append(@"<a class=""reply"" href="""); sb.Append(UrlTools.BuildUrl(currentWiki, "Post.aspx?Page=", Tools.UrlEncode(currentPage.FullName), "&Parent=", message.ID.ToString())); sb.Append(@""">"); sb.Append(Properties.Messages.Reply); sb.Append("</a>"); } // If current user is the author of the message or is an admin, print the edit hyperLink // A message can be edited only if the user is authenticated - anonymous users cannot edit their messages if (SessionFacade.LoginKey != null && ((message.Username == SessionFacade.CurrentUsername && canPostMessages) || canManageDiscussion)) { sb.Append(@" <a class=""edit"" href="""); sb.Append(UrlTools.BuildUrl(currentWiki, "Post.aspx?Page=", Tools.UrlEncode(currentPage.FullName), "&Edit=", message.ID.ToString())); sb.Append(@""">"); sb.Append(Properties.Messages.Edit); sb.Append("</a>"); } // If the current user is an admin, print the delete hyperLink if (SessionFacade.LoginKey != null && canManageDiscussion) { sb.Append(@" <a class=""delete"" href="""); sb.Append(UrlTools.BuildUrl(currentWiki, "Operation.aspx?Operation=DeleteMessage&Message=", message.ID.ToString(), "&Page=", Tools.UrlEncode(currentPage.FullName))); sb.Append(@""">"); sb.Append(Properties.Messages.Delete); sb.Append("</a>"); } sb.Append("</div>"); } sb.Append(@"<div>"); sb.AppendFormat(@"<a id=""{0}"" href=""#{0}"" title=""Permalink"">¶</a> ", Tools.GetMessageIdForAnchor(message.DateTime)); // Print subject if (message.Subject.Length > 0) { sb.Append(@"<span class=""messagesubject"">"); sb.Append(FormattingPipeline.PrepareTitle(currentWiki, message.Subject, false, FormattingContext.MessageBody, currentPage.FullName)); sb.Append("</span>"); } // Print message date/time sb.Append(@"<span class=""messagedatetime"">"); sb.Append(Preferences.AlignWithTimezone(currentWiki, message.DateTime).ToString(Settings.GetDateTimeFormat(currentWiki))); sb.Append(" "); sb.Append(Properties.Messages.By); sb.Append(" "); sb.Append(Users.UserLink(currentWiki, message.Username)); sb.Append("</span>"); sb.Append("</div>"); sb.Append("</div>"); // Print body sb.Append(@"<div class=""messagebody"">"); sb.Append(FormattingPipeline.FormatWithPhase3(currentWiki, FormattingPipeline.FormatWithPhase1And2(currentWiki, message.Body, false, FormattingContext.MessageBody, currentPage.FullName), FormattingContext.MessageBody, currentPage.FullName)); sb.Append("</div>"); }
protected void Page_Load(object sender, EventArgs e) { if (SessionFacade.LoginKey != null) { UrlTools.Redirect("Profile.aspx"); return; } // Test whether the default Users Provider is read-only IUsersStorageProviderV30 p = Collectors.UsersProviderCollector.GetProvider(Settings.DefaultUsersProvider); if (p.UserAccountsReadOnly) { Log.LogEntry("Default Users Provider (" + p.Information.Name + ") is read-only, aborting Account Creation", EntryType.Warning, Log.SystemUsername); UrlTools.Redirect(UrlTools.BuildUrl("Error.aspx")); } PrintRegisterNotice(); Page.Title = Properties.Messages.RegisterTitle + " - " + Settings.WikiTitle; if (!Settings.UsersCanRegister) { UrlTools.Redirect(UrlTools.BuildUrl("AccessDenied.aspx")); } switch (Settings.AccountActivationMode) { case AccountActivationMode.Email: lblAccountActivationMode.Text = Properties.Messages.ActivationEmail; break; case AccountActivationMode.Administrator: lblAccountActivationMode.Text = Properties.Messages.ActivationAdmin; break; case AccountActivationMode.Auto: lblAccountActivationMode.Text = Properties.Messages.ActivationAuto; break; } if (Settings.DisableCaptchaControl) { lblCaptcha.Visible = false; captcha.Visible = false; } if (!Page.IsPostBack) { rxvUserName.ValidationExpression = Settings.UsernameRegex; rxvDisplayName.ValidationExpression = Settings.DisplayNameRegex; rxvEmail1.ValidationExpression = Settings.EmailRegex; rxvPassword1.ValidationExpression = Settings.PasswordRegex; } if (Page.IsPostBack) { // Preserve password value (a bit insecure but much more usable) txtPassword1.Attributes.Add("value", txtPassword1.Text); txtPassword2.Attributes.Add("value", txtPassword2.Text); } }
protected void Page_Load(object sender, EventArgs e) { this.Page.Title = Properties.Messages.PageIncomingLinks + " - " + Settings.WikiTitle; var page = Pages.FindPage(Request["Page"]); PageContent content; if (page != null) { content = Content.GetPageContent(page, true); lblTitle.Text = Properties.Messages.PageIncomingLinks + ": " + FormattingPipeline.PrepareTitle(content.Title, false, FormattingContext.PageContent, page); if (!AuthChecker.CheckActionForPage(page, Actions.ForPages.ReadPage, SessionFacade.GetCurrentUsername(), SessionFacade.GetCurrentGroupNames())) { UrlTools.Redirect("AccessDenied.aspx"); return; } } var incomingLinks = Pages.GetPageIncomingLinks(page); foreach (var link in incomingLinks) { var linkPage = Pages.FindPage(link); var linkPageContent = linkPage.Provider.GetContent(linkPage); ulItems.InnerHtml += string.Format("<li><a href=\"{0}\">{1}</a></li>", UrlTools.BuildUrl(Tools.UrlEncode(link), Settings.PageExtension), linkPageContent.Title); } }
public void PrintCat() { StringBuilder sb = new StringBuilder(); sb.Append("<ul>"); sb.Append(@"<li><a href="""); UrlTools.BuildUrl(sb, "AllPages.aspx?Cat=-"); sb.Append(@""">"); sb.Append(Properties.Messages.UncategorizedPages); sb.Append("</a> ("); sb.Append(Pages.GetUncategorizedPages(currentNamespace).Length.ToString()); sb.Append(")"); sb.Append(@" - <small><a href="""); UrlTools.BuildUrl(sb, "RSS.aspx?Category=-"); sb.Append(@""" title="""); sb.Append(Properties.Messages.RssForThisCategory); sb.Append(@""">RSS</a> - <a href="""); UrlTools.BuildUrl(sb, "RSS.aspx?Discuss=1&Category=-"); sb.Append(@""" title="""); sb.Append(Properties.Messages.RssForThisCategoryDiscussion); sb.Append(@""">"); sb.Append(Properties.Messages.DiscussionsRss); sb.Append("</a>"); sb.Append("</small>"); sb.Append("</li></ul><br />"); sb.Append("<ul>"); List <CategoryInfo> categories = Pages.GetCategories(currentNamespace); for (int i = 0; i < categories.Count; i++) { if (categories[i].Pages.Length > 0) { sb.Append(@"<li>"); sb.Append(@"<a href="""); UrlTools.BuildUrl(sb, "AllPages.aspx?Cat=", Tools.UrlEncode(categories[i].FullName)); sb.Append(@""">"); sb.Append(NameTools.GetLocalName(categories[i].FullName)); sb.Append("</a> ("); sb.Append(categories[i].Pages.Length.ToString()); sb.Append(")"); sb.Append(@" - <small><a href="""); UrlTools.BuildUrl(sb, "RSS.aspx?Category=", Tools.UrlEncode(categories[i].FullName)); sb.Append(@""" title="""); sb.Append(Properties.Messages.RssForThisCategory); sb.Append(@""">RSS</a> - <a href="""); UrlTools.BuildUrl(sb, "RSS.aspx?Discuss=1&Category=", Tools.UrlEncode(categories[i].FullName)); sb.Append(@""" title="""); sb.Append(Properties.Messages.RssForThisCategoryDiscussion); sb.Append(@""">"); sb.Append(Properties.Messages.DiscussionsRss); sb.Append("</a>"); sb.Append("</small>"); sb.Append("</li>"); } else { sb.Append(@"<li><i>"); sb.Append(NameTools.GetLocalName(categories[i].FullName)); sb.Append("</i></li>"); } } sb.Append("</ul>"); lblCatList.Text = sb.ToString(); }
protected void btnCompare_Click(object sender, EventArgs e) { UrlTools.Redirect(UrlTools.BuildUrl("Diff.aspx?Page=", Tools.UrlEncode(page.FullName), "&Rev1=", lstRev1.SelectedValue, "&Rev2=", lstRev2.SelectedValue)); }