2 |
2 |
import smtplib
|
3 |
3 |
import logging
|
4 |
4 |
|
5 |
|
from django.utils.translation import ugettext_lazy as _
|
|
5 |
from django.utils.translation import ugettext_lazy as _, pgettext
|
6 |
6 |
from django import forms
|
7 |
7 |
from django.contrib.contenttypes.models import ContentType
|
8 |
8 |
from django.db.models.query import Q
|
... | ... | |
404 |
404 |
class OUSearchForm(FormWithRequest):
|
405 |
405 |
ou_permission = None
|
406 |
406 |
|
407 |
|
ou = forms.ModelChoiceField(queryset=get_ou_model().objects,
|
408 |
|
required=True, label=_('Organizational unit'))
|
|
407 |
ou = forms.ChoiceField(label=_('Organizational unit'), required=False)
|
409 |
408 |
|
410 |
409 |
def __init__(self, *args, **kwargs):
|
|
410 |
self.show_all_ou = kwargs.get('show_all_ou', True)
|
411 |
411 |
request = kwargs['request']
|
412 |
|
ou_qs = (kwargs.pop('ou_queryset', None)
|
413 |
|
or request.user.ous_with_perm(self.ou_permission).order_by('name'))
|
|
412 |
self.ou_qs = (kwargs.pop('ou_queryset', None)
|
|
413 |
or request.user.ous_with_perm(self.ou_permission).order_by('name'))
|
414 |
414 |
data = kwargs.setdefault('data', {}).copy()
|
415 |
415 |
kwargs['data'] = data
|
416 |
|
if 'search-ou' not in data:
|
417 |
|
if request.user.ou in ou_qs:
|
418 |
|
data['search-ou'] = request.user.ou.pk
|
419 |
|
elif len(ou_qs):
|
420 |
|
data['search-ou'] = ou_qs[0].pk
|
|
416 |
choices = []
|
|
417 |
if self.show_all_ou:
|
|
418 |
choices.append(('all', pgettext('organizational unit', 'All')))
|
|
419 |
for ou in self.ou_qs:
|
|
420 |
choices.append((str(ou.pk), unicode(ou)))
|
|
421 |
if request.user.is_superuser:
|
|
422 |
choices.append(('none', pgettext('organizational unit', 'None')))
|
|
423 |
|
|
424 |
ou_key = self.add_prefix('ou')
|
|
425 |
if ou_key not in data:
|
|
426 |
if request.user.ou in self.ou_qs:
|
|
427 |
data[ou_key] = str(request.user.ou.pk)
|
|
428 |
elif len(self.ou_qs):
|
|
429 |
data[ou_key] = choices[0][0]
|
421 |
430 |
super(OUSearchForm, self).__init__(*args, **kwargs)
|
422 |
|
if not request.user.is_superuser:
|
423 |
|
self.fields['ou'].empty_label = None
|
424 |
|
else:
|
425 |
|
self.fields['ou'].required = False
|
426 |
|
self.fields['ou'].queryset = ou_qs
|
427 |
|
if len(ou_qs) < 2:
|
|
431 |
self.fields['ou'].choices = choices
|
|
432 |
if len(self.ou_qs) < 2:
|
428 |
433 |
self.fields['ou'].widget.attrs['disabled'] = ''
|
429 |
434 |
|
430 |
435 |
def filter_no_ou(self, qs):
|
431 |
|
if self.request.user.is_superuser:
|
432 |
|
qs = qs.filter(ou__isnull=True)
|
|
436 |
if self.show_all_ou:
|
|
437 |
return qs
|
|
438 |
elif self.ou_qs:
|
|
439 |
qs = qs.filter(ou=self.ou_qs[0])
|
433 |
440 |
else:
|
434 |
441 |
qs = qs.none()
|
435 |
442 |
return qs
|
436 |
443 |
|
|
444 |
def clean(self):
|
|
445 |
ou = self.cleaned_data.get('ou')
|
|
446 |
self.cleaned_data['ou_filter'] = ou
|
|
447 |
try:
|
|
448 |
ou_pk = int(ou)
|
|
449 |
except ValueError:
|
|
450 |
self.cleaned_data['ou'] = None
|
|
451 |
else:
|
|
452 |
for ou in self.ou_qs:
|
|
453 |
if ou.pk == ou_pk:
|
|
454 |
self.cleaned_data['ou'] = ou
|
|
455 |
break
|
|
456 |
else:
|
|
457 |
self.cleaned_data['ou'] = None
|
|
458 |
return self.cleaned_data
|
|
459 |
|
|
460 |
def filter_by_ou(self, qs):
|
|
461 |
if self.cleaned_data.get('ou_filter'):
|
|
462 |
ou_filter = self.cleaned_data['ou_filter']
|
|
463 |
ou = self.cleaned_data['ou']
|
|
464 |
if ou_filter == 'all':
|
|
465 |
pass
|
|
466 |
elif ou_filter == 'none':
|
|
467 |
qs = qs.filter(ou__isnull=True)
|
|
468 |
elif ou:
|
|
469 |
qs = qs.filter(ou=ou)
|
|
470 |
else:
|
|
471 |
qs = self.filter_no_ou(qs)
|
|
472 |
return qs
|
|
473 |
|
437 |
474 |
def filter(self, qs):
|
438 |
475 |
if hasattr(super(OUSearchForm, self), 'filter'):
|
439 |
476 |
qs = super(OUSearchForm, self).filter(qs)
|
440 |
|
if self.cleaned_data.get('ou'):
|
441 |
|
qs = qs.filter(ou=self.cleaned_data['ou'])
|
442 |
|
else:
|
443 |
|
qs = self.filter_no_ou(qs)
|
|
477 |
qs = self.filter_by_ou(qs)
|
444 |
478 |
return qs
|
445 |
479 |
|
446 |
480 |
|