Sibling Tabs User Macro for Atlassian Confluence

The sibling tabs user macro for Confluence gives a simple way to create a horizontal tabbed navigation system between sibling pages in a Confluence space.

Here’s a video demo:

Here’s the code and how to apply it to your Confluence system:

In Confluence Admin | User Macros, create a new user macro and paste in:

Simply add the Sibling Tabs user macro whenever you want horizontal tabs — don’t forget to att the macro to each of the pages ūüėČ

 


The AppFusions team provides tough-problem expert-level product development and consulting services. Our portfolio of solutions is a prime example of our expertise, aside from much other community involvement. Nonetheless, we are only at the beginning of our journey.

Please reach out any time. We know we can help you – it is our relentless obsession and passion!

Gister for Confluence ‚Äď Effortlessly embed gists into Atlassian Confluence

Announcing Gister for Confluence, a new Confluence add-on that does just one thing. Effortlessly.

Gist is a simple way to share snippets and pastes with others. All gists are Git repositories, so they are automatically versioned, forkable and usable from Git.

Got a gist on Github?

Want to embed it in Confluence?

Paste the gist URL into the Confluence editor and your gist will automatically be embedded using the Gist macro.

 

Here’s how it works:

What does it cost? Nothing at all. Have this one on me.

‚Üí Get Gister for Confluence for free

Works with Confluence 5.2 and up.

 


The AppFusions team provides tough-problem expert-level product development and consulting services. Our portfolio of solutions is a prime example of our expertise, aside from much other community involvement. Nonetheless, we are only at the beginning of our journey.

Please reach out any time. We know we can help you – it is our relentless obsession and passion!

Searching Atlassian JIRA from an external website

Following on from a previous post about searching Confluence from an external website, I’ve forked the code to search JIRA instead.

Atlassian JIRAThis very simple PHP code searches a remote JIRA server by querying the JIRA search REST API, the formats the results into a neat list.

Here’s a walk through video demonstration of the code and the resulting web page:

The source code in available on Bitbucket here.

Fork it. Adapt it. Secure it.

Let me know how you’ve used it ūüėČ

 


The AppFusions team provides tough-problem expert-level product development and consulting services. Our portfolio of solutions is a prime example of our expertise, aside from much other community involvement. Nonetheless, we are only at the beginning of our journey.

Please reach out any time. We know we can help you – it is our relentless obsession and passion!

How to disable the Popular tab on the dashboard page in Atlassian Confluence

Dalai Lama
..sprecken of “popular” .. Dalai Lama

 

The Popular tab on the dashboard of Atlassian Confluence displays:

  • Pages, blog posts and comments that people have recently liked.
  • Pages and blog posts that people have recently commented on, and threaded comments that people have recently replied to.
  • Pages and blog posts that have recently been created.

A fresh installation will display a helpful “Welcome, looks like you’re new here” section – as shown below.

Some companies do not want this functionality and want to know how it can be turned off.

It’s very easy to remove this functionality, as it is based on an add-on module that can simply be disabled.

Here’s how:

  • Browse to Confluence Admin | Atlassian Marketplace | Manage Add-ons
  • Filter for “dash” in “System” add-ons
  • Expand the Dashboard Macros add-on
  • Expand the 14 of 14 modules enabled link
  • Disable the Popular Tab (popular-tab) module

Having stepped through this process, the Popular tab will no longer be displayed. Simple.

 


The AppFusions team provides tough-problem expert-level product development and consulting services. Our portfolio of solutions is a prime example of our expertise, aside from much other community involvement.

Nonetheless, we are only at the beginning of our journey. Please reach out any time. We know we can help you Рit is our relentless obsession and passion!

How to move the Confluence “Create” button back to the pre-Confluence 5 location

The Good Old Days
Those were the good ol days..

Upon release of Confluence 5, I really couldn’t handle the new location for the “Create button”. ¬†A few months in, I’m happy and it now seems natural, but for users making the change, it can seem counter-intuitive.

Several clients have asked how to get the create button back to where “it should be”. This is a hack to do just that.

 

