From 050913734b5e176589657f4ce3e737a590957f5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Tue, 4 Jun 2013 21:47:29 +0200 Subject: [PATCH] api: allow POSTing JSON to fill workflow_data (#3011) --- wcs/wf/accept_data.py | 80 +++++++++++++++++++++++++++++++++++++++++++++++++ wcs/workflows.py | 1 + 2 files changed, 81 insertions(+) create mode 100644 wcs/wf/accept_data.py diff --git a/wcs/wf/accept_data.py b/wcs/wf/accept_data.py new file mode 100644 index 0000000..1292c8f --- /dev/null +++ b/wcs/wf/accept_data.py @@ -0,0 +1,80 @@ +# w.c.s. - web application for online forms +# Copyright (C) 2005-2013 Entr'ouvert +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . + +import json +import sys + +from quixote import get_publisher, get_request, redirect + +from quixote.directory import Directory +from qommon.form import * +from qommon import errors + +from wcs.roles import get_user_roles +from wcs.workflows import WorkflowStatusItem, register_item_class +from wcs.api import get_user_from_api_query_string + + +class DataDirectory(Directory): + _q_exports = [''] + + def __init__(self, formdata, wfstatusitem, wfstatus): + self.formdata = formdata + self.wfstatusitem = wfstatusitem + + def _q_index(self): + if not get_request().is_json(): + raise errors.AccessForbiddenError() + if not get_request().get_method() == 'POST': + raise errors.AccessForbiddenError() + + user = get_user_from_api_query_string() or get_request().user + if not self.wfstatusitem.check_auth(self.formdata, user): + raise errors.AccessForbiddenError() + + if hasattr(get_request(), 'json'): + self.formdata.update_workflow_data(get_request().json) + self.formdata.store() + + +class AcceptDataWorkflowStatusItem(WorkflowStatusItem): + description = N_('Accept Data') + key = 'accept-data' + waitpoint = False + by = [] + + directory_name = 'data' + directory_class = DataDirectory + + def render_as_line(self): + if self.by: + return _('Accept Data by %s') % self.render_list_of_roles(self.by) + else: + return _('Accept Data (not completed)') + + def get_parameters(self): + return ('by',) + + def add_parameters_widgets(self, form, parameters, prefix='', formdef=None): + if 'by' in parameters: + form.add(WidgetList, '%sby' % prefix, title = _('By'), + element_type = SingleSelectWidget, + value = self.by, + add_element_label = _('Add Role'), + element_kwargs={'render_br': False, + 'options': [(None, '---')] + self.get_list_of_roles()}) + +register_item_class(AcceptDataWorkflowStatusItem) diff --git a/wcs/workflows.py b/wcs/workflows.py index a4c7ad8..b5bbdac 100644 --- a/wcs/workflows.py +++ b/wcs/workflows.py @@ -1412,3 +1412,4 @@ def load_extra(): import wf.wscall import wf.form import wf.register_comment + import wf.accept_data -- 1.7.10.4