This script returns a list of pages in a Confluence instance that use a specified macro.
There are a number of references to “MacroManager” in the Confluence API documentation, but none of the implementations seemed to work for me.
For that reason, our best bet for checking on Macro usage is to examine the body content of each page, and look for a specific reference to the macro in question.
We also need to check that the page in question is the latest version of the page. Otherwise the script checks all versions of all pages.
import com.atlassian.sal.api.component.ComponentLocator
import com.atlassian.confluence.spaces.SpaceManager
import com.atlassian.confluence.pages.PageManager
import com.atlassian.confluence.pages.Page
def pageManager = ComponentLocator.getComponent(PageManager)
def spaceManager = ComponentLocator.getComponent(SpaceManager)
def spaces = spaceManager.getAllSpaces()
def macroRef = 'ac:name="info"'
//Replace "info" with the name of the macro you want to assess
spaces.each{ spaceObj ->
//Get all Spaces in the instance
def pages = pageManager.getPages(spaceObj, false)
pages.each{ page ->
//Get all pages in the instances
if (page.getBodyContent().properties.toString().contains(macroRef) && page.version == page.latestVersion.version) {
//Check if the page contains the macro, then check to see if it's the most current version of the page
log.warn("'${page.title}' (version ${page.version}) is the latest version of the page, and contains the target macro")
}
}
}
Leave a Reply