# HG changeset patch # User Goffi # Date 1527851097 -7200 # Node ID 7d5633ccbaf24847cade1812f3ea0eaf39458eda # Parent 8a270f32de81aec67cdb29ebda3967f1b07ed49a merge-requests (view), tickets (view): fill "url_ticket_edit" when logged user is publisher of ticket, or node owner. diff -r 8a270f32de81 -r 7d5633ccbaf2 src/pages/merge-requests/view/page_meta.py --- a/src/pages/merge-requests/view/page_meta.py Fri Jun 01 13:04:51 2018 +0200 +++ b/src/pages/merge-requests/view/page_meta.py Fri Jun 01 13:04:57 2018 +0200 @@ -3,17 +3,19 @@ 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('pages/tickets/view') -"""ticket handling pages""" name = u"merge-requests_view" access = C.PAGES_ACCESS_PUBLIC template = u"merge-request/item.html" +log = getLogger(u'pages/' + name) def parse_url(self, request): @@ -30,6 +32,7 @@ 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(u'service', u''), data.get(u'node', u''), data[u'ticket_id'] profile = self.getProfile(request) @@ -41,9 +44,10 @@ C.NO_LIMIT, [ticket_id], '', - {'parse': C.BOOL_TRUE}, + {'parse': C.BOOL_TRUE, + 'labels_as_list': C.BOOL_TRUE}, profile) - ticket = template_xmlui.create(self.host, tickets[0], ignore=['publisher', 'request_data', 'type']) + ticket = template_xmlui.create(self.host, tickets[0], ignore=['request_data', 'type']) template_data[u'item'] = ticket template_data['patches'] = parsed_tickets[0] comments_uri = ticket.widgets['comments_uri'].value @@ -61,6 +65,17 @@ template_data[u'comments'] = data_objects.BlogItems(comments) template_data[u'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[u'url_ticket_edit'] = self.getURLByPath(SubPage('merge-requests'), service.full(), node or u'@', SubPage('merge-requests_edit'), ticket_id) + @defer.inlineCallbacks def on_data_post(self, request): type_ = self.getPostedData(request, u'type') diff -r 8a270f32de81 -r 7d5633ccbaf2 src/pages/tickets/view/page_meta.py --- a/src/pages/tickets/view/page_meta.py Fri Jun 01 13:04:51 2018 +0200 +++ b/src/pages/tickets/view/page_meta.py Fri Jun 01 13:04:57 2018 +0200 @@ -3,7 +3,10 @@ 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 @@ -30,14 +33,15 @@ 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(u'service', u''), data.get(u'node', u''), data[u'ticket_id'] profile = self.getProfile(request) if profile is None: profile = C.SERVICE_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] + tickets = yield self.host.bridge.ticketsGet(service.full() if service else u'', 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[u'item'] = ticket comments_uri = ticket.widgets['comments_uri'].value if comments_uri: @@ -54,6 +58,17 @@ template_data[u'comments'] = data_objects.BlogItems(comments) template_data[u'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[u'url_ticket_edit'] = self.getURLByPath(SubPage('tickets'), service.full(), node or u'@', SubPage('tickets_edit'), ticket_id) + @defer.inlineCallbacks def on_data_post(self, request): type_ = self.getPostedData(request, u'type')