Come for the products,
stay for the community

The Atlassian Community can help you and your team get more value out of Atlassian products and practices.

Atlassian Community about banner
4,361,980
Community Members
 
Community Events
168
Community Groups

User macro help

Edited

This macro is designed to show a list of all users with brief information, such as a photo, full name, email, position and department.

Everything worked on 6.15.1 but with the upgrade to 7.1.1 the position and department stopped working. I dug through all the release notes, but did not find what changed. Any help would be appreciated

 

## @noparams
#set($containerManagerClass = $content.class.forName('com.atlassian.spring.container.ContainerManager'))
#set($getInstanceMethod = $containerManagerClass.getDeclaredMethod('getInstance',null))
#set($containerManager = $getInstanceMethod.invoke(null,null))
#set($containerContext = $containerManager.containerContext)
#set($userDetailsManager = $containerContext.getComponent('userDetailsManager'))
#set($personalInformationManager = $containerContext.getComponent('personalInformationManager'))
#set($wikiStyleRenderer = $containerContext.getComponent('wikiStyleRenderer'))
#set($loginManager = $containerContext.getComponent('loginManager'))
#set($crowdService = $containerContext.getComponent('crowdService'))
#set($conf_users = $userAccessor.getGroup("confluence-users"))
#set($users = $userAccessor.getMemberNames($conf_users))
#set($bots = ['admin','conf_adm','root','gdadmin'])
#set($count = 0)

#foreach($user in $users)
#if ($bots.contains($user))
##special user/bot
#else
#set($count = $count + 1)
#set($userN = $userAccessor.getUser($user))
#set($crowdUser = $crowdService.getUser($userN.name))
#set($pi = $personalInformationManager.getPersonalInformation($userN))
#set($renderedAboutMe = $wikiStyleRenderer.convertWikiToXHtml($pi.toPageContext(), $pi.getBodyAsString()))
<div class="sc-user" style="border:1px solid; width: 220px; height: 270px; padding: 10px; text-align: center; margin: 5px; float: left; overflow: auto;">
<img class="userLogo logo" src="$userAccessor.getUserProfilePicture($userN).getUriReference()" alt="User icon: $user" title="" style="height: 128px; width: 128px;" />
<p>#usernameLink($userN.name)</p>
#if ($userDetailsManager.getStringProperty($userN, 'position'))
<p>$userDetailsManager.getStringProperty($userN, 'position')</p>
#else
<p style="color:red">No position</p>
#end

#if ($userDetailsManager.getStringProperty($userN, 'department'))
<p>$userDetailsManager.getStringProperty($userN, 'department')</p>
#else
<p style="color:red">No department</p>
#end

##<p>$userAccessor.getPropertySet($user))</p>
##<p>$renderedAboutMe</p>

<p>$action.dateFormatter.formatGivenString('yyyy/MM/dd', $crowdUser.createdDate)</p>
</div>
#end
#end

<p style="clear:both;padding:10px">Total users: $count.</p>

 

3 answers

0 votes

Hi evzensx,

After spending hours and hours searching for a solution, I finally found one post that had the answer, so now there will be 2 posts.

The problem is not with Java or deprecated code in 7.x. The issue is because, in Confluence 7.x, they turned on additional security features in the Velocity engine, which is preventing the class reflection from working.

Once I re-enabled this, it started to work. My User Macro also displays how many days since the Users last login, which I use for user cleanup purposes, so I needed to re-enable another couple of classes as well before the User Macro was fully working.

So, the solution is to edit the file: confluence/WEB-INF/velocity.properties

and comment out/change the following lines....

change:

introspector.restrict.packages = java.lang.reflect,\

to

introspector.restrict.packages = \

change:

introspector.restrict.classes = java.lang.Class,\

to

introspector.restrict.classes = \

comment out these 2 lines:

#java.sql,\
#javax.sql,\

I hope this helps others....

Dominic Lagger Community Leader Aug 25, 2021

Thanks a lot!

Is there any solution to work the old code without changing the velocity.properties? 

Example, how can I access to the LikeManager?

0 votes

Hi evzensx,

Did you ever resolve this, we have just upgraded to 7.4.1 and have the same issue. I'm guessing the Container Manager is no longer available. Did you find a workaround?

Any update on this?  I recently upgraded to 7.18.2 and this macro is no longer working for me as well.  I tried the updates above but that didn't help.  Any info would be greatly appreciated.  

0 votes

I would guess you are using a class that was deprecated in the 7.x release. Check out these links..

https://developer.atlassian.com/cloud/confluence/deprecation-notice-user-privacy-api-migration-guide/

https://confluence.atlassian.com/doc/preparing-for-confluence-7-0-950280675.html 

https://docs.atlassian.com/ConfluenceServer/rest/7.2.0/

https://docs.atlassian.com/ConfluenceServer/javadoc/7.2.0/

Check with your system admin if that is not you to see if you also upgraded Java to 11. Shouldn't affect anything but worth a look.

Suggest an answer

Log in or Sign up to answer
TAGS
Community showcase
Published in Confluence

Watch 4 Confluence apps compete for Best App Demo in September's Appy Hours

Calling all collaborators! Appy Hours on the Atlassian Community is a monthly event where 4 Partner and app vendor presenters go head-to-head with 5-minute demos for the title of Best App Demo. I...

599 views 0 13
Read article

Atlassian Community Events