misc: add methods to get next/previous page (#13038)
This commit is contained in:
parent
6b33b55618
commit
b215a1bf3a
|
@ -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 = []
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue