def handle_new_page(self, request, form, src=None): if form.submitted(request): pages = PageCollection(request.app.session()) page = pages.add( parent=self.page, title=form.title.data, type=self.page.type, meta={'trait': self.trait} ) form.update_model(page) request.app.update_homepage_pages() request.success(page.trait_messages[page.trait]['new_page_added']) return morepath.redirect(request.link(page)) if src: form.apply_model(src) site_title = self.page.trait_messages[self.trait]['new_page_title'] return { 'layout': EditorLayout(self, request, site_title), 'title': site_title, 'form': form, 'form_width': 'large' }
def add_donation_page(context): org = context.session.query(Organisation).first() if org is None: return # not a feriennet if '<registration />' not in org.meta['homepage_structure']: return if org.locales == 'fr_CH': path = module_path('onegov.feriennet', 'content/fr.yaml') else: path = module_path('onegov.feriennet', 'content/de.yaml') page = next(p for p in load_content(path)['pages'] if p['title'] in ('Spende', 'Dons')) pages = PageCollection(context.session) order = max(p.order for p in pages.roots) + 1 meta = page.get('meta', {}) meta['is_hidden_from_public'] = True pages.add(parent=None, title=page['title'], type=page['type'], name=page.get('name', None), meta=meta, content=page.get('content', None), order=order)
def get_editor(app, action, trait, page_id): if not Editor.is_supported_action(action): return None page = PageCollection(app.session()).by_id(page_id) if not page.is_supported_trait(trait): return None if page is not None: return Editor(action=action, page=page, trait=trait)
def get_page_move(app, subject_id, direction, target_id): if subject_id == target_id: raise exc.HTTPBadRequest() session = app.session() pages = PageCollection(session) subject = pages.by_id(subject_id) target = pages.by_id(target_id) if subject and target: return PageMove(session, subject, target, direction)
def test_news_years(town_app): collection = PageCollection(town_app.session()) news = collection.add_root("News", type='news') one = collection.add(news, title="One", type='news') two = collection.add(news, title="Two", type='news') assert news.years == [datetime.utcnow().year] one.created = datetime(2016, 2, 1, tzinfo=pytz.utc) two.created = datetime(2015, 2, 1, tzinfo=pytz.utc) assert news.years == [2016, 2015]
def add_order_to_all_pages(context): pages = PageCollection(context.session) processed_siblings = set() for page in pages.query(ordered=False): siblings = page.siblings.all() ids = {sibling.id for sibling in siblings} if ids <= processed_siblings: continue sort_siblings(siblings, key=PageCollection.sort_key) processed_siblings.update(ids)
def load_homepage_pages(self): pages = PageCollection(self.session()).query() pages = pages.filter(Topic.type == 'topic') # XXX use JSON/JSONB for this (the attribute is not there if it's # false, so this is not too bad speed-wise but it's still awful) pages = pages.filter(Topic.meta.contains( 'is_visible_on_homepage' )) result = defaultdict(list) for page in pages.all(): if page.is_visible_on_homepage: result[page.root.id].append(page) for key in result: result[key] = list(sorted( result[key], key=lambda p: utils.normalize_for_url(p.title) )) return result
def add_root_pages(session): pages = PageCollection(session) pages.add_root( "Leben & Wohnen", name='leben-wohnen', type='topic', meta={'trait': 'page'} ), pages.add_root( "Kultur & Freizeit", name='kultur-freizeit', type='topic', meta={'trait': 'page'} ), pages.add_root( "Bildung & Gesellschaft", name='bildung-gesellschaft', type='topic', meta={'trait': 'page'} ), pages.add_root( "Gewerbe & Tourismus", name='gewerbe-tourismus', type='topic', meta={'trait': 'page'} ), pages.add_root( "Politik & Verwaltung", name='politik-verwaltung', type='topic', meta={'trait': 'page'} ) pages.add_root( "Aktuelles", name='aktuelles', type='news', meta={'trait': 'news'} )
def root_pages(self): query = PageCollection(self.app.session()).query(ordered=False) query = query.order_by(desc(Page.type), Page.order) query = query.filter(Page.parent_id == None) return self.request.exclude_invisible(query.all())