def _process(self): defaults = FormDefaults(get_default_values(MenuEntry)) entry_type = request.args['type'] if entry_type == MenuEntryType.separator.name: entry = MenuEntry(event=self.event, type=MenuEntryType.separator) db.session.add(entry) db.session.flush() return jsonify_data(flash=False, entry=_render_menu_entry(entry)) elif entry_type == MenuEntryType.user_link.name: form_cls = MenuLinkForm elif entry_type == MenuEntryType.page.name: form_cls = MenuPageForm else: raise BadRequest form = form_cls(obj=defaults) if form.validate_on_submit(): entry = MenuEntry(event=self.event, type=MenuEntryType[entry_type]) form.populate_obj(entry, skip={'html'}) if entry.is_page: page = EventPage(html=form.html.data) self.event.custom_pages.append(page) entry.page = page db.session.add(entry) db.session.flush() return jsonify_data(entry=_render_menu_entry(entry)) return jsonify_form(form)
def _copy_menu_entry(self, menu_entry, new_event, parent=None, include_children=True): base_columns = get_simple_column_attrs(MenuEntry) new_menu_entry = MenuEntry(**{col: getattr(menu_entry, col) for col in base_columns}) if menu_entry.is_page: with db.session.no_autoflush: # menu_entry.page is lazy-loaded page = EventPage(event_new=new_event, html=menu_entry.page.html) new_menu_entry.page = page if menu_entry.page.is_default: new_event.default_page = new_menu_entry.page new_event.menu_entries.append(new_menu_entry) if parent is not None: parent.append(new_menu_entry) if include_children: for child in menu_entry.children: self._copy_menu_entry(child, new_event, new_menu_entry.children, include_children=False)
def _process_args(self): RHDisplayEventBase._process_args(self) self.page = EventPage.get_or_404(request.view_args['page_id'])
def _process_args(self): RHConferenceBaseDisplay._process_args(self) self.page = EventPage.get_one(request.view_args['page_id'])
def _migrate_menu(self, event, container, parent=None, used=None): if used is None: used = set() for pos, item in enumerate(container._listLink, 1): data = {"parent": parent, "event_id": int(event.id), "is_enabled": item._active, "position": pos} item_type = item.__class__.__name__ if item_type == "SystemLink": if item._name in REMOVED_MENU_NAMES: continue data["name"] = MENU_ENTRY_NAME_MAP[item._name] if not parent and data["name"] in NOT_TOP_LEVEL_NAMES: self.print_warning( cformat("%{yellow}Skipping top-level menu entry {}").format(data["name"]), event_id=event.id ) continue elif data["name"] in used: self.print_error( cformat("%{red!}duplicate menu entry name {}; skipping").format(data["name"]), event_id=event.id ) continue used.add(data["name"]) data["title"] = _sanitize_title(item._caption) if not data["title"]: data["title"] = None self.print_warning( cformat("%{yellow!}Menu entry {} has no title; using default").format(data["name"]), event_id=event.id, ) elif data["title"].lower() in DEFAULT_MENU_TITLES[data["name"]]: data["title"] = None if item._name == "chatrooms": data["plugin"] = "chat" data["type"] = MenuEntryType.plugin_link else: data["type"] = MenuEntryType.internal_link elif item_type == "Spacer": data["type"] = MenuEntryType.separator elif item_type == "ExternLink": data["type"] = MenuEntryType.user_link data["title"] = _sanitize_title(item._caption) data["link_url"] = item._URL.strip() if not data["link_url"]: if getattr(item, "_listLink", None): self.print_warning( cformat('%{yellow!}Link "{}" has no URL but children').format(data["title"]), event_id=event.id, ) else: self.print_warning( cformat('%{yellow}Skipping link "{}" with no URL').format(data["title"]), event_id=event.id ) continue if not data["title"]: if getattr(item, "_listLink", None): self.print_warning(cformat("%{yellow!}Link has no title but children"), event_id=event.id) else: self.print_warning(cformat("%{yellow}Skipping link with no title"), event_id=event.id) continue elif item_type == "PageLink": data["type"] = MenuEntryType.page data["title"] = _sanitize_title(item._caption) data["page"] = EventPage(event_id=event.id, html=item._page._content) data["page"].legacy_mapping = LegacyPageMapping(event_id=event.id, legacy_page_id=item._page._id) if item._page._isHome: Event.get(event.id).default_page = data["page"] else: self.print_error("Unexpected menu item type: {}".format(item_type), event_id=event.id) continue entry = MenuEntry(**data) yield entry if getattr(item, "_listLink", None): # child entries if not parent: for sub_entry in self._migrate_menu(event, item, entry, used): yield sub_entry else: self.print_warning("Skipping children inside nested entry", event_id=event.id)
def _checkParams(self, params): RHConferenceBaseDisplay._checkParams(self, params) self.page = EventPage.get_one(request.view_args['page_id'])
def _migrate_menu(self, event, container, parent=None, used=None): if used is None: used = set() for pos, item in enumerate(container._listLink, 1): data = {'parent': parent, 'event_id': int(event.id), 'is_enabled': item._active, 'position': pos} item_type = item.__class__.__name__ if item_type == 'SystemLink': if item._name in REMOVED_MENU_NAMES: continue data['name'] = MENU_ENTRY_NAME_MAP[item._name] if not parent and data['name'] in NOT_TOP_LEVEL_NAMES: self.print_warning(cformat('%{yellow}Skipping top-level menu entry {}').format(data['name']), event_id=event.id) continue elif data['name'] in used: self.print_error(cformat('%{red!}duplicate menu entry name {}; skipping').format(data['name']), event_id=event.id) continue used.add(data['name']) data['title'] = _sanitize_title(item._caption) if not data['title']: data['title'] = None self.print_warning(cformat('%{yellow!}Menu entry {} has no title; using default').format( data['name']), event_id=event.id) elif data['title'].lower() in DEFAULT_MENU_TITLES[data['name']]: data['title'] = None if item._name == 'chatrooms': data['plugin'] = 'chat' data['type'] = MenuEntryType.plugin_link else: data['type'] = MenuEntryType.internal_link elif item_type == 'Spacer': data['type'] = MenuEntryType.separator elif item_type == 'ExternLink': data['type'] = MenuEntryType.user_link data['title'] = _sanitize_title(item._caption) data['link_url'] = item._URL.strip() if not data['link_url']: if getattr(item, '_listLink', None): self.print_warning(cformat('%{yellow!}Link "{}" has no URL but children').format( data['title']), event_id=event.id) else: self.print_warning(cformat('%{yellow}Skipping link "{}" with no URL').format( data['title']), event_id=event.id) continue if not data['title']: if getattr(item, '_listLink', None): self.print_warning(cformat('%{yellow!}Link has no title but children'), event_id=event.id) else: self.print_warning(cformat('%{yellow}Skipping link with no title'), event_id=event.id) continue elif item_type == 'PageLink': data['type'] = MenuEntryType.page data['title'] = _sanitize_title(item._caption) data['page'] = EventPage(event_id=event.id, html=item._page._content) data['page'].legacy_mapping = LegacyPageMapping(event_id=event.id, legacy_page_id=item._page._id) if item._page._isHome: Event.get(event.id).default_page = data['page'] else: self.print_error('Unexpected menu item type: {}'.format(item_type), event_id=event.id) continue entry = MenuEntry(**data) yield entry if getattr(item, '_listLink', None): # child entries if not parent: for sub_entry in self._migrate_menu(event, item, entry, used): yield sub_entry else: self.print_warning('Skipping children inside nested entry', event_id=event.id)
def _process_args(self): RHDisplayEventBase._process_args(self) self.page = EventPage.get_one(request.view_args['page_id'])
def _migrate_menu(self, event, container, parent=None, used=None): if used is None: used = set() for pos, item in enumerate(container._listLink, 1): data = { 'parent': parent, 'event_id': int(event.id), 'is_enabled': item._active, 'position': pos } item_type = item.__class__.__name__ if item_type == 'SystemLink': if item._name in REMOVED_MENU_NAMES: continue data['name'] = MENU_ENTRY_NAME_MAP[item._name] if not parent and data['name'] in NOT_TOP_LEVEL_NAMES: self.print_warning(cformat( '%{yellow}Skipping top-level menu entry {}').format( data['name']), event_id=event.id) continue elif data['name'] in used: self.print_error( cformat('%{red!}duplicate menu entry name {}; skipping' ).format(data['name']), event_id=event.id) continue used.add(data['name']) data['title'] = _sanitize_title(item._caption) if not data['title']: data['title'] = None self.print_warning(cformat( '%{yellow!}Menu entry {} has no title; using default'). format(data['name']), event_id=event.id) elif data['title'].lower() in DEFAULT_MENU_TITLES[ data['name']]: data['title'] = None if item._name == 'chatrooms': data['plugin'] = 'chat' data['type'] = MenuEntryType.plugin_link else: data['type'] = MenuEntryType.internal_link elif item_type == 'Spacer': data['type'] = MenuEntryType.separator elif item_type == 'ExternLink': data['type'] = MenuEntryType.user_link data['title'] = _sanitize_title(item._caption) data['link_url'] = item._URL.strip() if not data['link_url']: if getattr(item, '_listLink', None): self.print_warning(cformat( '%{yellow!}Link "{}" has no URL but children'). format(data['title']), event_id=event.id) else: self.print_warning(cformat( '%{yellow}Skipping link "{}" with no URL').format( data['title']), event_id=event.id) continue if not data['title']: if getattr(item, '_listLink', None): self.print_warning(cformat( '%{yellow!}Link has no title but children'), event_id=event.id) else: self.print_warning( cformat('%{yellow}Skipping link with no title'), event_id=event.id) continue elif item_type == 'PageLink': data['type'] = MenuEntryType.page data['title'] = _sanitize_title(item._caption) data['page'] = EventPage(event_id=event.id, html=item._page._content) data['page'].legacy_mapping = LegacyPageMapping( event_id=event.id, legacy_page_id=item._page._id) if item._page._isHome: Event.get(event.id).default_page = data['page'] else: self.print_error( 'Unexpected menu item type: {}'.format(item_type), event_id=event.id) continue entry = MenuEntry(**data) yield entry if getattr(item, '_listLink', None): # child entries if not parent: for sub_entry in self._migrate_menu( event, item, entry, used): yield sub_entry else: self.print_warning('Skipping children inside nested entry', event_id=event.id)