From 12ee033b076dfedf344488d9bb934589bd86bcdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Antoine=20Dupr=C3=A9?= Date: Mon, 1 Apr 2024 10:04:49 +0200 Subject: [PATCH 1/2] =?UTF-8?q?=E2=9C=A8=20[Feature]=20Add=20local=20image?= =?UTF-8?q?=20upload=20into=20flat=20pages=20content=20(ref=20#3552)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/changelog.rst | 1 + geotrek/flatpages/tests/test_views.py | 26 ++++++++++++++++++++++++++ geotrek/flatpages/urls.py | 8 ++++++++ geotrek/flatpages/views.py | 17 +++++++++++++++++ geotrek/flatpages/widgets.py | 6 +++--- geotrek/urls.py | 2 ++ 6 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 geotrek/flatpages/tests/test_views.py create mode 100644 geotrek/flatpages/urls.py create mode 100644 geotrek/flatpages/views.py diff --git a/docs/changelog.rst b/docs/changelog.rst index 03a4ae4058..95d8d93dd6 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -9,6 +9,7 @@ CHANGELOG - Add new menu headers and flat pages with tree hierarchies - Add styling and embedding tools for FlatPages content (refs #3921, #3922, #4019) +- Add local image upload into content of flat pages (ref #3552) **Bug fixes** diff --git a/geotrek/flatpages/tests/test_views.py b/geotrek/flatpages/tests/test_views.py new file mode 100644 index 0000000000..50260e42f2 --- /dev/null +++ b/geotrek/flatpages/tests/test_views.py @@ -0,0 +1,26 @@ +from tempfile import TemporaryDirectory + +from django.test import TestCase +from django.urls import reverse +from geotrek.common.utils.testdata import get_dummy_uploaded_image +from mapentity.tests import SuperUserFactory + + +class TinyMCEUploadViewTestCase(TestCase): + + def test_tinymce_upload(self): + user = SuperUserFactory() + self.client.force_login(user) + file = get_dummy_uploaded_image("tinymce_uploaded_image.png") + + with TemporaryDirectory() as tmp_dir: + with self.settings(MEDIA_ROOT=tmp_dir): + url = reverse("flatpages:tinymce_upload") + response = self.client.post(url, data={"file": file}) + + self.assertEqual(response.status_code, 200) + data = response.json() + self.assertIn("location", data) + location = data["location"] + self.assertTrue(location.startswith("http://") or location.startswith("https://")) + self.assertIn("tinymce_uploaded_image", location) diff --git a/geotrek/flatpages/urls.py b/geotrek/flatpages/urls.py new file mode 100644 index 0000000000..831047690e --- /dev/null +++ b/geotrek/flatpages/urls.py @@ -0,0 +1,8 @@ +from django.urls import path +from geotrek.flatpages.views import tinymce_upload + +app_name = 'flatpages' + +urlpatterns = [ + path('tinymce/upload/', tinymce_upload, name="tinymce_upload"), +] diff --git a/geotrek/flatpages/views.py b/geotrek/flatpages/views.py new file mode 100644 index 0000000000..5cade94c6a --- /dev/null +++ b/geotrek/flatpages/views.py @@ -0,0 +1,17 @@ +from uuid import uuid4 + +from django.contrib.auth.decorators import login_required +from django.core.files.storage import default_storage +from django.http import JsonResponse +from django.views.decorators.csrf import csrf_exempt +from django.views.decorators.http import require_http_methods + + +@require_http_methods(["POST"]) +@csrf_exempt +@login_required +def tinymce_upload(request): + file = request.FILES.get('file') + filename = f"flatpages/content/upload/{uuid4()}/{str(file)}" + default_storage.save(filename, file) + return JsonResponse({"location": request.build_absolute_uri(default_storage.url(filename))}) diff --git a/geotrek/flatpages/widgets.py b/geotrek/flatpages/widgets.py index 8dbdc66c3a..f1776ab1d6 100644 --- a/geotrek/flatpages/widgets.py +++ b/geotrek/flatpages/widgets.py @@ -21,10 +21,10 @@ "menubar": False, 'image_title': False, 'image_caption': True, - 'automatic_uploads': False, + 'automatic_uploads': True, 'convert_urls': False, - 'file_picker_types': None, - 'images_upload_url': None, + 'file_picker_types': "image media", + 'images_upload_url': "/flatpages/tinymce/upload/", "toolbar": 'undo redo | styleselect | blockquote | bold italic forecolor |' 'alignleft aligncenter alignright alignjustify | bullist numlist | link image media |' 'button-link suggestions | removeformat visualblocks code | wordcount | help', diff --git a/geotrek/urls.py b/geotrek/urls.py index 93a7212e70..c1633c2bcf 100755 --- a/geotrek/urls.py +++ b/geotrek/urls.py @@ -59,6 +59,8 @@ urlpatterns.append(path('', include('geotrek.feedback.urls'))) if 'geotrek.sensitivity' in settings.INSTALLED_APPS: urlpatterns.append(path('', include('geotrek.sensitivity.urls'))) +if 'geotrek.flatpages' in settings.INSTALLED_APPS: + urlpatterns.append(path('flatpages/', include('geotrek.flatpages.urls'))) if 'geotrek.api' in settings.INSTALLED_APPS: urlpatterns.append(path('', include('geotrek.api.v2.urls'))) if 'geotrek.flatpages' in settings.INSTALLED_APPS and 'geotrek.trekking' in settings.INSTALLED_APPS and 'geotrek.tourism' in settings.INSTALLED_APPS: From a4b03d438e6c2feeff6ab6e929b19a400b8be3cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Antoine=20Dupr=C3=A9?= Date: Tue, 2 Apr 2024 17:47:08 +0200 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=92=A5=20Add=20WARNING=20section=20in?= =?UTF-8?q?=20changelog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/changelog.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index 95d8d93dd6..c743e3f055 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,10 @@ CHANGELOG 2.103.2+dev (XXXX-XX-XX) ------------------------ +**WARNING!** + +This version breaks the flat pages API. Upgrade first to Geotrek-rando 3.19.0 (simultaneously released on April 2024) for a smooth transition. + **Features** - Add new menu headers and flat pages with tree hierarchies