Mercurial > libervia-web
comparison src/pages/tickets/view/page_meta.py @ 1095:7d5633ccbaf2
merge-requests (view), tickets (view): fill "url_ticket_edit" when logged user is publisher of ticket, or node owner.
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 01 Jun 2018 13:04:57 +0200 |
parents | 1c09f41e2f52 |
children | 01e95ec9df9e |
comparison
equal
deleted
inserted
replaced
1094:8a270f32de81 | 1095:7d5633ccbaf2 |
---|---|
1 #!/usr/bin/env python2.7 | 1 #!/usr/bin/env python2.7 |
2 # -*- coding: utf-8 -*- | 2 # -*- coding: utf-8 -*- |
3 | 3 |
4 from libervia.server.constants import Const as C | 4 from libervia.server.constants import Const as C |
5 from sat.core.i18n import _ | 5 from sat.core.i18n import _ |
6 from libervia.server.utils import SubPage | |
7 from libervia.server import session_iface | |
6 from twisted.internet import defer | 8 from twisted.internet import defer |
9 from twisted.words.protocols.jabber import jid | |
7 from sat.tools.common import template_xmlui | 10 from sat.tools.common import template_xmlui |
8 from sat.tools.common import uri | 11 from sat.tools.common import uri |
9 from sat.tools.common import data_objects | 12 from sat.tools.common import data_objects |
10 from sat.core.log import getLogger | 13 from sat.core.log import getLogger |
11 log = getLogger('pages/tickets/view') | 14 log = getLogger('pages/tickets/view') |
28 | 31 |
29 @defer.inlineCallbacks | 32 @defer.inlineCallbacks |
30 def prepare_render(self, request): | 33 def prepare_render(self, request): |
31 data = self.getRData(request) | 34 data = self.getRData(request) |
32 template_data = request.template_data | 35 template_data = request.template_data |
36 session = self.host.getSessionData(request, session_iface.ISATSession) | |
33 service, node, ticket_id = data.get(u'service', u''), data.get(u'node', u''), data[u'ticket_id'] | 37 service, node, ticket_id = data.get(u'service', u''), data.get(u'node', u''), data[u'ticket_id'] |
34 profile = self.getProfile(request) | 38 profile = self.getProfile(request) |
35 | 39 |
36 if profile is None: | 40 if profile is None: |
37 profile = C.SERVICE_PROFILE | 41 profile = C.SERVICE_PROFILE |
38 | 42 |
39 tickets = yield self.host.bridge.ticketsGet(service.full() if service else u'', node, C.NO_LIMIT, [ticket_id], '', {}, profile) | 43 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) |
40 ticket = [template_xmlui.create(self.host, x, ignore=['publisher']) for x in tickets[0]][0] | 44 ticket = [template_xmlui.create(self.host, x) for x in tickets[0]][0] |
41 template_data[u'item'] = ticket | 45 template_data[u'item'] = ticket |
42 comments_uri = ticket.widgets['comments_uri'].value | 46 comments_uri = ticket.widgets['comments_uri'].value |
43 if comments_uri: | 47 if comments_uri: |
44 uri_data = uri.parseXMPPUri(comments_uri) | 48 uri_data = uri.parseXMPPUri(comments_uri) |
45 template_data['comments_node'] = comments_node = uri_data['node'] | 49 template_data['comments_node'] = comments_node = uri_data['node'] |
52 profile) | 56 profile) |
53 | 57 |
54 template_data[u'comments'] = data_objects.BlogItems(comments) | 58 template_data[u'comments'] = data_objects.BlogItems(comments) |
55 template_data[u'login_url'] = self.getPageRedirectURL(request) | 59 template_data[u'login_url'] = self.getPageRedirectURL(request) |
56 | 60 |
61 if session.connected: | |
62 # we set edition URL only if user is the publisher or the node owner | |
63 publisher = jid.JID(ticket.widgets['publisher'].value) | |
64 is_publisher = publisher.userhostJID() == session.jid.userhostJID() | |
65 affiliation = None | |
66 if not is_publisher: | |
67 node = node or self.host.ns_map['tickets'] | |
68 affiliation = yield self.host.getAffiliation(request, service, node) | |
69 if is_publisher or affiliation == 'owner': | |
70 template_data[u'url_ticket_edit'] = self.getURLByPath(SubPage('tickets'), service.full(), node or u'@', SubPage('tickets_edit'), ticket_id) | |
71 | |
57 @defer.inlineCallbacks | 72 @defer.inlineCallbacks |
58 def on_data_post(self, request): | 73 def on_data_post(self, request): |
59 type_ = self.getPostedData(request, u'type') | 74 type_ = self.getPostedData(request, u'type') |
60 if type_ == u'comment': | 75 if type_ == u'comment': |
61 blog_page = self.getPageByName(u'blog_view') | 76 blog_page = self.getPageByName(u'blog_view') |