changeset 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 8a270f32de81
children 01538d8a77be
files src/pages/merge-requests/view/page_meta.py src/pages/tickets/view/page_meta.py
diffstat 2 files changed, 36 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- 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')
--- 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')