diff options
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/context_processors.py | 3 | ||||
| -rw-r--r-- | ishtar_common/forms.py | 144 | ||||
| -rw-r--r-- | ishtar_common/menu_base.py | 8 | ||||
| -rw-r--r-- | ishtar_common/migrations/0028_auto_20180214_1144.py | 49 | ||||
| -rw-r--r-- | ishtar_common/models.py | 70 | ||||
| -rw-r--r-- | ishtar_common/templates/base.html | 2 | ||||
| -rw-r--r-- | ishtar_common/wizards.py | 10 | 
7 files changed, 165 insertions, 121 deletions
| diff --git a/ishtar_common/context_processors.py b/ishtar_common/context_processors.py index 93d524d2b..437ceb677 100644 --- a/ishtar_common/context_processors.py +++ b/ishtar_common/context_processors.py @@ -68,7 +68,4 @@ def get_base_context(request):          dct['EXTRA_JS'] += "\n" + "\n".join(media.render_js())      if settings.EXTRA_VERSION:          dct['VERSION'] += "-" + unicode(settings.EXTRA_VERSION) -    profile = get_current_profile() -    if profile: -        dct['raw_css'] = profile.get_raw_css()      return dct diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py index eb548f70c..13e8457f6 100644 --- a/ishtar_common/forms.py +++ b/ishtar_common/forms.py @@ -263,7 +263,78 @@ class IshtarForm(forms.Form):              widget.options['todayHighlight'] = 'true' -class TableSelect(IshtarForm): +class FieldType(object): +    def __init__(self, key, model, is_multiple=False, extra_args=None): +        self.key = key +        self.model = model +        self.is_multiple = is_multiple +        self.extra_args = extra_args + +    def get_choices(self, initial=None): +        args = { +            'empty_first': not self.is_multiple, +            'initial': initial +        } +        if self.extra_args: +            args.update(self.extra_args) +        return self.model.get_types(**args) + +    def get_help(self): +        args = {} +        if self.extra_args: +            args.update(self.extra_args) +        return self.model.get_help(**args) + + +class ManageOldType(IshtarForm): +    TYPES = []  # FieldType list + +    def __init__(self, *args, **kwargs): +        """ +        init_data is used to manage deactivated items in list when editing +        old data +        """ +        prefix = kwargs.get('prefix') or '' +        self.init_data = {} +        if 'data' in kwargs and kwargs['data']: +            for k in kwargs['data']: +                if prefix not in k: +                    continue +                new_k = k[len(prefix) + 1:] +                if hasattr(kwargs['data'], 'getlist'): +                    items = kwargs['data'].getlist(k) +                else: +                    items = [kwargs['data'][k]] +                for val in items: +                    if not val: +                        continue +                    if new_k not in self.init_data: +                        self.init_data[new_k] = [] +                    self.init_data[new_k].append(val) +        if 'initial' in kwargs and kwargs['initial']: +            for k in kwargs['initial']: +                if k not in self.init_data or not self.init_data[k]: +                    if hasattr(kwargs['initial'], 'getlist'): +                        items = kwargs['initial'].getlist(k) +                    else: +                        items = [kwargs['initial'][k]] +                    for val in items: +                        if not val: +                            continue +                        if k not in self.init_data: +                            self.init_data[k] = [] +                        self.init_data[k].append(val) +        self.init_data = MultiValueDict(self.init_data) +        super(ManageOldType, self).__init__(*args, **kwargs) +        for field in self.TYPES: +            if field.key not in self.fields: +                continue +            self.fields[field.key].choices = field.get_choices( +                initial=self.init_data.get(field.key)) +            self.fields[field.key].help_text = field.get_help() + + +class TableSelect(ManageOldType):      def __init__(self, *args, **kwargs):          super(TableSelect, self).__init__(*args, **kwargs)          # no field is required for search @@ -361,77 +432,6 @@ def get_data_from_formset(data):      return values -class FieldType(object): -    def __init__(self, key, model, is_multiple=False, extra_args=None): -        self.key = key -        self.model = model -        self.is_multiple = is_multiple -        self.extra_args = extra_args - -    def get_choices(self, initial=None): -        args = { -            'empty_first': not self.is_multiple, -            'initial': initial -        } -        if self.extra_args: -            args.update(self.extra_args) -        return self.model.get_types(**args) - -    def get_help(self): -        args = {} -        if self.extra_args: -            args.update(self.extra_args) -        return self.model.get_help(**args) - - -class ManageOldType(IshtarForm): -    TYPES = []  # FieldType list - -    def __init__(self, *args, **kwargs): -        """ -        init_data is used to manage deactivated items in list when editing -        old data -        """ -        prefix = kwargs.get('prefix') or '' -        self.init_data = {} -        if 'data' in kwargs and kwargs['data']: -            for k in kwargs['data']: -                if prefix not in k: -                    continue -                new_k = k[len(prefix) + 1:] -                if hasattr(kwargs['data'], 'getlist'): -                    items = kwargs['data'].getlist(k) -                else: -                    items = [kwargs['data'][k]] -                for val in items: -                    if not val: -                        continue -                    if new_k not in self.init_data: -                        self.init_data[new_k] = [] -                    self.init_data[new_k].append(val) -        if 'initial' in kwargs and kwargs['initial']: -            for k in kwargs['initial']: -                if k not in self.init_data or not self.init_data[k]: -                    if hasattr(kwargs['initial'], 'getlist'): -                        items = kwargs['initial'].getlist(k) -                    else: -                        items = [kwargs['initial'][k]] -                    for val in items: -                        if not val: -                            continue -                        if k not in self.init_data: -                            self.init_data[k] = [] -                        self.init_data[k].append(val) -        self.init_data = MultiValueDict(self.init_data) -        super(ManageOldType, self).__init__(*args, **kwargs) -        for field in self.TYPES: -            if field.key not in self.fields: -                continue -            self.fields[field.key].choices = field.get_choices( -                initial=self.init_data.get(field.key)) -            self.fields[field.key].help_text = field.get_help() - -  class DocumentGenerationForm(forms.Form):      """      Form to generate document by choosing the template diff --git a/ishtar_common/menu_base.py b/ishtar_common/menu_base.py index 7913bd470..13eb46f99 100644 --- a/ishtar_common/menu_base.py +++ b/ishtar_common/menu_base.py @@ -23,13 +23,19 @@ from ishtar_common.models import get_current_profile  class SectionItem:      def __init__(self, idx, label, childs=[], profile_restriction=None, css=''):          self.idx = idx -        self.label = label +        self._label = label          self.childs = childs          self.available = False          self.items = {}          self.profile_restriction = profile_restriction          self.css = css +    @property +    def label(self): +        if callable(self._label): +            return self._label() +        return self._label +      def check_profile_restriction(self):          if self.profile_restriction:              profile = get_current_profile() diff --git a/ishtar_common/migrations/0028_auto_20180214_1144.py b/ishtar_common/migrations/0028_auto_20180214_1144.py new file mode 100644 index 000000000..fdfd636f5 --- /dev/null +++ b/ishtar_common/migrations/0028_auto_20180214_1144.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.10 on 2018-02-14 11:44 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + +    dependencies = [ +        ('ishtar_common', '0027_auto_20180205_1726'), +    ] + +    operations = [ +        migrations.RemoveField( +            model_name='ishtarsiteprofile', +            name='base_color', +        ), +        migrations.RemoveField( +            model_name='ishtarsiteprofile', +            name='context_record_color', +        ), +        migrations.RemoveField( +            model_name='ishtarsiteprofile', +            name='files_color', +        ), +        migrations.RemoveField( +            model_name='ishtarsiteprofile', +            name='find_color', +        ), +        migrations.RemoveField( +            model_name='ishtarsiteprofile', +            name='mapping_color', +        ), +        migrations.RemoveField( +            model_name='ishtarsiteprofile', +            name='warehouse_color', +        ), +        migrations.AddField( +            model_name='ishtarsiteprofile', +            name='archaeological_site', +            field=models.BooleanField(default=False, verbose_name='Archaeological site module'), +        ), +        migrations.AddField( +            model_name='ishtarsiteprofile', +            name='archaeological_site_label', +            field=models.CharField(choices=[(b'site', 'Site'), (b'entity', 'Archaeological entity')], default=b'site', max_length=200, verbose_name='Archaeological site type'), +        ), +    ] diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 674e42538..74b2f4221 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -1464,6 +1464,7 @@ CURRENCY = ((u"€", _(u"Euro")),              (u"$", _(u"US dollar")))  FIND_INDEX_SOURCE = ((u"O", _(u"Operations")),                       (u"CR", _(u"Context records"))) +SITE_LABELS = [('site', _(u"Site")), ('entity', _(u"Archaeological entity"))]  class IshtarSiteProfile(models.Model, Cached): @@ -1471,18 +1472,16 @@ class IshtarSiteProfile(models.Model, Cached):      label = models.TextField(_(u"Name"))      slug = models.SlugField(_(u"Slug"), unique=True)      description = models.TextField(_(u"Description"), null=True, blank=True) -    base_color = models.CharField( -        _(u"CSS color code for base module"), -        default=u'rgba(0, 0, 0, 0)', max_length=200)      files = models.BooleanField(_(u"Files module"), default=False) -    files_color = models.CharField( -        _(u"CSS color code for files module"), -        default=u'rgba(0, 32, 210, 0.1)', max_length=200) +    archaeological_site = models.BooleanField( +        _(u"Archaeological site module"), default=False) +    archaeological_site_label = models.CharField( +        _(u"Archaeological site type"), max_length=200, +        choices=SITE_LABELS, +        default='site' +    )      context_record = models.BooleanField(_(u"Context records module"),                                           default=False) -    context_record_color = models.CharField( -        _(u"CSS color code for context record module"), -        default=u'rgba(210,200,0,0.2)', max_length=200)      find = models.BooleanField(_(u"Finds module"), default=False,                                 help_text=_(u"Need context records module"))      find_index = models.CharField( @@ -1490,21 +1489,12 @@ class IshtarSiteProfile(models.Model, Cached):          choices=FIND_INDEX_SOURCE,          help_text=_(u"To prevent irrelevant indexes, change this parameter "                      u"only if there is no find in the database")) -    find_color = models.CharField( -        _(u"CSS color code for find module"), -        default=u'rgba(210,0,0,0.15)', max_length=200)      warehouse = models.BooleanField(          _(u"Warehouses module"), default=False,          help_text=_(u"Need finds module")) -    warehouse_color = models.CharField( -        _(u"CSS code for warehouse module"), default=u'rgba(10,20,200,0.15)', -        max_length=200)      preservation = models.BooleanField(_(u"Preservation module"),                                         default=False)      mapping = models.BooleanField(_(u"Mapping module"), default=False) -    mapping_color = models.CharField( -        _(u"CSS code for mapping module"), default=u'rgba(72, 236, 0, 0.15)', -        max_length=200)      homepage = models.TextField(          _(u"Home page"), null=True, blank=True,          help_text=_(u"Homepage of Ishtar - if not defined a default homepage " @@ -1579,18 +1569,26 @@ class IshtarSiteProfile(models.Model, Cached):      def __unicode__(self):          return unicode(self.label) -    def get_raw_css(self): -        css = '' -        for attr, css_name in (('base_color', 'operation'), -                               ('files_color', 'file'), -                               ('context_record_color', 'context-record'), -                               ('find_color', 'find'), -                               ('warehouse_color', 'warehouse')): -            css += ''' -.menu-%s{ -    background-color: %s; -}''' % (css_name, getattr(self, attr)) -        return css +    @classmethod +    def get_current_profile(cls, force=False): +        cache_key, value = get_cache(cls, ['is-current-profile']) +        if value and not force: +            return value +        q = cls.objects.filter(active=True) +        if not q.count(): +            obj = cls.objects.create( +                label="Default profile", slug='default', active=True) +        else: +            obj = q.all()[0] +        cache.set(cache_key, obj, settings.CACHE_TIMEOUT) +        return obj + +    @classmethod +    def get_default_site_label(cls): +        return cls.get_current_profile().get_site_label() + +    def get_site_label(self): +        return unicode(dict(SITE_LABELS)[self.archaeological_site_label])      def save(self, *args, **kwargs):          raw = False @@ -1621,17 +1619,7 @@ class IshtarSiteProfile(models.Model, Cached):  def get_current_profile(force=False): -    cache_key, value = get_cache(IshtarSiteProfile, ['is-current-profile']) -    if value and not force: -        return value -    q = IshtarSiteProfile.objects.filter(active=True) -    if not q.count(): -        obj = IshtarSiteProfile.objects.create( -            label="Default profile", slug='default', active=True) -    else: -        obj = q.all()[0] -    cache.set(cache_key, obj, settings.CACHE_TIMEOUT) -    return obj +    return IshtarSiteProfile.get_current_profile(force=force)  def cached_site_changed(sender, **kwargs): diff --git a/ishtar_common/templates/base.html b/ishtar_common/templates/base.html index 8608448e7..0b385267d 100644 --- a/ishtar_common/templates/base.html +++ b/ishtar_common/templates/base.html @@ -57,8 +57,6 @@      {% endcompress %}      {% block extra_head %}      {% endblock %} -    {% comment %}{% if raw_css %}<style media="screen" type="text/css"> -    {{raw_css |safe}}</style>{% endif %}{% endcomment %}  </head>  <body{% if current_theme%} id='{{current_theme}}'{%endif%}>      {% include "navbar.html" %} diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py index e82b32671..114b47712 100644 --- a/ishtar_common/wizards.py +++ b/ishtar_common/wizards.py @@ -139,6 +139,9 @@ class Wizard(NamedUrlWizardView):      saved_args = {}  # argument to pass on object save +    def get_label(self): +        return self.label +      '''      # buggy and unecessary...      def __init__(self, *args, **kwargs): @@ -232,7 +235,7 @@ class Wizard(NamedUrlWizardView):          step = self.steps.first          current_step = self.steps.current          dct = {'current_step_label': self.form_list[current_step].form_label, -               'wizard_label': self.label, +               'wizard_label': self.get_label(),                 'current_object': self.get_current_object(),                 'is_search': bool(                     [k for k in self.main_item_select_keys @@ -1216,13 +1219,16 @@ class SearchWizard(NamedUrlWizardView):          templates = ['ishtar/wizard/search.html']          return templates +    def get_label(self): +        return self.label +      def get_context_data(self, form, **kwargs):          context = super(SearchWizard, self).get_context_data(form)          self.request.session['CURRENT_ACTION'] = self.get_wizard_name()          current_step = self.steps.current          context.update({'current_step': self.form_list[current_step],                          'is_search': True, -                        'wizard_label': self.label}) +                        'wizard_label': self.get_label()})          return context | 
