Skip to content
Snippets Groups Projects
Verified Commit 61388db5 authored by Tom Teichler's avatar Tom Teichler :beers:
Browse files

Merge branch 'master' into 152-use-external-library-for-template-mailer

parents c209bdbc 40933406
No related branches found
No related tags found
1 merge request!117Resolve "Use or create external library for template mailer"
Pipeline #632 failed
......@@ -7,7 +7,7 @@ from django.utils.translation import gettext_lazy as _
from dynaconf import LazySettings
from easy_thumbnails.conf import Settings as thumbnail_settings
from .util.core_helpers import get_app_packages
from .util.core_helpers import get_app_packages, merge_app_settings
ENVVAR_PREFIX_FOR_DYNACONF = "ALEKSIS"
DIRS_FOR_DYNACONF = ["/etc/aleksis"]
......@@ -77,8 +77,10 @@ INSTALLED_APPS = [
"two_factor",
"material",
"pwa",
"ckeditor",
]
merge_app_settings("INSTALLED_APPS", INSTALLED_APPS, True)
INSTALLED_APPS += get_app_packages()
STATICFILES_FINDERS = [
......@@ -152,6 +154,8 @@ DATABASES = {
}
}
merge_app_settings("DATABASES", DATABASES, False)
if _settings.get("caching.memcached.enabled", True):
CACHES = {
"default": {
......@@ -241,6 +245,8 @@ YARN_INSTALLED_APPS = [
"select2",
]
merge_app_settings("YARN_INSTALLED_APPS", YARN_INSTALLED_APPS, True)
JS_URL = _settings.get("js_assets.url", STATIC_URL)
JS_ROOT = _settings.get("js_assets.root", NODE_MODULES_ROOT + "/node_modules")
......@@ -257,6 +263,8 @@ ANY_JS = {
},
}
merge_app_settings("ANY_JS", ANY_JS, True)
SASS_PROCESSOR_AUTO_INCLUDE = False
SASS_PROCESSOR_CUSTOM_FUNCTIONS = {
"get-colour": "aleksis.core.util.sass_helpers.get_colour",
......@@ -320,6 +328,9 @@ CONSTANCE_CONFIG_FIELDSETS = {
"Footer settings": ("PRIVACY_URL", "IMPRINT_URL"),
}
merge_app_settings("CONSTANCE_CONFIG", CONSTANCE_CONFIG, False)
merge_app_settings("CONSTANCE_CONFIG_FIELDSETS", CONSTANCE_CONFIG_FIELDSETS, False)
MAINTENANCE_MODE = _settings.get("maintenance.enabled", None)
MAINTENANCE_MODE_IGNORE_IP_ADDRESSES = _settings.get(
"maintenance.ignore_ips", _settings.get("maintenance.internal_ips", [])
......@@ -382,3 +393,52 @@ PWA_APP_SPLASH_SCREEN = [
PWA_APP_DIR = "ltr"
PWA_SERVICE_WORKER_PATH = os.path.join(STATIC_ROOT, "js", "serviceworker.js")
# PWA_APP_LANG = 'de-DE'
CKEDITOR_CONFIGS = {
'default': {
'toolbar_Basic': [
['Source', '-', 'Bold', 'Italic']
],
'toolbar_Full': [
{'name': 'document', 'items': ['Source', '-', 'Save', 'NewPage', 'Preview', 'Print', '-', 'Templates']},
{'name': 'clipboard', 'items': ['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo']},
{'name': 'editing', 'items': ['Find', 'Replace', '-', 'SelectAll']},
{'name': 'insert',
'items': ['Image', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak', 'Iframe']},
'/',
{'name': 'basicstyles',
'items': ['Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript', '-', 'RemoveFormat']},
{'name': 'paragraph',
'items': ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', 'CreateDiv', '-',
'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', '-', 'BidiLtr', 'BidiRtl',
'Language']},
{'name': 'links', 'items': ['Link', 'Unlink', 'Anchor']},
'/',
{'name': 'styles', 'items': ['Styles', 'Format', 'Font', 'FontSize']},
{'name': 'colors', 'items': ['TextColor', 'BGColor']},
{'name': 'tools', 'items': ['Maximize', 'ShowBlocks']},
{'name': 'about', 'items': ['About']},
{'name': 'customtools', 'items': [
'Preview',
'Maximize',
]},
],
'toolbar': 'Full',
'tabSpaces': 4,
'extraPlugins': ','.join([
'uploadimage',
'div',
'autolink',
'autoembed',
'embedsemantic',
'autogrow',
# 'devtools',
'widget',
'lineutils',
'clipboard',
'dialog',
'dialogui',
'elementspath'
]),
}
}
{# -*- engine:django -*- #}
{% extends "core/base.html" %}
{% block content %}
<div class="d-flex justify-content-between">
<div>
<h2>{{ current_head }}</h2>
</div>
<div class="btn-group" role="group" aria-label="URL actions">
<a href="{{ url_prev }}" class="btn btn-dark">
<i class="material-icons">chevron_left</i>
</a>
<a href="{{ url_next }}" class="btn btn-dark">
<i class="material-icons">chevron_right</i>
</a>
</div>
</div>
{% block current_content %}
{% endblock %}
{% endblock %}
<div class="row">
<a href="{{ url_prev }}" class="btn-flat left">
<i class="material-icons small">chevron_left</i>
</a>
<a href="{{ url_next }}" class="btn-flat right">
<i class="material-icons small">chevron_right</i>
</a>
</div>
......@@ -30,19 +30,41 @@ def get_app_packages() -> Sequence[str]:
except ImportError:
return []
pkgs = []
for pkg in pkgutil.iter_modules(aleksis.apps.__path__):
mod = import_module("aleksis.apps.%s" % pkg[1])
return ["aleksis.apps.%s" % pkg[1] for pkg in pkgutil.iter_modules(aleksis.apps.__path__)]
# Add additional apps defined in module's INSTALLED_APPS constant
additional_apps = getattr(mod, "INSTALLED_APPS", [])
for app in additional_apps:
if app not in pkgs:
pkgs.append(app)
pkgs.append("aleksis.apps.%s" % pkg[1])
def merge_app_settings(setting: str, original: Union[dict, list], deduplicate: bool = False) -> Union[dict, list]:
""" Get a named settings constant from all apps and merge it into the original.
To use this, add a settings.py file to the app, in the same format as Django's
main settings.py.
return pkgs
Note: Only selected names will be imported frm it to minimise impact of
potentially malicious apps!
"""
for pkg in get_app_packages():
try:
mod_settings = import_module(pkg)
except ImportError:
# Import errors are non-fatal. They mean that the app has no settings.py.
continue
app_setting = getattr(mod_settings, setting, None)
if not app_setting:
# The app might not have this setting or it might be empty. Ignore it in that case.
continue
for entry in app_setting:
if entry in original:
if not deduplicate:
raise AttributeError("%s already set in original.")
else:
if isinstance(original, list):
original.append(entry)
elif isinstance(original, dict):
original[entry] = app_setting[entry]
else:
raise TypeError("Only dict and list settings can be merged.")
def is_impersonate(request: HttpRequest) -> bool:
......
Subproject commit 99c4cd0b940497f2bca5e10904c482ac8807bd0f
Subproject commit 0f014e1c2fbaeaad628472ad38eac7d29029ace0
AlekSIS-App-FiBu @ 1299313a
Subproject commit 1299313ad488f3e955d92d359f4195764eb66882
Subproject commit 0ea718b743e9c2235adceb8b09db84e8c2abd59c
Subproject commit 1415a4851bd53ffe4e14c0961422e5b66060d0f8
......@@ -257,6 +257,17 @@ version = "2.2.0"
[package.dependencies]
Django = ">=1.8"
[[package]]
category = "main"
description = "Django admin CKEditor integration."
name = "django-ckeditor"
optional = false
python-versions = "*"
version = "5.8.0"
[package.dependencies]
django-js-asset = ">=1.2.2"
[[package]]
category = "main"
description = "Django live settings with pluggable backends, including Redis."
......@@ -365,6 +376,14 @@ optional = false
python-versions = "*"
version = "2.1.0"
[[package]]
category = "main"
description = "script tag with additional attributes for django.forms.Media"
name = "django-js-asset"
optional = false
python-versions = "*"
version = "1.2.2"
[[package]]
category = "main"
description = "django-maintenance-mode shows a 503 error page when maintenance-mode is on."
......@@ -1858,6 +1877,10 @@ django-bulk-update = [
{file = "django-bulk-update-2.2.0.tar.gz", hash = "sha256:5ab7ce8a65eac26d19143cc189c0f041d5c03b9d1b290ca240dc4f3d6aaeb337"},
{file = "django_bulk_update-2.2.0-py2.py3-none-any.whl", hash = "sha256:49a403392ae05ea872494d74fb3dfa3515f8df5c07cc277c3dc94724c0ee6985"},
]
django-ckeditor = [
{file = "django-ckeditor-5.8.0.tar.gz", hash = "sha256:46fc9c7346ea36183dc0cea350f98704f8b04c4722b7fe4fb18baf8ae20423fb"},
{file = "django_ckeditor-5.8.0-py2.py3-none-any.whl", hash = "sha256:a59bab13f4481318f8a048b1b0aef5c7da768a6352dcfb9ba0e77d91fbb9462a"},
]
django-constance = []
django-debug-toolbar = [
{file = "django-debug-toolbar-2.1.tar.gz", hash = "sha256:24c157bc6c0e1648e0a6587511ecb1b007a00a354ce716950bff2de12693e7a8"},
......@@ -1888,6 +1911,10 @@ django-impersonate = [
django-ipware = [
{file = "django-ipware-2.1.0.tar.gz", hash = "sha256:a7c7a8fd019dbdc9c357e6e582f65034e897572fc79a7e467674efa8aef9d00b"},
]
django-js-asset = [
{file = "django-js-asset-1.2.2.tar.gz", hash = "sha256:c163ae80d2e0b22d8fb598047cd0dcef31f81830e127cfecae278ad574167260"},
{file = "django_js_asset-1.2.2-py2.py3-none-any.whl", hash = "sha256:8ec12017f26eec524cab436c64ae73033368a372970af4cf42d9354fcb166bdd"},
]
django-maintenance-mode = [
{file = "django-maintenance-mode-0.14.0.tar.gz", hash = "sha256:f3fef1760fdcda5e0bf6c2966aadc77eea6f328580a9c751920daba927281a68"},
{file = "django_maintenance_mode-0.14.0-py2-none-any.whl", hash = "sha256:b4cc24a469ed10897826a28f05d64e6166a58d130e4940ac124ce198cd4cc778"},
......
......@@ -55,6 +55,7 @@ django_widget_tweaks = "^1.4.5"
django-filter = "^2.2.0"
django-templated-email = "^2.3.0"
html2text = "^2019.9.26"
django-ckeditor = "^5.8.0"
[tool.poetry.extras]
ldap = ["django-auth-ldap"]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment