Compare commits

...

4 Commits

5 changed files with 22 additions and 6 deletions

View File

@ -858,7 +858,7 @@ class FormPage(Directory):
selected_filter, user=user, query=query, criterias=criterias,
order_by=order_by)
if get_request().form.get('full') == 'on':
output = [json.loads(filled.export_to_json()) for filled in items]
output = [json.loads(filled.export_to_json(include_files=False)) for filled in items]
else:
output = [{'id': filled.id,
'url': filled.get_url(),

View File

@ -17,6 +17,7 @@
import time
import random
import re
import base64
import xml.etree.ElementTree as ET
from quixote import get_request, get_publisher
@ -708,7 +709,12 @@ class FileField(WidgetField):
return ['%s' % value]
def get_json_value(self, value):
return {'field_id': self.id, 'filename': value.base_filename}
return {
'field_id': self.id,
'filename': value.base_filename,
'content_type': value.content_type or 'application/octet-stream',
'content': base64.b64encode(value.get_content())
}
def perform_more_widget_changes(self, form, kwargs, edit = True):
if not edit:

View File

@ -28,6 +28,7 @@ import qommon.misc
from qommon.substitution import Substitutions
from roles import Role
from fields import FileField
def get_dict_with_varnames(fields, data, formdata=None, varnames_only=False):
@ -87,11 +88,13 @@ def flatten_dict(d):
del d[k]
def get_json_dict(fields, data):
def get_json_dict(fields, data, include_files=True):
new_data = {}
for field in fields:
if not field.varname: # exports only named fields
continue
if not include_files and isinstance(field, FileField):
continue
if data is not None:
value = data.get(field.id)
if value and hasattr(field, 'get_json_value'):
@ -527,7 +530,7 @@ class FormData(StorableObject):
evo.parts = None
self.store()
def export_to_json(self):
def export_to_json(self, include_files=True):
data = {}
data['id'] = '%s/%s' % (self.formdef.url_name, self.id)
data['display_id'] = self.get_display_id()
@ -553,7 +556,8 @@ class FormData(StorableObject):
if user:
data['user'] = {'id': user.id, 'name': user.display_name}
data['fields'] = get_json_dict(self.formdef.fields, self.data)
data['fields'] = get_json_dict(self.formdef.fields, self.data,
include_files=include_files)
data['workflow'] = {}
wf_status = self.get_visible_status()

View File

@ -687,6 +687,12 @@ class PicklableUpload(Upload):
# quack like UploadedFile
return self.get_file_pointer()
def get_content(self):
if hasattr(self, 'qfilename'):
filename = os.path.join(get_publisher().app_dir, 'uploads', self.qfilename)
return file(filename).read()
return None
class EmailWidget(StringWidget):
HTML_TYPE = 'email'

View File

@ -574,7 +574,7 @@ form.small button + a.button {
#main.enable-transitions,
#sidepage.enable-transitions ul#sidepage-menu,
#sidepage.enable-transitions {
transition-duration: 2400ms;
transition-duration: 400ms;
}
#sidepage.sidepage-expanded {