assets: always redirect user to most appropriate page (#21609)
This commit is contained in:
parent
4ea3c2c920
commit
ce07e03a5d
|
@ -120,13 +120,22 @@ class Assets(ListView):
|
|||
context['query'] = self.request.GET.get('q') or ''
|
||||
return context
|
||||
|
||||
def get_anchored_url(self, key=None, name=None):
|
||||
url = reverse('combo-manager-assets')
|
||||
for i, asset in enumerate(self.get_queryset()):
|
||||
if key and key != getattr(asset, 'key', None):
|
||||
continue
|
||||
if name and name > getattr(asset, 'name', None):
|
||||
continue
|
||||
return url + '?page=%s' % ((i // self.paginate_by) + 1)
|
||||
return url
|
||||
|
||||
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
|
||||
|
@ -136,6 +145,9 @@ class AssetUpload(FormView):
|
|||
ckeditor_upload_view.post(self.request)
|
||||
return super(AssetUpload, self).form_valid(form)
|
||||
|
||||
def get_success_url(self):
|
||||
return Assets(request=self.request).get_anchored_url(name=self.request.FILES['upload'].name)
|
||||
|
||||
asset_upload = AssetUpload.as_view()
|
||||
|
||||
|
||||
|
@ -171,6 +183,10 @@ class AssetOverwrite(FormView):
|
|||
backend.create_thumbnail(saved_path)
|
||||
return super(AssetOverwrite, self).form_valid(form)
|
||||
|
||||
def get_success_url(self):
|
||||
img_orig = self.request.GET['img']
|
||||
return Assets(request=self.request).get_anchored_url(name=os.path.basename(img_orig))
|
||||
|
||||
asset_overwrite = AssetOverwrite.as_view()
|
||||
|
||||
|
||||
|
@ -187,7 +203,9 @@ class AssetDelete(TemplateView):
|
|||
if not img_orig.startswith(base_path):
|
||||
raise PermissionDenied()
|
||||
default_storage.delete(img_orig)
|
||||
return redirect(reverse('combo-manager-assets'))
|
||||
return redirect(
|
||||
Assets(request=self.request).get_anchored_url(
|
||||
name=os.path.basename(img_orig)))
|
||||
|
||||
asset_delete = AssetDelete.as_view()
|
||||
|
||||
|
@ -199,13 +217,16 @@ class SlotAssetUpload(FormView):
|
|||
|
||||
def form_valid(self, form):
|
||||
try:
|
||||
asset = Asset.objects.get(key=self.kwargs['key'])
|
||||
self.asset = Asset.objects.get(key=self.kwargs['key'])
|
||||
except Asset.DoesNotExist:
|
||||
asset = Asset(key=self.kwargs['key'])
|
||||
asset.asset = self.request.FILES['upload']
|
||||
asset.save()
|
||||
self.asset = Asset(key=self.kwargs['key'])
|
||||
self.asset.asset = self.request.FILES['upload']
|
||||
self.asset.save()
|
||||
return super(SlotAssetUpload, self).form_valid(form)
|
||||
|
||||
def get_success_url(self):
|
||||
return Assets(request=self.request).get_anchored_url(key=self.kwargs['key'])
|
||||
|
||||
slot_asset_upload = SlotAssetUpload.as_view()
|
||||
|
||||
|
||||
|
@ -214,7 +235,7 @@ class SlotAssetDelete(TemplateView):
|
|||
|
||||
def post(self, request, *args, **kwargs):
|
||||
Asset.objects.filter(key=kwargs['key']).delete()
|
||||
return redirect(reverse('combo-manager-assets'))
|
||||
return redirect(Assets(request=self.request).get_anchored_url(key=kwargs['key']))
|
||||
|
||||
slot_asset_delete = SlotAssetDelete.as_view()
|
||||
|
||||
|
|
|
@ -38,6 +38,13 @@ def admin_user():
|
|||
user = User.objects.create_superuser('admin', email=None, password='admin')
|
||||
return user
|
||||
|
||||
@pytest.fixture
|
||||
def clean_media():
|
||||
for path in ('uploads', 'assets'):
|
||||
if os.path.exists(default_storage.path(path)):
|
||||
shutil.rmtree(default_storage.path(path))
|
||||
return None
|
||||
|
||||
def login(app, username='admin', password='admin'):
|
||||
login_page = app.get('/login/')
|
||||
login_form = login_page.forms[0]
|
||||
|
@ -711,7 +718,43 @@ def test_asset_management(app, admin_user):
|
|||
resp = resp.form.submit().follow()
|
||||
assert 'have any asset yet.' in resp.text
|
||||
|
||||
def test_asset_management_search(app, admin_user):
|
||||
def test_asset_management_anchor(app, admin_user):
|
||||
app = login(app)
|
||||
resp = app.get('/manage/assets/')
|
||||
assert 'have any asset yet.' in resp.text
|
||||
|
||||
for i in range(25):
|
||||
filepath = os.path.join(settings.CKEDITOR_UPLOAD_PATH, 'cc.png')
|
||||
pix = b'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQAAAAA3bvkkAAAACklEQVQI12NoAAAAggCB3UNq9AAAAABJRU5ErkJggg=='
|
||||
default_storage.save(filepath, BytesIO(base64.decodestring(pix)))
|
||||
|
||||
# test upload
|
||||
resp = app.get('/manage/assets/')
|
||||
resp = resp.click('Upload')
|
||||
resp.form['upload'] = Upload('test.png',
|
||||
base64.decodestring(b'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQAAAAA3bvkkAAAACklEQVQI12NoAAAAggCB3UNq9AAAAABJRU5ErkJggg=='),
|
||||
'image/png')
|
||||
resp = resp.form.submit()
|
||||
assert resp.location.endswith('?page=3')
|
||||
resp = resp.follow()
|
||||
|
||||
# overwrite
|
||||
resp = resp.click(href=re.compile('overwrite.*test.png'))
|
||||
resp.form['upload'] = Upload('aa.png',
|
||||
base64.decodestring(b'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA6fptVAAAACklEQVQI12NgAgAABAADRWoApgAA\nAABJRU5ErkJggg=='),
|
||||
'image/png')
|
||||
resp = resp.form.submit()
|
||||
assert resp.location.endswith('?page=3')
|
||||
resp = resp.follow()
|
||||
|
||||
# delete
|
||||
resp = resp.click(href=re.compile('delete.*test.png'))
|
||||
resp = resp.form.submit()
|
||||
assert resp.location.endswith('?page=3')
|
||||
resp = resp.follow()
|
||||
assert 'test.png' not in resp.text
|
||||
|
||||
def test_asset_management_search(app, admin_user, clean_media):
|
||||
app = login(app)
|
||||
|
||||
filepath = os.path.join(settings.CKEDITOR_UPLOAD_PATH, 'test.png')
|
||||
|
@ -732,12 +775,8 @@ def test_asset_management_search(app, admin_user):
|
|||
resp = resp.form.submit()
|
||||
assert resp.text.count('<tr class="asset') == 2
|
||||
|
||||
def test_asset_slots_management(app, admin_user):
|
||||
def test_asset_slots_management(app, admin_user, clean_media):
|
||||
app = login(app)
|
||||
|
||||
for path in ('uploads', 'assets'):
|
||||
if os.path.exists(default_storage.path(path)):
|
||||
shutil.rmtree(default_storage.path(path))
|
||||
assert Asset.objects.count() == 0
|
||||
|
||||
with override_settings(COMBO_ASSET_SLOTS={'collectivity:banner': {'label': 'Banner'}}):
|
||||
|
@ -749,7 +788,9 @@ def test_asset_slots_management(app, admin_user):
|
|||
resp.form['upload'] = Upload('test.png',
|
||||
base64.decodestring(b'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA6fptVAAAACklEQVQI12NgAgAABAADRWoApgAA\nAABJRU5ErkJggg=='),
|
||||
'image/png')
|
||||
resp = resp.form.submit().follow()
|
||||
resp = resp.form.submit()
|
||||
assert resp.location.endswith('?page=1')
|
||||
resp = resp.follow()
|
||||
assert 'test.png' in resp.text
|
||||
assert '>Delete<' in resp.text
|
||||
assert Asset.objects.filter(key='collectivity:banner').count() == 1
|
||||
|
@ -768,7 +809,9 @@ def test_asset_slots_management(app, admin_user):
|
|||
assert Asset.objects.filter(key='collectivity:banner').count() == 1
|
||||
|
||||
resp = resp.click('Delete')
|
||||
resp = resp.form.submit().follow()
|
||||
resp = resp.form.submit()
|
||||
assert resp.location.endswith('?page=1')
|
||||
resp = resp.follow()
|
||||
assert '>Banner<' in resp.text
|
||||
assert '>Delete<' not in resp.text
|
||||
assert Asset.objects.filter(key='collectivity:banner').count() == 0
|
||||
|
|
Loading…
Reference in New Issue