dashboard: add view to reorder tiles (#17258)
This commit is contained in:
parent
06f3a8690e
commit
79a94b0aeb
|
@ -28,4 +28,7 @@ urlpatterns = [
|
|||
url(r'^api/dashboard/auto-tile/(?P<key>[\w_-]+)/$',
|
||||
views.dashboard_auto_tile,
|
||||
name='combo-dashboard-auto-tile'),
|
||||
url(r'^api/dashboard/reorder/(?P<dashboard_id>[\w]+)/$',
|
||||
views.dashboard_reorder_tiles,
|
||||
name='combo-dashboard-reorder-tiles'),
|
||||
]
|
||||
|
|
|
@ -19,7 +19,7 @@ import json
|
|||
from django.conf import settings
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.http import Http404
|
||||
from django.http import Http404, HttpResponse
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.views.generic import RedirectView
|
||||
|
||||
|
@ -87,3 +87,18 @@ def dashboard_auto_tile(request, *args, **kwargs):
|
|||
# dashboard
|
||||
cell.save()
|
||||
return render_cell(request, cell=cell)
|
||||
|
||||
|
||||
def dashboard_reorder_tiles(request, *args, **kwargs):
|
||||
dashboard = DashboardCell.objects.all()[0]
|
||||
new_order = request.GET['order'].split(',')
|
||||
tiles = dict((str(x.id), x) for x in Tile.objects.filter(id__in=new_order))
|
||||
for i, tile_id in enumerate(new_order):
|
||||
tile = tiles.get(tile_id)
|
||||
if tile.user != request.user:
|
||||
raise PermissionDenied()
|
||||
if tile:
|
||||
tile.order = i
|
||||
for tile in tiles.values():
|
||||
tile.save()
|
||||
return HttpResponse(status=204)
|
||||
|
|
|
@ -20,9 +20,11 @@ from test_manager import admin_user, login
|
|||
def site(admin_user):
|
||||
page = Page(title='One', slug='index')
|
||||
page.save()
|
||||
# order=100 will be useful to get to the cell later on
|
||||
cell = TextCell(page=page, order=100, placeholder='content', text='hello world')
|
||||
cell.save()
|
||||
# order will be useful to get to the cell later on
|
||||
for i in range(100, 110):
|
||||
cell = TextCell(page=page, order=i, placeholder='content',
|
||||
text='hello world (%s)' % i)
|
||||
cell.save()
|
||||
|
||||
page = Page(title='Two', slug='two')
|
||||
page.save()
|
||||
|
@ -89,6 +91,31 @@ def test_remove_from_dashboard(app, site):
|
|||
assert Tile.objects.count() == 0
|
||||
assert TextCell.objects.count() == 1
|
||||
|
||||
def test_reorder_dashboard(app, site):
|
||||
user = User.objects.all()[0]
|
||||
dashboard = DashboardCell.objects.all()[0]
|
||||
|
||||
# add cells to dashboard
|
||||
app = login(app)
|
||||
for i in range(103, 108):
|
||||
resp = app.get(reverse('combo-dashboard-add-tile',
|
||||
kwargs={'cell_reference': TextCell.objects.get(order=i).get_reference()}))
|
||||
assert Tile.objects.count() == 5
|
||||
|
||||
# check reordering
|
||||
app.reset() # logout
|
||||
tiles = Tile.objects.filter(user=user).order_by('?')
|
||||
new_order = ','.join([str(x.id) for x in tiles])
|
||||
resp = app.get(reverse('combo-dashboard-reorder-tiles',
|
||||
kwargs={'dashboard_id': dashboard.id}), params={'order': new_order}, status=403)
|
||||
|
||||
app = login(app)
|
||||
resp = app.get(reverse('combo-dashboard-reorder-tiles',
|
||||
kwargs={'dashboard_id': dashboard.id}), params={'order': new_order})
|
||||
|
||||
tiles = Tile.objects.filter(user=user)
|
||||
assert new_order == ','.join([str(x.id) for x in tiles])
|
||||
|
||||
def test_auto_tile(app, site):
|
||||
with override_settings(JSON_CELL_TYPES={'test-config-json-cell': {'name': 'Foobar', 'url': 'http://test/'}},
|
||||
TEMPLATE_DIRS=['%s/templates-1' % os.path.abspath(os.path.dirname(__file__))]):
|
||||
|
|
Loading…
Reference in New Issue