misc: add methods to get next/previous page (#13038)

This commit is contained in:
Frédéric Péters 2016-09-14 14:46:56 +02:00
parent 6b33b55618
commit b215a1bf3a
2 changed files with 55 additions and 0 deletions

View File

@ -162,6 +162,25 @@ class Page(models.Model):
def get_template_display_name(self):
return settings.COMBO_PUBLIC_TEMPLATES[self.template_name]['name']
def get_next_page(self, user=None):
pages = Page.get_as_reordered_flat_hierarchy(Page.objects.all())
this_page = [x for x in pages if x.id == self.id][0]
pages = pages[pages.index(this_page)+1:]
for page in pages:
if page.is_visible(user):
return page
return None
def get_previous_page(self, user=None):
pages = Page.get_as_reordered_flat_hierarchy(Page.objects.all())
pages.reverse()
this_page = [x for x in pages if x.id == self.id][0]
pages = pages[pages.index(this_page)+1:]
for page in pages:
if page.is_visible(user):
return page
return None
@classmethod
def get_as_reordered_flat_hierarchy(cls, object_list):
reordered = []

View File

@ -161,3 +161,39 @@ def test_import_export_pages_with_links():
new_page_2 = Page.objects.all().order_by('order')[1]
assert CellBase.get_cells(page_id=new_page_1.id)[0].link_page_id == new_page_2.id
assert CellBase.get_cells(page_id=new_page_2.id)[0].link_page_id == new_page_1.id
def test_next_previous():
Page.objects.all().delete()
page = Page()
page.slug = 'foo'
page.save()
page2 = Page()
page2.slug = 'bar'
page2.parent = page
page2.order = 1
page2.save()
page3 = Page()
page3.slug = 'baz'
page3.parent = page
page3.order = 2
page3.save()
assert page.get_next_page(None).id == page2.id
assert page.get_previous_page(None) is None
assert page2.get_next_page(None).id == page3.id
assert page2.get_previous_page(None).id == page.id
page2.public = False
page2.save()
assert page.get_next_page(None).id == page3.id
assert page3.get_previous_page(None).id == page.id
user1 = User(username='foo')
user1.save()
assert page.get_next_page(user1).id == page2.id
assert page3.get_previous_page(user1).id == page2.id
page3.public = False
page3.save()
assert page.get_next_page(None) is None