view src/pages/tickets/view/page_meta.py @ 979:1d558dfb32ca

server: pages redirection: when using a redirection dict, a new "page" key can be used to redirect to a named page. "args" can be added to specified named arguments to set (will be put in request.args, in addition to existing ones). The redirection is done dynamically, during the request workflow.
author Goffi <goffi@goffi.org>
date Sun, 12 Nov 2017 12:56:46 +0100
parents 75166ac3e0cc
children 97cce8c1e96a
line wrap: on
line source

#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-

from libervia.server.constants import Const as C
from sat.core.i18n import _
from twisted.internet import defer
from sat.tools.common import template_xmlui
from sat.tools.common import uri
from sat.tools.common import data_objects
from sat.core.log import getLogger
log = getLogger('pages/tickets/view')
"""ticket handling pages"""

access = C.PAGES_ACCESS_PUBLIC
template = u"ticket/item.html"


def parse_url(self, request):
    try:
        item_id = self.nextPath(request)
    except IndexError:
        log.warning(_(u"no ticket id specified"))
        self.pageError(request, C.HTTP_BAD_REQUEST)

    data = self.getRData(request)
    data[u'ticket_id'] = item_id

@defer.inlineCallbacks
def prepare_render(self, request):
    data = self.getRData(request)
    template_data = request.template_data
    service, node, ticket_id = data.get(u'service', u''), data.get(u'node', u''), data[u'ticket_id']
    profile = self.getProfile(request)

    if profile is None:
        profile = C.SERVICE_PROFILE
    else:
        template_data['profile'] = profile

    tickets = yield self.host.bridge.ticketsGet(service.full() if service else u'', node, C.NO_LIMIT, [ticket_id], '', {}, profile)
    ticket = [template_xmlui.create(self.host, x, ignore=['publisher']) for x in tickets[0]][0]
    template_data[u'item'] = ticket
    comments_uri = ticket.widgets['comments_uri'].value
    if comments_uri:
        uri_data = uri.parseXMPPUri(comments_uri)
        template_data['comments_node'] = comments_node = uri_data['node']
        template_data['comments_service'] = comments_service = uri_data['path']
        comments = yield self.host.bridge.mbGet(comments_service,
                                                comments_node,
                                                C.NO_LIMIT,
                                                [],
                                                {},
                                                profile)

        template_data[u'comments'] = data_objects.BlogItems(comments)
        template_data[u'login_url'] = self.getPageRedirectURL(request)

@defer.inlineCallbacks
def on_data_post(self, request):
    type_ = self.getPostedData(request, u'type')
    if type_ == u'comment':
        blog_page = self.getPageByName(u'blog')
        yield blog_page.on_data_post(self, request)
    else:
        log.warning(_(u"Unhandled data type: {}").format(type_))