Listing 1

public override WebPartVerbCollection Verbs
{
  get
  {
    // See if the user has the ability to edit the page
    // If so, provide a link
    List<WebPartVerb> verbs = new List<WebPartVerb>();
    if (_pageId != -1)
    {
      try
      {
        if (ConfluenceHelper.HasEditPermission(_pageId))
        {
          String clientClickHandler = String.Format(
            "window.open('{0}/pages/editpage.action?pageId={1}','EditPage')",
            ConfluenceConfiguration.Instance.ConfluenceSite, _pageId);
          WebPartVerb editPageVerb = new WebPartVerb(
            this.ID + "_editPageVerb", clientClickHandler);
          editPageVerb.Description = "Edit the Confluence wiki page.";
          editPageVerb.Text = "Edit Confluence Page";
          editPageVerb.ImageUrl = Constants.WebPartTitleIconImageUrl;
          verbs.Add(editPageVerb);
        }
      }
      catch (Exception ex)
      {
        TraceHelper.TraceError("ConfluencePageWebPart", "get_Verbs",
          "Unable to check edit permissions.", ex);
      }
    }

  WebPartVerbCollection allverbs =
    new WebPartVerbCollection(base.Verbs, verbs);
  return allverbs;
}
  }

Listing 2

public override EditorPartCollection CreateEditorParts()
{
  // The EditorPartCollection object is immutable so we have to
  // use the following approach to return the base editor part
  // collection along with our editor part

  // Create a list of editor parts containing our editor part
  List<EditorPart> editorParts = new List<EditorPart>(1);
  EditorPart part = new ConfluencePageEditorPart();
  part.ID = this.ID + "_confluencePageEditorPart";
  editorParts.Add(part);

  // Return a new EditorPartCollection containing
  // the base editor parts and our editor part
  return new EditorPartCollection(
    base.CreateEditorParts(), editorParts);
}

Listing 3

public override void SyncChanges()
{
  ConfluencePageWebPart pageWebPart =
    this.WebPartToEdit as ConfluencePageWebPart;

  if (pageWebPart != null)
  {
    // Store the synced values to be handled later in OnPreRender
    _syncedPageRenderMode = pageWebPart.PageRenderMode.ToString();
    _syncedSpaceKey = pageWebPart.SpaceKey;
    _syncedPageId = pageWebPart.PageId;
  }
}

Listing 4

public override bool ApplyChanges()
{
  this.EnsureChildControls();

  ConfluencePageWebPart pageWebPart =
    this.WebPartToEdit as ConfluencePageWebPart;

  if (pageWebPart != null)
  {
    pageWebPart.PageRenderMode = (ConfluencePageWebPart.RenderMode)
      (Enum.Parse(typeof(ConfluencePageWebPart.RenderMode),
      _pageRenderModeDropDownList.SelectedValue));

    pageWebPart.SpaceKey = _spaceDropDownList.SelectedValue;
    if (_pagesTreeView.SelectedValue != null &&
      _pagesTreeView.SelectedValue.Length > 0)
    {
      pageWebPart.PageId = Int64.Parse(_pagesTreeView.SelectedValue);
      pageWebPart.Title = _pagesTreeView.SelectedNode.Text;
    }
    else
    {
      pageWebPart.PageId = -1L;
      pageWebPart.Title = DefaultTitle;
    }
  }

  return true;
}

Listing 5

private void SetSiteProperty(string propertyName, string value)
{
  if (SPContext.Current.Web.Properties.ContainsKey(propertyName))
  {
    SPContext.Current.Web.Properties[propertyName] = value;
  }
  else
  {
    SPContext.Current.Web.Properties.Add(propertyName, value);
  }
  SPContext.Current.Web.Properties.Update();
}

Listing 6

private string GetSiteProperty(string propertyName)
{
  return GetSiteProperty(SPContext.Current.Web, propertyName);
}

private string GetSiteProperty(SPWeb site, string propertyName)
{
  string propertyValue = String.Empty;
  if (site.Properties.ContainsKey(propertyName))
  {
    propertyValue = site.Properties[propertyName];
  }
  else
  {
    if (!site.IsRootWeb)
    {
      // Look in the parent site if this prop is not set in this site
      propertyValue = GetSiteProperty(site.ParentWeb, propertyName);
    }
  }

  return propertyValue;
}