Make the storage path Rails.root related #733

This commit is contained in:
Karel Picman 2017-06-02 09:30:32 +02:00
parent 446c38d83d
commit 21fb2aa865
6 changed files with 25 additions and 18 deletions

View File

@ -4,6 +4,11 @@ Changelog for Redmine DMSF
1.6.0 *????-??-??* 1.6.0 *????-??-??*
------------------ ------------------
IMPORTANT
1. Files in the filesystem are re-organized by a new system based on date.
2. DMS storage directory plugin option is related to the rails root directory.
1.5.9 *2016-03-01* 1.5.9 *2016-03-01*
------------------ ------------------

View File

@ -102,10 +102,12 @@ class DmsfFile < ActiveRecord::Base
def self.storage_path def self.storage_path
return @@storage_path if @@storage_path.present? return @@storage_path if @@storage_path.present?
path = Setting.plugin_redmine_dmsf['dmsf_storage_directory'] path = Setting.plugin_redmine_dmsf['dmsf_storage_directory']
path = Pathname(Redmine::Configuration['attachments_storage_path']).join('dmsf') if path.blank? && Redmine::Configuration['attachments_storage_path'].present? if path.blank?
path = Rails.root.join('files/dmsf').to_s if path.blank? path = 'dmsf'
path.strip if path else
path path.strip!
end
Rails.root.join(path)
end end
# Lets introduce a write for storage path, that way we can also # Lets introduce a write for storage path, that way we can also

View File

@ -133,20 +133,20 @@ class DmsfFileRevision < ActiveRecord::Base
def storage_base_path def storage_base_path
time = self.created_at || DateTime.now time = self.created_at || DateTime.now
path = time.strftime('%Y/%m') path = time.strftime('%Y/%m')
"#{DmsfFile.storage_path}/#{path}" DmsfFile.storage_path.join path
end end
def disk_file def disk_file
path = self.storage_base_path path = self.storage_base_path
FileUtils.mkdir_p(path) unless File.exist?(path) FileUtils.mkdir_p(path) unless File.exist?(path)
"#{path}/#{self.disk_filename}" path.join self.disk_filename
end end
def new_storage_filename def new_storage_filename
raise DmsfAccessError, 'File id is not set' unless self.dmsf_file.id raise DmsfAccessError, 'File id is not set' unless self.dmsf_file.id
filename = DmsfHelper.sanitize_filename(self.name) filename = DmsfHelper.sanitize_filename(self.name)
timestamp = DateTime.now.strftime("%y%m%d%H%M%S") timestamp = DateTime.now.strftime("%y%m%d%H%M%S")
while File.exist?(File.join(storage_base_path, "#{timestamp}_#{self.dmsf_file.id}_#{filename}")) while File.exist?(storage_base_path.join("#{timestamp}_#{self.dmsf_file.id}_#{filename}"))
timestamp.succ! timestamp.succ!
end end
"#{timestamp}_#{self.dmsf_file.id}_#{filename}" "#{timestamp}_#{self.dmsf_file.id}_#{filename}"

View File

@ -62,21 +62,21 @@
<%= content_tag(:label, l(:label_file_storage_directory)) %> <%= content_tag(:label, l(:label_file_storage_directory)) %>
<% <%
storage_dir = @settings['dmsf_storage_directory'].strip if @settings['dmsf_storage_directory'].present? storage_dir = @settings['dmsf_storage_directory'].strip if @settings['dmsf_storage_directory'].present?
storage_dir = "#{Rails.root}/files/dmsf" if storage_dir.blank? storage_dir = 'dmsf' if storage_dir.blank?
%> %>
<%= text_field_tag 'settings[dmsf_storage_directory]', storage_dir, :size => 50 %> <%= text_field_tag 'settings[dmsf_storage_directory]', storage_dir, :size => 50 %>
<em class="info"> <em class="info">
<%= l(:label_default) %>: <%= "#{Rails.root}/files/dmsf" %> <%= l(:label_default) %>: dmsf
</em> </em>
</p> </p>
<% unless File.exist?(storage_dir) %> <% unless File.exist?(DmsfFile.storage_path) %>
<% begin %> <% begin %>
<% Dir.mkdir(storage_dir) %> <% Dir.mkdir(DmsfFile.storage_path) %>
<% rescue %> <% rescue %>
<p class="warning"><%= l(:error_file_storage_directory_does_not_exist) %></p> <p class="warning"><%= l(:error_file_storage_directory_does_not_exist) %></p>
<% end %> <% end %>
<% end %> <% end %>
<% testfilename = "#{storage_dir}/test.test" %> <% testfilename = DmsfFile.storage_path.join('test.test') %>
<% if File.exist?(storage_dir) %> <% if File.exist?(storage_dir) %>
<% begin %> <% begin %>
<% File.open(testfilename, 'wb') do |file| %> <% File.open(testfilename, 'wb') do |file| %>

View File

@ -88,7 +88,7 @@ class Dmsf144 < ActiveRecord::Migration
begin begin
DmsfFileRevision.visible.each {|rev| DmsfFileRevision.visible.each {|rev|
next if rev.project.nil? next if rev.project.nil?
existing = "#{DmsfFile.storage_path}/#{rev.disk_filename}" existing = DmsfFile.storage_path.join rev.disk_filename
new_path = rev.disk_file new_path = rev.disk_file
begin begin
if File.exist?(existing) if File.exist?(existing)
@ -142,13 +142,13 @@ class Dmsf144 < ActiveRecord::Migration
DmsfFileRevision.visible.each {|rev| DmsfFileRevision.visible.each {|rev|
next if rev.project.nil? next if rev.project.nil?
project = rev.project.identifier.gsub(/[^\w\.\-]/,'_') project = rev.project.identifier.gsub(/[^\w\.\-]/,'_')
existing = "#{DmsfFile.storage_path}/p_#{project}/#{rev.disk_filename}" existing = DmsfFile.storage_path.jopin("p_#{project}/#{rev.disk_filename}")
new_path = "#{DmsfFile.storage_path}/#{rev.disk_filename}" new_path = DmsfFile.storage_path.join(rev.disk_filename)
if File.exist?(existing) if File.exist?(existing)
if File.exist?(new_path) if File.exist?(new_path)
rev.disk_filename = rev.new_storage_filename rev.disk_filename = rev.new_storage_filename
rev.save! rev.save!
new_path = "#{DmsfFile.storage_path}/#{rev.disk_filename}" new_path = DmsfFile.storage_path.join(rev.disk_filename)
end end
FileUtils.mv(existing, new_path) FileUtils.mv(existing, new_path)
end end

View File

@ -40,8 +40,8 @@ Redmine::Plugin.register :redmine_dmsf do
'dmsf_max_file_download' => '0', 'dmsf_max_file_download' => '0',
'dmsf_max_email_filesize' => '0', 'dmsf_max_email_filesize' => '0',
'dmsf_max_ajax_upload_filesize' => '100', 'dmsf_max_ajax_upload_filesize' => '100',
'dmsf_storage_directory' => Rails.root.join('files/dmsf').to_s, 'dmsf_storage_directory' => 'dmsf',
'dmsf_index_database' => Rails.root.join('files/dmsf_index').to_s, 'dmsf_index_database' => 'dmsf_index',
'dmsf_stemming_lang' => 'english', 'dmsf_stemming_lang' => 'english',
'dmsf_stemming_strategy' => 'STEM_NONE', 'dmsf_stemming_strategy' => 'STEM_NONE',
'dmsf_webdav' => '1', 'dmsf_webdav' => '1',