mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-12-17 22:28:38 +08:00
Add delay job for handling unknown tinyMCE images (#1781)
* Add delay job for handling unknown tinyMCE images
This commit is contained in:
parent
d959769b65
commit
b22dba7f05
3 changed files with 49 additions and 1 deletions
|
|
@ -79,6 +79,41 @@ module TinyMceImages
|
||||||
target.reassign_tiny_mce_image_references(cloned_img_ids)
|
target.reassign_tiny_mce_image_references(cloned_img_ids)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def copy_unknown_tiny_mce_images
|
||||||
|
asset_team_id = Team.find_by_object(self)
|
||||||
|
return unless asset_team_id
|
||||||
|
|
||||||
|
object_field = Extends::RICH_TEXT_FIELD_MAPPINGS[self.class.name]
|
||||||
|
|
||||||
|
image_changed = false
|
||||||
|
parsed_description = Nokogiri::HTML(read_attribute(object_field))
|
||||||
|
parsed_description.css('img').each do |image|
|
||||||
|
if image['data-mce-token']
|
||||||
|
asset = TinyMceAsset.find_by_id(Base62.decode(image['data-mce-token']))
|
||||||
|
|
||||||
|
next if asset && asset.object == self
|
||||||
|
|
||||||
|
new_image = asset.image
|
||||||
|
else
|
||||||
|
new_image = URI.parse(image['src'])
|
||||||
|
end
|
||||||
|
|
||||||
|
new_asset = TinyMceAsset.create(
|
||||||
|
image: new_image,
|
||||||
|
object: self,
|
||||||
|
team_id: asset_team_id
|
||||||
|
)
|
||||||
|
|
||||||
|
image['src'] = ''
|
||||||
|
image['class'] = 'img-responsive'
|
||||||
|
image['data-mce-token'] = Base62.encode(new_asset.id)
|
||||||
|
image_changed = true
|
||||||
|
end
|
||||||
|
update(object_field => parsed_description.css('body').inner_html.to_s) if image_changed
|
||||||
|
rescue StandardError => e
|
||||||
|
Rails.logger.error "Object: #{self.class.name}, id: #{id}, error: #{e.message}"
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def clean_tiny_mce_image_urls
|
def clean_tiny_mce_image_urls
|
||||||
|
|
|
||||||
|
|
@ -324,6 +324,17 @@ class Team < ApplicationRecord
|
||||||
query.select(:id, :name).map { |i| { id: i[:id], name: ApplicationController.helpers.escape_input(i[:name]) } }
|
query.select(:id, :name).map { |i| { id: i[:id], name: ApplicationController.helpers.escape_input(i[:name]) } }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.find_by_object(obj)
|
||||||
|
case obj.class.name
|
||||||
|
when 'Protocol'
|
||||||
|
obj.team_id
|
||||||
|
when 'MyModule', 'Step'
|
||||||
|
obj.protocol.team_id
|
||||||
|
when 'ResultText'
|
||||||
|
obj.result.my_module.protocol.team_id
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def generate_template_project
|
def generate_template_project
|
||||||
|
|
|
||||||
|
|
@ -41,9 +41,11 @@ class TinyMceAsset < ApplicationRecord
|
||||||
end
|
end
|
||||||
images.each do |image|
|
images.each do |image|
|
||||||
image_to_update = find_by_id(Base62.decode(image))
|
image_to_update = find_by_id(Base62.decode(image))
|
||||||
image_to_update&.update(object: object, saved: true)
|
image_to_update&.update(object: object, saved: true) unless image_to_update.object
|
||||||
end
|
end
|
||||||
where(id: images_to_delete).destroy_all
|
where(id: images_to_delete).destroy_all
|
||||||
|
|
||||||
|
object.delay(queue: :assets).copy_unknown_tiny_mce_images
|
||||||
rescue StandardError => e
|
rescue StandardError => e
|
||||||
Rails.logger.error e.message
|
Rails.logger.error e.message
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue