diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-11-24 19:39:06 +0100 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-11-24 19:39:06 +0100 | 
| commit | 651524bf93ee64f5f28605884f6b60256db43d1f (patch) | |
| tree | 3eab6d3ab5f8da3f4cb7c803b2237928b27b9d74 /ishtar_common/models.py | |
| parent | 17bf67ec257d0d10decedc44a88d0ab5197c2ba8 (diff) | |
| parent | 9384f39f8fd63f1e004d3abe75cb737c6651e3ed (diff) | |
| download | Ishtar-651524bf93ee64f5f28605884f6b60256db43d1f.tar.bz2 Ishtar-651524bf93ee64f5f28605884f6b60256db43d1f.zip | |
Merge branch 'develop' into develop-bootstrap
Diffstat (limited to 'ishtar_common/models.py')
| -rw-r--r-- | ishtar_common/models.py | 74 | 
1 files changed, 74 insertions, 0 deletions
| diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 08276fa9f..b0751f661 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -1631,6 +1631,80 @@ post_save.connect(cached_site_changed, sender=IshtarSiteProfile)  post_delete.connect(cached_site_changed, sender=IshtarSiteProfile) +class CustomForm(models.Model): +    name = models.CharField(_(u"Name"), max_length=250) +    form = models.CharField(_(u"Form"), max_length=250) +    available = models.BooleanField(_(u"Available"), default=True) +    enabled = models.BooleanField( +        _(u"Enable this form"), default=True, +        help_text=_(u"Disable with caution: disabling a form with mandatory " +                    u"fields may lead to database errors.")) +    apply_to_all = models.BooleanField( +        _(u"Apply to all"), default=False, +        help_text=_(u"Apply this form to all users. If set to True, selecting " +                    u"user and user type is useless.")) +    users = models.ManyToManyField('IshtarUser', blank=True) +    user_types = models.ManyToManyField('PersonType', blank=True) + +    class Meta: +        verbose_name = _(u"Custom form") +        verbose_name_plural = _(u"Custom forms") +        ordering = ['name', 'form'] + +    def users_lbl(self): +        users = [unicode(user) for user in self.users.all()] +        return " ; ".join(users) + +    users_lbl.short_description = _(u"Users") + +    def user_types_lbl(self): +        user_types = [unicode(u) for u in self.user_types.all()] +        return " ; ".join(user_types) + +    user_types_lbl.short_description = _(u"User types") + +    @classmethod +    def register(cls): +        if hasattr(cls, '_register'): +            return cls._register +        cache_key, value = get_cache(cls.__class__, ['dct-forms'], +                                     app_label='ishtar_common') +        if value: +            cls._register = value +            return cls._register +        cls._register = {} +        # ideally should be improved but only used in admin +        from ishtar_common.admin import ISHTAR_FORMS +        from ishtar_common.forms import CustomForm + +        for app_form in ISHTAR_FORMS: +            for form in dir(app_form): +                if 'Form' not in form: +                    # not very clean... but do not treat inappropriate items +                    continue +                form = getattr(app_form, form) +                if not issubclass(form, CustomForm) \ +                        or not getattr(form, 'form_slug', None): +                    continue +                cls._register[form.form_slug] = form +        return cls._register + +    def get_form_class(self): +        register = self.register() +        if self.form not in self._register: +            return +        return register[self.form] + + +class ExcludedField(models.Model): +    custom_form = models.ForeignKey(CustomForm, related_name='excluded_fields') +    field = models.CharField(_(u"Field"), max_length=250) + +    class Meta: +        verbose_name = _(u"Excluded field") +        verbose_name_plural = _(u"Excluded fields") + +  class GlobalVar(models.Model, Cached):      slug = models.SlugField(_(u"Variable name"), unique=True)      description = models.TextField(_(u"Description of the variable"), | 
