Updated for Confluence 4.x/5.x
This groovy script, implemented as a user macro, is used to add users as a watcher to a page.This is really handy in combination with scaffolding. I use it in a form where a manager can assign resources to a project request (which is a page in Confluence) and those users are automatically subscribed to the page.
Macro Name | add-watcher |
---|---|
Description | Add a user as a watcher to the current page |
Macro body processing | No macro body |
## param0 is the user name (id) to add #if ($param0 && $param0.length() > 0) #set ($wiki = "{groovy:userName=${param0}} import com.atlassian.spring.container.ContainerManager; import com.atlassian.confluence.mail.notification.NotificationManager; // Get the default Notification Manager def notificationManager = (NotificationManager) ContainerManager.getComponent('notificationManager'); // Get the current page object def page = context.getEntity(); // Get a handle on the user def user = userAccessor.getUser(userName); // Is the user already watching this page or space? boolean isWatching = notificationManager.isUserWatchingPageOrSpace(user, page.getSpace(), page) if (user && page && !isWatching) { notificationManager.addPageNotification(user, page); out.println('Subscribed User: <b>' + user.getFullName() + '</b><br />'); } else if (user == null) { out.println('User not found: <b>' + userName + '</b><br />'); } else if (isWatching) { out.println('User already watching: <b>' + userName + '</b><br />'); } {groovy}") $action.getHelper().renderConfluenceMacro($wiki) #end
I have a live-template based form with a select list of users to assign:
{list-data:AssignedManager|width=200px|type=select|multiple=true|height=10em} {user-options:users=stepper,user1,user2,user3,user4} {list-data}
I then have a report that iterates on the selections in the list to subscribe the selected users:
{report-block:injected=true} {local-reporter:data:AssignedManager} {report-body}{add-watcher:%reference:value > user:name%}{report-body} {report-block}