Пример #1
0
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'
    }
Пример #2
0
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)
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
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]
Пример #6
0
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)
Пример #7
0
    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
Пример #8
0
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'}
    )
Пример #9
0
    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())