diff --git a/account_manager/forms.py b/account_manager/forms.py index ec5b106..5afe1b6 100644 --- a/account_manager/forms.py +++ b/account_manager/forms.py @@ -1,6 +1,7 @@ from django import forms from .models import LdapUser, LdapGroup +from django.forms import modelformset_factory class AddLDAPUserForm(forms.Form): @@ -24,9 +25,10 @@ class UserDeleteListForm(forms.Form): class AddLDAPGroupForm(forms.Form): - name = forms.CharField(label='name', max_length=400) + name = forms.CharField(label='Name', max_length=400) # TODO show only allowed user - members = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, queryset=LdapUser.objects.all()) + members = forms.ModelMultipleChoiceField(label='Mitglieder', widget=forms.CheckboxSelectMultiple, + queryset=LdapUser.objects.all(), ) class RealmAddForm(forms.Form): @@ -45,3 +47,10 @@ class RealmUpdateForm(forms.Form): admin_group = forms.ModelChoiceField(label='Admin Gruppe', help_text="Die Mitglieder dieser Gruppe darf den Bereich administieren", queryset=LdapGroup.objects.all()) + + +UserFormset = modelformset_factory( + LdapUser, + fields=('dn',), + extra=1 +) diff --git a/account_manager/utils/dbldap.py b/account_manager/utils/dbldap.py new file mode 100644 index 0000000..ec3ba04 --- /dev/null +++ b/account_manager/utils/dbldap.py @@ -0,0 +1,12 @@ +from django.db import connections +from ldapdb.backends.ldap.compiler import SQLCompiler, query_as_ldap + + +def get_filterstr(qs): + connection = connections['ldap'] + compiler = SQLCompiler( + query=qs.query, + connection=connection, + using=None, + ) + return query_as_ldap(qs.query, compiler, connection).filterstr \ No newline at end of file diff --git a/account_manager/views/group_views.py b/account_manager/views/group_views.py index d6fc097..01f5a8e 100644 --- a/account_manager/views/group_views.py +++ b/account_manager/views/group_views.py @@ -1,10 +1,13 @@ +import re + from django.contrib.auth.decorators import login_required +from django.db.models import Q from django.shortcuts import render, redirect from account_helper.models import Realm from account_manager.forms import AddLDAPGroupForm -from account_manager.models import LdapGroup, LdapUser from account_manager.main_views import is_realm_admin +from account_manager.models import LdapGroup, LdapUser @login_required @@ -58,6 +61,10 @@ def group_update(request, realm_id, group_dn): group = LdapGroup.objects.get(dn=group_dn) LdapUser.base_dn = LdapUser.ROOT_DN if request.method == 'POST': + # user_ids = list(map(int, request.POST.getlist('members'))) + # user_formset = UserFormset(request.POST) + # if user_formset and user_formset.is_valid(): + # print(user_formset) # create a form instance and populate it with data from the request: form = AddLDAPGroupForm(request.POST) # check whether it's valid: @@ -71,10 +78,19 @@ def group_update(request, realm_id, group_dn): # if a GET (or any other method) we'll create a blank form else: # TODO: Automatic checkbox selection - data = {'name': group.name, 'members': group.members} + members = LdapUser.objects.none() + if group.members: + group_members = [re.compile('uid=([a-zA-Z0-9_]*),(ou=[a-zA-Z_]*),(.*)').match(member).group(1) for member in + group.members] + query = Q(username=group_members.pop()) + for member in group_members: + query = query | Q(username=member) + members = LdapUser.objects.filter(query) + data = {'name': group.name, 'members': members} form = AddLDAPGroupForm(initial=data) - return render(request, 'group/group_detail.jinja2', {'form': form, 'realm': realm, 'group': group}) + return render(request, 'group/group_detail.jinja2', + {'form': form, 'realm': realm, 'group': group}) def group_delete(request, realm_id, group_dn): diff --git a/templates/group/group_add.jinja2 b/templates/group/group_add.jinja2 index adfdb9e..e064a62 100644 --- a/templates/group/group_add.jinja2 +++ b/templates/group/group_add.jinja2 @@ -5,8 +5,8 @@
{{ mform.text_input(form.name) }} -

Mitglieder

- {{ form.members }} + {{ form.members.label }} + {{ mform.checkbox_input_for_choice_fields(form.members) }}
- {{ form.as_p()|safe }} {{ mform.text_input(form.name) }} - {% for choice_value, choice_label in form.members.field.choices %} -

{{ form.members.html_name }} | {{ choice_value }} | {{ choice_label }} | {{ form.members.value.value }}

- {# {{ mform.checkbox_input_for_choice_fields(choice_id, choice_label ) }}#} - {% endfor %} -{# {% for value in form.members.value %}#} - {#

{{ value }}

#} - {# {{ mform.checkbox_input_for_choice_fields(choice_id, choice_label ) }}#} - {# {% endfor %}#} - + {{ form.members.label }} + {{ mform.checkbox_input_for_choice_fields(form.members) }}