changeset 1078:296bda6b7ed0

pages (tickets): tickets discovery: if not is not specified in URL, new discovery page is used. Discovery is for now basic and allows only to use a free jid with standard node, or display nodes specified in config. Service, node and name of a tickets node can be specified in config using tickets_trackers_json.
author Goffi <goffi@goffi.org>
date Mon, 26 Mar 2018 21:32:16 +0200
parents 880ea673aaff
children 3af28f84ce91
files src/pages/tickets/disco/page_meta.py src/pages/tickets/new/page_meta.py src/pages/tickets/page_meta.py src/twisted/plugins/libervia_server.py
diffstat 4 files changed, 50 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pages/tickets/disco/page_meta.py	Mon Mar 26 21:32:16 2018 +0200
@@ -0,0 +1,39 @@
+#!/usr/bin/env python2.7
+# -*- coding: utf-8 -*-
+
+from libervia.server.constants import Const as C
+from twisted.words.protocols.jabber import jid
+from sat.core.log import getLogger
+log = getLogger('pages/ticket')
+"""ticket handling pages"""
+
+name = u'tickets_disco'
+access = C.PAGES_ACCESS_PUBLIC
+template = u"ticket/discover.html"
+
+
+def prepare_render(self, request):
+    tickets_trackers_config = self.host.options['tickets_trackers_json']
+    if tickets_trackers_config:
+        trackers = request.template_data['tickets_trackers'] = []
+        try:
+            for tracker_data in tickets_trackers_config:
+                service = tracker_data[u'service']
+                node = tracker_data[u'node']
+                name = tracker_data[u'name']
+                url = self.getPageByName(u'tickets').getURL(service, node)
+                trackers.append({u'name': name, u'url': url})
+        except KeyError as e:
+            log.warning(u"Missing field in tickets_trackers_json: {msg}".format(msg=e))
+        except Exception as e:
+            log.warning(u"Can't decode tickets trackers: {msg}".format(msg=e))
+
+def on_data_post(self, request):
+    jid_str = self.getPostedData(request, u'jid')
+    try:
+       jid_ = jid.JID(jid_str)
+    except RuntimeError:
+        self.pageError(request, C.HTTP_BAD_REQUEST)
+    # for now we just use default node
+    url = self.getPageByName(u'tickets').getURL(jid_.full(), u'@')
+    self.HTTPRedirect(request, url)
--- a/src/pages/tickets/new/page_meta.py	Mon Mar 26 08:20:41 2018 +0200
+++ b/src/pages/tickets/new/page_meta.py	Mon Mar 26 21:32:16 2018 +0200
@@ -46,6 +46,6 @@
     profile = self.getProfile(request)
     yield self.host.bridge.ticketSet(service.full(), node, posted_data, u'', u'', {}, profile)
     # we don't want to redirect to creation page on success, but to tickets list
-    data['post_redirect_page'] = (self.getPageByName(u'tickets_list'),
+    data['post_redirect_page'] = (self.getPageByName(u'tickets'),
                                   service.full(),
                                   node or u'@')
--- a/src/pages/tickets/page_meta.py	Mon Mar 26 08:20:41 2018 +0200
+++ b/src/pages/tickets/page_meta.py	Mon Mar 26 21:32:16 2018 +0200
@@ -2,48 +2,29 @@
 # -*- coding: utf-8 -*-
 
 from libervia.server.constants import Const as C
-from sat.core.i18n import _
 from twisted.internet import defer
-from twisted.words.protocols.jabber import jid
 from sat.tools.common import template_xmlui
 from sat.tools.common import data_objects
 from sat.core.log import getLogger
 log = getLogger('pages/ticket')
 """ticket handling pages"""
 
-name = u'tickets_list'
+name = u'tickets'
 access = C.PAGES_ACCESS_PUBLIC
 template = u"ticket/overview.html"
 
 
 def parse_url(self, request):
-    # check the service and node to use
-    try:
-        service = self.nextPath(request)
-        node = self.nextPath(request)
-    except IndexError:
-        log.warning(_(u"missing service and node"))
-        self.pageError(request, C.HTTP_BAD_REQUEST)
-
-    if not service or service == u'@':
-        service = u''
+    self.getPathArgs(request, ['service', 'node'], service='jid')
+    data = self.getRData(request)
 
-    if service:
-        try:
-            service = jid.JID(service)
-        except Exception:
-            log.warning(_(u"bad service entered: {}").format(service))
-            self.pageError(request, C.HTTP_BAD_REQUEST)
-
-    if not node or node == u'@':
-        node = u''
-
-    data = self.getRData(request)
-    data['service'] = service
-    data['node'] = node
-
+    service, node = data[u'service'], data[u'node']
+    if node is None:
+        self.pageRedirect(u"tickets_disco", request)
+    if node == u'@':
+        node = data[u'node'] = u''
     template_data = request.template_data
-    template_data[u'url_tickets_list'] = self.getPageByName('tickets_list').getURL(service.full(), node or u'@')
+    template_data[u'url_tickets_list'] = self.getURL(service.full(), node or u'@')
     template_data[u'url_tickets_new'] = self.getSubPageURL(request, 'tickets_new')
 
 @defer.inlineCallbacks
--- a/src/twisted/plugins/libervia_server.py	Mon Mar 26 08:20:41 2018 +0200
+++ b/src/twisted/plugins/libervia_server.py	Mon Mar 26 21:32:16 2018 +0200
@@ -118,6 +118,7 @@
     ['url_redirections_profile', None, '', None],
     ['url_redirections_dict', None, {}, None],
     ['menu_json', None, C.DEFAULT_MENU, None],
+    ['tickets_trackers_json', None, None, None],
 ]
 
 def initialise(options):