Modifications for image urls
Find and replace the urls by the file urls in DB, in the theme files and layout.html file. Save a copy of those files under "file_orig".
This commit is contained in:
parent
f78400c274
commit
9101a2921e
|
@ -4,34 +4,6 @@ class GridfsController < ActionController::Metal
|
||||||
|
|
||||||
def serve
|
def serve
|
||||||
gridfs_path = env["PATH_INFO"].gsub("/gridfs/", "")
|
gridfs_path = env["PATH_INFO"].gsub("/gridfs/", "")
|
||||||
gridfs_file = Mongo::GridFileSystem.new(Mongoid.database).open(gridfs_path, 'r') rescue nil
|
|
||||||
if gridfs_file
|
|
||||||
self.response_body = gridfs_file.read
|
|
||||||
self.content_type = gridfs_file.content_type
|
|
||||||
else
|
|
||||||
serve_rescue(gridfs_path.split('/').pop)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def serve_images
|
|
||||||
gridfs_path = env["PATH_INFO"]
|
|
||||||
serve_rescue(gridfs_path.split('/').pop)
|
|
||||||
end
|
|
||||||
|
|
||||||
def serve_rescue(file_name)
|
|
||||||
referer = request.env['HTTP_REFERER']
|
|
||||||
if referer.include?('admin')
|
|
||||||
page = Page.find(referer.split('/').pop)
|
|
||||||
else
|
|
||||||
vars = request.env['HTTP_REFERER'].split('/')
|
|
||||||
names = get_names(vars, [])
|
|
||||||
page = Page.find_by_name(names.pop)
|
|
||||||
names.reverse_each do |name|
|
|
||||||
page = page.children.find_by_name(name)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
image = page.design.images.detect{|i| i.file_filename == file_name}
|
|
||||||
gridfs_path = image.file.url.gsub("/gridfs/", "")
|
|
||||||
begin
|
begin
|
||||||
gridfs_file = Mongo::GridFileSystem.new(Mongoid.database).open(gridfs_path, 'r')
|
gridfs_file = Mongo::GridFileSystem.new(Mongoid.database).open(gridfs_path, 'r')
|
||||||
self.response_body = gridfs_file.read
|
self.response_body = gridfs_file.read
|
||||||
|
@ -43,14 +15,4 @@ class GridfsController < ActionController::Metal
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_names(vars, names)
|
|
||||||
page = Page.all(:conditions => {:name => vars.last})
|
|
||||||
names << vars.pop
|
|
||||||
if page.count > 1
|
|
||||||
get_names(vars, names)
|
|
||||||
else
|
|
||||||
names
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
|
@ -60,6 +60,7 @@ class Design
|
||||||
end
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def del_embedded_objects
|
def del_embedded_objects
|
||||||
[[self.layout],self.themes, self.javascripts, self.images].each do |objects|
|
[[self.layout],self.themes, self.javascripts, self.images].each do |objects|
|
||||||
objects.each do |object|
|
objects.each do |object|
|
||||||
|
@ -67,20 +68,32 @@ class Design
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def procs_embedded_objects
|
def procs_embedded_objects
|
||||||
[[self.layout],self.themes, self.javascripts, self.images].each do |objects|
|
[[self.layout], self.javascripts, self.images].each do |objects|
|
||||||
objects.each do |object|
|
objects.each do |object|
|
||||||
if object.file.blank?
|
process_object(object)
|
||||||
object.to_save = false
|
|
||||||
end
|
|
||||||
if object.to_save
|
|
||||||
object.to_save = false
|
|
||||||
object.save
|
|
||||||
end
|
|
||||||
if object.to_destroy
|
|
||||||
object.destroy
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
self.layout.parse_urls
|
||||||
|
self.themes.each do |theme|
|
||||||
|
to_parse_url = theme.to_save ? true : false
|
||||||
|
process_object(theme)
|
||||||
|
theme.parse_urls if to_parse_url
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def process_object(object)
|
||||||
|
if object.file.blank?
|
||||||
|
object.to_save = false
|
||||||
|
end
|
||||||
|
if object.to_save
|
||||||
|
object.to_save = false
|
||||||
|
object.save
|
||||||
|
end
|
||||||
|
if object.to_destroy
|
||||||
|
object.destroy
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,10 +1,15 @@
|
||||||
class Layout < DesignFile
|
class Layout < DesignFile
|
||||||
include Parser
|
include Parser
|
||||||
|
|
||||||
|
mount_uploader :file_orig, AssetUploader
|
||||||
|
|
||||||
|
attr_reader :content
|
||||||
|
|
||||||
embeds_one :menu
|
embeds_one :menu
|
||||||
embedded_in :design
|
embedded_in :design
|
||||||
|
|
||||||
attr_reader :content
|
|
||||||
embeds_many :layout_parts
|
embeds_many :layout_parts
|
||||||
|
|
||||||
|
after_save :parse_layout
|
||||||
|
|
||||||
def content
|
def content
|
||||||
self.file.read
|
self.file.read
|
||||||
|
@ -14,9 +19,39 @@ class Layout < DesignFile
|
||||||
Layout.count > 0
|
Layout.count > 0
|
||||||
end
|
end
|
||||||
|
|
||||||
after_save:parse_layout
|
|
||||||
|
|
||||||
def parse_layout
|
def parse_layout
|
||||||
parse_layout_layout_part(self)
|
parse_layout_layout_part(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def parse_urls
|
||||||
|
orig_content = content = self.file.read.force_encoding("UTF-8")
|
||||||
|
self.remove_file!
|
||||||
|
self.remove_file_orig!
|
||||||
|
names = []
|
||||||
|
images = self.design.images
|
||||||
|
content.scan(/(?<=\<img src=)(.*?)(?=[ \t]|\/\>)/){
|
||||||
|
html_name = $1
|
||||||
|
name = File.basename(html_name).gsub(/[\\\"]/, '').strip
|
||||||
|
file_name = images.detect{ |i| i.file_filename.eql?(name) }.file_url rescue nil
|
||||||
|
names << [html_name, file_name]
|
||||||
|
}
|
||||||
|
names.each do |name|
|
||||||
|
content.gsub!(name[0], name[1])
|
||||||
|
end
|
||||||
|
Dir.mktmpdir('f_path') { |dir|
|
||||||
|
orig_file_name = self.file_filename
|
||||||
|
|
||||||
|
temp_file = File.new(dir + '/' + orig_file_name, 'w+')
|
||||||
|
temp_file.write orig_content.force_encoding("UTF-8")
|
||||||
|
self.file_orig = temp_file
|
||||||
|
|
||||||
|
temp_file = File.new(dir + '/' + orig_file_name, 'w+')
|
||||||
|
temp_file.write content.force_encoding("UTF-8")
|
||||||
|
self.file = temp_file
|
||||||
|
|
||||||
|
Layout.without_callback(:save) do
|
||||||
|
self.save
|
||||||
|
end
|
||||||
|
}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,9 +1,40 @@
|
||||||
class Theme < Stylesheet
|
class Theme < Stylesheet
|
||||||
embedded_in :design
|
embedded_in :design
|
||||||
field :name
|
field :name
|
||||||
|
mount_uploader :file_orig, AssetUploader
|
||||||
|
|
||||||
before_save :set_name
|
before_save :set_name
|
||||||
|
|
||||||
|
def parse_urls
|
||||||
|
orig_content = content = self.file.read
|
||||||
|
self.remove_file!
|
||||||
|
self.remove_file_orig!
|
||||||
|
names = []
|
||||||
|
images = self.design.images
|
||||||
|
content.scan(/(?<=url\()(.*?)(?=\))/){
|
||||||
|
css_name = $1
|
||||||
|
name = File.basename(css_name).gsub(/[\\\"]/, '')
|
||||||
|
file_name = images.detect{ |i| i.file_filename.eql?(name) }.file_url rescue nil
|
||||||
|
names << [css_name, file_name]
|
||||||
|
}
|
||||||
|
names.each do |name|
|
||||||
|
content.gsub!(name[0], name[1])
|
||||||
|
end
|
||||||
|
Dir.mktmpdir('f_path') { |dir|
|
||||||
|
orig_file_name = self.file_filename
|
||||||
|
|
||||||
|
temp_file = File.new(dir + '/' + orig_file_name, 'w+')
|
||||||
|
temp_file.write orig_content.force_encoding("UTF-8")
|
||||||
|
self.file_orig = temp_file
|
||||||
|
|
||||||
|
temp_file = File.new(dir + '/' + orig_file_name, 'w+')
|
||||||
|
temp_file.write content.force_encoding("UTF-8")
|
||||||
|
self.file = temp_file
|
||||||
|
|
||||||
|
self.save
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def set_name
|
def set_name
|
||||||
|
|
|
@ -12,8 +12,10 @@ PrototypeR4::Application.routes.draw do
|
||||||
namespace :admin do
|
namespace :admin do
|
||||||
resources :assets
|
resources :assets
|
||||||
resources :designs do
|
resources :designs do
|
||||||
get 'upload_package' ,:on => :collection
|
collection do
|
||||||
post 'upload_package' ,:on => :collection
|
get 'upload_package'
|
||||||
|
post 'upload_package'
|
||||||
|
end
|
||||||
member do
|
member do
|
||||||
post 'edit_file' => 'designs#edit_file'
|
post 'edit_file' => 'designs#edit_file'
|
||||||
end
|
end
|
||||||
|
@ -50,8 +52,8 @@ PrototypeR4::Application.routes.draw do
|
||||||
|
|
||||||
# routes for gridfs files
|
# routes for gridfs files
|
||||||
match "/gridfs/*path" => "gridfs#serve"
|
match "/gridfs/*path" => "gridfs#serve"
|
||||||
match "/images/*path" => "gridfs#serve_images"
|
# match "/images/*path" => "gridfs#serve_images"
|
||||||
match "/admin/pages/images/*path" => "gridfs#serve_images"
|
# match "/admin/pages/images/*path" => "gridfs#serve_images"
|
||||||
|
|
||||||
# routes for pages to generate
|
# routes for pages to generate
|
||||||
match '*page_name' => 'pages#show', :as => :page, :constraints => lambda{|request|
|
match '*page_name' => 'pages#show', :as => :page, :constraints => lambda{|request|
|
||||||
|
|
Reference in New Issue