59 lines
2.0 KiB
Python
59 lines
2.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
#
|
|
# ITerativ GmbH
|
|
# http://www.iterativ.ch/
|
|
#
|
|
# Copyright (c) 2019 ITerativ GmbH. All rights reserved.
|
|
#
|
|
# Created on 2019-08-05
|
|
# @author: chrigu <christian.cueni@iterativ.ch>
|
|
from wagtail import hooks
|
|
|
|
from rooms.models import ModuleRoomSlug
|
|
|
|
|
|
@hooks.register('after_edit_page')
|
|
@hooks.register('after_create_page')
|
|
def do_after_page_edit(request, page):
|
|
try:
|
|
blocks = get_room_blocks(page)
|
|
except AttributeError:
|
|
return
|
|
for block in blocks:
|
|
if isinstance(block, tuple):
|
|
title = block[1]['title']
|
|
if isinstance(block, dict):
|
|
title = block['value']['title']
|
|
ModuleRoomSlug.objects.get_or_create(title=title)
|
|
|
|
|
|
def get_room_blocks(page):
|
|
top_level_module_room_slug_blocks = get_block_from_raw_data(page.contents.raw_data, 'module_room_slug')
|
|
content_list_module_room_slug_blocks = get_admin_slugs_from_content_list(page.contents.raw_data)
|
|
return top_level_module_room_slug_blocks + content_list_module_room_slug_blocks
|
|
|
|
|
|
def get_block_from_raw_data(raw_data, block_name):
|
|
if len(raw_data) == 0:
|
|
return []
|
|
|
|
if isinstance(raw_data[0], tuple):
|
|
return [block for block in raw_data if block[0] in [block_name]]
|
|
if isinstance(raw_data[0], dict):
|
|
return [block for block in raw_data if block['type'] in [block_name]]
|
|
return []
|
|
|
|
|
|
def get_admin_slugs_from_content_list(raw_data):
|
|
module_room_slug_blocks = []
|
|
content_list_items = get_block_from_raw_data(raw_data, 'content_list_item')
|
|
for content_list_item in content_list_items:
|
|
raw_data = None
|
|
if isinstance(content_list_item, tuple):
|
|
raw_data = content_list_item[1]
|
|
if isinstance(content_list_item, dict):
|
|
raw_data = content_list_item['value']
|
|
module_room_slug_blocks = module_room_slug_blocks + get_block_from_raw_data(raw_data,
|
|
'module_room_slug')
|
|
return module_room_slug_blocks
|