django-microsys 2.1.4__tar.gz → 2.1.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {django_microsys-2.1.4 → django_microsys-2.1.6}/PKG-INFO +2 -2
- {django_microsys-2.1.4 → django_microsys-2.1.6}/README.md +1 -1
- {django_microsys-2.1.4 → django_microsys-2.1.6}/django_microsys.egg-info/PKG-INFO +2 -2
- {django_microsys-2.1.4 → django_microsys-2.1.6}/django_microsys.egg-info/SOURCES.txt +3 -26
- django_microsys-2.1.6/microsys/VERSION +1 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/apps.py +6 -3
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/context_processors.py +39 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/forms.py +169 -11
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/management/commands/microsys_check.py +3 -2
- django_microsys-2.1.6/microsys/middleware.py +256 -0
- django_microsys-2.1.6/microsys/migrations/0003_public_root_split.py +21 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/models.py +7 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/compose.yml.tmpl +1 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/package/settings.py.tmpl +32 -18
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/helpers/dynamic_modal/js/main.js +19 -2
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/main/css/options.css +12 -11
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/main/css/titlebar.css +13 -5
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/main/js/system_setup.js +166 -65
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/themes/css/dark.css +6 -2
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/themes/css/gothic.css +6 -2
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/themes/css/neon.css +6 -2
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/themes/css/retro.css +6 -2
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/users/css/login.css +63 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/users/js/login.js +26 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/base.html +4 -2
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/helpers/dynamic_modal.html +1 -1
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/includes/language_catalog_editor.html +4 -4
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/includes/options.html +25 -24
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/includes/sidebar_builder.html +11 -9
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/includes/system_names_editor.html +2 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/includes/system_setup.html +1 -1
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/includes/translation_matrix_editor.html +2 -0
- {django_microsys-2.1.4/microsys/templates/microsys/widgets → django_microsys-2.1.6/microsys/templates/microsys/users}/profile_image_widget.html +1 -1
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/registration/login.html +18 -17
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/translations.py +23 -3
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/utils.py +33 -2
- django_microsys-2.1.4/microsys/VERSION +0 -1
- django_microsys-2.1.4/microsys/md2docx_v4.py +0 -312
- django_microsys-2.1.4/microsys/middleware.py +0 -181
- django_microsys-2.1.4/microsys/static/chart.js/chart.umd.min.js +0 -14
- django_microsys-2.1.4/microsys/static/flatpickr/flatpickr.min.css +0 -13
- django_microsys-2.1.4/microsys/static/flatpickr/flatpickr.min.js +0 -2
- django_microsys-2.1.4/microsys/static/flatpickr/locale/ar.d.ts +0 -72
- django_microsys-2.1.4/microsys/static/flatpickr/locale/ar.js +0 -62
- django_microsys-2.1.4/microsys/static/microsys/main/css/charts.css +0 -51
- django_microsys-2.1.4/microsys/static/microsys/main/css/doc_detail.css +0 -101
- django_microsys-2.1.4/microsys/static/microsys/main/css/gen_pdf.css +0 -126
- django_microsys-2.1.4/microsys/static/microsys/main/css/gen_report.css +0 -74
- django_microsys-2.1.4/microsys/static/microsys/main/css/navtabs.css +0 -62
- django_microsys-2.1.4/microsys/static/microsys/main/fonts/Amiri-Bold.woff2 +0 -0
- django_microsys-2.1.4/microsys/static/microsys/main/fonts/Amiri-BoldItalic.woff2 +0 -0
- django_microsys-2.1.4/microsys/static/microsys/main/fonts/Amiri-Italic.woff2 +0 -0
- django_microsys-2.1.4/microsys/static/microsys/main/fonts/Amiri-Regular.woff2 +0 -0
- django_microsys-2.1.4/microsys/static/microsys/main/js/anime.min.js +0 -8
- django_microsys-2.1.4/microsys/static/microsys/main/js/dashboard.js +0 -66
- django_microsys-2.1.4/microsys/static/microsys/themes/css/main.css +0 -7
- django_microsys-2.1.4/microsys/static/vanillajs-datepicker/ar.js +0 -15
- django_microsys-2.1.4/microsys/templates/microsys/forms/checkbox_field.html +0 -12
- django_microsys-2.1.4/microsys/templates/microsys/forms/file_field.html +0 -12
- django_microsys-2.1.4/microsys/templates/microsys/helpers/global_list.html +0 -56
- django_microsys-2.1.4/microsys/templates/microsys/helpers/scan_link.html +0 -3
- django_microsys-2.1.4/microsys/templates/microsys/includes/dashboard.html +0 -157
- {django_microsys-2.1.4 → django_microsys-2.1.6}/LICENSE +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/MANIFEST.in +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/django_microsys.egg-info/dependency_links.txt +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/django_microsys.egg-info/entry_points.txt +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/django_microsys.egg-info/requires.txt +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/django_microsys.egg-info/top_level.txt +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/__init__.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/__main__.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/admin.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/api.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/cli.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/constants.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/discovery.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/fetcher.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/filters.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/formats/__init__.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/formats/ar/__init__.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/formats/ar/formats.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/formats/en/__init__.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/formats/en/formats.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/guards.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/management/commands/__init__.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/management/commands/microsys_setup.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/management/commands/migrator.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/management/commands/seed_activity_log.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/managers.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/migrations/0001_initial.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/migrations/0002_public_registration.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/migrations/__init__.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/patches.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/registration.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/app/README.md.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/app/__init__.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/app/apps.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/app/filters.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/app/forms.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/app/migrations/__init__.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/app/models.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/app/tables.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/app/templates/example_record_confirm_delete.html.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/app/templates/example_record_detail.html.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/app/templates/example_record_form.html.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/app/templates/example_record_list.html.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/app/tests/__init__.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/app/tests/test_app.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/app/translations.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/app/urls.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/app/views.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/.nginx/nginx.conf.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/.secrets/.env.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/Dockerfile.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/README.md.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/compose.dev.yml.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/dockerignore.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/docs/README.md.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/entrypoint.sh.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/gitattributes.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/gitignore.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/gunicorn.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/manage.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/package/__init__.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/package/asgi.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/package/celery.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/package/urls.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/package/wsgi.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/req.txt.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/start.ps1.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/start.sh.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/tests/__init__.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/tests/test_scaffold.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/scaffold_templates/project/tools/smtp_relay.py.tmpl +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/signals.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/bootstrap/bootstrap-icons.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/bootstrap/bootstrap-icons.woff +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/bootstrap/bootstrap-icons.woff2 +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/bootstrap/bootstrap.bundle.min.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/bootstrap/bootstrap.bundle.min.js.map +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/bootstrap/bootstrap.min.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/bootstrap/bootstrap.min.css.map +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/bootstrap/bootstrap.rtl.min.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/bootstrap/bootstrap.rtl.min.css.map +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/favicon.ico +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/img/base_logo.webp +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/img/default_profile.webp +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/img/login_logo.webp +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/accessibility/css/main.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/accessibility/js/main.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/activitylog/js/main.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/forms/css/file_field.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/forms/css/form_actions.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/forms/css/form_fields.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/forms/js/file_field.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/forms/js/filter_form.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/helpers/autofill/js/main.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/helpers/context_menu/css/main.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/helpers/context_menu/js/main.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/helpers/context_menu/js/section_manager.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/helpers/prevent_double_submit.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/helpers/scan_link/js/main.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/helpers/scan_link/js/scan_button.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/helpers/wizard/js/main.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/language/css/main.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/language/fonts/TwemojiCountryFlags.woff2 +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/language/js/main.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/language/js/translations.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/main/css/buttons.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/main/css/dropdowns.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/main/css/index_cards.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/main/css/main.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/main/css/pagination.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/main/css/selectors.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/main/css/system_setup.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/main/css/tables.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/main/css/template_cleanup.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/main/fonts/Shabwa-Bold.woff2 +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/main/fonts/Shabwa-Medium.woff2 +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/main/fonts/Shabwa.woff2 +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/main/js/base_head.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/main/js/base_runtime.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/main/js/options.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/main/js/selectors.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/main/js/tables.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/sections/js/manage_sections.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/sidebar/css/main.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/sidebar/css/reorder.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/sidebar/css/theme_picker.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/sidebar/js/main.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/sidebar/js/preload.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/sidebar/js/reorder.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/sidebar/js/theme_picker.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/themes/css/blue.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/themes/css/gold.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/themes/css/green.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/themes/css/light.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/themes/css/mono.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/themes/css/red.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/themes/js/main.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/tutorial/css/main.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/tutorial/js/driver.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/tutorial/js/main.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/users/css/permissions.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/users/css/profile.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/users/css/user_hub.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/users/js/manage_users.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/users/js/permissions.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/users/js/profile_2fa.js +0 -0
- {django_microsys-2.1.4/microsys/static/microsys/widgets → django_microsys-2.1.6/microsys/static/microsys/users}/js/profile_image_widget.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/users/js/twofa_verify.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/microsys/users/js/user_hub.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/vanillajs-datepicker/datepicker-bs5.min.css +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/static/vanillajs-datepicker/datepicker.min.js +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/tables.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/bootstrap5/layout/field_file.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/2fa/verify.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/activitylog/activity_log.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/activitylog/activity_log_detail_modal.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/form_base.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/forms/assets_head.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/forms/assets_scripts.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/forms/crispy_file_field.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/forms/file_input.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/forms/filter_assets_head.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/forms/filter_assets_scripts.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/helpers/dynamic_modal_combined.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/helpers/dynamic_modal_detail.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/helpers/dynamic_modal_form.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/helpers/dynamic_modal_list.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/helpers/micro_context_menu.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/includes/language_previews.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/includes/sidebar_density_previews.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/includes/sidebar_items.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/includes/table_density_previews.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/includes/theme_previews.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/includes/theme_settings_matrix.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/includes/titlebar.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/includes/tutorial.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/list_base.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/registration/pending.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/scopes/scope_actions.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/scopes/scope_form.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/scopes/scope_manager.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/sections/manage_sections.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/sections/subsection_select.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/sidebar/auto.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/sidebar/extra_groups.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/sidebar/main.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/sidebar/tree.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/tables/table.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/users/grouped_permissions.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/users/manage_users.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/users/profile.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/users/user_detail_modal.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/microsys/users/user_hub.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/registration/email/verify_registration.txt +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/registration/register.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/registration/register_sent.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templates/registration/register_verify.html +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templatetags/__init__.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templatetags/microsys_tags.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templatetags/microsys_translation.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/templatetags/sidebar_tags.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/themes.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/urls.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/views/__init__.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/views/activitylog.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/views/general.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/views/profile.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/views/registration.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/views/scopes.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/views/sections.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/views/sidebar.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/views/twofa.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/views/users.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/widgets.py +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/pyproject.toml +0 -0
- {django_microsys-2.1.4 → django_microsys-2.1.6}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: django_microsys
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.6
|
|
4
4
|
Summary: Django microSYS (System Integration Service) - Multilingual Django Starter Pack, Packed with Features.
|
|
5
5
|
Author-email: DeBeski <debeski1@gmail.com>
|
|
6
6
|
License: NON-COMMERCIAL
|
|
@@ -102,7 +102,7 @@ from microsys.utils import microsys_settings
|
|
|
102
102
|
microsys_settings(globals())
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
-
That helper prepends the required apps, inserts `django.middleware.locale.LocaleMiddleware` and `microsys.middleware.
|
|
105
|
+
That helper prepends the required apps, inserts `django.middleware.locale.LocaleMiddleware` and `microsys.middleware.MicrosysMiddleware` in the supported order, adds the Microsys context processor, sets the Crispy Bootstrap 5 defaults, adds a Bootstrap-friendly `MESSAGE_TAGS` error mapping, and seeds the standard MicroSys runtime defaults for language, timezone, i18n/tz flags, `FORMAT_MODULE_PATH`, and charset unless your project already defines them.
|
|
106
106
|
|
|
107
107
|
__Proceed to [Getting Started](docs/getting-started.md) if you prefer to wire everything manually.__
|
|
108
108
|
|
|
@@ -68,7 +68,7 @@ from microsys.utils import microsys_settings
|
|
|
68
68
|
microsys_settings(globals())
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
-
That helper prepends the required apps, inserts `django.middleware.locale.LocaleMiddleware` and `microsys.middleware.
|
|
71
|
+
That helper prepends the required apps, inserts `django.middleware.locale.LocaleMiddleware` and `microsys.middleware.MicrosysMiddleware` in the supported order, adds the Microsys context processor, sets the Crispy Bootstrap 5 defaults, adds a Bootstrap-friendly `MESSAGE_TAGS` error mapping, and seeds the standard MicroSys runtime defaults for language, timezone, i18n/tz flags, `FORMAT_MODULE_PATH`, and charset unless your project already defines them.
|
|
72
72
|
|
|
73
73
|
__Proceed to [Getting Started](docs/getting-started.md) if you prefer to wire everything manually.__
|
|
74
74
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: django-microsys
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.6
|
|
4
4
|
Summary: Django microSYS (System Integration Service) - Multilingual Django Starter Pack, Packed with Features.
|
|
5
5
|
Author-email: DeBeski <debeski1@gmail.com>
|
|
6
6
|
License: NON-COMMERCIAL
|
|
@@ -102,7 +102,7 @@ from microsys.utils import microsys_settings
|
|
|
102
102
|
microsys_settings(globals())
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
-
That helper prepends the required apps, inserts `django.middleware.locale.LocaleMiddleware` and `microsys.middleware.
|
|
105
|
+
That helper prepends the required apps, inserts `django.middleware.locale.LocaleMiddleware` and `microsys.middleware.MicrosysMiddleware` in the supported order, adds the Microsys context processor, sets the Crispy Bootstrap 5 defaults, adds a Bootstrap-friendly `MESSAGE_TAGS` error mapping, and seeds the standard MicroSys runtime defaults for language, timezone, i18n/tz flags, `FORMAT_MODULE_PATH`, and charset unless your project already defines them.
|
|
106
106
|
|
|
107
107
|
__Proceed to [Getting Started](docs/getting-started.md) if you prefer to wire everything manually.__
|
|
108
108
|
|
|
@@ -23,7 +23,6 @@ microsys/filters.py
|
|
|
23
23
|
microsys/forms.py
|
|
24
24
|
microsys/guards.py
|
|
25
25
|
microsys/managers.py
|
|
26
|
-
microsys/md2docx_v4.py
|
|
27
26
|
microsys/middleware.py
|
|
28
27
|
microsys/models.py
|
|
29
28
|
microsys/patches.py
|
|
@@ -48,6 +47,7 @@ microsys/management/commands/migrator.py
|
|
|
48
47
|
microsys/management/commands/seed_activity_log.py
|
|
49
48
|
microsys/migrations/0001_initial.py
|
|
50
49
|
microsys/migrations/0002_public_registration.py
|
|
50
|
+
microsys/migrations/0003_public_root_split.py
|
|
51
51
|
microsys/migrations/__init__.py
|
|
52
52
|
microsys/scaffold_templates/app/README.md.tmpl
|
|
53
53
|
microsys/scaffold_templates/app/__init__.py.tmpl
|
|
@@ -101,11 +101,6 @@ microsys/static/bootstrap/bootstrap.min.css
|
|
|
101
101
|
microsys/static/bootstrap/bootstrap.min.css.map
|
|
102
102
|
microsys/static/bootstrap/bootstrap.rtl.min.css
|
|
103
103
|
microsys/static/bootstrap/bootstrap.rtl.min.css.map
|
|
104
|
-
microsys/static/chart.js/chart.umd.min.js
|
|
105
|
-
microsys/static/flatpickr/flatpickr.min.css
|
|
106
|
-
microsys/static/flatpickr/flatpickr.min.js
|
|
107
|
-
microsys/static/flatpickr/locale/ar.d.ts
|
|
108
|
-
microsys/static/flatpickr/locale/ar.js
|
|
109
104
|
microsys/static/img/base_logo.webp
|
|
110
105
|
microsys/static/img/default_profile.webp
|
|
111
106
|
microsys/static/img/login_logo.webp
|
|
@@ -131,14 +126,9 @@ microsys/static/microsys/language/fonts/TwemojiCountryFlags.woff2
|
|
|
131
126
|
microsys/static/microsys/language/js/main.js
|
|
132
127
|
microsys/static/microsys/language/js/translations.js
|
|
133
128
|
microsys/static/microsys/main/css/buttons.css
|
|
134
|
-
microsys/static/microsys/main/css/charts.css
|
|
135
|
-
microsys/static/microsys/main/css/doc_detail.css
|
|
136
129
|
microsys/static/microsys/main/css/dropdowns.css
|
|
137
|
-
microsys/static/microsys/main/css/gen_pdf.css
|
|
138
|
-
microsys/static/microsys/main/css/gen_report.css
|
|
139
130
|
microsys/static/microsys/main/css/index_cards.css
|
|
140
131
|
microsys/static/microsys/main/css/main.css
|
|
141
|
-
microsys/static/microsys/main/css/navtabs.css
|
|
142
132
|
microsys/static/microsys/main/css/options.css
|
|
143
133
|
microsys/static/microsys/main/css/pagination.css
|
|
144
134
|
microsys/static/microsys/main/css/selectors.css
|
|
@@ -146,17 +136,11 @@ microsys/static/microsys/main/css/system_setup.css
|
|
|
146
136
|
microsys/static/microsys/main/css/tables.css
|
|
147
137
|
microsys/static/microsys/main/css/template_cleanup.css
|
|
148
138
|
microsys/static/microsys/main/css/titlebar.css
|
|
149
|
-
microsys/static/microsys/main/fonts/Amiri-Bold.woff2
|
|
150
|
-
microsys/static/microsys/main/fonts/Amiri-BoldItalic.woff2
|
|
151
|
-
microsys/static/microsys/main/fonts/Amiri-Italic.woff2
|
|
152
|
-
microsys/static/microsys/main/fonts/Amiri-Regular.woff2
|
|
153
139
|
microsys/static/microsys/main/fonts/Shabwa-Bold.woff2
|
|
154
140
|
microsys/static/microsys/main/fonts/Shabwa-Medium.woff2
|
|
155
141
|
microsys/static/microsys/main/fonts/Shabwa.woff2
|
|
156
|
-
microsys/static/microsys/main/js/anime.min.js
|
|
157
142
|
microsys/static/microsys/main/js/base_head.js
|
|
158
143
|
microsys/static/microsys/main/js/base_runtime.js
|
|
159
|
-
microsys/static/microsys/main/js/dashboard.js
|
|
160
144
|
microsys/static/microsys/main/js/options.js
|
|
161
145
|
microsys/static/microsys/main/js/selectors.js
|
|
162
146
|
microsys/static/microsys/main/js/system_setup.js
|
|
@@ -175,7 +159,6 @@ microsys/static/microsys/themes/css/gold.css
|
|
|
175
159
|
microsys/static/microsys/themes/css/gothic.css
|
|
176
160
|
microsys/static/microsys/themes/css/green.css
|
|
177
161
|
microsys/static/microsys/themes/css/light.css
|
|
178
|
-
microsys/static/microsys/themes/css/main.css
|
|
179
162
|
microsys/static/microsys/themes/css/mono.css
|
|
180
163
|
microsys/static/microsys/themes/css/neon.css
|
|
181
164
|
microsys/static/microsys/themes/css/red.css
|
|
@@ -192,10 +175,9 @@ microsys/static/microsys/users/js/login.js
|
|
|
192
175
|
microsys/static/microsys/users/js/manage_users.js
|
|
193
176
|
microsys/static/microsys/users/js/permissions.js
|
|
194
177
|
microsys/static/microsys/users/js/profile_2fa.js
|
|
178
|
+
microsys/static/microsys/users/js/profile_image_widget.js
|
|
195
179
|
microsys/static/microsys/users/js/twofa_verify.js
|
|
196
180
|
microsys/static/microsys/users/js/user_hub.js
|
|
197
|
-
microsys/static/microsys/widgets/js/profile_image_widget.js
|
|
198
|
-
microsys/static/vanillajs-datepicker/ar.js
|
|
199
181
|
microsys/static/vanillajs-datepicker/datepicker-bs5.min.css
|
|
200
182
|
microsys/static/vanillajs-datepicker/datepicker.min.js
|
|
201
183
|
microsys/templates/bootstrap5/layout/field_file.html
|
|
@@ -207,9 +189,7 @@ microsys/templates/microsys/activitylog/activity_log.html
|
|
|
207
189
|
microsys/templates/microsys/activitylog/activity_log_detail_modal.html
|
|
208
190
|
microsys/templates/microsys/forms/assets_head.html
|
|
209
191
|
microsys/templates/microsys/forms/assets_scripts.html
|
|
210
|
-
microsys/templates/microsys/forms/checkbox_field.html
|
|
211
192
|
microsys/templates/microsys/forms/crispy_file_field.html
|
|
212
|
-
microsys/templates/microsys/forms/file_field.html
|
|
213
193
|
microsys/templates/microsys/forms/file_input.html
|
|
214
194
|
microsys/templates/microsys/forms/filter_assets_head.html
|
|
215
195
|
microsys/templates/microsys/forms/filter_assets_scripts.html
|
|
@@ -218,10 +198,7 @@ microsys/templates/microsys/helpers/dynamic_modal_combined.html
|
|
|
218
198
|
microsys/templates/microsys/helpers/dynamic_modal_detail.html
|
|
219
199
|
microsys/templates/microsys/helpers/dynamic_modal_form.html
|
|
220
200
|
microsys/templates/microsys/helpers/dynamic_modal_list.html
|
|
221
|
-
microsys/templates/microsys/helpers/global_list.html
|
|
222
201
|
microsys/templates/microsys/helpers/micro_context_menu.html
|
|
223
|
-
microsys/templates/microsys/helpers/scan_link.html
|
|
224
|
-
microsys/templates/microsys/includes/dashboard.html
|
|
225
202
|
microsys/templates/microsys/includes/language_catalog_editor.html
|
|
226
203
|
microsys/templates/microsys/includes/language_previews.html
|
|
227
204
|
microsys/templates/microsys/includes/options.html
|
|
@@ -250,9 +227,9 @@ microsys/templates/microsys/tables/table.html
|
|
|
250
227
|
microsys/templates/microsys/users/grouped_permissions.html
|
|
251
228
|
microsys/templates/microsys/users/manage_users.html
|
|
252
229
|
microsys/templates/microsys/users/profile.html
|
|
230
|
+
microsys/templates/microsys/users/profile_image_widget.html
|
|
253
231
|
microsys/templates/microsys/users/user_detail_modal.html
|
|
254
232
|
microsys/templates/microsys/users/user_hub.html
|
|
255
|
-
microsys/templates/microsys/widgets/profile_image_widget.html
|
|
256
233
|
microsys/templates/registration/login.html
|
|
257
234
|
microsys/templates/registration/register.html
|
|
258
235
|
microsys/templates/registration/register_sent.html
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.1.6
|
|
@@ -67,10 +67,13 @@ class MicrosysConfig(AppConfig):
|
|
|
67
67
|
from django.conf import settings
|
|
68
68
|
|
|
69
69
|
# Check Middleware
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
new_path = 'microsys.middleware.MicrosysMiddleware'
|
|
71
|
+
old_path = 'microsys.middleware.ActivityLogMiddleware'
|
|
72
|
+
configured_middleware = getattr(settings, 'MIDDLEWARE', [])
|
|
73
|
+
|
|
74
|
+
if new_path not in configured_middleware and old_path not in configured_middleware:
|
|
72
75
|
warnings.warn(
|
|
73
|
-
f"\n⚠️ microsys: '{
|
|
76
|
+
f"\n⚠️ microsys: '{new_path}' not found in MIDDLEWARE.\n"
|
|
74
77
|
" Activity logging will not work. Run 'python manage.py microsys_check' for details.",
|
|
75
78
|
UserWarning
|
|
76
79
|
)
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from urllib.parse import urlsplit
|
|
2
|
+
|
|
1
3
|
from .constants import DEFAULT_TABLE_DENSITY, TABLE_DENSITY_CHOICES, TABLE_DENSITY_VALUES
|
|
2
4
|
from .utils import (
|
|
3
5
|
get_effective_allowed_themes,
|
|
@@ -19,6 +21,38 @@ from django.urls import reverse, NoReverseMatch
|
|
|
19
21
|
from .discovery import SYSTEM_ROUTE_META, build_sidebar_navigation
|
|
20
22
|
from .themes import get_theme_names, get_theme_options
|
|
21
23
|
|
|
24
|
+
|
|
25
|
+
def _normalize_runtime_path(value):
|
|
26
|
+
raw_value = str(value or '').strip()
|
|
27
|
+
if not raw_value:
|
|
28
|
+
return ''
|
|
29
|
+
parsed = urlsplit(raw_value)
|
|
30
|
+
path = str(parsed.path or raw_value).strip()
|
|
31
|
+
if not path.startswith('/'):
|
|
32
|
+
return ''
|
|
33
|
+
return path if path == '/' else path.rstrip('/')
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _should_hide_titlebar_for_public_index(request, final_config, titlebar_config):
|
|
37
|
+
user = getattr(request, 'user', None)
|
|
38
|
+
if not titlebar_config.get('hide_on_public_unauthenticated_index', False):
|
|
39
|
+
return False
|
|
40
|
+
if not final_config.get('public_root', False):
|
|
41
|
+
return False
|
|
42
|
+
if user and getattr(user, 'is_authenticated', False):
|
|
43
|
+
return False
|
|
44
|
+
|
|
45
|
+
current_path = _normalize_runtime_path(getattr(request, 'path', ''))
|
|
46
|
+
if not current_path:
|
|
47
|
+
return False
|
|
48
|
+
|
|
49
|
+
public_paths = {'/'}
|
|
50
|
+
anonymous_public_path = final_config.get('public_root_url') if final_config.get('public_root_split_enabled', False) else final_config.get('home_url')
|
|
51
|
+
target_path = _normalize_runtime_path(anonymous_public_path)
|
|
52
|
+
if target_path:
|
|
53
|
+
public_paths.add(target_path)
|
|
54
|
+
return current_path in public_paths
|
|
55
|
+
|
|
22
56
|
# Helper functions for Sidebar - KEPT PRIVATE
|
|
23
57
|
def _get_config_hash(config):
|
|
24
58
|
"""Generate a hash of the config for cache key."""
|
|
@@ -301,6 +335,11 @@ def microsys_context(request):
|
|
|
301
335
|
'extra_groups': context['sidebar_extra_groups'],
|
|
302
336
|
}
|
|
303
337
|
context['titlebar'] = final_config.get('appearance', {}).get('titlebar', final_config.get('titlebar', {}))
|
|
338
|
+
context['hide_titlebar_for_public_index'] = _should_hide_titlebar_for_public_index(
|
|
339
|
+
request,
|
|
340
|
+
final_config,
|
|
341
|
+
context['titlebar'],
|
|
342
|
+
)
|
|
304
343
|
|
|
305
344
|
return context
|
|
306
345
|
|
|
@@ -288,7 +288,7 @@ def _build_submit_actions(strings, submit_label, submit_icon, submit_class='btn
|
|
|
288
288
|
)
|
|
289
289
|
|
|
290
290
|
class ProfileImageWidget(forms.ClearableFileInput):
|
|
291
|
-
template_name = 'microsys/
|
|
291
|
+
template_name = 'microsys/users/profile_image_widget.html'
|
|
292
292
|
|
|
293
293
|
|
|
294
294
|
def _apply_autocomplete_attrs(form, mapping):
|
|
@@ -1283,6 +1283,10 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
1283
1283
|
required=False,
|
|
1284
1284
|
choices=(),
|
|
1285
1285
|
)
|
|
1286
|
+
public_root_url_discovered = forms.ChoiceField(
|
|
1287
|
+
required=False,
|
|
1288
|
+
choices=(),
|
|
1289
|
+
)
|
|
1286
1290
|
settings_import_file = forms.FileField(
|
|
1287
1291
|
required=False,
|
|
1288
1292
|
)
|
|
@@ -1403,6 +1407,10 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
1403
1407
|
required=False,
|
|
1404
1408
|
initial=True,
|
|
1405
1409
|
)
|
|
1410
|
+
titlebar_hide_on_public_unauthenticated_index = forms.BooleanField(
|
|
1411
|
+
required=False,
|
|
1412
|
+
initial=False,
|
|
1413
|
+
)
|
|
1406
1414
|
titlebar_home_shape = forms.ChoiceField(
|
|
1407
1415
|
required=False,
|
|
1408
1416
|
choices=TITLEBAR_HOME_SHAPE_CHOICES,
|
|
@@ -1436,6 +1444,14 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
1436
1444
|
required=False,
|
|
1437
1445
|
initial=False,
|
|
1438
1446
|
)
|
|
1447
|
+
public_root_split_enabled = forms.BooleanField(
|
|
1448
|
+
required=False,
|
|
1449
|
+
initial=False,
|
|
1450
|
+
)
|
|
1451
|
+
public_root_url = forms.CharField(
|
|
1452
|
+
required=False,
|
|
1453
|
+
max_length=255,
|
|
1454
|
+
)
|
|
1439
1455
|
public_registration_enabled = forms.BooleanField(
|
|
1440
1456
|
required=False,
|
|
1441
1457
|
initial=False,
|
|
@@ -1464,6 +1480,8 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
1464
1480
|
'default_table_density',
|
|
1465
1481
|
'email_2fa',
|
|
1466
1482
|
'public_root',
|
|
1483
|
+
'public_root_split_enabled',
|
|
1484
|
+
'public_root_url',
|
|
1467
1485
|
'public_registration_enabled',
|
|
1468
1486
|
'registration_activation_mode',
|
|
1469
1487
|
'registration_throttle_enabled',
|
|
@@ -1525,17 +1543,45 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
1525
1543
|
self.fields['translations_override'].label = s.get('form_sys_translations', "Translation overrides")
|
|
1526
1544
|
self.fields['home_url'].required = False
|
|
1527
1545
|
self.fields['home_url'].label = s.get('form_sys_home_url', "Home URL")
|
|
1528
|
-
self.fields['home_url'].help_text = s.get(
|
|
1546
|
+
self.fields['home_url'].help_text = s.get(
|
|
1547
|
+
'help_sys_home_url',
|
|
1548
|
+
'Choose the main Home URL. It remains the authenticated home destination and login redirect even when anonymous public-root traffic is split elsewhere.',
|
|
1549
|
+
)
|
|
1529
1550
|
self.fields['home_url'].widget.attrs.update({
|
|
1530
1551
|
'class': 'form-control glass-input',
|
|
1531
1552
|
'dir': 'ltr',
|
|
1532
1553
|
'placeholder': DEFAULT_HOME_URL,
|
|
1533
1554
|
})
|
|
1534
1555
|
self.fields['home_url_discovered'].label = s.get('form_sys_home_url_discovered', "Select from discovered pages")
|
|
1535
|
-
self.fields['home_url_discovered'].help_text = s.get(
|
|
1556
|
+
self.fields['home_url_discovered'].help_text = s.get(
|
|
1557
|
+
'help_sys_home_url_discovered',
|
|
1558
|
+
'Optional: select a discovered page to auto-fill the Home URL, or leave it blank and enter a custom URL.',
|
|
1559
|
+
)
|
|
1536
1560
|
self.fields['home_url_discovered'].widget.attrs.update({
|
|
1537
1561
|
'class': 'form-select glass-input',
|
|
1538
1562
|
})
|
|
1563
|
+
self.fields['public_root_url'].required = False
|
|
1564
|
+
self.fields['public_root_url'].label = s.get('form_sys_public_root_url', 'Anonymous Public Root URL')
|
|
1565
|
+
self.fields['public_root_url'].help_text = s.get(
|
|
1566
|
+
'help_sys_public_root_url',
|
|
1567
|
+
'Optional: when separate public-root mode is enabled, anonymous users landing on `/` are redirected here instead of the main Home URL.',
|
|
1568
|
+
)
|
|
1569
|
+
self.fields['public_root_url'].widget.attrs.update({
|
|
1570
|
+
'class': 'form-control glass-input',
|
|
1571
|
+
'dir': 'ltr',
|
|
1572
|
+
'placeholder': '/',
|
|
1573
|
+
})
|
|
1574
|
+
self.fields['public_root_url_discovered'].label = s.get(
|
|
1575
|
+
'form_sys_public_root_url_discovered',
|
|
1576
|
+
'Choose anonymous public root from discovered pages',
|
|
1577
|
+
)
|
|
1578
|
+
self.fields['public_root_url_discovered'].help_text = s.get(
|
|
1579
|
+
'help_sys_public_root_url_discovered',
|
|
1580
|
+
'Optional: select a discovered page to auto-fill the anonymous public-root destination, or leave it blank and enter a custom URL.',
|
|
1581
|
+
)
|
|
1582
|
+
self.fields['public_root_url_discovered'].widget.attrs.update({
|
|
1583
|
+
'class': 'form-select glass-input',
|
|
1584
|
+
})
|
|
1539
1585
|
self.fields['default_language'].label = s.get('form_sys_default_lang', "Default Language")
|
|
1540
1586
|
self.fields['default_theme'].label = s.get('form_sys_default_theme', "Default Theme")
|
|
1541
1587
|
self.fields['allowed_themes'].label = s.get('form_sys_allowed_themes', 'Allowed themes')
|
|
@@ -1617,6 +1663,10 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
1617
1663
|
self.fields['titlebar_show_title'].label = s.get('form_sys_titlebar_show_title', 'Show titlebar title')
|
|
1618
1664
|
self.fields['titlebar_show_logo'].label = s.get('form_sys_titlebar_show_logo', 'Show titlebar logo')
|
|
1619
1665
|
self.fields['titlebar_show_home_button'].label = s.get('form_sys_titlebar_show_home_button', 'Show titlebar home button')
|
|
1666
|
+
self.fields['titlebar_hide_on_public_unauthenticated_index'].label = s.get(
|
|
1667
|
+
'form_sys_titlebar_hide_on_public_unauthenticated_index',
|
|
1668
|
+
'Hide titlebar on anonymous public home/index',
|
|
1669
|
+
)
|
|
1620
1670
|
self.fields['titlebar_home_shape'].label = s.get('form_sys_titlebar_home_shape', 'Home button shape')
|
|
1621
1671
|
self.fields['titlebar_title_align'].label = s.get('form_sys_titlebar_title_align', 'Title alignment')
|
|
1622
1672
|
self.fields['titlebar_title_size'].label = s.get('form_sys_titlebar_title_size', 'Title size')
|
|
@@ -1634,6 +1684,10 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
1634
1684
|
'help_sys_titlebar_show_home_button',
|
|
1635
1685
|
'Show the quick Home button in the titlebar.',
|
|
1636
1686
|
)
|
|
1687
|
+
self.fields['titlebar_hide_on_public_unauthenticated_index'].help_text = s.get(
|
|
1688
|
+
'help_sys_titlebar_hide_on_public_unauthenticated_index',
|
|
1689
|
+
'Hide the titlebar when an anonymous user opens the public root/home page.',
|
|
1690
|
+
)
|
|
1637
1691
|
self.fields['titlebar_home_shape'].choices = (
|
|
1638
1692
|
('circle', s.get('titlebar_home_shape_circle', 'Circle')),
|
|
1639
1693
|
('square', s.get('titlebar_home_shape_square', 'Square')),
|
|
@@ -1687,6 +1741,14 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
1687
1741
|
'help_sys_public_root',
|
|
1688
1742
|
'Allow anonymous (non-logged-in) users to access the root URL (/). When enabled, the system will not force-redirect to login.',
|
|
1689
1743
|
)
|
|
1744
|
+
self.fields['public_root_split_enabled'].label = s.get(
|
|
1745
|
+
'form_sys_public_root_split_enabled',
|
|
1746
|
+
'Separate anonymous public root from Home URL',
|
|
1747
|
+
)
|
|
1748
|
+
self.fields['public_root_split_enabled'].help_text = s.get(
|
|
1749
|
+
'help_sys_public_root_split_enabled',
|
|
1750
|
+
'When enabled, anonymous users can be redirected to a separate Public Root URL while authenticated users still use the main Home URL.',
|
|
1751
|
+
)
|
|
1690
1752
|
email_status = get_email_service_status()
|
|
1691
1753
|
smtp_label = s.get('form_sys_email_status_ready', 'ready') if email_status.get('available') else s.get('form_sys_email_status_not_ready', 'not ready')
|
|
1692
1754
|
self.fields['public_registration_enabled'].label = s.get('form_sys_public_registration', 'Enable Public Registration')
|
|
@@ -1918,6 +1980,13 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
1918
1980
|
or DEFAULT_HOME_URL
|
|
1919
1981
|
)
|
|
1920
1982
|
self.initial['home_url'] = current_home_url
|
|
1983
|
+
instance_public_root_url = str(getattr(self.instance, 'public_root_url', '') or '').strip()
|
|
1984
|
+
current_public_root_url = (
|
|
1985
|
+
instance_public_root_url
|
|
1986
|
+
or config.get('public_root_url', '')
|
|
1987
|
+
or project_config.get('public_root_url', '')
|
|
1988
|
+
)
|
|
1989
|
+
self.initial['public_root_url'] = current_public_root_url
|
|
1921
1990
|
|
|
1922
1991
|
if self.instance and self.instance.pk:
|
|
1923
1992
|
if isinstance(self.instance.languages, dict):
|
|
@@ -1956,6 +2025,13 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
1956
2025
|
getattr(self.instance, 'public_root', False)
|
|
1957
2026
|
or config.get('public_root', False)
|
|
1958
2027
|
)
|
|
2028
|
+
self.initial['public_root_split_enabled'] = bool(
|
|
2029
|
+
(
|
|
2030
|
+
config.get('public_root_split_enabled', False)
|
|
2031
|
+
if (not getattr(self.instance, 'pk', None) and not getattr(self.instance, 'is_configured', False))
|
|
2032
|
+
else getattr(self.instance, 'public_root_split_enabled', config.get('public_root_split_enabled', False))
|
|
2033
|
+
)
|
|
2034
|
+
)
|
|
1959
2035
|
self.initial['public_registration_enabled'] = bool(
|
|
1960
2036
|
getattr(self.instance, 'public_registration_enabled', False)
|
|
1961
2037
|
or config.get('public_registration_enabled', False)
|
|
@@ -2016,6 +2092,9 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
2016
2092
|
self.initial['titlebar_show_title'] = bool(initial_titlebar_config.get('show_title', True))
|
|
2017
2093
|
self.initial['titlebar_show_logo'] = bool(initial_titlebar_config.get('show_logo', True))
|
|
2018
2094
|
self.initial['titlebar_show_home_button'] = bool(initial_titlebar_config.get('show_home_button', True))
|
|
2095
|
+
self.initial['titlebar_hide_on_public_unauthenticated_index'] = bool(
|
|
2096
|
+
initial_titlebar_config.get('hide_on_public_unauthenticated_index', False)
|
|
2097
|
+
)
|
|
2019
2098
|
self.initial['titlebar_home_shape'] = initial_titlebar_config.get('home_shape', 'circle')
|
|
2020
2099
|
self.initial['titlebar_title_align'] = initial_titlebar_config.get('title_align', 'start')
|
|
2021
2100
|
self.initial['titlebar_title_size'] = initial_titlebar_config.get('title_size', 'md')
|
|
@@ -2054,6 +2133,9 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
2054
2133
|
self.fields['home_url_discovered'].choices = home_url_choices
|
|
2055
2134
|
self.fields['home_url_discovered'].widget.option_meta = home_url_option_meta
|
|
2056
2135
|
self.initial['home_url_discovered'] = current_home_url if current_home_url in seen_home_urls else ''
|
|
2136
|
+
self.fields['public_root_url_discovered'].choices = home_url_choices
|
|
2137
|
+
self.fields['public_root_url_discovered'].widget.option_meta = home_url_option_meta
|
|
2138
|
+
self.initial['public_root_url_discovered'] = current_public_root_url if current_public_root_url in seen_home_urls else ''
|
|
2057
2139
|
|
|
2058
2140
|
try:
|
|
2059
2141
|
initial_languages = json.loads(self.initial.get('languages') or '{}')
|
|
@@ -2252,12 +2334,49 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
2252
2334
|
f"</div>"
|
|
2253
2335
|
),
|
|
2254
2336
|
HTML("</div>"),
|
|
2255
|
-
HTML(f"<h6 class='fw-bold my-3'>{s.get('access_security_settings_title', 'Access & Security')}</h6>"),
|
|
2337
|
+
HTML(f"<h6 class='fw-bold my-3'>{s.get('access_security_settings_title', s.get('system_settings_security', 'Access & Security'))}</h6>"),
|
|
2256
2338
|
Row(
|
|
2257
2339
|
build_settings_toggle_field(self, 'public_root', css_class='col-lg-6'),
|
|
2258
2340
|
build_settings_toggle_field(self, 'email_2fa', css_class='col-lg-6'),
|
|
2259
2341
|
css_class='g-3 mb-3',
|
|
2260
2342
|
),
|
|
2343
|
+
HTML(f"<h6 class='fw-bold my-3'>{s.get('root_home_settings_title', 'Home & Public Root Destinations')}</h6>"),
|
|
2344
|
+
Row(
|
|
2345
|
+
Div(Field('home_url_discovered'), css_class='col-lg-6'),
|
|
2346
|
+
Div(Field('home_url', dir='ltr'), css_class='col-lg-6'),
|
|
2347
|
+
),
|
|
2348
|
+
Row(
|
|
2349
|
+
build_settings_toggle_field(
|
|
2350
|
+
self,
|
|
2351
|
+
'public_root_split_enabled',
|
|
2352
|
+
css_class=f"col-lg-12 ms-public-root-dependent{' d-none' if not self.initial.get('public_root', False) else ''}",
|
|
2353
|
+
attrs={
|
|
2354
|
+
'data_public_root_dependent': 'true',
|
|
2355
|
+
'aria_hidden': 'false' if self.initial.get('public_root', False) else 'true',
|
|
2356
|
+
},
|
|
2357
|
+
),
|
|
2358
|
+
css_class='g-3 mb-3',
|
|
2359
|
+
),
|
|
2360
|
+
Row(
|
|
2361
|
+
Div(
|
|
2362
|
+
Field('public_root_url_discovered'),
|
|
2363
|
+
css_class=(
|
|
2364
|
+
"col-lg-6 ms-public-root-split-dependent"
|
|
2365
|
+
f"{' d-none' if not (self.initial.get('public_root', False) and self.initial.get('public_root_split_enabled', False)) else ''}"
|
|
2366
|
+
),
|
|
2367
|
+
data_public_root_split_dependent='true',
|
|
2368
|
+
aria_hidden='false' if (self.initial.get('public_root', False) and self.initial.get('public_root_split_enabled', False)) else 'true',
|
|
2369
|
+
),
|
|
2370
|
+
Div(
|
|
2371
|
+
Field('public_root_url', dir='ltr'),
|
|
2372
|
+
css_class=(
|
|
2373
|
+
"col-lg-6 ms-public-root-split-dependent"
|
|
2374
|
+
f"{' d-none' if not (self.initial.get('public_root', False) and self.initial.get('public_root_split_enabled', False)) else ''}"
|
|
2375
|
+
),
|
|
2376
|
+
data_public_root_split_dependent='true',
|
|
2377
|
+
aria_hidden='false' if (self.initial.get('public_root', False) and self.initial.get('public_root_split_enabled', False)) else 'true',
|
|
2378
|
+
),
|
|
2379
|
+
),
|
|
2261
2380
|
Row(
|
|
2262
2381
|
build_settings_toggle_field(self, 'public_registration_enabled', css_class='col-lg-12'),
|
|
2263
2382
|
css_class='g-3 mb-3',
|
|
@@ -2284,10 +2403,6 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
2284
2403
|
),
|
|
2285
2404
|
Div(
|
|
2286
2405
|
HTML(f"<div class='mb-3'><span class='badge rounded-pill text-bg-primary'>{s.get('system_setup_step4', 'Step 4: Sidebar')}</span></div>"),
|
|
2287
|
-
Row(
|
|
2288
|
-
Div(Field('home_url_discovered'), css_class='col-lg-6'),
|
|
2289
|
-
Div(Field('home_url', dir='ltr'), css_class='col-lg-6'),
|
|
2290
|
-
),
|
|
2291
2406
|
Row(
|
|
2292
2407
|
build_settings_toggle_field(self, 'sidebar_enabled', css_class='col-lg-12'),
|
|
2293
2408
|
css_class='g-3 mb-3',
|
|
@@ -2346,9 +2461,10 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
2346
2461
|
),
|
|
2347
2462
|
HTML(f"<h6 class='fw-bold my-3'>{s.get('titlebar_settings_title', 'Titlebar Settings')}</h6>"),
|
|
2348
2463
|
Row(
|
|
2349
|
-
build_settings_toggle_field(self, 'titlebar_show_title', css_class='col-lg-
|
|
2350
|
-
build_settings_toggle_field(self, 'titlebar_show_logo', css_class='col-lg-
|
|
2351
|
-
build_settings_toggle_field(self, 'titlebar_show_home_button', css_class='col-lg-
|
|
2464
|
+
build_settings_toggle_field(self, 'titlebar_show_title', css_class='col-lg-6 col-xl-3'),
|
|
2465
|
+
build_settings_toggle_field(self, 'titlebar_show_logo', css_class='col-lg-6 col-xl-3'),
|
|
2466
|
+
build_settings_toggle_field(self, 'titlebar_show_home_button', css_class='col-lg-6 col-xl-3'),
|
|
2467
|
+
build_settings_toggle_field(self, 'titlebar_hide_on_public_unauthenticated_index', css_class='col-lg-6 col-xl-3'),
|
|
2352
2468
|
css_class='g-3 mb-3'
|
|
2353
2469
|
),
|
|
2354
2470
|
Row(
|
|
@@ -2502,8 +2618,37 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
2502
2618
|
def clean_home_url(self):
|
|
2503
2619
|
value = str(self.cleaned_data.get('home_url') or '').strip()
|
|
2504
2620
|
discovered_value = str(self.cleaned_data.get('home_url_discovered') or '').strip()
|
|
2621
|
+
if self.is_bound and 'home_url' not in self.data and 'home_url_discovered' not in self.data:
|
|
2622
|
+
return (
|
|
2623
|
+
str(getattr(self.instance, 'home_url', '') or '').strip()
|
|
2624
|
+
or str(self.initial.get('home_url') or '').strip()
|
|
2625
|
+
or getattr(settings, 'MICROSYS_CONFIG', {}).get('home_url')
|
|
2626
|
+
or DEFAULT_HOME_URL
|
|
2627
|
+
)
|
|
2505
2628
|
return value or discovered_value or getattr(settings, 'MICROSYS_CONFIG', {}).get('home_url') or DEFAULT_HOME_URL
|
|
2506
2629
|
|
|
2630
|
+
def clean_public_root_url(self):
|
|
2631
|
+
value = str(self.cleaned_data.get('public_root_url') or '').strip()
|
|
2632
|
+
discovered_value = str(self.cleaned_data.get('public_root_url_discovered') or '').strip()
|
|
2633
|
+
home_url = str(self.cleaned_data.get('home_url') or '').strip()
|
|
2634
|
+
if self.is_bound and 'public_root_url' not in self.data and 'public_root_url_discovered' not in self.data:
|
|
2635
|
+
return (
|
|
2636
|
+
str(getattr(self.instance, 'public_root_url', '') or '').strip()
|
|
2637
|
+
or str(self.initial.get('public_root_url') or '').strip()
|
|
2638
|
+
or str(getattr(settings, 'MICROSYS_CONFIG', {}).get('public_root_url') or '').strip()
|
|
2639
|
+
or home_url
|
|
2640
|
+
or getattr(settings, 'MICROSYS_CONFIG', {}).get('home_url')
|
|
2641
|
+
or DEFAULT_HOME_URL
|
|
2642
|
+
)
|
|
2643
|
+
return (
|
|
2644
|
+
value
|
|
2645
|
+
or discovered_value
|
|
2646
|
+
or str(getattr(settings, 'MICROSYS_CONFIG', {}).get('public_root_url') or '').strip()
|
|
2647
|
+
or home_url
|
|
2648
|
+
or getattr(settings, 'MICROSYS_CONFIG', {}).get('home_url')
|
|
2649
|
+
or DEFAULT_HOME_URL
|
|
2650
|
+
)
|
|
2651
|
+
|
|
2507
2652
|
def clean_sidebar_config(self):
|
|
2508
2653
|
from microsys.discovery import sanitize_sidebar_config
|
|
2509
2654
|
|
|
@@ -2581,6 +2726,7 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
2581
2726
|
'languages',
|
|
2582
2727
|
'translations_override',
|
|
2583
2728
|
'home_url',
|
|
2729
|
+
'public_root_url',
|
|
2584
2730
|
'default_language',
|
|
2585
2731
|
'default_theme',
|
|
2586
2732
|
'allowed_themes',
|
|
@@ -2589,6 +2735,7 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
2589
2735
|
'default_table_density',
|
|
2590
2736
|
'email_2fa',
|
|
2591
2737
|
'public_root',
|
|
2738
|
+
'public_root_split_enabled',
|
|
2592
2739
|
'public_registration_enabled',
|
|
2593
2740
|
'registration_activation_mode',
|
|
2594
2741
|
'registration_throttle_enabled',
|
|
@@ -2627,6 +2774,9 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
2627
2774
|
cleaned['titlebar_show_title'] = bool(titlebar.get('show_title', True))
|
|
2628
2775
|
cleaned['titlebar_show_logo'] = bool(titlebar.get('show_logo', True))
|
|
2629
2776
|
cleaned['titlebar_show_home_button'] = bool(titlebar.get('show_home_button', True))
|
|
2777
|
+
cleaned['titlebar_hide_on_public_unauthenticated_index'] = bool(
|
|
2778
|
+
titlebar.get('hide_on_public_unauthenticated_index', False)
|
|
2779
|
+
)
|
|
2630
2780
|
cleaned['titlebar_home_shape'] = titlebar.get('home_shape', 'circle')
|
|
2631
2781
|
cleaned['titlebar_title_align'] = titlebar.get('title_align', 'start')
|
|
2632
2782
|
cleaned['titlebar_title_size'] = titlebar.get('title_size', 'md')
|
|
@@ -2646,6 +2796,9 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
2646
2796
|
if default_language not in languages:
|
|
2647
2797
|
fallback_language = 'en' if 'en' in languages else next(iter(languages), 'en')
|
|
2648
2798
|
cleaned['default_language'] = fallback_language
|
|
2799
|
+
cleaned['public_root_split_enabled'] = bool(cleaned.get('public_root_split_enabled', False))
|
|
2800
|
+
if not cleaned.get('public_root', False):
|
|
2801
|
+
cleaned['public_root_split_enabled'] = False
|
|
2649
2802
|
|
|
2650
2803
|
sidebar = cleaned.get('sidebar_config')
|
|
2651
2804
|
if isinstance(sidebar, dict):
|
|
@@ -2729,6 +2882,9 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
2729
2882
|
'show_title': bool(cleaned.get('titlebar_show_title', True)),
|
|
2730
2883
|
'show_logo': bool(cleaned.get('titlebar_show_logo', True)),
|
|
2731
2884
|
'show_home_button': bool(cleaned.get('titlebar_show_home_button', True)),
|
|
2885
|
+
'hide_on_public_unauthenticated_index': bool(
|
|
2886
|
+
cleaned.get('titlebar_hide_on_public_unauthenticated_index', False)
|
|
2887
|
+
),
|
|
2732
2888
|
'home_shape': cleaned.get('titlebar_home_shape', 'circle'),
|
|
2733
2889
|
'title_align': cleaned.get('titlebar_title_align', 'start'),
|
|
2734
2890
|
'title_size': cleaned.get('titlebar_title_size', 'md'),
|
|
@@ -2764,6 +2920,8 @@ class SystemSettingsForm(forms.ModelForm):
|
|
|
2764
2920
|
instance.allow_user_theme_override = bool(self.cleaned_data.get('allow_user_theme_override', True))
|
|
2765
2921
|
instance.allow_user_language_override = bool(self.cleaned_data.get('allow_user_language_override', True))
|
|
2766
2922
|
instance.titlebar_config = self.cleaned_data.get('titlebar_config', default_titlebar_config())
|
|
2923
|
+
instance.public_root_split_enabled = bool(self.cleaned_data.get('public_root_split_enabled', False))
|
|
2924
|
+
instance.public_root_url = str(self.cleaned_data.get('public_root_url') or '').strip()
|
|
2767
2925
|
imported = getattr(self, '_imported_settings', {}) or {}
|
|
2768
2926
|
if imported.get('logo') and not self.files.get('logo'):
|
|
2769
2927
|
instance.logo = str(imported.get('logo'))
|
{django_microsys-2.1.4 → django_microsys-2.1.6}/microsys/management/commands/microsys_check.py
RENAMED
|
@@ -71,9 +71,10 @@ microsys_settings(globals())"""
|
|
|
71
71
|
# ─────────────────────────────────────────────────
|
|
72
72
|
# Check MIDDLEWARE
|
|
73
73
|
# ─────────────────────────────────────────────────
|
|
74
|
-
|
|
74
|
+
new_path = 'microsys.middleware.MicrosysMiddleware'
|
|
75
|
+
old_path = 'microsys.middleware.ActivityLogMiddleware'
|
|
75
76
|
self.stdout.write('\n📋 MIDDLEWARE: ', ending='')
|
|
76
|
-
if
|
|
77
|
+
if new_path in settings.MIDDLEWARE or old_path in settings.MIDDLEWARE:
|
|
77
78
|
self.stdout.write(self.style.SUCCESS('✓ OK'))
|
|
78
79
|
else:
|
|
79
80
|
self.stdout.write(self.style.ERROR('✗ MISSING'))
|