diff options
Diffstat (limited to 'ishtar_common/forms_common.py')
| -rw-r--r-- | ishtar_common/forms_common.py | 103 | 
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 | 
