diff --git a/biscuit/core/models.py b/biscuit/core/models.py index 9260fcbd3cd600240bb3967d2a6d4888a22928aa..6e1f6fb032dabea0c775cea3a0e45c315f5e4cb8 100644 --- a/biscuit/core/models.py +++ b/biscuit/core/models.py @@ -4,12 +4,26 @@ from django.contrib.auth import get_user_model from django.db import models from django.utils.translation import ugettext_lazy as _ +import dbsettings from image_cropping import ImageCropField, ImageRatioField from phonenumber_field.modelfields import PhoneNumberField from .mixins import ExtensibleModel, SchoolRelated +class ThemeSettings(dbsettings.Group): + colour_primary = dbsettings.StringValue(default='#007bff') + colour_secondary = dbsettings.StringValue(default='#6c757d') + colour_success = dbsettings.StringValue(default='#28a745') + colour_info = dbsettings.StringValue(default='#17a2b8') + colour_warning = dbsettings.StringValue(default='#ffc107') + colour_danger = dbsettings.StringValue(default='#dc3545') + colour_light = dbsettings.StringValue(default='#f8f9fa') + colour_dark = dbsettings.StringValue(default='#343a40') + +theme_settings = ThemeSettings() + + class School(models.Model): """A school that will have many other objects linked to it. BiscuIT has multi-tenant support by linking all objects to a school, diff --git a/biscuit/core/settings.py b/biscuit/core/settings.py index 4afe98744a6818634225cae80facdd9824746aa7..61c92d3ea50a109873dbdb3e13f8e1bbd4100f9c 100644 --- a/biscuit/core/settings.py +++ b/biscuit/core/settings.py @@ -281,20 +281,12 @@ ANY_JS = { SASS_PROCESSOR_AUTO_INCLUDE = False SASS_PROCESSOR_CUSTOM_FUNCTIONS = { 'get-colour': 'biscuit.core.util.sass_helpers.get_colour', + 'get-theme-setting': 'biscuit.core.util.sass_helpers.get_theme_setting', } SASS_PROCESSOR_INCLUDE_DIRS = [ _settings.get('bootstrap.sass_path', JS_ROOT+'/bootstrap/scss/') ] -COLOUR_PRIMARY = _settings.get('theme.colours.primary', '#007bff') -COLOUR_SECONDARY = _settings.get('theme.colours.secondary', '#6c757d') -COLOUR_SUCCESS = _settings.get('theme.colours.success', '#28a745') -COLOUR_INFO = _settings.get('theme.colours.info', '#17a2b8') -COLOUR_WARNING = _settings.get('theme.colours.warning', '#ffc107') -COLOUR_DANGER = _settings.get('theme.colours.danger', '#dc3545') -COLOUR_LIGHT = _settings.get('theme.colours.light', '#f8f9fa') -COLOUR_DARK = _settings.get('theme.colours.dark', '#343a40') - ADMINS = _settings.get('contact.admins', []) SERVER_EMAIL = _settings.get('contact.from', 'root@localhost') DEFAULT_FROM_EMAIL = _settings.get('contact.from', 'root@localhost') diff --git a/biscuit/core/static/bootstrap_modified.scss b/biscuit/core/static/bootstrap_modified.scss index d77585eb8d6c3137db9f0f35513e5185dbd7195a..496e45bd585e4df3b77d1bf0d821434a08b3cb70 100644 --- a/biscuit/core/static/bootstrap_modified.scss +++ b/biscuit/core/static/bootstrap_modified.scss @@ -1,12 +1,12 @@ $theme-colors: ( - "primary": adjust-color(get-colour(get-setting(COLOUR_PRIMARY)), $alpha: 1), - "secondary": adjust-color(get-colour(get-setting(COLOUR_SECONDARY)), $alpha: 1), - "success": adjust-color(get-colour(get-setting(COLOUR_SUCCESS)), $alpha: 1), - "info": adjust-color(get-colour(get-setting(COLOUR_INFO)), $alpha: 1), - "warning": adjust-color(get-colour(get-setting(COLOUR_WARNING)), $alpha: 1), - "danger": adjust-color(get-colour(get-setting(COLOUR_DANGER)), $alpha: 1), - "light": adjust-color(get-colour(get-setting(COLOUR_LIGHT)), $alpha: 1), - "dark": adjust-color(get-colour(get-setting(COLOUR_DARK)), $alpha: 1), + "primary": adjust-color(get-colour(get-setting(colour_primary)), $alpha: 1), + "secondary": adjust-color(get-colour(get-setting(colour_secondary)), $alpha: 1), + "success": adjust-color(get-colour(get-setting(colour_success)), $alpha: 1), + "info": adjust-color(get-colour(get-setting(colour_info)), $alpha: 1), + "warning": adjust-color(get-colour(get-setting(colour_warning)), $alpha: 1), + "danger": adjust-color(get-colour(get-setting(colour_danger)), $alpha: 1), + "light": adjust-color(get-colour(get-setting(colour_light)), $alpha: 1), + "dark": adjust-color(get-colour(get-setting(colour_dark)), $alpha: 1), ); @import "bootstrap"; diff --git a/biscuit/core/util/sass_helpers.py b/biscuit/core/util/sass_helpers.py index aa28accf32e4cbd42711c7b69ccc2bf8e8dfbc22..1c77dac6a0d6308f6840ae488d2b47f457af9cb8 100644 --- a/biscuit/core/util/sass_helpers.py +++ b/biscuit/core/util/sass_helpers.py @@ -1,9 +1,14 @@ from colour import web2hex from sass import SassColor +from .models import theme_settings def get_colour(html_colour: str) -> SassColor: rgb = web2hex(html_colour, force_long=True)[1:] r, g, b = int(rgb[0:2], 16), int(rgb[2:4], 16), int(rgb[4:6], 16) return SassColor(r, g, b, 255) + + +def get_theme_setting(setting: str) -> str: + return getattr(theme_settings, setting, '')