My purpose is to write a user macro to display the "about me" section of a user's profile.
Using the $action.remoteUser class I can get only the name and the email. What about the other fields (location website etc)?
Especially I want to get the "About Me" field since it can contain markup and there I can render more info about the user.
There is also the $req.userPrincipal class but I'd like to know what properties are exposed except the "name"?
Thanks
Finally I got it. Some reverse engineering (thx to spring) helped me render "About Me" as wiki markup. Yupi! this is exactly what I wanted.
I hope it works for you.
#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($pi = $personalInformationManager.getPersonalInformation($action.remoteUser))
#set($renderedAboutMe = $wikiStyleRenderer.convertWikiToXHtml($pi.toPageContext(), $pi.getBodyAsString()))
<div>
<b>$action.getText('confluence.user.profile.website'): </b>
$userDetailsManager.getStringProperty($action.remoteUser, 'website')
</div>
<div>
<b>$action.getText('confluence.user.profile.location'): </b>
$userDetailsManager.getStringProperty($action.remoteUser, 'location')
</div>
<div>
<b>$action.getText('personal.info'): </b>
<div id="profile-about-me-content">$renderedAboutMe</div>
</div>
Have a look at the Confluence source code, particularly:
Adapt what you find :)
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Thanks David, this is what I was looking for.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
This User Macro works fine to get the user profile data of a given user.
Only the email address I can't figure out.
I mean this:
$action.getText('confluence.user.profile.email')
$userDetailsManager.getStringProperty($user, 'email')
Any idea?
## @param Username:title=Username|type=string|required=false|desc=Username
#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'))
#if($paramUsername!="")
#set( $user = $userAccessor.getUserIfAvailable($paramUsername) )
#else
#set( $user = $action.remoteUser)
#end
#set($pi = $personalInformationManager.getPersonalInformation($user))
#set($renderedAboutMe = $wikiStyleRenderer.convertWikiToXHtml($pi.toPageContext(), $pi.getBodyAsString()))
<b>Profildaten von User $user.fullName ($user.name)</b>
<div>
<b>$action.getText('confluence.user.profile.website'): </b>
$userDetailsManager.getStringProperty($user, 'website')
</div>
<div>
<b>$action.getText('confluence.user.profile.location'): </b>
$userDetailsManager.getStringProperty($user, 'location')
</div>
<div>
<b>$action.getText('confluence.user.profile.position'): </b>
$userDetailsManager.getStringProperty($user, 'position')
</div>
<div>
<b>$action.getText('confluence.user.profile.phone'): </b>
$userDetailsManager.getStringProperty($user, 'phone')
</div>
<div>
<b>$action.getText('confluence.user.profile.department'): </b>
$userDetailsManager.getStringProperty($user, 'department')
</div>
<div>
<b>$action.getText('confluence.user.profile.email'): </b>
$userDetailsManager.getStringProperty($user, 'email')
</div>
<div>
<b>$action.getText('personal.info'): </b>
$renderedAboutMe
</div>
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
$user.email
Don't know about the label, (confluence.user.profile.email) you can use your own
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.