Mercurial > libervia-web
view libervia/pages/tickets/view/page_meta.py @ 1216:b2d067339de3
python 3 port:
/!\ Python 3.6+ is now needed to use libervia
/!\ instability may occur and features may not be working anymore, this will improve with time
/!\ TxJSONRPC dependency has been removed
The same procedure as in backend has been applied (check backend commit ab2696e34d29 logs
for details). Removed now deprecated code (Pyjamas compiled browser part, legacy blog,
JSON RPC related code).
Adapted code to work without `html` and `themes` dirs.
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 13 Aug 2019 19:12:31 +0200 |
parents | 29eb15062416 |
children | f511f8fbbf8a |
line wrap: on
line source
#!/usr/bin/env python3 # -*- coding: utf-8 -*- from libervia.server.constants import Const as C from sat.core.i18n import _ from libervia.server.utils import SubPage from libervia.server import session_iface from twisted.internet import defer from twisted.words.protocols.jabber import jid 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(__name__) """ticket handling pages""" name = "tickets_view" access = C.PAGES_ACCESS_PUBLIC template = "ticket/item.html" def parse_url(self, request): try: item_id = self.nextPath(request) except IndexError: log.warning(_("no ticket id specified")) self.pageError(request, C.HTTP_BAD_REQUEST) data = self.getRData(request) data["ticket_id"] = item_id @defer.inlineCallbacks def prepare_render(self, request): data = self.getRData(request) template_data = request.template_data session = self.host.getSessionData(request, session_iface.ISATSession) service, node, ticket_id = ( data.get("service", ""), data.get("node", ""), data["ticket_id"], ) profile = self.getProfile(request) if profile is None: profile = C.SERVICE_PROFILE tickets = yield self.host.bridgeCall( "ticketsGet", service.full() if service else "", node, C.NO_LIMIT, [ticket_id], "", {"labels_as_list": C.BOOL_TRUE}, profile, ) ticket = [template_xmlui.create(self.host, x) for x in tickets[0]][0] template_data["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.bridgeCall( "mbGet", comments_service, comments_node, C.NO_LIMIT, [], {}, profile ) template_data["comments"] = data_objects.BlogItems(comments) template_data["login_url"] = self.getPageRedirectURL(request) if session.connected: # we set edition URL only if user is the publisher or the node owner publisher = jid.JID(ticket.widgets["publisher"].value) is_publisher = publisher.userhostJID() == session.jid.userhostJID() affiliation = None if not is_publisher: node = node or self.host.ns_map["tickets"] affiliation = yield self.host.getAffiliation(request, service, node) if is_publisher or affiliation == "owner": template_data["url_ticket_edit"] = self.getURLByPath( SubPage("tickets"), service.full(), node or "@", SubPage("tickets_edit"), ticket_id, ) @defer.inlineCallbacks def on_data_post(self, request): type_ = self.getPostedData(request, "type") if type_ == "comment": blog_page = self.getPageByName("blog_view") yield blog_page.on_data_post(self, request) else: log.warning(_("Unhandled data type: {}").format(type_))