User macro help
Asked by evzensx:

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>
```


Answers:
author: Chris Kent
body: 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....

comments: author: Dominic Lagger
body: 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?


author: Chris Kent
body: 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?

comments: author: evzensx
body: [@Chris Kent](/t5/user/viewprofilepage/user-id/502150) , unfortunately I did not have time to do this and I paused this problem. But I have a direction in which to look for a solution.:

<https://docs.atlassian.com/atlassian-confluence/1000.95.0/com/atlassian/confluence/api/model/people/details/BusinessDetails.html>

and

<https://docs.atlassian.com/software/jira/docs/api/7.1.1/com/atlassian/jira/user/UserDetails.html>


author: Deanna Mosley
body: 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.


author: Andrew Morin
body: 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.


Tags: confluence-server

server

user-macro