summaryrefslogtreecommitdiff
path: root/ishtar_common/forms_common.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2017-08-31 10:39:39 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2017-08-31 10:39:39 +0200
commit80e8827b0ff40ffa4c37985a6979fca6d7eba097 (patch)
treebb6acadd1f70294bdc1322a0e08aa51f650cfc5f /ishtar_common/forms_common.py
parent14688dbd9435146b96b0743677579a622aa784ef (diff)
downloadIshtar-80e8827b0ff40ffa4c37985a6979fca6d7eba097.tar.bz2
Ishtar-80e8827b0ff40ffa4c37985a6979fca6d7eba097.zip
Target key forms: choose whom to associated with (refs #3725)
Diffstat (limited to 'ishtar_common/forms_common.py')
-rw-r--r--ishtar_common/forms_common.py103
1 files changed, 92 insertions, 11 deletions
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py
index 4d14e4544..42e390925 100644
--- a/ishtar_common/forms_common.py
+++ b/ishtar_common/forms_common.py
@@ -27,7 +27,7 @@ from django.contrib.auth.models import User
from django.core import validators
from django.core.exceptions import ObjectDoesNotExist
from django.forms.formsets import formset_factory
-from django.forms.models import BaseModelFormSet
+from django.forms.models import BaseModelFormSet, BaseFormSet
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _
@@ -103,10 +103,26 @@ class NewItemForm(forms.Form):
class NewImportForm(forms.ModelForm):
+ error_css_class = 'error'
+ required_css_class = 'required'
+
class Meta:
model = models.Import
- fields = ('name', 'importer_type', 'imported_file', 'imported_images',
- 'conservative_import', 'encoding', 'skip_lines')
+ fields = (
+ 'name', 'importer_type', 'imported_file', 'imported_images',
+ 'associated_group', 'conservative_import', 'encoding', 'skip_lines')
+
+ def __init__(self, *args, **kwargs):
+ user = kwargs.pop('user')
+ super(NewImportForm, self).__init__(*args, **kwargs)
+ groups = models.TargetKeyGroup.objects.filter(available=True)
+ if not user.is_superuser:
+ groups = groups.filter(all_user_can_use=True)
+ if not groups.count():
+ self.fields.pop('associated_group')
+ else:
+ self.fields['associated_group'].choices = [(None, '--')] + \
+ [(g.pk, unicode(g)) for g in groups.all()]
def clean(self):
data = self.cleaned_data
@@ -131,21 +147,47 @@ class TargetKeyForm(forms.ModelForm):
'key': forms.TextInput(attrs={'readonly': 'readonly'}),
'value': forms.Select(),
}
+ target = widgets.SelectReadonlyField(
+ model=models.ImportTarget, label=_(u"Target"))
+ remember = forms.ChoiceField(label=_(u"Remember"), choices=[],
+ required=False)
+ NULL_VALUE = '<NONE>'
def __init__(self, *args, **kwargs):
+ self.user = kwargs.pop('user')
super(TargetKeyForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
self.associated_import = None
if instance and instance.pk:
self.associated_import = instance.associated_import
- self.fields['target'].widget.attrs['readonly'] = True
+ self.fields['target'].choices = [(instance.target.pk,
+ instance.target.verbose_name)]
self.fields['key'].widget.attrs['readonly'] = True
self.fields['key'].widget.attrs['title'] = unicode(instance)
- self.fields['value'].widget.choices = list(
- instance.target.get_choices())
+ self.fields['value'].widget.choices = list(
+ instance.target.get_choices())
+ self.fields['value'].widget.choices.insert(
+ 1, (self.NULL_VALUE, _(u"Set to NULL")))
+
self.fields['key'].required = False
+ self.fields['target'].required = False
self.fields['value'].required = False
+ choices = [
+ ('import', _(u"this import only")),
+ ('me', _(u"me")),
+ ]
+ if self.associated_import and self.associated_import.associated_group \
+ and (self.associated_import.associated_group.all_user_can_modify
+ or self.user.is_superuser):
+ choices += [
+ ('group', unicode(_(u"the current group: {}")).format(
+ self.associated_import.associated_group))]
+ if self.user.is_superuser:
+ choices += [('all', _("all users"))]
+ self.fields['remember'].choices = choices
+ self.fields['remember'].widget.attrs['class'] = 'auto'
+
def clean_target(self):
instance = getattr(self, 'instance', None)
if instance and instance.pk:
@@ -162,10 +204,49 @@ class TargetKeyForm(forms.ModelForm):
def save(self, commit=True):
super(TargetKeyForm, self).save(commit)
- if self.cleaned_data.get('value'):
- self.instance.is_set = True
+ if not self.cleaned_data.get('value') or not self.user:
+ return
+ if self.cleaned_data['value'] == self.NULL_VALUE:
+ self.instance.value = None
+ self.instance.is_set = True
+
+ can_edit_group = \
+ self.associated_import and \
+ self.associated_import.associated_group and \
+ (self.associated_import.associated_group.all_user_can_modify
+ or self.user.is_superuser)
+
+ remember = self.cleaned_data.get('remember')
+ if remember == 'import' and self.associated_import:
self.instance.associated_import = self.associated_import
- self.instance.save()
+ self.instance.associated_user = None
+ self.instance.associated_group = None
+ elif remember == 'group' and can_edit_group:
+ self.instance.associated_import = None
+ self.instance.associated_user = None
+ self.instance.associated_group = \
+ self.associated_import.associated_group
+ elif remember == 'all' and self.user.is_superuser:
+ self.instance.associated_import = None
+ self.instance.associated_user = None
+ self.instance.associated_group = None
+ else:
+ # for me!
+ self.instance.associated_import = None
+ self.instance.associated_user = self.user.ishtaruser
+ self.instance.associated_group = None
+ self.instance.save()
+
+
+class TargetKeyFormset(BaseModelFormSet):
+ def __init__(self, *args, **kwargs):
+ self.user = kwargs.pop('user')
+ super(TargetKeyFormset, self).__init__(*args, **kwargs)
+
+ def get_form_kwargs(self, index):
+ kwargs = super(TargetKeyFormset, self).get_form_kwargs(index)
+ kwargs['user'] = self.user
+ return kwargs
class OrganizationForm(ManageOldType, NewItemForm):
@@ -698,9 +779,9 @@ class MergeFormSet(BaseModelFormSet):
return super(BaseModelFormSet, self)._construct_form(i, **kwargs)
def get_restricted_queryset(self):
- '''
+ """
Filter (from, to) when (to, from) is already here
- '''
+ """
q = self.queryset
if self._cached_list:
return self._cached_list