BuildUrl() public static method

Builds a URL properly prepending the namespace to the URL.
public static BuildUrl ( ) : string
return string
示例#1
0
 /// <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), "&amp;Rev1=Current&amp;Rev2=Draft"),
                                                                                                                                                                                                                                                                       Properties.Messages.ViewChanges));
     }
     else
     {
         pnlDraft.Visible = false;
     }
 }
示例#2
0
        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);
                }
            }
        }
示例#3
0
        /// <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();
        }
示例#4
0
        /// <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 ? "&amp;Reverse=1" : ""),
                              (Request["Cat"] != null ? "&amp;Cat=" + Tools.UrlEncode(Request["Cat"]) : ""),
                              "&amp;Page=", selectedPage.ToString());

            sb.Append(@""" title=""");
            sb.Append(Properties.Messages.SortByTitle);
            sb.Append(@""">");
            sb.Append(Properties.Messages.PageTitle);
            sb.Append((reverse && sortBy.Equals("title") ? " &uarr;" : ""));
            sb.Append((!reverse && sortBy.Equals("title") ? " &darr;" : ""));
            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 ? "&amp;Reverse=1" : ""),
                              (Request["Cat"] != null ? "&amp;Cat=" + Tools.UrlEncode(Request["Cat"]) : ""),
                              "&amp;Page=", selectedPage.ToString());

            sb.Append(@""" title=""");
            sb.Append(Properties.Messages.SortByDate);
            sb.Append(@""">");
            sb.Append(Properties.Messages.CreatedOn);
            sb.Append((reverse && sortBy.Equals("creation") ? " &uarr;" : ""));
            sb.Append((!reverse && sortBy.Equals("creation") ? " &darr;" : ""));
            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 ? "&amp;Reverse=1" : ""),
                              (Request["Cat"] != null ? "&amp;Cat=" + Tools.UrlEncode(Request["Cat"]) : ""),
                              "&amp;Page=", selectedPage.ToString());

            sb.Append(@""" title=""");
            sb.Append(Properties.Messages.SortByDate);
            sb.Append(@""">");
            sb.Append(Properties.Messages.ModifiedOn);
            sb.Append((reverse && sortBy.Equals("date") ? " &uarr;" : ""));
            sb.Append((!reverse && sortBy.Equals("date") ? " &darr;" : ""));
            sb.Append("</a></th>");

            // Creator
            sb.Append(@"<th><a rel=""nofollow"" href=""");
            UrlTools.BuildUrl(sb, "AllPages.aspx?SortBy=Creator",
                              (!reverse && sortBy == SortingMethod.Creator ? "&amp;Reverse=1" : ""),
                              (Request["Cat"] != null ? "&amp;Cat=" + Tools.UrlEncode(Request["Cat"]) : ""),
                              "&amp;Page=", selectedPage.ToString());

            sb.Append(@""" title=""");
            sb.Append(Properties.Messages.SortByUser);
            sb.Append(@""">");
            sb.Append(Properties.Messages.CreatedBy);
            sb.Append((reverse && sortBy.Equals("creator") ? " &uarr;" : ""));
            sb.Append((!reverse && sortBy.Equals("creator") ? " &darr;" : ""));
            sb.Append("</a></th>");

            // Last author
            sb.Append(@"<th><a rel=""nofollow"" href=""");
            UrlTools.BuildUrl(sb, "AllPages.aspx?SortBy=User",
                              (!reverse && sortBy == SortingMethod.User ? "&amp;Reverse=1" : ""),
                              (Request["Cat"] != null ? "&amp;Cat=" + Tools.UrlEncode(Request["Cat"]) : ""),
                              "&amp;Page=", selectedPage.ToString());

            sb.Append(@""" title=""");
            sb.Append(Properties.Messages.SortByUser);
            sb.Append(@""">");
            sb.Append(Properties.Messages.ModifiedBy);
            sb.Append((reverse && sortBy.Equals("user") ? " &uarr;" : ""));
            sb.Append((!reverse && sortBy.Equals("user") ? " &darr;" : ""));
            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("&nbsp;");
                    }
                    sb.Append("</td>");

                    // Creation date/time
                    sb.Append(@"<td>");
                    sb.Append(Preferences.AlignWithTimezone(pageList[i].CreationDateTime).ToString(Settings.DateTimeFormat) + "&nbsp;");
                    sb.Append("</td>");

                    // Mod. date/time
                    sb.Append(@"<td>");
                    sb.Append(Preferences.AlignWithTimezone(pageList[i].ModificationDateTime).ToString(Settings.DateTimeFormat) + "&nbsp;");
                    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);
        }
示例#5
0
        /// <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),
                                      "&amp;Revision=", Tools.GetVersionString((int)(rev - 1)));

                    sb.Append(@""">&laquo; ");
                    sb.Append(Properties.Messages.OlderRevision);
                    sb.Append("</a>");
                }
                else
                {
                    sb.Append("&laquo; ");
                    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),
                                      "&amp;Revision=", Tools.GetVersionString((int)(rev + 1)));

                    sb.Append(@""">");
                    sb.Append(Properties.Messages.NewerRevision);
                    sb.Append(" &raquo;</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();
        }
示例#6
0
 protected void btnCancelDeleteMessage_Click(object sender, EventArgs e)
 {
     UrlTools.Redirect(UrlTools.BuildUrl(currentWiki, Request["Page"], GlobalSettings.PageExtension, "?Discuss=1"));
 }
示例#7
0
        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}"">&laquo; {1}</a>",
                                         UrlTools.BuildUrl("History.aspx?Page=", Tools.UrlEncode(Request["Page"]), "&amp;Rev1=", Request["Rev1"], "&amp;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();
        }
示例#8
0
        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();
                    }
                }
            }
        }
示例#9
0
        /// <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),
                                              "&amp;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>&laquo;</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),
                                              "&amp;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>&raquo;</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;
            }
        }
示例#10
0
		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"] + ").");
			}

		}
示例#11
0
 /// <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)));
 }
示例#12
0
        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);
            }
        }
示例#13
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(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);
            }
        }
示例#14
0
 protected void btnLogout_Click(object sender, EventArgs e)
 {
     Logout();
     UrlTools.Redirect(UrlTools.BuildUrl("Login.aspx?Logout=1"));
 }
示例#15
0
        /// <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), "&amp;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), "&amp;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&amp;Message=", message.ID.ToString(),
                                                "&amp;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"">&#0182;</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>");
        }
示例#16
0
        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);
            }
        }
示例#17
0
        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);
            }
        }
示例#18
0
        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&amp;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&amp;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();
        }
示例#19
0
 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));
 }