Example #1
0
    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)
Example #2
0
 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)
Example #3
0
 def _process_args(self):
     RHDisplayEventBase._process_args(self)
     self.page = EventPage.get_or_404(request.view_args['page_id'])
Example #4
0
 def _process_args(self):
     RHConferenceBaseDisplay._process_args(self)
     self.page = EventPage.get_one(request.view_args['page_id'])
Example #5
0
 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)
Example #6
0
 def _checkParams(self, params):
     RHConferenceBaseDisplay._checkParams(self, params)
     self.page = EventPage.get_one(request.view_args['page_id'])
Example #7
0
 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)
Example #8
0
 def _checkParams(self, params):
     RHConferenceBaseDisplay._checkParams(self, params)
     self.page = EventPage.get_one(request.view_args['page_id'])
Example #9
0
 def _process_args(self):
     RHDisplayEventBase._process_args(self)
     self.page = EventPage.get_one(request.view_args['page_id'])
Example #10
0
 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)