Mercurial > libervia-web
comparison src/pages/merge-requests/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 | f134c0ecb1d5 |
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') | |
12 """ticket handling pages""" | |
13 | 14 |
14 name = u"merge-requests_view" | 15 name = u"merge-requests_view" |
15 access = C.PAGES_ACCESS_PUBLIC | 16 access = C.PAGES_ACCESS_PUBLIC |
16 template = u"merge-request/item.html" | 17 template = u"merge-request/item.html" |
18 log = getLogger(u'pages/' + name) | |
17 | 19 |
18 | 20 |
19 def parse_url(self, request): | 21 def parse_url(self, request): |
20 try: | 22 try: |
21 item_id = self.nextPath(request) | 23 item_id = self.nextPath(request) |
28 | 30 |
29 @defer.inlineCallbacks | 31 @defer.inlineCallbacks |
30 def prepare_render(self, request): | 32 def prepare_render(self, request): |
31 data = self.getRData(request) | 33 data = self.getRData(request) |
32 template_data = request.template_data | 34 template_data = request.template_data |
35 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'] | 36 service, node, ticket_id = data.get(u'service', u''), data.get(u'node', u''), data[u'ticket_id'] |
34 profile = self.getProfile(request) | 37 profile = self.getProfile(request) |
35 | 38 |
36 if profile is None: | 39 if profile is None: |
37 profile = C.SERVICE_PROFILE | 40 profile = C.SERVICE_PROFILE |
39 tickets, metadata, parsed_tickets = yield self.host.bridge.mergeRequestsGet(service.full() if service else u'', | 42 tickets, metadata, parsed_tickets = yield self.host.bridge.mergeRequestsGet(service.full() if service else u'', |
40 node, | 43 node, |
41 C.NO_LIMIT, | 44 C.NO_LIMIT, |
42 [ticket_id], | 45 [ticket_id], |
43 '', | 46 '', |
44 {'parse': C.BOOL_TRUE}, | 47 {'parse': C.BOOL_TRUE, |
48 'labels_as_list': C.BOOL_TRUE}, | |
45 profile) | 49 profile) |
46 ticket = template_xmlui.create(self.host, tickets[0], ignore=['publisher', 'request_data', 'type']) | 50 ticket = template_xmlui.create(self.host, tickets[0], ignore=['request_data', 'type']) |
47 template_data[u'item'] = ticket | 51 template_data[u'item'] = ticket |
48 template_data['patches'] = parsed_tickets[0] | 52 template_data['patches'] = parsed_tickets[0] |
49 comments_uri = ticket.widgets['comments_uri'].value | 53 comments_uri = ticket.widgets['comments_uri'].value |
50 if comments_uri: | 54 if comments_uri: |
51 uri_data = uri.parseXMPPUri(comments_uri) | 55 uri_data = uri.parseXMPPUri(comments_uri) |
59 profile) | 63 profile) |
60 | 64 |
61 template_data[u'comments'] = data_objects.BlogItems(comments) | 65 template_data[u'comments'] = data_objects.BlogItems(comments) |
62 template_data[u'login_url'] = self.getPageRedirectURL(request) | 66 template_data[u'login_url'] = self.getPageRedirectURL(request) |
63 | 67 |
68 if session.connected: | |
69 # we set edition URL only if user is the publisher or the node owner | |
70 publisher = jid.JID(ticket.widgets['publisher'].value) | |
71 is_publisher = publisher.userhostJID() == session.jid.userhostJID() | |
72 affiliation = None | |
73 if not is_publisher: | |
74 node = node or self.host.ns_map['tickets'] | |
75 affiliation = yield self.host.getAffiliation(request, service, node) | |
76 if is_publisher or affiliation == 'owner': | |
77 template_data[u'url_ticket_edit'] = self.getURLByPath(SubPage('merge-requests'), service.full(), node or u'@', SubPage('merge-requests_edit'), ticket_id) | |
78 | |
64 @defer.inlineCallbacks | 79 @defer.inlineCallbacks |
65 def on_data_post(self, request): | 80 def on_data_post(self, request): |
66 type_ = self.getPostedData(request, u'type') | 81 type_ = self.getPostedData(request, u'type') |
67 if type_ == u'comment': | 82 if type_ == u'comment': |
68 blog_page = self.getPageByName(u'blog_view') | 83 blog_page = self.getPageByName(u'blog_view') |