diff --git a/app/controllers/dmsf_detail_controller.rb b/app/controllers/dmsf_detail_controller.rb index 4715ddcf..f59659c0 100644 --- a/app/controllers/dmsf_detail_controller.rb +++ b/app/controllers/dmsf_detail_controller.rb @@ -84,15 +84,19 @@ class DmsfDetailController < ApplicationController @revision = @file.last_revision.clone end - #TODO: separate control for approval #TODO: don't create revision if nothing change def save_file if @file.locked_for_user? flash[:error] = l(:error_file_is_locked) redirect_to :action => "file_detail", :id => @project, :file_id => @file else - new_revision = params[:dmsf_file_revision] - DmsfFileRevision.from_saved_file(@file, new_revision) + new_revision = DmsfFileRevision.from_saved_file(@file, params[:dmsf_file_revision]) + new_revision.save + + @file.name = new_revision.name + @file.folder = new_revision.folder + @file.save + if @file.locked? @file.unlock flash[:notice] = l(:notice_file_unlocked) + ", " diff --git a/app/helpers/dmsf_helper.rb b/app/helpers/dmsf_helper.rb index bd111d16..bc12858e 100644 --- a/app/helpers/dmsf_helper.rb +++ b/app/helpers/dmsf_helper.rb @@ -51,4 +51,22 @@ module DmsfHelper end end + def self.directory_tree(project) + tree = [["Documents", nil]] + DmsfFolder.project_root_folders(project).each do |folder| + tree.push(["...#{folder.name}", folder.id]) + directory_subtree(tree, folder, 2) + end + return tree + end + + private + + def self.directory_subtree(tree, folder, level) + folder.subfolders.each do |subfolder| + tree.push(["#{"..." * level}#{subfolder.name}", subfolder.id]) + directory_subtree(tree, subfolder, level + 1) + end + end + end diff --git a/app/models/dmsf_file_revision.rb b/app/models/dmsf_file_revision.rb index 638f3e48..06fba85b 100644 --- a/app/models/dmsf_file_revision.rb +++ b/app/models/dmsf_file_revision.rb @@ -79,8 +79,6 @@ class DmsfFileRevision < ActiveRecord::Base end revision.from_form_post(dmsf_file, saved_file) - - revision.save! end def version @@ -108,8 +106,14 @@ class DmsfFileRevision < ActiveRecord::Base self.file = file self.source_revision = source_revision - self.name = self.file.name - self.folder = self.file.folder + + self.name = posted.has_key?("name") ? posted["name"] : self.file.name + + if posted.has_key?("folder") + self.folder = posted["folder"].blank? ? nil : DmsfFolder.find(posted["folder"]) + else + self.folder = self.file.folder + end if source_revision.nil? from_form_post_create(posted) @@ -122,6 +126,10 @@ class DmsfFileRevision < ActiveRecord::Base self.description = posted["description"] self.comment = posted["comment"] + unless posted["file"].nil? + copy_file_content(posted) + end + self end @@ -179,12 +187,12 @@ class DmsfFileRevision < ActiveRecord::Base end private - + + #FIXME: put file uploaded check to standard validation def from_form_post_create(posted) if posted["file"].nil? raise DmsfContentError, "First revision require uploaded file" else - copy_file_content(posted) self.major_version = case posted["version"] when "major" then 1 else 0 @@ -211,7 +219,6 @@ class DmsfFileRevision < ActiveRecord::Base self.mime_type = source_revision.mime_type self.size = source_revision.size else - copy_file_content(posted) self.minor_version = case posted["version"] when "major" then 0 else self.minor_version + 1 diff --git a/app/views/dmsf_detail/_file_new_revision.html.erb b/app/views/dmsf_detail/_file_new_revision.html.erb index 6aaf05a8..7177cb2b 100644 --- a/app/views/dmsf_detail/_file_new_revision.html.erb +++ b/app/views/dmsf_detail/_file_new_revision.html.erb @@ -31,7 +31,10 @@ form_for(:dmsf_file_revision, @revision, :url => {:action => "save_file", :id =>
<%= label_tag("", l(:label_filename) + ":") %> - <%= h(@revision.name) %> + <%= f.select(:folder, + options_for_select(DmsfHelper.directory_tree(@project), + :selected => (@revision.folder.id unless @revision.folder.nil?))) %> / + <%= f.text_field(:name, :size => "24") %>