Browse to Confluence Admin | Look and Feel | Custom HTML | At the END of the BODY and paste the following:

 

Save and you’re back to the “good old days”:

 


The AppFusions team provides tough-problem expert-level product development and consulting services. Our portfolio of solutions is a prime example of our expertise, aside from much other community involvement. Nonetheless, we are only at the beginning of our journey.

Please reach out any time. We know we can help you – it is our relentless obsession and passion!

Accelerate access to your JIRA 6.1 with Google Apps SSO Authenticator for JIRA

Earlier this month, Atlassian released JIRA 6.1, the very latest in their increasingly slick and easy to use project and issue tracking system. The latest release introduces an improved workflow editor as well as improved search.
Love Candy!
JIRA 6.1 is all about making change happen faster, for everyone in the organization.

For users of Google Apps, what better way of increasing productivity for all than automating the JIRA sign-in process using your existing Google Apps account. Minutes saved are minutes accumulated are minutes earned!

AppFusions’ Google Apps SSO Authenticator for JIRA simplifies user management. It automatically assigns users to groups and optionally automates JIRA user creation.

Find out more in this video:

Try it now by grabbing an evaluation.

If you find this useful, why not improve your Atlassian Confluence sign-in process too with Google Apps SSO Authenticator for Confluence. More details can be found in this video:

Try it now by grabbing an evaluation.

 


The AppFusions team provides tough-problem expert-level product development and consulting services. Our portfolio of solutions is a prime example of our expertise, aside from much other community involvement. Nonetheless, we are only at the beginning of our journey.

Please reach out any time. We know we can help you – it is our relentless obsession and passion!

Searching Atlassian Confluence from an external website

Oliver Marshall asks:

We’re looking at using Confluence for an internal and external knowledgebase. A number of our suppliers use it, so we’re happy it does what we want.

However we want our customers to find common wiki entries via our website, where we send them for various bits of info at the moment.

Other KB/Wiki tools we’ve looked at provide a javascript widget we can include in the site which will give us a CSS’able search box and results. That works nicely.

At a push I’d take the ability to use an iFrame on our site pointing to a basic page with no Confluence navbars or headers (just the page and search bar).

Anyone got any comments or feedback at all on this? Our site is in WordPress if that helps.

This post offers a possible complete working solution for Oliver’s task using PHP.

Here’s a video demonstrating how:

Here’s the source code.

The code reuses the REST API for the quick search dropdown in the standard Confluence search field and as such only returns the first 6 results. You could of course change this to use a different REST API.

 


The AppFusions team provides tough-problem expert-level product development and consulting services. Our portfolio of solutions is a prime example of our expertise, aside from much other community involvement. Nonetheless, we are only at the beginning of our journey.

Please reach out any time. We know we can help you – it is our relentless obsession and passion!

Announcing Social Business Open Standards Workshop, Organized by OpenSocial Foundation and W3C, and Hosted by AppFusions

SAN FRANCISCO, June 26, 2013 (GLOBE NEWSWIRE) — The¬†W3C¬†and¬†OpenSocial Foundation¬†will be conducting a¬†Workshop on Social Standards: The Future of Business¬†on August 7-8, 2013 in San Francisco, CA.

The event, sponsored by IBM and hosted by AppFusions, is designed to bring together social business and platform technology development experts to discuss new strategies for standardizing technologies in support of the burgeoning adoption of social business tools. The workshop will be at Casa de la Vista on Treasure Island.

The lack of adequate standards makes it difficult to create platform bridging or application integration software that comprehensively serves mainstream social business needs of both users and organizations. The workshop will address the growing demand for interoperable social standards to solve mixed-technology challenges caused by today’s fragmented specification and technology landscape.

Workshop discussion topics include:

  • Key use cases and requirements driving social business
  • Technologies that can be standardized to solve the problems facing social business
  • Overall architecture of social business interoperability needs
  • The difference between standards inside the enterprise and across enterprises
  • Organic approaches that are evolving without standardization, such as user engagement and custom integration designs
  • Next steps for evolved social specifications, ranging from OpenSocial to the Federated Social Web

