Forkino per aggiungere modalità demo con un tema selezionato e per rendere il tema associabile ad un utente
parent
3ff4f05e51
commit
7d649185cb
|
|
@ -3,6 +3,7 @@
|
||||||
from admin_interface.compat import gettext_lazy as _
|
from admin_interface.compat import gettext_lazy as _
|
||||||
from admin_interface.models import Theme
|
from admin_interface.models import Theme
|
||||||
|
|
||||||
|
from django.contrib.auth import models as auth_models
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -11,6 +12,7 @@ class ThemeAdmin(admin.ModelAdmin):
|
||||||
list_display = (
|
list_display = (
|
||||||
"name",
|
"name",
|
||||||
"active",
|
"active",
|
||||||
|
"demo",
|
||||||
)
|
)
|
||||||
list_editable = ("active",)
|
list_editable = ("active",)
|
||||||
list_per_page = 100
|
list_per_page = 100
|
||||||
|
|
@ -24,6 +26,7 @@ class ThemeAdmin(admin.ModelAdmin):
|
||||||
"fields": (
|
"fields": (
|
||||||
"name",
|
"name",
|
||||||
"active",
|
"active",
|
||||||
|
"demo",
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
@ -171,6 +174,10 @@ class ThemeAdmin(admin.ModelAdmin):
|
||||||
_("Recent Actions"),
|
_("Recent Actions"),
|
||||||
{"classes": ("wide",), "fields": ("recent_actions_visible",)},
|
{"classes": ("wide",), "fields": ("recent_actions_visible",)},
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
_("Users theme"),
|
||||||
|
{"classes": ("wide",), "fields": ("user",)},
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
save_on_top = True
|
save_on_top = True
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
}
|
||||||
|
|
@ -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"),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -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"),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -2,16 +2,17 @@
|
||||||
|
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from admin_interface.cache import del_cached_active_theme
|
import inspect
|
||||||
from admin_interface.compat import FileExtensionValidator, force_str, gettext_lazy as _
|
|
||||||
|
|
||||||
from colorfield.fields import ColorField
|
from colorfield.fields import ColorField
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models.signals import post_delete, post_save, pre_save
|
from django.db.models.signals import post_delete, post_save, pre_save
|
||||||
|
|
||||||
from six import python_2_unicode_compatible
|
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
|
@python_2_unicode_compatible
|
||||||
class Theme(models.Model):
|
class Theme(models.Model):
|
||||||
|
|
@ -25,22 +26,22 @@ class Theme(models.Model):
|
||||||
del_cached_active_theme()
|
del_cached_active_theme()
|
||||||
Theme.get_active_theme()
|
Theme.get_active_theme()
|
||||||
|
|
||||||
@staticmethod
|
# @staticmethod
|
||||||
def post_save_handler(instance, **kwargs):
|
# def post_save_handler(instance, **kwargs):
|
||||||
del_cached_active_theme()
|
# del_cached_active_theme()
|
||||||
if instance.active:
|
# if instance.active:
|
||||||
Theme.objects.exclude(pk=instance.pk).update(active=False)
|
# Theme.objects.exclude(pk=instance.pk).update(active=False)
|
||||||
Theme.get_active_theme()
|
# Theme.get_active_theme()
|
||||||
|
|
||||||
@staticmethod
|
# @staticmethod
|
||||||
def pre_save_handler(instance, **kwargs):
|
# def pre_save_handler(instance, **kwargs):
|
||||||
if instance.pk is None:
|
# if instance.pk is None:
|
||||||
try:
|
# try:
|
||||||
obj = Theme.objects.get(name=instance.name)
|
# obj = Theme.objects.get(name=instance.name)
|
||||||
if obj:
|
# if obj:
|
||||||
instance.pk = obj.pk
|
# instance.pk = obj.pk
|
||||||
except Theme.DoesNotExist:
|
# except Theme.DoesNotExist:
|
||||||
pass
|
# pass
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_active_theme():
|
def get_active_theme():
|
||||||
|
|
@ -60,6 +61,17 @@ class Theme(models.Model):
|
||||||
obj = objs_active_ls[0]
|
obj = objs_active_ls[0]
|
||||||
|
|
||||||
elif objs_active_count > 1:
|
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
|
||||||
|
|
||||||
|
try:
|
||||||
|
return objs_active_qs.filter(user=user).first()
|
||||||
|
except:
|
||||||
obj = objs_active_ls[-1]
|
obj = objs_active_ls[-1]
|
||||||
obj.set_active()
|
obj.set_active()
|
||||||
|
|
||||||
|
|
@ -70,6 +82,9 @@ class Theme(models.Model):
|
||||||
)
|
)
|
||||||
active = models.BooleanField(default=True, verbose_name=_("active"))
|
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(
|
title = models.CharField(
|
||||||
max_length=50,
|
max_length=50,
|
||||||
default=_("Django administration"),
|
default=_("Django administration"),
|
||||||
|
|
@ -389,5 +404,5 @@ class Theme(models.Model):
|
||||||
|
|
||||||
|
|
||||||
post_delete.connect(Theme.post_delete_handler, sender=Theme)
|
post_delete.connect(Theme.post_delete_handler, sender=Theme)
|
||||||
post_save.connect(Theme.post_save_handler, sender=Theme)
|
# post_save.connect(Theme.post_save_handler, sender=Theme)
|
||||||
pre_save.connect(Theme.pre_save_handler, sender=Theme)
|
# pre_save.connect(Theme.pre_save_handler, sender=Theme)
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,10 @@
|
||||||
{% load i18n static admin_interface_tags %}
|
{% load i18n static admin_interface_tags %}
|
||||||
|
|
||||||
{% block title %}
|
{% 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 %}
|
{% if title %}{{ title }} | {% endif %}{% if theme.title %}{% trans theme.title %}{% else %}{{ site_title|default:_('Django administration') }}{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block extrastyle %}
|
{% block extrastyle %}
|
||||||
{% get_admin_interface_theme as theme %}
|
|
||||||
{% get_admin_interface_nocache as version_md5_cache %}
|
{% get_admin_interface_nocache as version_md5_cache %}
|
||||||
{% get_current_language as current_lang %}
|
{% get_current_language as current_lang %}
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
|
|
@ -114,7 +112,6 @@
|
||||||
|
|
||||||
{% block blockbots %}
|
{% block blockbots %}
|
||||||
{{ block.super }}
|
{{ block.super }}
|
||||||
{% get_admin_interface_theme as theme %}
|
|
||||||
{% get_admin_interface_nocache as version_md5_cache %}
|
{% get_admin_interface_nocache as version_md5_cache %}
|
||||||
{# https://github.com/elky/django-flat-responsive#important-note #}
|
{# 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">
|
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0">
|
||||||
|
|
@ -130,17 +127,14 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block bodyclass %}
|
{% block bodyclass %}
|
||||||
{% get_admin_interface_theme as theme %}
|
|
||||||
flat-theme admin-interface
|
flat-theme admin-interface
|
||||||
{% if theme.name %} {{ theme.name|slugify }}-theme {% endif %}
|
{% if theme.name %} {{ theme.name|slugify }}-theme {% endif %}
|
||||||
{% if theme.foldable_apps %} foldable-apps {% endif %}
|
{% if theme.foldable_apps %} foldable-apps {% endif %}
|
||||||
{% if theme.form_submit_sticky %} sticky-submit {% endif %}
|
{% if theme.form_submit_sticky %} sticky-submit {% endif %}
|
||||||
{% if theme.form_pagination_sticky %} sticky-pagination {% endif %}
|
{% if theme.form_pagination_sticky %} sticky-pagination {% endif %}
|
||||||
{% if theme.list_filter_sticky %} list-filter-sticky {% endif %}
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block branding %}
|
{% block branding %}
|
||||||
{% get_admin_interface_theme as theme %}
|
|
||||||
<h1 id="site-name">
|
<h1 id="site-name">
|
||||||
<a href="{% url 'admin:index' %}">
|
<a href="{% url 'admin:index' %}">
|
||||||
{% if theme.logo_visible %}
|
{% if theme.logo_visible %}
|
||||||
|
|
@ -158,7 +152,6 @@ flat-theme admin-interface
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block welcome-msg %}
|
{% block welcome-msg %}
|
||||||
{% get_admin_interface_theme as theme %}
|
|
||||||
{% if theme.language_chooser_active %}
|
{% if theme.language_chooser_active %}
|
||||||
{% get_admin_interface_languages as languages %}
|
{% get_admin_interface_languages as languages %}
|
||||||
{% include "admin_interface/language_chooser.html" %}
|
{% include "admin_interface/language_chooser.html" %}
|
||||||
|
|
|
||||||
|
|
@ -67,10 +67,10 @@ def get_admin_interface_languages(context):
|
||||||
|
|
||||||
@simple_tag(takes_context=True)
|
@simple_tag(takes_context=True)
|
||||||
def get_admin_interface_theme(context):
|
def get_admin_interface_theme(context):
|
||||||
theme = get_cached_active_theme()
|
# theme = get_cached_active_theme()
|
||||||
if not theme:
|
# if not theme:
|
||||||
theme = Theme.get_active_theme()
|
theme = Theme.get_active_theme()
|
||||||
set_cached_active_theme(theme)
|
# set_cached_active_theme(theme)
|
||||||
return theme
|
return theme
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
__version__ = "0.19.0"
|
__version__ = "0.19.1"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue