## -*- coding: utf-8 -*- <%namespace name="base" file="/base/base.mako"/> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">${_('User Group: %s') % c.user_group.users_group_name}</h3> </div> <div class="panel-body"> ${h.secure_form(url('update_users_group', user_group_id=c.user_group.users_group_id),method='put', id='edit_users_group')} <div class="form"> <!-- fields --> <div class="fields"> <div class="field"> <div class="label"> <label for="users_group_name">${_('Group name')}:</label> </div> <div class="input"> ${h.text('users_group_name',class_='medium')} </div> </div> <div class="field badged-field"> <div class="label"> <label for="user">${_('Owner')}:</label> </div> <div class="input"> <div class="badge-input-container"> <div class="user-badge"> ${base.gravatar_with_user(c.user_group.user.email, show_disabled=not c.user_group.user.active)} </div> <div class="badge-input-wrap"> ${h.text('user', class_="medium", autocomplete="off")} </div> </div> <form:error name="user"/> <p class="help-block">${_('Change owner of this user group.')}</p> </div> </div> <div class="field"> <div class="label label-textarea"> <label for="user_group_description">${_('Description')}:</label> </div> <div class="textarea textarea-small editor"> ${h.textarea('user_group_description',cols=23,rows=5,class_="medium")} <span class="help-block">${_('Short, optional description for this user group.')}</span> </div> </div> <div class="field"> <div class="label label-checkbox"> <label for="users_group_active">${_('Active')}:</label> </div> <div class="checkboxes"> ${h.checkbox('users_group_active',value=True)} </div> </div> <div class="field"> <div class="label label-checkbox"> <label for="users_group_active">${_('Add members')}:</label> </div> <div class="input"> ${h.text('user_group_add_members', placeholder="user/usergroup", class_="medium")} </div> </div> <input type="hidden" name="__start__" value="user_group_members:sequence"/> <table id="group_members_placeholder" class="rctable group_members"> <tr> <th>${_('Username')}</th> <th>${_('Action')}</th> </tr> % if c.group_members_obj: % for user in c.group_members_obj: <tr> <td id="member_user_${user.user_id}" class="td-author"> <div class="group_member"> ${base.gravatar(user.email, 16)} <span class="username user">${h.link_to(h.person(user), h.url( 'edit_user',user_id=user.user_id))}</span> <input type="hidden" name="__start__" value="member:mapping"> <input type="hidden" name="member_user_id" value="${user.user_id}"> <input type="hidden" name="type" value="existing" id="member_${user.user_id}"> <input type="hidden" name="__end__" value="member:mapping"> </div> </td> <td class=""> <div class="usergroup_member_remove action_button" onclick="removeUserGroupMember(${user.user_id}, true)" style="visibility: visible;"> <i class="icon-remove-sign"></i> </div> </td> </tr> % endfor % else: <tr><td colspan="2">${_('No members yet')}</td></tr> % endif </table> <input type="hidden" name="__end__" value="user_group_members:sequence"/> <div class="buttons"> ${h.submit('Save',_('Save'),class_="btn")} </div> </div> </div> ${h.end_form()} </div> </div> <script> $(document).ready(function(){ $("#group_parent_id").select2({ 'containerCssClass': "drop-menu", 'dropdownCssClass': "drop-menu-dropdown", 'dropdownAutoWidth': true }); removeUserGroupMember = function(userId){ $('#member_'+userId).val('remove'); $('#member_user_'+userId).addClass('to-delete'); }; $('#user_group_add_members').autocomplete({ serviceUrl: pyroutes.url('user_autocomplete_data'), minChars:2, maxHeight:400, width:300, deferRequestBy: 300, //miliseconds showNoSuggestionNotice: true, params: { user_groups:true }, formatResult: autocompleteFormatResult, lookupFilter: autocompleteFilterResult, onSelect: function(element, suggestion){ function addMember(user, fromUserGroup) { var gravatar = user.icon_link; var username = user.value_display; var userLink = pyroutes.url('edit_user', {"user_id": user.id}); var uid = user.id; if (fromUserGroup) { username = username +" "+ _gettext('(from usergroup {0})'.format(fromUserGroup)) } var elem = $( ('<tr>'+ '<td id="member_user_{6}" class="td-author td-author-new-entry">'+ '<div class="group_member">'+ '<img class="gravatar" src="{0}" height="16" width="16">'+ '<span class="username user"><a href="{1}">{2}</a></span>'+ '<input type="hidden" name="__start__" value="member:mapping">'+ '<input type="hidden" name="member_user_id" value="{3}">'+ '<input type="hidden" name="type" value="new" id="member_{4}">'+ '<input type="hidden" name="__end__" value="member:mapping">'+ '</div>'+ '</td>'+ '<td class="td-author-new-entry">'+ '<div class="usergroup_member_remove action_button" onclick="removeUserGroupMember({5}, true)" style="visibility: visible;">'+ '<i class="icon-remove-sign"></i>'+ '</div>'+ '</td>'+ '</tr>').format(gravatar, userLink, username, uid, uid, uid, uid) ); $('#group_members_placeholder').append(elem) } if (suggestion.value_type == 'user_group') { $.getJSON( pyroutes.url('edit_user_group_members', {'user_group_id': suggestion.id}), function(data) { $.each(data.members, function(idx, user) { addMember(user, suggestion.value) }); } ); } else if (suggestion.value_type == 'user') { addMember(suggestion, null); } } }); UsersAutoComplete('user', '${c.rhodecode_user.user_id}'); }) </script>