ugly space management hack - will be improved later
This commit is contained in:
@ -7,6 +7,8 @@
|
|||||||
|
|
||||||
{% block extra_head %}
|
{% block extra_head %}
|
||||||
{{ form.media }}
|
{{ form.media }}
|
||||||
|
|
||||||
|
{% include 'include/vue_base.html' %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
@ -70,24 +72,72 @@
|
|||||||
<div class="col col-md-12">
|
<div class="col col-md-12">
|
||||||
{% if space_users %}
|
{% if space_users %}
|
||||||
<table class="table table-bordered">
|
<table class="table table-bordered">
|
||||||
|
<tr>
|
||||||
|
<tr>
|
||||||
|
<th>{% trans 'User' %}</th>
|
||||||
|
<th>{% trans 'Groups' %}</th>
|
||||||
|
<th>{% trans 'Edit' %}</th>
|
||||||
|
</tr>
|
||||||
|
</tr>
|
||||||
{% for u in space_users %}
|
{% for u in space_users %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
{{ u.user.username }}
|
{{ u.user.username }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a class="btn btn-success btn-sm" href="">{% trans 'Remove' %}</a>
|
{{ u.user.groups.all |join:", " }}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<div class="input-group mb-3">
|
||||||
|
|
||||||
|
<select v-model="users['{{ u.pk }}']" class="custom-select">
|
||||||
|
<option>{% trans 'admin' %}</option>
|
||||||
|
<option>{% trans 'user' %}</option>
|
||||||
|
<option>{% trans 'guest' %}</option>
|
||||||
|
<option>{% trans 'remove' %}</option>
|
||||||
|
</select>
|
||||||
|
<div class="input-group-append">
|
||||||
|
|
||||||
|
<a class="btn btn-warning"
|
||||||
|
:href="editUserUrl({{ u.pk }}, {{ u.space.pk }})">{% trans 'Update' %}</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>{% trans 'There are no members in your space yet!' %}</p>
|
<p>{% trans 'There are no members in your space yet!' %}</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block script %}
|
||||||
|
|
||||||
|
<script type="application/javascript">
|
||||||
|
let app = new Vue({
|
||||||
|
delimiters: ['[[', ']]'],
|
||||||
|
el: '#id_base_container',
|
||||||
|
data: {
|
||||||
|
users: {
|
||||||
|
{% for u in space_users %}
|
||||||
|
'{{ u.pk }}': 'none',
|
||||||
|
{% endfor %}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted: function () {
|
||||||
|
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
editUserUrl: function (user_id, space_id) {
|
||||||
|
return '{% url 'change_space_member' 1234 5678 'role' %}'.replace('1234', user_id).replace('5678', space_id).replace('role', this.users[user_id])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
@ -42,6 +42,7 @@ urlpatterns = [
|
|||||||
path('', views.index, name='index'),
|
path('', views.index, name='index'),
|
||||||
path('setup/', views.setup, name='view_setup'),
|
path('setup/', views.setup, name='view_setup'),
|
||||||
path('space/', views.space, name='view_space'),
|
path('space/', views.space, name='view_space'),
|
||||||
|
path('space/member/<int:user_id>/<int:space_id>/<slug:group>', views.space_change_member, name='change_space_member'),
|
||||||
path('no-group', views.no_groups, name='view_no_group'),
|
path('no-group', views.no_groups, name='view_no_group'),
|
||||||
path('no-space', views.no_space, name='view_no_space'),
|
path('no-space', views.no_space, name='view_no_space'),
|
||||||
path('no-perm', views.no_perm, name='view_no_perm'),
|
path('no-perm', views.no_perm, name='view_no_perm'),
|
||||||
|
@ -431,6 +431,7 @@ def signup(request, token):
|
|||||||
|
|
||||||
link.used_by = request.user
|
link.used_by = request.user
|
||||||
link.save()
|
link.save()
|
||||||
|
request.user.groups.clear()
|
||||||
request.user.groups.add(link.group)
|
request.user.groups.add(link.group)
|
||||||
|
|
||||||
request.user.userpreference.space = link.space
|
request.user.userpreference.space = link.space
|
||||||
@ -461,6 +462,8 @@ def signup(request, token):
|
|||||||
|
|
||||||
link.used_by = user
|
link.used_by = user
|
||||||
link.save()
|
link.save()
|
||||||
|
|
||||||
|
request.user.groups.clear()
|
||||||
user.groups.add(link.group)
|
user.groups.add(link.group)
|
||||||
|
|
||||||
user.userpreference.space = link.space
|
user.userpreference.space = link.space
|
||||||
@ -501,6 +504,34 @@ def space(request):
|
|||||||
return render(request, 'space.html', {'space_users': space_users, 'counts': counts})
|
return render(request, 'space.html', {'space_users': space_users, 'counts': counts})
|
||||||
|
|
||||||
|
|
||||||
|
# TODO super hacky and quick solution, safe but needs rework
|
||||||
|
# TODO move group settings to space to prevent permissions from one space to move to another
|
||||||
|
@group_required('admin')
|
||||||
|
def space_change_member(request, user_id, space_id, group):
|
||||||
|
m_space = get_object_or_404(Space, pk=space_id)
|
||||||
|
m_user = get_object_or_404(User, pk=user_id)
|
||||||
|
if request.user == m_space.created_by and m_user != m_space.created_by:
|
||||||
|
if m_user.userpreference.space == m_space:
|
||||||
|
if group == 'admin':
|
||||||
|
m_user.groups.clear()
|
||||||
|
m_user.groups.add(Group.objects.get(name='admin'))
|
||||||
|
return HttpResponseRedirect(reverse('view_space'))
|
||||||
|
if group == 'user':
|
||||||
|
m_user.groups.clear()
|
||||||
|
m_user.groups.add(Group.objects.get(name='user'))
|
||||||
|
return HttpResponseRedirect(reverse('view_space'))
|
||||||
|
if group == 'guest':
|
||||||
|
m_user.groups.clear()
|
||||||
|
m_user.groups.add(Group.objects.get(name='guest'))
|
||||||
|
return HttpResponseRedirect(reverse('view_space'))
|
||||||
|
if group == 'remove':
|
||||||
|
m_user.groups.clear()
|
||||||
|
m_user.userpreference.space = None
|
||||||
|
m_user.userpreference.save()
|
||||||
|
return HttpResponseRedirect(reverse('view_space'))
|
||||||
|
return HttpResponseRedirect(reverse('view_space'))
|
||||||
|
|
||||||
|
|
||||||
def markdown_info(request):
|
def markdown_info(request):
|
||||||
return render(request, 'markdown_info.html', {})
|
return render(request, 'markdown_info.html', {})
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user