* file detail validation completed

git-svn-id: http://redmine-dmsf.googlecode.com/svn/trunk/redmine_dmsf@74 5e329b0b-a2ee-ea63-e329-299493fc886d
This commit is contained in:
vit.jonas@gmail.com 2011-05-24 08:55:13 +00:00
parent f22e3b7100
commit 5b71ad4442
4 changed files with 67 additions and 79 deletions

View File

@ -87,60 +87,71 @@ class DmsfDetailController < ApplicationController
end
def file_detail
@revision = @file.last_revision.clone
@revision = @file.last_revision
end
#TODO: don't create revision if nothing change
def save_file
unless params[:dmsf_file_revision]
redirect_to :action => "file_detail", :id => @project, :file_id => @file
return
end
if @file.locked_for_user?
flash[:error] = l(:error_file_is_locked)
redirect_to :action => "file_detail", :id => @project, :file_id => @file
else
#TODO: validate folder_id
new_revision = DmsfFileRevision.new(params[:dmsf_file_revision])
@revision = DmsfFileRevision.new(params[:dmsf_file_revision])
new_revision.file = @file
@revision.file = @file
last_revision = @file.last_revision
new_revision.source_revision = last_revision
new_revision.user = User.current
@revision.source_revision = last_revision
@revision.user = User.current
new_revision.major_version = last_revision.major_version
new_revision.minor_version = last_revision.minor_version
new_revision.workflow = last_revision.workflow
@revision.major_version = last_revision.major_version
@revision.minor_version = last_revision.minor_version
@revision.workflow = last_revision.workflow
version = params[:version].to_i
file_upload = params[:file_upload]
if file_upload.nil?
new_revision.disk_filename = last_revision.disk_filename
new_revision.increase_version(version, false)
new_revision.mime_type = last_revision.mime_type
new_revision.size = last_revision.size
@revision.disk_filename = last_revision.disk_filename
@revision.increase_version(version, false)
@revision.mime_type = last_revision.mime_type
@revision.size = last_revision.size
else
new_revision.increase_version(version, true)
new_revision.copy_file_content(file_upload)
new_revision.mime_type = Redmine::MimeType.of(file_upload.original_filename)
@revision.increase_version(version, true)
@revision.size = file_upload.size
@revision.disk_filename = @revision.new_storage_filename
@revision.mime_type = Redmine::MimeType.of(file_upload.original_filename)
end
new_revision.set_workflow(params[:workflow])
@revision.set_workflow(params[:workflow])
new_revision.save
@file.name = new_revision.name
@file.folder = new_revision.folder
if @file.locked?
DmsfFileLock.file_lock_state(@file, false)
flash[:notice] = l(:notice_file_unlocked) + ", "
end
@file.save
@file.reload
flash[:notice] = (flash[:notice].nil? ? "" : flash[:notice]) + l(:notice_file_revision_created)
Rails.logger.info "#{Time.now} from #{request.remote_ip}/#{request.env["HTTP_X_FORWARDED_FOR"]}: #{User.current.login} created new revision of file #{@project.identifier}://#{@file.dmsf_path_str}"
begin
DmsfMailer.deliver_files_updated(User.current, [@file])
rescue ActionView::MissingTemplate => e
Rails.logger.error "Could not send email notifications: " + e
if @revision.save
unless file_upload.nil?
@revision.copy_file_content(file_upload)
end
@file.name = @revision.name
@file.folder = @revision.folder
if @file.locked?
DmsfFileLock.file_lock_state(@file, false)
flash[:notice] = l(:notice_file_unlocked) + ", "
end
@file.save!
@file.reload
flash[:notice] = (flash[:notice].nil? ? "" : flash[:notice]) + l(:notice_file_revision_created)
Rails.logger.info "#{Time.now} from #{request.remote_ip}/#{request.env["HTTP_X_FORWARDED_FOR"]}: #{User.current.login} created new revision of file #{@project.identifier}://#{@file.dmsf_path_str}"
begin
DmsfMailer.deliver_files_updated(User.current, [@file])
rescue ActionView::MissingTemplate => e
Rails.logger.error "Could not send email notifications: " + e
end
redirect_to :action => "file_detail", :id => @project, :file_id => @file
else
render :action => "file_detail"
end
end
redirect_to :action => "file_detail", :id => @project, :file_id => @file
end
def delete_file
@ -245,11 +256,6 @@ class DmsfDetailController < ApplicationController
end
commited_disk_filepath = "#{DmsfHelper.temp_dir}/#{commited_file["disk_filename"]}"
file_upload = File.new(commited_disk_filepath, "rb")
if file_upload.nil?
flash[:error] = l(:error_file_commit_require_uploaded_file)
next
end
new_revision.folder = @folder
new_revision.file = file
@ -261,13 +267,21 @@ class DmsfDetailController < ApplicationController
new_revision.increase_version(commited_file["version"].to_i, true)
new_revision.set_workflow(commited_file["workflow"])
new_revision.mime_type = Redmine::MimeType.of(new_revision.name)
new_revision.size = File.size(commited_disk_filepath)
new_revision.disk_filename = new_revision.new_storage_filename
file_upload = File.new(commited_disk_filepath, "rb")
if file_upload.nil?
flash[:error] = l(:error_file_commit_require_uploaded_file)
next
end
new_revision.save
new_revision.copy_file_content(file_upload)
file_upload.close
File.delete(commited_disk_filepath)
new_revision.save
if file.locked?
DmsfFileLock.file_lock_state(file, false)
flash[:notice] = l(:notice_file_unlocked)

