* 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:
parent
f22e3b7100
commit
5b71ad4442
@ -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)
|
||||
|
||||
@ -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
|
||||
@ -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>
|
||||
|
||||
@ -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 %>
|
||||
Loading…
x
Reference in New Issue
Block a user