/// <summary> /// Loads the content configuration. /// </summary> /// <param name="currentWiki">The wiki.</param> private void LoadContentConfig(string currentWiki) { string[] theme = Settings.GetTheme(currentWiki, null).Split(new char[] { '|' }); ThemeRootSelector.SelectedProvider = theme[0]; ThemeRootSelector.SelectedThemes = theme[1]; PopulateMainPages(Settings.GetDefaultPage(currentWiki)); txtDateTimeFormat.Text = Settings.GetDateTimeFormat(currentWiki); PopulateDateTimeFormats(); PopulateLanguages(Settings.GetDefaultLanguage(currentWiki)); PopulateTimeZones(Settings.GetDefaultTimezone(currentWiki)); txtMaxRecentChangesToDisplay.Text = Settings.GetMaxRecentChangesToDisplay(currentWiki).ToString(); lstRssFeedsMode.SelectedIndex = -1; switch (Settings.GetRssFeedsMode(currentWiki)) { case RssFeedsMode.FullText: lstRssFeedsMode.SelectedIndex = 0; break; case RssFeedsMode.Summary: lstRssFeedsMode.SelectedIndex = 1; break; case RssFeedsMode.Disabled: lstRssFeedsMode.SelectedIndex = 2; break; } chkEnableDoubleClickEditing.Checked = Settings.GetEnableDoubleClickEditing(currentWiki); chkEnableSectionEditing.Checked = Settings.GetEnableSectionEditing(currentWiki); chkEnableSectionAnchors.Checked = Settings.GetEnableSectionAnchors(currentWiki); chkEnablePageToolbar.Checked = Settings.GetEnablePageToolbar(currentWiki); chkEnableViewPageCode.Checked = Settings.GetEnableViewPageCodeFeature(currentWiki); chkEnablePageInfoDiv.Checked = Settings.GetEnablePageInfoDiv(currentWiki); chkEnableBreadcrumbsTrail.Checked = !Settings.GetDisableBreadcrumbsTrail(currentWiki); chkAutoGeneratePageNames.Checked = Settings.GetAutoGeneratePageNames(currentWiki); chkProcessSingleLineBreaks.Checked = Settings.GetProcessSingleLineBreaks(currentWiki); chkUseVisualEditorAsDefault.Checked = Settings.GetUseVisualEditorAsDefault(currentWiki); if (Settings.GetKeptBackupNumber(currentWiki) == -1) { txtKeptBackupNumber.Text = ""; } else { txtKeptBackupNumber.Text = Settings.GetKeptBackupNumber(currentWiki).ToString(); } chkDisplayGravatars.Checked = Settings.GetDisplayGravatars(currentWiki); txtListSize.Text = Settings.GetListSize(currentWiki).ToString(); }
/// <summary> /// Sets the actual page content, based on the current view mode (normal, discussion, view code). /// </summary> /// <param name="canPostMessages">A value indicating whether the current user can post messages.</param> /// <param name="canManageDiscussion">A value indicating whether the current user can manage the discussion.</param> private void SetupPageContent(bool canPostMessages, bool canManageDiscussion) { if (!discussMode && !viewCodeMode) { Literal literal = new Literal(); literal.Text = FormattedContent.GetFormattedPageContent(currentWiki, currentPage); plhContent.Controls.Add(literal); } else if (!discussMode && viewCodeMode) { if (Settings.GetEnableViewPageCodeFeature(currentWiki)) { Literal literal = new Literal(); StringBuilder sb = new StringBuilder(currentPage.Content.Length + 100); sb.Append(@"<textarea style=""width: 98%; height: 500px;"" readonly=""true"">"); sb.Append(Server.HtmlEncode(currentPage.Content)); sb.Append("</textarea>"); sb.Append("<br /><br />"); sb.Append(Properties.Messages.MetaKeywords); sb.Append(": <b>"); sb.Append(PrintKeywords(currentPage.Keywords)); sb.Append("</b><br />"); sb.Append(Properties.Messages.MetaDescription); sb.Append(": <b>"); sb.Append(currentPage.Description); sb.Append("</b><br />"); sb.Append(Properties.Messages.ChangeComment); sb.Append(": <b>"); sb.Append(currentPage.Comment); sb.Append("</b>"); literal.Text = sb.ToString(); plhContent.Controls.Add(literal); } } else if (discussMode && !viewCodeMode) { PageDiscussion discussion = LoadControl("~/PageDiscussion.ascx") as PageDiscussion; discussion.CurrentPage = currentPage; discussion.CanPostMessages = canPostMessages; discussion.CanManageDiscussion = canManageDiscussion; plhContent.Controls.Add(discussion); } }
protected void Page_Load(object sender, EventArgs e) { currentWiki = DetectWiki(); discussMode = Request["Discuss"] != null; viewCodeMode = Request["Code"] != null && !discussMode; if (!Settings.GetEnableViewPageCodeFeature(currentWiki)) { viewCodeMode = false; } currentPage = Pages.FindPage(currentWiki, DetectPage(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(currentWiki); AuthChecker authChecker = new AuthChecker(Collectors.CollectorsBox.GetSettingsProvider(currentWiki)); bool canView = authChecker.CheckActionForPage(currentPage.FullName, Actions.ForPages.ReadPage, currentUsername, currentGroups); bool canEdit = false; bool canEditWithApproval = false; Pages.CanEditPage(currentWiki, currentPage.FullName, currentUsername, currentGroups, out canEdit, out canEditWithApproval); if (canEditWithApproval && canEdit) { canEditWithApproval = false; } bool canDownloadAttachments = authChecker.CheckActionForPage(currentPage.FullName, Actions.ForPages.DownloadAttachments, currentUsername, currentGroups); bool canSetPerms = authChecker.CheckActionForGlobals(Actions.ForGlobals.ManagePermissions, currentUsername, currentGroups); bool canAdmin = authChecker.CheckActionForPage(currentPage.FullName, Actions.ForPages.ManagePage, currentUsername, currentGroups); bool canViewDiscussion = authChecker.CheckActionForPage(currentPage.FullName, Actions.ForPages.ReadDiscussion, currentUsername, currentGroups); bool canPostDiscussion = authChecker.CheckActionForPage(currentPage.FullName, Actions.ForPages.PostDiscussion, currentUsername, currentGroups); bool canManageDiscussion = authChecker.CheckActionForPage(currentPage.FullName, 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(currentWiki, "AccessDenied.aspx")); } } attachmentViewer.Visible = canDownloadAttachments; attachmentViewer.PageFullName = currentPage.FullName; pnlPageInfo.Visible = Settings.GetEnablePageInfoDiv(currentWiki); SetupTitles(); SetupToolbarLinks(canEdit || canEditWithApproval, canViewDiscussion, canPostDiscussion, canDownloadAttachments, canAdmin, canAdmin, canSetPerms); SetupLabels(); SetupPrintAndRssLinks(); SetupMetaInformation(); VerifyAndPerformPageRedirection(); SetupRedirectionSource(); SetupNavigationPaths(); SetupAdjacentPages(); SessionFacade.Breadcrumbs(currentWiki).AddPage(currentPage.FullName); SetupBreadcrumbsTrail(); SetupDoubleClickHandler(); SetupEmailNotification(); SetupPageContent(canPostDiscussion, canManageDiscussion); if (currentPage != null) { Literal canonical = new Literal(); canonical.Text = Tools.GetCanonicalUrlTag(Request.Url.ToString(), currentPage.FullName, Pages.FindNamespace(currentWiki, 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(currentWiki, NameTools.GetLocalName(currentPage.FullName), GlobalSettings.PageExtension)); } lblEditLink.Visible = Settings.GetEnablePageToolbar(currentWiki) && !discussMode && !viewCodeMode && canEdit; if (lblEditLink.Visible) { lblEditLink.Text = string.Format(@"<a id=""EditLink"" title=""{0}"" href=""{1}"">{2}</a>", Properties.Messages.EditThisPage, UrlTools.BuildUrl(currentWiki, "Edit.aspx?Page=", Tools.UrlEncode(currentPage.FullName)), Properties.Messages.Edit); } if (Settings.GetEnablePageToolbar(currentWiki) && Settings.GetEnableViewPageCodeFeature(currentWiki)) { 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(currentWiki, NameTools.GetLocalName(currentPage.FullName), GlobalSettings.PageExtension)); } } else { lblViewCodeLink.Visible = false; } lblHistoryLink.Visible = Settings.GetEnablePageToolbar(currentWiki) && !discussMode && !viewCodeMode; if (lblHistoryLink.Visible) { lblHistoryLink.Text = string.Format(@"<a id=""HistoryLink"" title=""{0}"" href=""{1}"">{2}</a>", Properties.Messages.ViewPageHistory, UrlTools.BuildUrl(currentWiki, "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.GetEnablePageToolbar(currentWiki) && !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(currentWiki, "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(currentWiki, Tools.UrlEncode(currentPage.FullName), GlobalSettings.PageExtension, "?NoRedirect=1"), Properties.Messages.Back); } }