manager: add upload from assets management page (#11491)

This commit is contained in:
Frédéric Péters 2017-12-25 18:27:34 +01:00
parent a652a983b6
commit 8f6e102720
6 changed files with 51 additions and 5 deletions

View File

@ -96,3 +96,7 @@ class PageEditExcludeFromNavigationForm(forms.ModelForm):
class SiteImportForm(forms.Form):
site_json = forms.FileField(_('Site Export File'))
class AssetUploadForm(forms.Form):
upload = forms.FileField(label=_('File'))

View File

@ -0,0 +1,18 @@
{% extends "combo/manager_base.html" %}
{% load i18n %}
{% block appbar %}
<h2>{% trans "Asset Upload" %}</h2>
{% endblock %}
{% block content %}
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<div class="buttons">
<button class="submit-button">{% trans "Upload" %}</button>
<a class="cancel" href="{% url 'combo-manager-assets' %}">{% trans 'Cancel' %}</a>
</div>
</form>
{% endblock %}

View File

@ -3,6 +3,7 @@
{% block appbar %}
<h2>{% trans 'Assets' %}</h2>
<a href="{% url 'combo-manager-asset-upload' %}" rel="popup">{% trans 'Upload' %}</a>
{% endblock %}
{% block breadcrumb %}

View File

@ -68,6 +68,7 @@ urlpatterns = [
name='combo-manager-page-order'),
url(r'^assets/$', views.assets, name='combo-manager-assets'),
url(r'^assets/delete$', views.asset_delete, name='combo-manager-asset-delete'),
url(r'^assets/upload/$', views.asset_upload, name='combo-manager-asset-upload'),
url(r'^ckeditor/', include('ckeditor.urls')),
]

View File

@ -38,7 +38,8 @@ from combo import plugins
from .forms import (PageEditTitleForm, PageVisibilityForm, SiteImportForm,
PageEditRedirectionForm, PageSelectTemplateForm, PageEditSlugForm,
PageEditPictureForm, PageEditExcludeFromNavigationForm)
PageEditPictureForm, PageEditExcludeFromNavigationForm,
AssetUploadForm)
class HomepageView(ListView):
@ -428,6 +429,22 @@ class Assets(ListView):
assets = Assets.as_view()
class AssetUpload(FormView):
form_class = AssetUploadForm
template_name = 'combo/manager_asset_upload.html'
success_url = reverse_lazy('combo-manager-assets')
def form_valid(self, form):
# use native ckeditor view so it's available from ckeditor file/image
# dialogs.
ckeditor_upload_view = ckeditor.views.ImageUploadView()
self.request.GET = {'CKEditorFuncNum': '-'} # hack
ckeditor_upload_view.post(self.request)
return super(AssetUpload, self).form_valid(form)
asset_upload = AssetUpload.as_view()
class AssetDelete(TemplateView):
template_name = 'combo/manager_asset_confirm_delete.html'

View File

@ -572,14 +572,19 @@ def test_asset_management(app, admin_user):
resp = app.get('/manage/assets/')
assert 'have any asset yet.' in resp.body
filepath = os.path.join(settings.CKEDITOR_UPLOAD_PATH, 'test.png')
pix = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQAAAAA3bvkkAAAACklEQVQI12NoAAAAggCB3UNq9AAAAABJRU5ErkJggg=='
default_storage.save(filepath, StringIO.StringIO(base64.decodestring(pix)))
assert os.path.exists(default_storage.path(filepath))
# test upload
resp = app.get('/manage/assets/')
resp = resp.click('Upload')
resp.form['upload'] = Upload('test.png',
base64.decodestring('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQAAAAA3bvkkAAAACklEQVQI12NoAAAAggCB3UNq9AAAAABJRU5ErkJggg=='),
'image/png')
resp = resp.form.submit().follow()
# check file is now there
resp = app.get('/manage/assets/')
assert 'have any asset yet.' not in resp.body
# test deletion
resp = resp.click('Delete')
assert 'Are you sure you want to delete' in resp.body
resp = resp.form.submit().follow()