Create
cancel
Showing results for 
Search instead for 
Did you mean: 
Sign up Log in

It's not the same without you

Join the community to find out what other Atlassian users are discussing, debating and creating.

Atlassian Community Hero Image Collage

How do I get the "About Me" field from a confluence user macro

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

3 answers

1 accepted

5 votes
Answer accepted

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:

  • com.atlassian.confluence.user.actions.EditMyProfileAction
  • com.atlassian.confluence.user.actions.UserDetailsMap
  • /users/editmyprofile.vm

Adapt what you find :)

Thanks David, this is what I was looking for.

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>

$user.email

Don't know about the label, (confluence.user.profile.email) you can use your own

Suggest an answer

Log in or Sign up to answer
TAGS

Community Events

Connect with like-minded Atlassian users at free events near you!

Find an event

Connect with like-minded Atlassian users at free events near you!

Unfortunately there are no Community Events near you at the moment.

Host an event

You're one step closer to meeting fellow Atlassian users at your local event. Learn more about Community Events

Events near you