From 5fcb0e62878fb1ceba2ab5d4bbb79826b0e8666c Mon Sep 17 00:00:00 2001
From: Benjamin Dauvergne
Date: Tue, 3 May 2016 23:54:11 +0200
Subject: [PATCH] export evolutions in form API (#10820)
---
wcs/formdata.py | 32 +++++++++++++++++++++++++++-----
wcs/users.py | 11 +++++++++++
wcs/wf/register_comment.py | 6 ++++++
wcs/wf/wscall.py | 8 ++++++++
4 files changed, 52 insertions(+), 5 deletions(-)
diff --git a/wcs/formdata.py b/wcs/formdata.py
index b78143e..4f80a9d 100644
--- a/wcs/formdata.py
+++ b/wcs/formdata.py
@@ -150,6 +150,29 @@ class Evolution(object):
l.append(p.view())
return l
+ def get_json_export_dict(self, user):
+ data = {
+ 'status': self.status,
+ 'time': self.time,
+ }
+ try:
+ if self.who != '_submitter':
+ user = get_publisher().user_class.get(self.who)
+ except KeyError:
+ pass
+ else:
+ if user:
+ data['who'] = user.get_json_export_dict()
+ if self.comment:
+ data['comment'] = self.comment
+ parts = []
+ for part in self.parts or []:
+ if hasattr(part, 'get_json_export_dict'):
+ parts.append(part.get_json_export_dict())
+ if parts:
+ data['parts'] = parts
+ return data
+
class FormData(StorableObject):
_names = 'XX'
@@ -699,11 +722,7 @@ class FormData(StorableObject):
user = None
break
if user:
- data['user'] = {'id': user.id, 'name': user.display_name}
- if user.email:
- data['user']['email'] = user.email
- if user.name_identifiers:
- data['user']['NameID'] = user.name_identifiers
+ data['user'] = user.get_json_export_dict()
data['fields'] = get_json_dict(self.formdef.fields, self.data,
include_files=include_files)
@@ -742,6 +761,9 @@ class FormData(StorableObject):
'channel': self.get_submission_channel_label(),
}
+ if self.evolution:
+ data['evolution'] = [evo.get_json_export_dict(user) for evo in self.evolution]
+
return data
def export_to_json(self, include_files=True):
diff --git a/wcs/users.py b/wcs/users.py
index 8bb602d..9a14f60 100644
--- a/wcs/users.py
+++ b/wcs/users.py
@@ -188,6 +188,17 @@ class User(StorableObject):
return self.__dict__['form_data'].get(attr[1:])
raise AttributeError()
+ def get_json_export_dict(self):
+ data = {
+ 'id': self.id,
+ 'name': self.display_name,
+ }
+ if self.email:
+ data['email'] = self.email
+ if self.name_identifiers:
+ data['NameID'] = self.name_identifiers
+ return data
+
Substitutions.register('session_user', category=N_('User'), comment=N_('Session User'))
Substitutions.register('session_user_display_name', category=N_('User'), comment=N_('Session User Display Name'))
diff --git a/wcs/wf/register_comment.py b/wcs/wf/register_comment.py
index a7dd418..5d89cd5 100644
--- a/wcs/wf/register_comment.py
+++ b/wcs/wf/register_comment.py
@@ -51,6 +51,12 @@ class JournalEvolutionPart: #pylint: disable=C1001
[(x or htmltext('
')) for x in self.content.splitlines()]) + \
htmltext('
')
+ def get_json_export_dict(self):
+ return {
+ 'type': 'journal-evolution',
+ 'content': self.content,
+ }
+
class RegisterCommenterWorkflowStatusItem(WorkflowStatusItem):
description = N_('Record in Log')
diff --git a/wcs/wf/wscall.py b/wcs/wf/wscall.py
index a35e53b..39771c2 100644
--- a/wcs/wf/wscall.py
+++ b/wcs/wf/wscall.py
@@ -79,6 +79,14 @@ class JournalWsCallErrorPart: #pylint: disable=C1001
r += htmltext('')
return r.getvalue()
+ def get_json_export_dict(self):
+ return {
+ 'type': 'wscall-error',
+ 'summary': self.summary,
+ 'label': self.label,
+ 'data': self.data,
+ }
+
class WebserviceCallStatusItem(WorkflowStatusItem):
description = N_('Webservice Call')
--
2.1.4