view src/pages/tickets/new/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 d0de2a98e852
children a78169c1bf77
line wrap: on
line source

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

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

name = u'tickets_new'
access = C.PAGES_ACCESS_PROFILE
template = u"ticket/create.html"


@defer.inlineCallbacks
def prepare_render(self, request):
    data = self.getRData(request)
    template_data = request.template_data
    service, node = data.get(u'service', u''), data.get(u'node', u'')
    profile = self.getProfile(request)
    schema = yield self.host.bridge.ticketsSchemaGet(service.full(), node, profile)
    data['schema'] = schema
    # following fields are handled in backend
    ignore = ('reporter', 'created', 'updated', 'comments_uri', 'status', 'milestone', 'priority')
    xmlui_obj = template_xmlui.create(self.host, schema, ignore=ignore)
    try:
        # small trick to get a one line text input instead of the big textarea
        xmlui_obj.widgets[u'labels'].type = u'string'
    except KeyError:
        pass
    template_data[u'new_ticket_xmlui'] = xmlui_obj

@defer.inlineCallbacks
def on_data_post(self, request):
    data = self.getRData(request)
    service = data['service']
    node = data['node']
    posted_data = self.getAllPostedData(request)
    if not posted_data['title'] or not posted_data['body']:
        self.pageError(request, C.HTTP_BAD_REQUEST)
    try:
        posted_data['labels'] = [l.strip() for l in posted_data['labels'][0].split(',')]
    except (KeyError, IndexError):
        pass
    profile = self.getProfile(request)
    yield self.host.bridge.ticketsSet(service.full(), node, posted_data, u'', u'', {}, profile)
    # we don't want to redirect to creation page on success, but to tickets list
    data['post_redirect_page'] = (self.getPageByName(u'tickets_list'),
                                  service.full(),
                                  node or u'@')