mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-11-10 00:11:22 +08:00
adds tiny_mce_assets to protocol export
This commit is contained in:
parent
038c15a1ee
commit
91fec89cab
3 changed files with 82 additions and 9 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue