Exemplo n.º 1
0
        /// <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();
        }
Exemplo n.º 2
0
 /// <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);
     }
 }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        /// <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);
            }
        }