diff --git a/app/controllers/dmsf_files_controller.rb b/app/controllers/dmsf_files_controller.rb index c67b988e..441bc5bf 100644 --- a/app/controllers/dmsf_files_controller.rb +++ b/app/controllers/dmsf_files_controller.rb @@ -139,10 +139,16 @@ class DmsfFilesController < ApplicationController revision.size = last_revision.size revision.disk_filename = last_revision.disk_filename revision.mime_type = last_revision.mime_type + if last_revision.digest.blank? + revision.digest = DmsfFileRevision.create_digest last_revision.disk_file + else + revision.digest = last_revision.digest + end else revision.size = file_upload.size revision.disk_filename = revision.new_storage_filename revision.mime_type = Redmine::MimeType.of(file_upload.original_filename) + revision.digest = DmsfFileRevision.create_digest file_upload.path end # Custom fields diff --git a/app/controllers/dmsf_upload_controller.rb b/app/controllers/dmsf_upload_controller.rb index 290c65f0..fdfc835c 100644 --- a/app/controllers/dmsf_upload_controller.rb +++ b/app/controllers/dmsf_upload_controller.rb @@ -187,6 +187,7 @@ class DmsfUploadController < ApplicationController end new_revision.mime_type = Redmine::MimeType.of(new_revision.name) new_revision.size = File.size(commited_disk_filepath) + new_revision.digest = DmsfFileRevision.create_digest commited_disk_filepath # Need to save file first to generate id for it in case of creation. # File id is needed to properly generate revision disk filename diff --git a/app/helpers/dmsf_helper.rb b/app/helpers/dmsf_helper.rb index 893a6a1a..a5f33c6c 100644 --- a/app/helpers/dmsf_helper.rb +++ b/app/helpers/dmsf_helper.rb @@ -67,17 +67,6 @@ module DmsfHelper return "#{Redmine::Utils.relative_url_root}/plugin_assets/#{plugin}/#{asset_type}/#{source}" end - def self.to_time(obj) - #Right, enough of bugs, let's try a better approach here. - return unless obj - return obj.to_time(ActiveRecord::Base.default_timezone) if obj.is_a?(String) - - # Why can't Mysql::Time conform to time object? - without a utc? method it breaks redmine's - # rendering method, so we convert it to string, and back into time - not the most efficient - # of methods - however seems functional. Not sure if MySQL - (obj.class.name == 'Mysql::Time') ? obj.to_s.to_time(ActiveRecord::Base.default_timezone) : obj - end - def self.dmsf_tree(parent, obj, tree = nil) tree ||= [] # Folders && files && links diff --git a/app/models/dmsf_file_revision.rb b/app/models/dmsf_file_revision.rb index 5d22f1ec..c628fc82 100644 --- a/app/models/dmsf_file_revision.rb +++ b/app/models/dmsf_file_revision.rb @@ -19,6 +19,8 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +require 'digest/md5' + class DmsfFileRevision < ActiveRecord::Base unloadable belongs_to :dmsf_file @@ -159,6 +161,7 @@ class DmsfFileRevision < ActiveRecord::Base new_revision.source_revision = self new_revision.user = User.current new_revision.name = self.name + new_revision.digest = self.digest new_revision end @@ -262,4 +265,23 @@ class DmsfFileRevision < ActiveRecord::Base format + ext end + def self.create_digest(path) + begin + Digest::MD5.file(path).hexdigest + rescue Exception => e + Rails.logger.error e.message + nil + end + end + + def create_digest + begin + self.digest = Digest::MD5.file(self.disk_file).hexdigest + true + rescue Exception => e + Rails.logger.error e.message + false + end + end + end \ No newline at end of file diff --git a/app/views/dmsf_files/_revision_access.html.erb b/app/views/dmsf_files/_revision_access.html.erb index a4a736fb..e2dd74f4 100644 --- a/app/views/dmsf_files/_revision_access.html.erb +++ b/app/views/dmsf_files/_revision_access.html.erb @@ -22,23 +22,23 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. %> -
| <%= l(:field_user) %> | -<%= l(:heading_access_downloads_emails) %> | -<%= l(:heading_access_first) %> | -<%= l(:heading_access_last) %> | +<%= l(:field_user) %> | +<%= l(:heading_access_downloads_emails) %> | +<%= l(:heading_access_first) %> | +<%= l(:heading_access_last) %> |
|---|---|---|---|---|---|---|---|
| <%= link_to_user(access.user) %> | -<%= access['count'] %> | -<%= format_time(DmsfHelper::to_time(access.first_at)) %> | -<%= format_time(DmsfHelper::to_time(access.last_at)) %> | +<%= link_to_user(access.user) %> | +<%= access.count %> | +<%= format_time(access.first_at) %> | +<%= format_time(access.last_at) %> |
<%= label_tag('', l(:label_title)) %> <%= h(revision.title) %>
-- <%= label_tag('', l(:label_file)) %> - <%= ("#{h(revision.dmsf_file.dmsf_folder.dmsf_path_str)}/") if revision.dmsf_file.dmsf_folder %><%= h(revision.name) %> -
-- <%= label_tag('', l(:label_description)) %> -
+ <%= label_tag('', l(:label_description)) %> +
<%= label_tag('', l(:label_version)) %> <%= revision.major_version %>.<%= revision.minor_version %>
- <%= label_tag('', l(:link_workflow)) %> - <% wf = DmsfWorkflow.find_by_id(revision.dmsf_workflow_id) %> - <% if wf %> + <%= label_tag('', l(:label_size)) %> + <%= number_to_human_size(revision.size) %> +
+ <% wf = DmsfWorkflow.find_by_id(revision.dmsf_workflow_id) %> + <% if wf %> ++ <%= label_tag('', l(:link_workflow)) %> <%= "#{wf.name} - " %> <%= link_to(revision.workflow_str(false), log_dmsf_workflow_path(:project_id => @project.id, :id => wf.id, :dmsf_file_revision_id => revision.id), :title => DmsfWorkflow.assignments_to_users_str(wf.next_assignments(revision.id)), :remote => true) %> - <% else %> - <%= revision.workflow_str(true) %> - <% end %> -
+ + <% end %> + <% if revision.comment.present? %> ++ <%= label_tag('', l(:label_comment)) %> +
+ <%= label_tag('', l(:label_file)) %> + <%= ("#{h(revision.dmsf_file.dmsf_folder.dmsf_path_str)}/") if revision.dmsf_file.dmsf_folder %><%= h(revision.name) %> +
<%= label_tag('', l(:label_mime)) %> <%= h(revision.mime_type) %>
-- <%= label_tag('', l(:label_size)) %> - <%= number_to_human_size(revision.size) %> -
+ <% if revision.digest.present? %> ++ <%= label_tag('', 'MD5') %> + <%= revision.digest %> +
+ <% end %> + <%= render 'dmsf/custom_fields', :object => revision %>- <%= label_tag('', l(:label_comment)) %> -