diff --git a/Reskreen/settings.py b/Reskreen/settings.py index 2445a91..509fd3f 100644 --- a/Reskreen/settings.py +++ b/Reskreen/settings.py @@ -11,6 +11,7 @@ https://docs.djangoproject.com/en/4.0/ref/settings/ """ from pathlib import Path +import os # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent @@ -25,6 +26,8 @@ SECRET_KEY = 'django-insecure-j4jd&+4j^t_=@zr(#q@n!8e*58vkql6&_6w-t14ju8pw%ei%^s # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True + + cfg_dev_mode = True ALLOWED_HOSTS = ["rh.ambulance-clerc.ch"] @@ -50,10 +53,54 @@ INSTALLED_APPS = [ 'django.contrib.admin', 'carnet_rouge.apps.CarnetRougeConfig', #'nextcloud.apps.NextcloudConfig', - 'tinymce', + 'django_quill', + 'django_summernote', ] + +MEDIA_URL = '/media/' +MEDIA_ROOT = os.path.join(BASE_DIR, 'media/') +X_FRAME_OPTIONS = 'SAMEORIGIN' + +MAX_IMAGE_PIXELS = int(1024 * 1024 * 1024 // 4 // 3) +SUMMERNOTE_THEME = 'bs4' +SUMMERNOTE_CONFIG = { + # Using SummernoteWidget - iframe mode, default + 'iframe': True, + 'attachment_filesize_limit': 2621440 , + + + 'summernote': { + # As an example, using Summernote Air-mode + 'airMode': False, + + + # Change editor size + 'width': '100%', + 'height': '480', + + # Use proper language setting automatically (default) + 'lang': "fr-FR", + + # Toolbar customization + # https://summernote.org/deep-dive/#custom-toolbar-popover + 'toolbar': [ + ['view', ['undo','redo','fullscreen', 'codeview', 'help']], + ['fontfamily',['fontsize']], + ['font', ['bold', 'italic', 'underline', 'superscript', 'subscript', 'clear']], + ['color', ['forecolor','backcolor']], + ['para', ['ul', 'ol', 'paragraph']], + ['table', ['table']], + ['insert', ['link', 'picture', 'video', 'hr']], + ['style', ['style']], + ], + } +} + +DATA_UPLOAD_MAX_NUMBER_FIELDS = 2500 + + MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', @@ -293,9 +340,10 @@ JAZZMIN_SETTINGS = { "language_chooser": False, } - if cfg_dev_mode: NEXTCLOUD_HOST = "cloud.ambulance-clerc.ch" else: NEXTCLOUD_HOST = "cloud.ambulance-clerc.ch" NEXTCLOUD_USER_DEFAULT_PASSWORD = "Mc144*1870" + + diff --git a/carnet_rouge/admin.py b/carnet_rouge/admin.py index f8d92d6..5a83353 100644 --- a/carnet_rouge/admin.py +++ b/carnet_rouge/admin.py @@ -7,6 +7,7 @@ from django.contrib.admin import SimpleListFilter from django.utils.encoding import force_str from django.utils.translation import gettext_lazy as _ +from django_summernote.admin import SummernoteModelAdmin class DefaultListFilter(SimpleListFilter): all_value = '_all' @@ -49,7 +50,8 @@ class StatusFilter(DefaultListFilter): return 1 @admin.register(cr_Message) -class cr_Message_Admin(admin.ModelAdmin): +class cr_Message_Admin(SummernoteModelAdmin): + summernote_fields = ('sText',) class Meta: verbose_name = 'Message carnet rouge' verbose_name_plural = 'Messages carnet rouge' diff --git a/carnet_rouge/models.py b/carnet_rouge/models.py index 6dfc2b8..07e7700 100644 --- a/carnet_rouge/models.py +++ b/carnet_rouge/models.py @@ -30,7 +30,7 @@ class cr_Message(models.Model): sReadedUsers = models.TextField("Liste des utilisateurs ayant lu", blank=True) DestGroup = models.ForeignKey(Group, on_delete=models.DO_NOTHING) sTitle = models.CharField("Titre", max_length=120) - sText = QuillField ("Corps de texte") + sText = models.TextField ("Corps de texte") dtValidityFrom = models.DateField("Validité depuis",default=timezone.now) dtValidityTo = models.DateField("Validité jusqu'à", blank=True, null=True) bEnabled = models.BooleanField("Actif", default=True) diff --git a/carnet_rouge/templates/carnet_rouge/cr_message.html b/carnet_rouge/templates/carnet_rouge/cr_message.html index fa10e78..88cf27a 100644 --- a/carnet_rouge/templates/carnet_rouge/cr_message.html +++ b/carnet_rouge/templates/carnet_rouge/cr_message.html @@ -1,7 +1,7 @@