diff options
Diffstat (limited to 'ishtar_common/forms.py')
| -rw-r--r-- | ishtar_common/forms.py | 72 | 
1 files changed, 55 insertions, 17 deletions
| diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py index e5ffeefb5..ca9f37623 100644 --- a/ishtar_common/forms.py +++ b/ishtar_common/forms.py @@ -109,7 +109,24 @@ class FloatField(forms.FloatField):          return super(FloatField, self).clean(value) -class FinalForm(forms.Form): +class FormPermissionForm: +    """ +    Modification, deletion kwargs (for permissions) +    """ + +    def __init__(self, *args, **kwargs): +        if "modification" in kwargs: +            self.form_permission = "modification" +            kwargs.pop("modification") +        elif "deletion" in kwargs: +            self.form_permission = "deletion" +            kwargs.pop("deletion") +        else: +            self.form_permission = "view" +        super().__init__(*args, **kwargs) + + +class FinalForm(FormPermissionForm, forms.Form):      final = True      form_label = _("Confirm") @@ -142,7 +159,11 @@ JSON_VALUE_TYPES_FIELDS = {  } -class BSForm: +class BSForm(FormPermissionForm): +    """ +    Bootstrap decoration +    """ +      def _post_init(self):          for k in self.fields:              widget = self.fields[k].widget @@ -179,6 +200,11 @@ class BSForm:  class CustomForm(BSForm): +    """ +    Manage: +    - form custom fields. +    - user kwargs +    """      form_admin_name = ""      form_slug = ""      need_user_for_initialization = True @@ -422,17 +448,23 @@ class CustomForm(BSForm):          return sorted(customs, key=lambda x: x[1]) -class CustomFormSearch(forms.Form): +class CustomFormSearch(FormPermissionForm, forms.Form): +    """ +    Manage: +    - user kwargs +    - modification, deletion kwargs (for permissions) +    """      need_user_for_initialization = True      def __init__(self, *args, **kwargs):          user = None          if "user" in kwargs:              user = kwargs.pop("user") -        super(CustomFormSearch, self).__init__(*args, **kwargs) +        super().__init__(*args, **kwargs)          self.request_user = user          if user and "pk" in self.fields:              self.fields["pk"].widget.user = user +            self.fields["pk"].widget.form_permission = self.form_permission  class LockForm(object): @@ -674,7 +706,7 @@ class FormHeader(object):          ) -class IshtarForm(forms.Form, BSForm): +class IshtarForm(BSForm, forms.Form):      TYPES = []  # FieldType list      CONDITIONAL_FIELDS = []  # dynamic conditions on field display      # can be dynamic with "get_conditional_fields" @@ -694,20 +726,11 @@ class IshtarForm(forms.Form, BSForm):              profile = models.get_current_profile()          if self.PROFILE_FILTER: -            for profile_key in self.PROFILE_FILTER: -                if not getattr(profile, profile_key): -                    for field_key in self.PROFILE_FILTER[profile_key]: -                        if field_key in self.fields.keys(): -                            self.fields.pop(field_key) +            self._profile_filter(profile)          if getattr(self, "confirm", False):              return          if self.SITE_KEYS: -            field_keys = list(self.fields.keys()) -            for site_key in list(self.SITE_KEYS.keys()): -                if site_key in field_keys: -                    self.fields[site_key].label = profile.get_site_label( -                        self.SITE_KEYS[site_key] -                    ) +            self._site_keys(profile)          user = getattr(self, "user", None)          ishtar_user = None          if user: @@ -730,6 +753,21 @@ class IshtarForm(forms.Form, BSForm):          self._init_types()          self._post_init() +    def _profile_filter(self, profile): +        for profile_key in self.PROFILE_FILTER: +            if not getattr(profile, profile_key): +                for field_key in self.PROFILE_FILTER[profile_key]: +                    if field_key in self.fields.keys(): +                        self.fields.pop(field_key) + +    def _site_keys(self, profile): +        field_keys = list(self.fields.keys()) +        for site_key in list(self.SITE_KEYS.keys()): +            if site_key in field_keys: +                self.fields[site_key].label = profile.get_site_label( +                    self.SITE_KEYS[site_key] +                ) +      def _init_types(self):          type_lst = self._types or self.TYPES          for field in type_lst: @@ -1123,7 +1161,7 @@ def get_form_selection(      attrs["SEARCH_AND_SELECT"] = True      if not base_form_select: -        base_form_select = forms.Form +        base_form_select = (FormPermissionForm, forms.Form)      if not isinstance(base_form_select, (tuple, list)):          base_form_select = (base_form_select,)      return type(class_name, base_form_select, attrs) | 