View File

@ -41,6 +41,11 @@ class DmsfFileRevision < ActiveRecord::Base
:conditions => ["#{DmsfFile.table_name}.deleted = :false", {:false => false}]
}
validates_presence_of :title
validates_presence_of :name
validates_format_of :name, :with => DmsfFolder.invalid_characters,
:message => l(:error_contains_invalid_character)
def self.remove_extension(filename)
filename[0, (filename.length - File.extname(filename).length)]
end
@ -69,38 +74,6 @@ class DmsfFileRevision < ActiveRecord::Base
content_type.to_s
end
def from_form_post(file, posted, source_revision = nil)
source_revision = file.last_revision if source_revision.nil?
self.file = file
self.source_revision = source_revision
self.name = posted.has_key?("name") ? posted["name"] : self.file.name
if posted.has_key?("dmsf_folder_id")
self.folder = posted["dmsf_folder_id"].blank? ? nil : DmsfFolder.find(posted["dmsf_folder_id"])
else
self.folder = self.file.folder
end
if source_revision.nil?
from_form_post_create(posted)
else
from_form_post_existing(posted, source_revision)
end
self.user = User.current
self.title = posted["title"]
self.description = posted["description"]
self.comment = posted["comment"]
unless posted["file"].nil?
copy_file_content(posted)
end
self
end
#TODO: use standard clone method
def clone
new_revision = DmsfFileRevision.new
@ -185,14 +158,12 @@ class DmsfFileRevision < ActiveRecord::Base
"#{timestamp}_#{id}_#{filename}"
end
def copy_file_content(file_upload)
self.disk_filename = self.new_storage_filename
def copy_file_content(open_file)
File.open(self.disk_file, "wb") do |f|
while (buffer = file_upload.read(8192))
while (buffer = open_file.read(8192))
f.write(buffer)
end
end
self.size = File.size(self.disk_file)
end
end

View File

@ -21,6 +21,7 @@ end
form_for(:dmsf_file_revision, @revision, :url => {:action => "save_file", :id => @project, :file_id => @file},
:html => {:method=>:post, :multipart => true}) do |f|
%>
<%= error_messages_for("revision") %>
<div class="clear">
<div class="splitcontentleft">
<p>

View File

@ -151,8 +151,10 @@
jQuery("#newRevisionFormContentToggle").text("[+]");
jQuery("#newRevisionFormContent").hide();
});
jQuery("#newRevisionFormContentToggle").text("[+]");
jQuery("#newRevisionFormContent").hide();
<% if @revision.valid? %>
jQuery("#newRevisionFormContentToggle").text("[+]");
jQuery("#newRevisionFormContent").hide();
<% end %>
});
</script>
<% end %>