@@ -40,10 +40,12 @@ from rhodecode.lib.base import BaseContr
from rhodecode.model.users_group import UsersGroupModel
from rhodecode.model.db import User, UsersGroup
from rhodecode.model.db import User, UsersGroup, UsersGroupToPerm,\
UsersGroupRepoToPerm, UsersGroupRepoGroupToPerm
from rhodecode.model.forms import UsersGroupForm
from rhodecode.model.meta import Session
from rhodecode.lib.utils import action_logger
from sqlalchemy.orm import joinedload
log = logging.getLogger(__name__)
@@ -102,6 +104,38 @@ class UsersGroupsController(BaseControll
# url('new_users_group')
return render('admin/users_groups/users_group_add.html')
def _load_data(self, id):
c.users_group.permissions = {
'repositories': {},
'repositories_groups': {}
}
ugroup_repo_perms = UsersGroupRepoToPerm.query()\
.options(joinedload(UsersGroupRepoToPerm.permission))\
.options(joinedload(UsersGroupRepoToPerm.repository))\
.filter(UsersGroupRepoToPerm.users_group_id == id)\
.all()
for gr in ugroup_repo_perms:
c.users_group.permissions['repositories'][gr.repository.repo_name] \
= gr.permission.permission_name
ugroup_group_perms = UsersGroupRepoGroupToPerm.query()\
.options(joinedload(UsersGroupRepoGroupToPerm.permission))\
.options(joinedload(UsersGroupRepoGroupToPerm.group))\
.filter(UsersGroupRepoGroupToPerm.users_group_id == id)\
for gr in ugroup_group_perms:
c.users_group.permissions['repositories_groups'][gr.group.group_name] \
c.group_members_obj = [x.user for x in c.users_group.members]
c.group_members = [(x.user_id, x.username) for x in
c.group_members_obj]
c.available_members = [(x.user_id, x.username) for x in
User.query().all()]
def update(self, id):
"""PUT /users_groups/id: Update an existing item"""
# Forms posted to this method should contain a hidden field:
@@ -111,13 +145,8 @@ class UsersGroupsController(BaseControll
# method='put')
# url('users_group', id=ID)
c.users_group = UsersGroup.get(id)
c.users_group = UsersGroup.get_or_404(id)
self._load_data(id)
available_members = [safe_unicode(x[0]) for x in c.available_members]
@@ -189,13 +218,8 @@ class UsersGroupsController(BaseControll
# url('edit_users_group', id=ID)
c.users_group.permissions = {}
ug_model = UsersGroupModel()
defaults = c.users_group.get_dict()
defaults.update({
@@ -3935,12 +3935,13 @@ div#legend_container table td,div#legend
.group_members_wrap{
min-height: 85px;
padding-left: 20px;
.group_members .group_member{
height: 30px;
padding:0px 0px 0px 10px;
padding:0px 0px 0px 0px;
.reviewers_member{
@@ -145,20 +145,83 @@ ${h.end_form()}
<div class="title">
<h5>${_('Group members')}</h5>
</div>
<div class="group_members_wrap">
% if c.group_members_obj:
<ul class="group_members">
%for user in c.group_members_obj:
<li>
<div class="group_member">
<div class="gravatar"><img alt="gravatar" src="${h.gravatar_url(user.email,24)}"/> </div>
<div>${user.username}</div>
<div>${h.link_to(user.username, h.url('edit_user',id=user.user_id))}</div>
<div>${user.full_name}</div>
</li>
%endfor
</ul>
%else:
<span class="empty_data">${_('No members yet')}</span>
%endif
<div class="box box-left">
<!-- box / title -->
<h5>${_('Permissions defined for this group')}</h5>
## permissions overview
<div id="perms" class="table">
%for section in sorted(c.users_group.permissions.keys()):
<div class="perms_section_head">${section.replace("_"," ").capitalize()}</div>
%if not c.users_group.permissions:
<span class="empty_data">${_('No permissions set yet')}</span>
<div id='tbl_list_wrap_${section}' class="yui-skin-sam">
<table id="tbl_list_repository">
<thead>
<tr>
<th class="left">${_('Name')}</th>
<th class="left">${_('Permission')}</th>
<th class="left">${_('Edit Permission')}</th>
</thead>
<tbody>
%for k in c.users_group.permissions[section]:
<%
section_perm = c.users_group.permissions[section].get(k)
_perm = section_perm.split('.')[-1]
%>
<td>
%if section == 'repositories':
<a href="${h.url('summary_home',repo_name=k)}">${k}</a>
%elif section == 'repositories_groups':
<a href="${h.url('repos_group_home',group_name=k)}">${k}</a>
</td>
<span class="perm_tag ${_perm}">${section_perm}</span>
<a href="${h.url('edit_repo',repo_name=k,anchor='permissions_manage')}">${_('edit')}</a>
<a href="${h.url('edit_repos_group',id=k,anchor='permissions_manage')}">${_('edit')}</a>
--
</tr>
</tbody>
</table>
<script type="text/javascript">
MultiSelectWidget('users_group_members','available_members','edit_users_group');
</script>
Status change: