diff --git a/src/plugins/plugin_misc_tickets.py b/src/plugins/plugin_misc_tickets.py index bda77d09..1ffc0469 100755 --- a/src/plugins/plugin_misc_tickets.py +++ b/src/plugins/plugin_misc_tickets.py @@ -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)