The Workshop event is free to attend, and open to social business leaders and strategists, federated and decentralized social Web technologists, security experts and developers. To register either as an attendee or as a presenter, visit the Workshop information site for instructions.

==

“For a long time, the W3C has thought that social standards need to be a first-class citizen on the Web. By partnering with the OpenSocial Foundation, we will lay the groundwork for this next step in the evolution of the Web, at our joint workshop in August,” said Harry Halpin, a W3C team member. “We expect that social standards will eventually have as huge an impact as HTML5 has had, both across the enterprise and for users.”

“There is a tremendous need for a standardized component model for delivery of cloud applications into the enterprise, and across many platforms. OpenSocial is the only community-led initiative working in this space to define a standard,” said Mark Weitzel, President of the OpenSocial Foundation. “In working with the W3C, we believe that we can accomplish more and reach a broader audience of developers to proliferate and optimize solutions across enterprises. We are excited to progress our objectives with these upcoming discussions in San Francisco.”

Boeing, Cisco, Dachis Group, Ford, Google, IBM, Jive Software, MIT, Mozilla, Oracle, SAP, SugarCRM, Salesforce, Telecom Italia, Tibco, UCF, W3C and many other industry leaders and social business platform corporations are anticipated at the workshop. Learn more here.

About AppFusions

AppFusions is a leader in packaged platform-to-platform integration solutions bridging information silos, and streamlining enterprise process and data redundancies. As early development adopters, AppFusions is already deploying OpenSocial-compliant integrations with Jive Software or IBM Connections on one side, and Atlassian JIRA,Confluence, Stash, FishEye, Crucible, and/or Bamboo on the other side.

Overall, the company’s achievements include packaged solutions with Atlassian JIRA, Confluence, Crowd, IBM Connections, IBM Sametime, Jive,¬†Box,¬†Dropbox,¬†Google Drive,¬†Alfresco,¬†Google Analytics,¬†LingoTek,¬†UserVoice,Parature,¬†iRise, and more. AppFusions’ customers include Fortune 10s to SMBs. Learn more athttp://appfusions.com.

Names of actual companies and products mentioned herein may be trademarks of their respective owners.

For Media & Business Inquiries:
Jill Schmidt
SS|PR
847-415-9311

E2 Conference (Boston 2013) Silver Sponsor AppFusions Enables Collaboration

(PRNewswire Press Release reprinted)

AppFusions Breaks Down Silos, Connecting Software and the Enterprise

BOSTON, June 17, 2013 /PRNewswire/ — AppFusions, a social business and engineering systems integration firm, is a Silver Sponsor and featured exhibitor at the E2 Conference, June 17-19 at the Boston Marriott Copley Place.

The E2 Conference (formerly called Enterprise 2.0) kicks off today, showcasing corporations with agendas aimed at a more connected enterprise ‚Äď both culturally and system-wise. E2.0, also referred to as “Social Business,” is the concept of systems, solutions, and methodologies that encourage businesses to collaborate more openly and seamlessly, both in terms of systems and communications. One of the key goals is improved process efficiencies.

“Enterprise 2.0 is about working more fluidly at the content, data, and systems level. When done right, documented efficiency gains and streamlined business processes result,” Ellen Feaheny, AppFusions’ CEO, explains. As a movement with integrated technologies at its core, E2.0 brings game-changing innovation and performance results to businesses. “E2.0 breaks down human and systems silos inside and outside of enterprises,” Feaheny emphasizes.

Although technological seamlessness is the business and systems goal, it is not yet the norm.¬† That’s where AppFusions steps in.

For example, with AppFusions enterprise-grade content/document management system connectors, physical document collaboration moves away from local desktops, email attachments, or siloed file repositories. Instead, “other system” document management is integrated into social business, project management, or wiki systems. When integrated, enterprise users can preview, edit, download, and embed physical documents stored in external repositories like Box, Dropbox, Alfresco, Google Docs, etc. directly from their social business platform or wiki system as native user experiences.

