Skip to content

Commit 6175d94

Browse files
Merge pull request #4024 from GeotrekCE/feat_add_tinymce_upload_image
Add local image upload into flat pages content (ref #3552)
2 parents a66550d + a4b03d4 commit 6175d94

6 files changed

Lines changed: 61 additions & 3 deletions

File tree

docs/changelog.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,15 @@ CHANGELOG
55
2.103.2+dev (XXXX-XX-XX)
66
------------------------
77

8+
**WARNING!**
9+
10+
This version breaks the flat pages API. Upgrade first to Geotrek-rando 3.19.0 (simultaneously released on April 2024) for a smooth transition.
11+
812
**Features**
913

1014
- Add new menu headers and flat pages with tree hierarchies
1115
- Add styling and embedding tools for FlatPages content (refs #3921, #3922, #4019)
16+
- Add local image upload into content of flat pages (ref #3552)
1217

1318
**Bug fixes**
1419

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from tempfile import TemporaryDirectory
2+
3+
from django.test import TestCase
4+
from django.urls import reverse
5+
from geotrek.common.utils.testdata import get_dummy_uploaded_image
6+
from mapentity.tests import SuperUserFactory
7+
8+
9+
class TinyMCEUploadViewTestCase(TestCase):
10+
11+
def test_tinymce_upload(self):
12+
user = SuperUserFactory()
13+
self.client.force_login(user)
14+
file = get_dummy_uploaded_image("tinymce_uploaded_image.png")
15+
16+
with TemporaryDirectory() as tmp_dir:
17+
with self.settings(MEDIA_ROOT=tmp_dir):
18+
url = reverse("flatpages:tinymce_upload")
19+
response = self.client.post(url, data={"file": file})
20+
21+
self.assertEqual(response.status_code, 200)
22+
data = response.json()
23+
self.assertIn("location", data)
24+
location = data["location"]
25+
self.assertTrue(location.startswith("http://") or location.startswith("https://"))
26+
self.assertIn("tinymce_uploaded_image", location)

geotrek/flatpages/urls.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from django.urls import path
2+
from geotrek.flatpages.views import tinymce_upload
3+
4+
app_name = 'flatpages'
5+
6+
urlpatterns = [
7+
path('tinymce/upload/', tinymce_upload, name="tinymce_upload"),
8+
]

geotrek/flatpages/views.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from uuid import uuid4
2+
3+
from django.contrib.auth.decorators import login_required
4+
from django.core.files.storage import default_storage
5+
from django.http import JsonResponse
6+
from django.views.decorators.csrf import csrf_exempt
7+
from django.views.decorators.http import require_http_methods
8+
9+
10+
@require_http_methods(["POST"])
11+
@csrf_exempt
12+
@login_required
13+
def tinymce_upload(request):
14+
file = request.FILES.get('file')
15+
filename = f"flatpages/content/upload/{uuid4()}/{str(file)}"
16+
default_storage.save(filename, file)
17+
return JsonResponse({"location": request.build_absolute_uri(default_storage.url(filename))})

geotrek/flatpages/widgets.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@
2121
"menubar": False,
2222
'image_title': False,
2323
'image_caption': True,
24-
'automatic_uploads': False,
24+
'automatic_uploads': True,
2525
'convert_urls': False,
26-
'file_picker_types': None,
27-
'images_upload_url': None,
26+
'file_picker_types': "image media",
27+
'images_upload_url': "/flatpages/tinymce/upload/",
2828
"toolbar": 'undo redo | styleselect | blockquote | bold italic forecolor |'
2929
'alignleft aligncenter alignright alignjustify | bullist numlist | link image media |'
3030
'button-link suggestions | removeformat visualblocks code | wordcount | help',

geotrek/urls.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@
5959
urlpatterns.append(path('', include('geotrek.feedback.urls')))
6060
if 'geotrek.sensitivity' in settings.INSTALLED_APPS:
6161
urlpatterns.append(path('', include('geotrek.sensitivity.urls')))
62+
if 'geotrek.flatpages' in settings.INSTALLED_APPS:
63+
urlpatterns.append(path('flatpages/', include('geotrek.flatpages.urls')))
6264
if 'geotrek.api' in settings.INSTALLED_APPS:
6365
urlpatterns.append(path('', include('geotrek.api.v2.urls')))
6466
if 'geotrek.flatpages' in settings.INSTALLED_APPS and 'geotrek.trekking' in settings.INSTALLED_APPS and 'geotrek.tourism' in settings.INSTALLED_APPS:

0 commit comments

Comments
 (0)