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')