User macro help

evzensx December 23, 2019

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
Chris Kent
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
June 28, 2020

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
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
August 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
Chris Kent
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
June 24, 2020

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?

Deanna Mosley August 26, 2022

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
Andrew Morin
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
December 23, 2019

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
AUG Leaders

Atlassian Community Events