diff 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
line wrap: on
line diff
--- 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')