plugin tickets: fill reporter field when it is not already filled

This commit is contained in:
Goffi 2017-11-11 18:39:26 +01:00
commit 774d9a37a4

View file

@ -35,7 +35,7 @@ PLUGIN_INFO = {
C.PI_IMPORT_NAME: "TICKETS",
C.PI_TYPE: "EXP",
C.PI_PROTOCOLS: [],
C.PI_DEPENDENCIES: ["XEP-0060", "PUBSUB_SCHEMA", "XEP-0277"],
C.PI_DEPENDENCIES: ["XEP-0060", "PUBSUB_SCHEMA", "XEP-0277", "IDENTITY"],
C.PI_MAIN: "Tickets",
C.PI_HANDLER: "no",
C.PI_DESCRIPTION: _("""Tickets management plugin""")
@ -50,6 +50,7 @@ class Tickets(object):
self._p = self.host.plugins["XEP-0060"]
self._s = self.host.plugins["PUBSUB_SCHEMA"]
self._m = self.host.plugins["XEP-0277"]
self._i = self.host.plugins["IDENTITY"]
host.bridge.addMethod("ticketsGet", ".plugin",
in_sign='ssiassa{ss}s', out_sign='(asa{ss})',
method=self._get,
@ -64,7 +65,19 @@ class Tickets(object):
method=self._getSchema,
async=True)
def _labelsFilter(self, widget_type, args, kwargs):
def _reporterFilter(self, client, form_xmlui, widget_type, args, kwargs):
if not args[0]:
# if reporter is not filled, we use user part of publisher
# (if we have it)
try:
publisher = jid.JID(form_xmlui.named_widgets['publisher'].value)
except (KeyError, RuntimeError):
pass
else:
args[0] = publisher.user.capitalize()
return widget_type, args, kwargs
def _labelsFilter(self, form_xmlui, widget_type, args, kwargs):
if widget_type != u'textbox':
return widget_type, args, kwargs
widget_type = u'list'
@ -74,7 +87,7 @@ class Tickets(object):
'styles': (u'noselect', u'extensible', u'reducible')}
return widget_type, args, kwargs
def _dateFilter(self, widget_type, args, kwargs):
def _dateFilter(self, form_xmlui, widget_type, args, kwargs):
if widget_type != u'string':
return widget_type, args, kwargs
# we convert XMPP date to timestamp
@ -101,7 +114,8 @@ class Tickets(object):
"""
if not node:
node = NS_TICKETS
filters = {u'labels': self._labelsFilter,
filters = {u'reporter': lambda *args: self._reporterFilter(client, *args),
u'labels': self._labelsFilter,
u'created': self._dateFilter,
u'updated': self._dateFilter,
}
@ -167,6 +181,9 @@ class Tickets(object):
values['comments_uri'] = uri.buildXMPPUri(u'pubsub', subtype='microblog', path=comments_service.full(), node=comments_node)
values['updated'] = now
if not values.get('reporter'):
identity = yield self._i.getIdentity(client, client.jid)
values['reporter'] = identity['nick']
item_id = yield self._s.sendDataFormItem(client, service, node, values, schema, item_id, extra, deserialise)
defer.returnValue(item_id)