AppFusions Integrations … Bringing it together.

IT administrators appreciate such integrations to standardize business methodologies, and ward away rogue attachments/document repositories. By providing integrated “best of all worlds” solutions, document management and collaboration is managed, thus mitigating the “wild west” of systems many CIOs wrestle with these days.¬† AppFusions’ packaged content management integrations, to date, mix together Atlassian Confluence, JIRA, IBM Connections, Jive Software, Box, Dropbox, Alfresco, and Google Docs.

Another E2.0 example of AppFusions’ integrations is “in-app/in-context” instant messaging, which allows end users to message or video chat directly from inside an enterprise social, business, or engineering system.

“At the core, these are not technical problems we are solving; these are business collaboration problems that waste crucial time, money, and ‚Äď even worse ‚Äď lost contextual mindshare,” Feaheny explains.¬† “If I’m working in a wiki, bug tracker, git repository, or continuous integration server, an AppFusions connector allows me to see whether a recent contributor is online, and if so, I can connect with them instantly using IBM Sametime.” ¬†This type of integration is not only convenient, it’s smart.

“I should not have to constantly jump between systems and browsers to collaborate,” she continues. “Instead, AppFusions feels systems should all be conveniently connected, no matter where you are working.”

AppFusions’s booth in the E2 exhibit hall will focus on its 40+ packaged integration applications, bridging systems like Atlassian JIRA, Confluence, Stash, FishEye, Crucible, Crowd, IBM Connections and Sametime, Jive Social Business Platform, Google Drive and Analytics, Box, Dropbox, Alfresco, LingoTek, MixPanel, Parature, UserVoice, iRise, and others.

Come talk to us about how we can solve your application integration problems.

AppFusions¬†is a social business, and engineering systems integrations firm offering multi-technology application solutions. By enabling enterprises to harness together key systems with “plug and play” integrations, corporations almost instantly gain improved efficiencies, faster innovation potential, and ultimately saved time and money. Its product portfolio includes packaged integrations with Atlassian, Jive, IBM, Box, Google, Dropbox, Alfresco, UserVoice, Attensa, and more. AppFusions’ development expertise in the technologies they work with is among the most technically capable in the industry. AppFusions’ customers overlap with their technology partners’ customers ‚Äď from SMB to Fortune 10s, worldwide. AppFusions is based in San Francisco, and works in the U.S., Australia, and Europe.

SOURCE AppFusions

ScalaTest vs Specs2

Setting out to write some unit tests in Scala, I was faced with a problem that many others must have faced: which testing framework to build upon.

ScalaTest Wanting to embue my tests with a particularly Scala-some flavour, I discarded the option of using JUnit directly, narrowing the field to ScalaTest and Specs2.

I asked the question on Twitter,
specs2

How do I choose between Specs2 and ScalaTest?

and received answers (not only on Twitter) from the authors of both frameworks.

I also heard podcast interviews with both Bill Venners (ScalaTest) and Eric Torreborre (Specs2). It’s great to know that for both frameworks, constructive, friendly help is only a tweet away.

In the end, I figured that the only way to make my choice, was to implement a test first in one framework, and then in the other, and see how I felt about the results. So here it is.

Enterprise Directory and Org Chart for Atlassian ConfluenceThe test is very simple in its goals. It tests a Java class that is part of an AppFusions product called Enterprise Directory and Org Chart for Confluence. It tests that a certain condition is true after each of four different method calls. The test logic is trivial, but there is a non-trivial fixture; not an unusual testing scenario for many web application developers, I imagine. I’m using Mockito for the mock objects.

I hope that I’ve done each framework justice. In any case, my situation will be that of many a budding Scala programmer: limited time in which to read the relevant documentation, and come up with something that seems idiomatic.

First, the test written with Specs2. I’ve not shown the import statements, since they didn’t weigh into my decision-making process.

