Allow team owners to remove members.
parent
3a28eacda5
commit
ca39cedc6f
File diff suppressed because one or more lines are too long
|
@ -3093,31 +3093,33 @@ div.team-controller {
|
||||||
}
|
}
|
||||||
ul {
|
ul {
|
||||||
margin: 12px 0 0 0;
|
margin: 12px 0 0 0;
|
||||||
|
|
||||||
li {
|
|
||||||
box-sizing: border-box;
|
|
||||||
list-style-type: none;
|
|
||||||
margin: 0;
|
|
||||||
padding: 10px;
|
|
||||||
width: 42%;
|
|
||||||
@include border-radius(3px);
|
|
||||||
|
|
||||||
span {
|
|
||||||
font-size: 16px;
|
|
||||||
}
|
|
||||||
a.btn {
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
img {
|
|
||||||
margin-right: 10px;
|
|
||||||
}
|
|
||||||
&:last-of-type {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
&:hover {
|
|
||||||
background: #ebebeb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
li.user {
|
||||||
|
box-sizing: border-box;
|
||||||
|
list-style-type: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 10px;
|
||||||
|
width: 42%;
|
||||||
|
@include border-radius(3px);
|
||||||
|
|
||||||
|
span {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
a.btn {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
img {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
&:last-of-type {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
&:hover {
|
||||||
|
background: #ebebeb;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ul.member-list {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% load snipt_tags %}
|
||||||
|
|
||||||
{% block page-title %}Team Members{% endblock %}
|
{% block page-title %}Team Members{% endblock %}
|
||||||
|
|
||||||
{% block body-class %}account {{ block.super }}{% endblock %}
|
{% block body-class %}account {{ block.super }}{% endblock %}
|
||||||
|
@ -39,7 +41,7 @@
|
||||||
value=""
|
value=""
|
||||||
/>
|
/>
|
||||||
<ul ng-cloak ng-if="users.length">
|
<ul ng-cloak ng-if="users.length">
|
||||||
<li ng-repeat="user in users">
|
<li ng-repeat="user in users" class="user">
|
||||||
<img src="https://secure.gravatar.com/avatar/{[{ user.email_md5 }]}?s=26" />
|
<img src="https://secure.gravatar.com/avatar/{[{ user.email_md5 }]}?s=26" />
|
||||||
<span>{[{ user.username }]}</span>
|
<span>{[{ user.username }]}</span>
|
||||||
<a class="btn btn-small" href="/{{ team.slug }}/members/add/{[{ user.username }]}/">Add »</a>
|
<a class="btn btn-small" href="/{{ team.slug }}/members/add/{[{ user.username }]}/">Add »</a>
|
||||||
|
@ -47,10 +49,12 @@
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="def" data-title="Members ({{ team.members.all|length }} of {{ team.member_limit }})">
|
<div class="def" data-title="Members ({{ team.members.all|length }} of {{ team.member_limit }})">
|
||||||
<ul style="margin-bottom: 0">
|
<ul class="member-list">
|
||||||
{% for member in team.members.all %}
|
{% for member in team.members.all %}
|
||||||
<li>
|
<li class="user">
|
||||||
{{ member }}
|
<img src="https://secure.gravatar.com/avatar/{{ member.email|md5 }}?s=26" />
|
||||||
|
<span>{{ member.username }}</span>
|
||||||
|
<a class="btn btn-small" href="/{{ team.slug }}/members/remove/{{ member.username }}/">Remove »</a>
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -6,6 +6,9 @@ urlpatterns = \
|
||||||
patterns('',
|
patterns('',
|
||||||
url(r'^for-teams/$', views.for_teams),
|
url(r'^for-teams/$', views.for_teams),
|
||||||
url(r'^for-teams/complete/$', views.for_teams_complete),
|
url(r'^for-teams/complete/$', views.for_teams_complete),
|
||||||
|
url(r'^(?P<username>[^/]+)/members/remove/(?P<member>[^/]+)/$',
|
||||||
|
views.remove_team_member,
|
||||||
|
name='remove-team-member'),
|
||||||
url(r'^(?P<username>[^/]+)/members/add/(?P<member>[^/]+)/$',
|
url(r'^(?P<username>[^/]+)/members/add/(?P<member>[^/]+)/$',
|
||||||
views.add_team_member,
|
views.add_team_member,
|
||||||
name='add-team-member'),
|
name='add-team-member'),
|
||||||
|
|
|
@ -45,7 +45,18 @@ def add_team_member(request, username, member):
|
||||||
raise Http404
|
raise Http404
|
||||||
|
|
||||||
team.members.add(user)
|
team.members.add(user)
|
||||||
team.save()
|
|
||||||
|
return HttpResponseRedirect('/' + team.slug + '/members/')
|
||||||
|
|
||||||
|
|
||||||
|
def remove_team_member(request, username, member):
|
||||||
|
team = get_object_or_404(Team, slug=username)
|
||||||
|
user = get_object_or_404(User, username=member)
|
||||||
|
|
||||||
|
if (team.owner != request.user):
|
||||||
|
raise Http404
|
||||||
|
|
||||||
|
team.members.remove(user)
|
||||||
|
|
||||||
return HttpResponseRedirect('/' + team.slug + '/members/')
|
return HttpResponseRedirect('/' + team.slug + '/members/')
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue