Hi there,
Can anyone suggest a user macro for generating all of the user's full names within 'confluence-users' and displaying them in a drop-down list?
Any help would be greatly appreciated!
Thanks,
Something like this should work:
## @noparams #set ( $members = $userAccessor.getMemberNamesAsList($userAccessor.getGroup("confluence-users")) ) <style> select:required:invalid { color: gray; } option[value=""][disabled] { display: none; } option { color: black; } </style> <form class="aui" onsubmit="return false;"> <fieldset> <div class="field-group"> <label for="users-list">Users:</label> <select class="select" id="users-list" name="users-list" title="users list" required> <option value="" disabled selected>Select a user</option> #foreach ( $member in $members ) #set ( $member = $userAccessor.getUserByName($member) ) <option value="$member.name">$member.fullName</option> #end </select> </div> </fieldset> </form>
Ordering by full name is harder than it seems. Here are two options, one that renders on the server side (might take a long time, depending on how many users you have):
## @noparams #set ( $members = $userAccessor.getMemberNamesAsList($userAccessor.getGroup("confluence-users")) ) #set ( $container = $content.class.forName("java.util.TreeMap").newInstance() ) #foreach ( $member in $members ) #set ( $member = $userAccessor.getUserByName($member) ) #set ( $dummy = $container.put($member.fullName, $member.name) ) #end <style> select:required:invalid { color: gray; } option[value=""][disabled] { display: none; } option { color: black; } </style> <form class="aui" onsubmit="return false;"> <fieldset> <div class="field-group"> <label for="users-list">Users:</label> <select class="select" id="users-list" name="users-list" title="users list" required> <option value="" disabled selected>Select a user</option> #foreach ( $member in $container.keySet() ) <option value="$container.get($member)">$member</option> #end </select> </div> </fieldset> </form>
and here's one that sorts the list on the client side (i.e. in the browser) that might load the page a little faster:
## @noparams #set ( $members = $userAccessor.getMemberNamesAsList($userAccessor.getGroup("confluence-users")) ) <style> select:required:invalid { color: gray; } option[value=""][disabled] { display: none; } option { color: black; } </style> <form class="aui" onsubmit="return false;"> <fieldset> <div class="field-group"> <label for="users-list">Users:</label> <select class="select" id="users-list" name="users-list" title="users list" required> <option value="" disabled selected>Select a user</option> </select> </div> </fieldset> </form> <script> var members = { #foreach ( $member in $members ) #set ( $member = $userAccessor.getUserByName($member) ) "$member.fullName": "$member.name", #end } function sortObject(obj) { return Object.keys(obj).sort().reduce(function (result, key) { result[key] = obj[key]; return result; }, {}); } var sortedMembers = sortObject(members); for (var key in sortedMembers) { if (sortedMembers.hasOwnProperty(key)) { jQuery("#users-list").append('<option value="' + sortedMembers[key] + '">' + key + '</option>'); } } </script>
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hey there,
You can execute the following query in the database:
select u.user_name,g.group_name from cwd_user u,cwd_group g ,cwd_membership m where g.group_name = 'confluence-users' and m.parent_id=g.id group by u.user_name, g.group_name
However you can download a SQL manager for Confluence like this one and put it on a page.
Hope this will help you .
Cheers,
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.