Forkino per aggiungere modalità demo con un tema selezionato e per rendere il tema associabile ad un utente

my-merge-progressivo1
Davide Borgonovo 2022-03-14 23:58:22 +01:00
parent 3ff4f05e51
commit 7d649185cb
8 changed files with 127 additions and 36 deletions

View File

@ -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

View File

@ -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,
}

View File

@ -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"),
),
]

View File

@ -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"),
),
]

View File

@ -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)

View File

@ -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 %}
<style type="text/css">
@ -114,7 +112,6 @@
{% block blockbots %}
{{ block.super }}
{% get_admin_interface_theme as theme %}
{% get_admin_interface_nocache as version_md5_cache %}
{# https://github.com/elky/django-flat-responsive#important-note #}
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0">
@ -130,17 +127,14 @@
{% endblock %}
{% block bodyclass %}
{% get_admin_interface_theme as theme %}
flat-theme admin-interface
{% if theme.name %} {{ theme.name|slugify }}-theme {% endif %}
{% if theme.foldable_apps %} foldable-apps {% endif %}
{% if theme.form_submit_sticky %} sticky-submit {% endif %}
{% if theme.form_pagination_sticky %} sticky-pagination {% endif %}
{% if theme.list_filter_sticky %} list-filter-sticky {% endif %}
{% endblock %}
{% block branding %}
{% get_admin_interface_theme as theme %}
<h1 id="site-name">
<a href="{% url 'admin:index' %}">
{% if theme.logo_visible %}
@ -158,7 +152,6 @@ flat-theme admin-interface
{% endblock %}
{% block welcome-msg %}
{% get_admin_interface_theme as theme %}
{% if theme.language_chooser_active %}
{% get_admin_interface_languages as languages %}
{% include "admin_interface/language_chooser.html" %}

View File

@ -67,10 +67,10 @@ def get_admin_interface_languages(context):
@simple_tag(takes_context=True)
def get_admin_interface_theme(context):
theme = get_cached_active_theme()
if not theme:
theme = Theme.get_active_theme()
set_cached_active_theme(theme)
# theme = get_cached_active_theme()
# if not theme:
theme = Theme.get_active_theme()
# set_cached_active_theme(theme)
return theme

View File

@ -1,3 +1,3 @@
# -*- coding: utf-8 -*-
__version__ = "0.19.0"
__version__ = "0.19.1"