class EnterpriseDirectoryActionSpec extends Specification { def is = s2"""
  An enterprise directory action should provide enabled fields
    after a call to doDefault                                        ${fixture().e1}
    after a call to doSearchPrevious                                 ${fixture().e2}
    after a call to doSearchNext                                     ${fixture().e3}
    after a call to doExecuteSearch                                  ${fixture().e4}
    """

  case class fixture() extends Mockito {
    val fields = Seq("one", "two", "three")

    // some mock objects
    val directoryManager = mock[EnterpriseDirectoryManager]
    directoryManager.isLicenseValid returns true
    directoryManager.getEnabledFields returns fields.asJava
    directoryManager.shouldShowOrgChart("fred") returns true

    val user = mock[User]
    user.getName returns "fred"

    val sessionAccessor = mock[SessionAccessor]
    sessionAccessor.getSession returns mock[HttpSession]

    /** an instance of the class under test */
    val action = new EnterpriseDirectoryAction
    action.setEnterpriseDirectoryManager(directoryManager)
    action.setSessionAccessor(sessionAccessor)

    AuthenticatedUserThreadLocal.setUser(user)
    def e1 = { action.doDefault(); checkEnabledFields }
    def e2 = { action.doSearchPrevious(); checkEnabledFields }
    def e3 = { action.doSearchNext(); checkEnabledFields }

    def e4 = {
      action.setLastName("Bloggs")
      action.doExecuteSearch()
      checkEnabledFields
    }

    def checkEnabledFields = action.getEnabledFields.asScala must containTheSameElementsAs(fields)
  }
}

And now for the same test, written using ScalaTest.

class EnterpriseDirectoryActionFlatSpec extends FlatSpec with ShouldMatchers with MockitoSugar {
  def fixture = new {
    val fields = Seq("one", "two", "three")

    // some mock objects
    val directoryManager = mock[EnterpriseDirectoryManager]
    when(directoryManager.isLicenseValid).thenReturn(true)
    when(directoryManager.getEnabledFields).thenReturn(fields.asJava)
    when(directoryManager.shouldShowOrgChart("fred")).thenReturn(true)

    val user = mock[User]
    when(user.getName).thenReturn("fred")

    val sessionAccessor = mock[SessionAccessor]
    when(sessionAccessor.getSession).thenReturn(mock[HttpSession])

    /** an instance of the class under test */
    val action = new EnterpriseDirectoryAction
    action.setEnterpriseDirectoryManager(directoryManager)
    action.setSessionAccessor(sessionAccessor)

    AuthenticatedUserThreadLocal.setUser(user)
  }

  "An enterprise directory action" should "provide enabled fields after a call to doDefault" in {
    val f = fixture
    f.action.doDefault()
    f.action.getEnabledFields.asScala should be (f.fields)
  }

  it should "provide enabled fields after a call to doSearchPrevious" in {
    val f = fixture
    f.action.doSearchPrevious()
    f.action.getEnabledFields.asScala should be (f.fields)
  }

  it should "provide enabled fields after a call to doSearchNext" in {
    val f = fixture
    f.action.doSearchNext()
    f.action.getEnabledFields.asScala should be (f.fields)
  }

  it should "provide enabled fields after a call to doExecuteSearch" in {
    val f = fixture
    f.action.setLastName("Bloggs")
    f.action.doExecuteSearch()
    f.action.getEnabledFields.asScala should be (f.fields)
  }
}

So there you have it. I think I prefer the ScalaTest version, but that may be because it most closely resembles the JUnit-style tests that I’m familiar with. Although slightly more verbose, I figure that it will also be the most comfortable for my colleagues, who I hope will want to experiement with Scala too. Even with the recently-introduced string interpolation in Specs2, I find the manner of specifying test examples in a column on the right-hand side of my test conditions a bit awkward. Yes, it is possible to embed test conditions with the text – described in the Specs2 documentation as unit-testing-style test specification – but then mixing in the Mockito sugar seemed like a tricky business.

Specs2 does appeal from the somewhat philosophical point of view of cleaving more closely to the immutability everywhere ideal, but heck, in this case I’ll sacrifice that notional purity for niceness.