adds tiny_mce_assets to protocol export

This commit is contained in:
zmagod 2017-11-21 16:30:48 +01:00
parent 038c15a1ee
commit 91fec89cab
3 changed files with 82 additions and 9 deletions

View file

@ -712,15 +712,29 @@ class ProtocolsController < ApplicationController
protocol.steps.order(:id).each do |step|
step_guid = get_guid(step.id)
step_dir = "#{protocol_dir}/#{step_guid}"
next if step.assets.count <= 0
step.assets.order(:id).each do |asset|
asset_guid = get_guid(asset.id)
asset_file_name = asset_guid.to_s +
File.extname(asset.file_file_name).to_s
ostream.put_next_entry("#{step_dir}/#{asset_file_name}")
input_file = asset.open
ostream.print(input_file.read)
input_file.close
if step.assets.exists?
step.assets.order(:id).each do |asset|
asset_guid = get_guid(asset.id)
asset_file_name = asset_guid.to_s +
File.extname(asset.file_file_name).to_s
ostream.put_next_entry("#{step_dir}/#{asset_file_name}")
input_file = asset.open
ostream.print(input_file.read)
input_file.close
end
end
if step.tiny_mce_assets.exists?
step.tiny_mce_assets.order(:id).each do |tiny_mce_asset|
asset_guid = get_guid(tiny_mce_asset.id)
asset_file_name =
"rte-#{asset_guid.to_s +
File.extname(tiny_mce_asset.image_file_name).to_s}"
ostream.put_next_entry("#{step_dir}/#{asset_file_name}")
input_file = tiny_mce_asset.open
ostream.print(input_file.read)
input_file.close
end
end
end
end

View file

@ -54,6 +54,14 @@ class TinyMceAsset < ActiveRecord::Base
end
end
def open
if image.is_stored_on_s3?
Kernel.open(presigned_url, 'rb')
else
File.open(file.path, 'rb')
end
end
private
def update_estimated_size

View file

@ -35,6 +35,32 @@ module ProtocolsExporter
envelope_xml
end
def tiny_mce_asset_present?(step)
step.tiny_mce_assets.exists?
end
def get_tiny_mce_assets(text)
return unless text
regex = /\[~tiny_mce_id:([0-9a-zA-Z]+)\]/
tiny_assets_xml = "<descriptionAssets>\n"
text.gsub(regex) do |el|
match = el.match(regex)
img = TinyMceAsset.find_by_id(match[1])
next unless img
img_guid = get_guid(img.id)
asset_file_name = "rte-#{img_guid}" \
"#{File.extname(img.image_file_name)}"
asset_xml = "<tinyMceAsset id=\"#{img.id}\" guid=\"#{img_guid}\" " \
"fileRef=\"#{asset_file_name}\">\n"
asset_xml << "<fileName>#{img.image_file_name}</fileName>\n"
asset_xml << "<fileType>#{img.image_content_type}</fileType>\n"
asset_xml << "</tinyMceAsset>\n"
tiny_assets_xml << asset_xml
end
tiny_assets_xml << "</descriptionAssets>\n"
tiny_assets_xml
end
def generate_protocol_xml(protocol)
protocol_name = get_protocol_name(protocol)
protocol_xml = "<eln xmlns=\"http://www.scinote.net\" version=\"1.0\">\n"
@ -56,6 +82,9 @@ module ProtocolsExporter
step_xml << "<name>#{step.name}</name>\n"
step_xml << "<description>#{step.description}</description>\n"
if tiny_mce_asset_present?(step)
step_xml << get_tiny_mce_assets(step.description)
end
# Assets
if step.assets.count > 0
step_xml << "<assets>\n"
@ -217,6 +246,28 @@ module ProtocolsExporter
eln_xsd << "</xs:sequence>\n"
eln_xsd << "</xs:complexType>\n"
eln_xsd << "</xs:element>\n"
eln_xsd << "<xs:element name=\"descriptionAssets\" minOccurs=\"0\">\n"
eln_xsd << "<xs:complexType>\n"
eln_xsd << "<xs:sequence>\n"
eln_xsd << "<xs:element name=\"tinyMceAsset\" maxOccurs=\"unbounded\">\n"
eln_xsd << "<xs:complexType>\n"
eln_xsd << "<xs:all>\n"
eln_xsd << "<xs:element name=\"fileName\" " \
"type=\"xs:string\"></xs:element>\n"
eln_xsd << "<xs:element name=\"fileType\" " \
"type=\"xs:string\"></xs:element>\n"
eln_xsd << "</xs:all>\n"
eln_xsd << "<xs:attribute name=\"id\" type=\"xs:int\" " \
"use=\"required\"></xs:attribute>\n"
eln_xsd << "<xs:attribute name=\"guid\" type=\"xs:string\" " \
"use=\"required\"></xs:attribute>\n"
eln_xsd << "<xs:attribute name=\"fileRef\" type=\"xs:string\" " \
"use=\"required\"></xs:attribute>\n"
eln_xsd << "</xs:complexType>\n"
eln_xsd << "</xs:element>\n"
eln_xsd << "</xs:sequence>\n"
eln_xsd << "</xs:complexType>\n"
eln_xsd << "</xs:element>\n"
eln_xsd << "<xs:element name=\"assets\" minOccurs=\"0\">\n"
eln_xsd << "<xs:complexType>\n"
eln_xsd << "<xs:sequence>\n"