diff --git a/admin_interface/admin.py b/admin_interface/admin.py index 5238bad..c93db23 100644 --- a/admin_interface/admin.py +++ b/admin_interface/admin.py @@ -3,6 +3,7 @@ from admin_interface.compat import gettext_lazy as _ from admin_interface.models import Theme +from django.contrib.auth import models as auth_models from django.contrib import admin @@ -11,6 +12,7 @@ class ThemeAdmin(admin.ModelAdmin): list_display = ( "name", "active", + "demo", ) list_editable = ("active",) list_per_page = 100 @@ -24,6 +26,7 @@ class ThemeAdmin(admin.ModelAdmin): "fields": ( "name", "active", + "demo", ), }, ), @@ -171,6 +174,10 @@ class ThemeAdmin(admin.ModelAdmin): _("Recent Actions"), {"classes": ("wide",), "fields": ("recent_actions_visible",)}, ), + ( + _("Users theme"), + {"classes": ("wide",), "fields": ("user",)}, + ), ) save_on_top = True diff --git a/admin_interface/context_processor.py b/admin_interface/context_processor.py new file mode 100644 index 0000000..cae12f3 --- /dev/null +++ b/admin_interface/context_processor.py @@ -0,0 +1,36 @@ +from .models import Theme + +def get_active_theme(request): + objs_manager = Theme.objects + objs_active_qs = objs_manager.filter(active=True) + objs_active_ls = list(objs_active_qs) + objs_active_count = len(objs_active_ls) + + if objs_active_count == 0: + obj = objs_manager.all().first() + if obj: + obj.set_active() + else: + obj = objs_manager.create() + + elif objs_active_count == 1: + obj = objs_active_ls[0] + + elif objs_active_count > 1: + # for frame_record in inspect.stack(): + # if frame_record[3]=='get_response': + # request = frame_record[0].f_locals['request'] + # user = request.user + # break + # else: + # request = None + user = request.user + try: + obj = objs_active_qs.filter(user=user).first() + except: + obj = objs_active_ls[-1] + obj.set_active() + + return { + 'theme': obj, + } \ No newline at end of file diff --git a/admin_interface/migrations/0025_add_demo_option.py b/admin_interface/migrations/0025_add_demo_option.py new file mode 100644 index 0000000..6f2c3f1 --- /dev/null +++ b/admin_interface/migrations/0025_add_demo_option.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- + +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("admin_interface", "0024_remove_theme_css"), + ] + + operations = [ + migrations.AddField( + model_name="theme", + name="demo", + field=models.BooleanField(default=False, verbose_name="demo"), + ), + ] diff --git a/admin_interface/migrations/0026_add_user_option.py b/admin_interface/migrations/0026_add_user_option.py new file mode 100644 index 0000000..b81a0b3 --- /dev/null +++ b/admin_interface/migrations/0026_add_user_option.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- + +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("admin_interface", "0025_add_demo_option"), + ] + + operations = [ + migrations.AddField( + model_name="theme", + name="user", + field=models.ForeignKey('auth.User', on_delete=models.CASCADE, null=True, blank=True, verbose_name="active for user"), + ), + ] diff --git a/admin_interface/models.py b/admin_interface/models.py index 49ad035..49574e2 100644 --- a/admin_interface/models.py +++ b/admin_interface/models.py @@ -2,16 +2,17 @@ from __future__ import unicode_literals -from admin_interface.cache import del_cached_active_theme -from admin_interface.compat import FileExtensionValidator, force_str, gettext_lazy as _ +import inspect from colorfield.fields import ColorField - from django.db import models from django.db.models.signals import post_delete, post_save, pre_save - from six import python_2_unicode_compatible +from admin_interface.cache import del_cached_active_theme +from admin_interface.compat import FileExtensionValidator, force_str +from admin_interface.compat import gettext_lazy as _ + @python_2_unicode_compatible class Theme(models.Model): @@ -25,22 +26,22 @@ class Theme(models.Model): del_cached_active_theme() Theme.get_active_theme() - @staticmethod - def post_save_handler(instance, **kwargs): - del_cached_active_theme() - if instance.active: - Theme.objects.exclude(pk=instance.pk).update(active=False) - Theme.get_active_theme() + # @staticmethod + # def post_save_handler(instance, **kwargs): + # del_cached_active_theme() + # if instance.active: + # Theme.objects.exclude(pk=instance.pk).update(active=False) + # Theme.get_active_theme() - @staticmethod - def pre_save_handler(instance, **kwargs): - if instance.pk is None: - try: - obj = Theme.objects.get(name=instance.name) - if obj: - instance.pk = obj.pk - except Theme.DoesNotExist: - pass + # @staticmethod + # def pre_save_handler(instance, **kwargs): + # if instance.pk is None: + # try: + # obj = Theme.objects.get(name=instance.name) + # if obj: + # instance.pk = obj.pk + # except Theme.DoesNotExist: + # pass @staticmethod def get_active_theme(): @@ -60,8 +61,19 @@ class Theme(models.Model): obj = objs_active_ls[0] elif objs_active_count > 1: - obj = objs_active_ls[-1] - obj.set_active() + for frame_record in inspect.stack(): + if frame_record[3]=='get_response': + request = frame_record[0].f_locals['request'] + user = request.user + break + else: + request = None + + try: + return objs_active_qs.filter(user=user).first() + except: + obj = objs_active_ls[-1] + obj.set_active() return obj @@ -70,6 +82,9 @@ class Theme(models.Model): ) active = models.BooleanField(default=True, verbose_name=_("active")) + demo = models.BooleanField(default=False, verbose_name=_("is demo")) + user = models.ForeignKey('auth.User', on_delete=models.CASCADE, null=True, blank=True, verbose_name=_("active for user")) + title = models.CharField( max_length=50, default=_("Django administration"), @@ -389,5 +404,5 @@ class Theme(models.Model): post_delete.connect(Theme.post_delete_handler, sender=Theme) -post_save.connect(Theme.post_save_handler, sender=Theme) -pre_save.connect(Theme.pre_save_handler, sender=Theme) +# post_save.connect(Theme.post_save_handler, sender=Theme) +# pre_save.connect(Theme.pre_save_handler, sender=Theme) diff --git a/admin_interface/templates/admin/base_site.html b/admin_interface/templates/admin/base_site.html index 70515cc..75ce978 100644 --- a/admin_interface/templates/admin/base_site.html +++ b/admin_interface/templates/admin/base_site.html @@ -2,12 +2,10 @@ {% load i18n static admin_interface_tags %} {% block title %} -{% get_admin_interface_theme as theme %} {% if title %}{{ title }} | {% endif %}{% if theme.title %}{% trans theme.title %}{% else %}{{ site_title|default:_('Django administration') }}{% endif %} {% endblock %} {% block extrastyle %} -{% get_admin_interface_theme as theme %} {% get_admin_interface_nocache as version_md5_cache %} {% get_current_language as current_lang %}