diff --git a/app/controllers/dmsf_controller.rb b/app/controllers/dmsf_controller.rb index 7e6be110..9d50c59d 100644 --- a/app/controllers/dmsf_controller.rb +++ b/app/controllers/dmsf_controller.rb @@ -38,7 +38,7 @@ class DmsfController < ApplicationController helper :dmsf_folder_permissions def permissions - render_403 unless DmsfFolder.permissions(@folder) + render_403 unless DmsfFolder.permissions?(@folder) true end @@ -80,7 +80,7 @@ class DmsfController < ApplicationController @file_manipulation_allowed = User.current.allowed_to? :file_manipulation, @project @file_delete_allowed = User.current.allowed_to? :file_delete, @project @subfolders = DmsfFolder.deleted.where(:project_id => @project.id) - @files = DmsfFile.deleted.where(:container_id => @project.id, :container_type => 'Project') + @files = DmsfFile.deleted.where(:project_id => @project.id) @dir_links = DmsfLink.deleted.where(:project_id => @project.id, :target_type => DmsfFolder.model_name.to_s) @file_links = DmsfLink.deleted.where(:project_id => @project.id, :target_type => DmsfFile.model_name.to_s) @url_links = DmsfLink.deleted.where(:project_id => @project.id, :target_type => 'DmsfUrl') @@ -643,6 +643,7 @@ class DmsfController < ApplicationController private def get_display_params + @system_folder = @folder && @folder.system @folder_manipulation_allowed = User.current.allowed_to?(:folder_manipulation, @project) @file_manipulation_allowed = User.current.allowed_to?(:file_manipulation, @project) @file_delete_allowed = User.current.allowed_to?(:file_delete, @project) @@ -658,7 +659,7 @@ class DmsfController < ApplicationController if tag @subfolders = [] folder_id = @folder.id if @folder - DmsfFolder.where(:project_id => @project.id, :dmsf_folder_id => folder_id).visible.each do |f| + DmsfFolder.where(:project_id => @project.id, :dmsf_folder_id => folder_id, :system => false).visible.each do |f| f.custom_field_values.each do |v| if v.custom_field_id == params[:custom_field_id].to_i if v.custom_field.compare_values?(v.value, params[:custom_value]) @@ -669,7 +670,7 @@ class DmsfController < ApplicationController end end @files = [] - DmsfFile.where(:container_id => @project.id, :container_type => 'Project', :dmsf_folder_id => folder_id).visible.each do |f| + DmsfFile.where(:project_id => @project.id, :dmsf_folder_id => folder_id).visible.each do |f| r = f.last_revision if r r.custom_field_values.each do |v| @@ -733,7 +734,7 @@ class DmsfController < ApplicationController @trash_visible = @folder_manipulation_allowed && @file_manipulation_allowed && @file_delete_allowed && !@locked_for_user && !@folder @trash_enabled = DmsfFolder.deleted.where(:project_id => @project.id).any? || - DmsfFile.deleted.where(:container_id => @project.id, :container_type => 'Project').any? || + DmsfFile.deleted.where(:project_id => @project.id).any? || DmsfLink.deleted.where(:project_id => @project.id).any? end diff --git a/app/controllers/dmsf_files_controller.rb b/app/controllers/dmsf_files_controller.rb index 87277503..9aaf4831 100644 --- a/app/controllers/dmsf_files_controller.rb +++ b/app/controllers/dmsf_files_controller.rb @@ -38,7 +38,7 @@ class DmsfFilesController < ApplicationController def permissions if @file - render_403 unless DmsfFolder.permissions(@file.dmsf_folder) + render_403 unless DmsfFolder.permissions?(@file.dmsf_folder) end true end @@ -192,7 +192,7 @@ class DmsfFilesController < ApplicationController commit = params[:commit] == 'yes' if @file.delete(commit) flash[:notice] = l(:notice_file_deleted) - if commit && (@file.container_type == 'Project') + if commit log_activity('deleted') begin recipients = DmsfMailer.get_notify_users(@project, [@file]) diff --git a/app/controllers/dmsf_folder_permissions_controller.rb b/app/controllers/dmsf_folder_permissions_controller.rb index 062663e1..f2410fb8 100644 --- a/app/controllers/dmsf_folder_permissions_controller.rb +++ b/app/controllers/dmsf_folder_permissions_controller.rb @@ -27,7 +27,7 @@ class DmsfFolderPermissionsController < ApplicationController before_filter :permissions def permissions - render_403 unless DmsfFolder.permissions(@dmsf_folder) + render_403 unless DmsfFolder.permissions?(@dmsf_folder) true end diff --git a/app/controllers/dmsf_folders_copy_controller.rb b/app/controllers/dmsf_folders_copy_controller.rb index a2720eb3..27f022c9 100644 --- a/app/controllers/dmsf_folders_copy_controller.rb +++ b/app/controllers/dmsf_folders_copy_controller.rb @@ -26,7 +26,7 @@ class DmsfFoldersCopyController < ApplicationController before_filter :permissions def permissions - render_403 unless DmsfFolder.permissions(@folder) + render_403 unless DmsfFolder.permissions?(@folder) true end diff --git a/app/controllers/dmsf_links_controller.rb b/app/controllers/dmsf_links_controller.rb index eb4a0921..08b0fce3 100644 --- a/app/controllers/dmsf_links_controller.rb +++ b/app/controllers/dmsf_links_controller.rb @@ -29,7 +29,7 @@ class DmsfLinksController < ApplicationController def permissions if @dmsf_link - render_403 unless DmsfFolder.permissions(@dmsf_link.dmsf_folder) + render_403 unless DmsfFolder.permissions?(@dmsf_link.dmsf_folder) end true end diff --git a/app/controllers/dmsf_upload_controller.rb b/app/controllers/dmsf_upload_controller.rb index 818b58da..d122e115 100644 --- a/app/controllers/dmsf_upload_controller.rb +++ b/app/controllers/dmsf_upload_controller.rb @@ -36,7 +36,7 @@ class DmsfUploadController < ApplicationController accept_api_auth :upload, :commit def permissions - render_403 unless DmsfFolder.permissions(@folder) + render_403 unless DmsfFolder.permissions?(@folder) true end diff --git a/app/controllers/dmsf_workflows_controller.rb b/app/controllers/dmsf_workflows_controller.rb index e87381d2..45536c74 100644 --- a/app/controllers/dmsf_workflows_controller.rb +++ b/app/controllers/dmsf_workflows_controller.rb @@ -32,7 +32,7 @@ class DmsfWorkflowsController < ApplicationController def permissions revision = DmsfFileRevision.find_by_id params[:dmsf_file_revision_id] if params[:dmsf_file_revision_id].present? if revision - render_403 unless revision.dmsf_file || DmsfFolder.permissions(revision.dmsf_file.dmsf_folder) + render_403 unless revision.dmsf_file || DmsfFolder.permissions?(revision.dmsf_file.dmsf_folder) end true end diff --git a/app/helpers/dmsf_upload_helper.rb b/app/helpers/dmsf_upload_helper.rb index 78d292ac..ef08fd7d 100644 --- a/app/helpers/dmsf_upload_helper.rb +++ b/app/helpers/dmsf_upload_helper.rb @@ -21,20 +21,15 @@ module DmsfUploadHelper include Redmine::I18n - def self.commit_files_internal(commited_files, container, folder, controller) + def self.commit_files_internal(commited_files, project, folder, controller) failed_uploads = [] files = [] - if container.is_a?(Project) - project = container - else - project = container.project - end if commited_files && commited_files.is_a?(Hash) failed_uploads = [] commited_files.each_value do |commited_file| name = commited_file[:name] new_revision = DmsfFileRevision.new - file = DmsfFile.visible.find_file_by_name(container, folder, name) + file = DmsfFile.visible.find_file_by_name(project, folder, name) unless file link = DmsfLink.find_link_by_file_name(project, folder, name) file = link.target_file if link @@ -42,8 +37,7 @@ module DmsfUploadHelper unless file file = DmsfFile.new - file.container_type = container.class.name.demodulize - file.container_id = container.id + file.project_id = project.id file.name = name file.dmsf_folder = folder file.notification = Setting.plugin_redmine_dmsf[:dmsf_default_notifications].present? @@ -119,7 +113,7 @@ module DmsfUploadHelper failed_uploads.push(commited_file) end end - if container.is_a?(Project) && ((folder && folder.notification?) || (!folder && project.dmsf_notification?)) + if ((folder && folder.notification?) || (!folder && project.dmsf_notification?)) begin recipients = DmsfMailer.get_notify_users(project, files) recipients.each do |u| diff --git a/app/models/dmsf_file.rb b/app/models/dmsf_file.rb index 4788c9bb..870b22a7 100644 --- a/app/models/dmsf_file.rb +++ b/app/models/dmsf_file.rb @@ -32,6 +32,7 @@ class DmsfFile < ActiveRecord::Base include RedmineDmsf::Lockable + belongs_to :project belongs_to :dmsf_folder belongs_to :deleted_by_user, :class_name => 'User', :foreign_key => 'deleted_by_user_id' @@ -58,7 +59,7 @@ class DmsfFile < ActiveRecord::Base attr_accessible :project, :project_id def validates_name_uniqueness - existing_file = DmsfFile.visible.findn_file_by_name(self.container_id, self.container_type, self.dmsf_folder, self.name) + existing_file = DmsfFile.visible.findn_file_by_name(self.project_id, self.dmsf_folder, self.name) errors.add(:name, l('activerecord.errors.messages.taken')) unless (existing_file.nil? || existing_file.id == self.id) end @@ -120,14 +121,13 @@ class DmsfFile < ActiveRecord::Base @@storage_path = path end - def self.find_file_by_name(container, folder, name) - self.findn_file_by_name(container.id, container.class.name.demodulize, folder, name) + def self.find_file_by_name(project, folder, name) + self.findn_file_by_name(project.id, folder, name) end - def self.findn_file_by_name(container_id, container_type, folder, name) + def self.findn_file_by_name(project_id, folder, name) where( - :container_id => container_id, - :container_type => container_type, + :project_id => project_id, :dmsf_folder_id => folder ? folder.id : nil, :name => name).visible.first end @@ -249,19 +249,17 @@ class DmsfFile < ActiveRecord::Base projects end - def move_to(container, folder) + def move_to(project, folder) if self.locked_for_user? errors[:base] << l(:error_file_is_locked) return false end # Must invalidate source parent folder cache before moving RedmineDmsf::Webdav::Cache.invalidate_item(propfind_cache_key) - self.container_type = self.container_type - self.container_id = container.id + self.project_id = project.id self.dmsf_folder = folder new_revision = self.last_revision.clone new_revision.dmsf_file = self - project = container.is_a?(Project) ? container : container.project new_revision.comment = l(:comment_moved_from, :source => "#{self.project.identifier}:#{self.dmsf_path_str}") new_revision.custom_values = [] self.last_revision.custom_values.each do |cv| @@ -271,15 +269,14 @@ class DmsfFile < ActiveRecord::Base self.save && new_revision.save end - def copy_to(container, folder = nil) - copy_to_filename(container, folder, self.name) + def copy_to(project, folder = nil) + copy_to_filename(project, folder, self.name) end - def copy_to_filename(container, folder=nil, filename) + def copy_to_filename(project, folder, filename) file = DmsfFile.new file.dmsf_folder = folder - file.container_type = self.container_type - file.container_id = container.id + file.project_id = project.id file.name = filename file.notification = Setting.plugin_redmine_dmsf['dmsf_default_notifications'].present? if file.save && self.last_revision @@ -289,7 +286,6 @@ class DmsfFile < ActiveRecord::Base if File.exist? self.last_revision.disk_file FileUtils.cp self.last_revision.disk_file, new_revision.disk_file end - project = container.is_a?(Project) ? container : container.project new_revision.comment = l(:comment_copied_from, :source => "#{project.identifier}: #{self.dmsf_path_str}") new_revision.custom_values = [] self.last_revision.custom_values.each do |cv| @@ -325,8 +321,7 @@ class DmsfFile < ActiveRecord::Base project_conditions << Project.allowed_to_condition(user, :view_dmsf_files) project_conditions << "#{Project.table_name}.id IN (#{project_ids.join(',')})" if project_ids.present? - scope = self.visible.joins(:dmsf_file_revisions).joins( - "JOIN #{Project.table_name} ON #{DmsfFile.table_name}.container_id = #{Project.table_name}.id AND #{DmsfFile.table_name}.container_type = 'Project'") + scope = self.visible.joins(:dmsf_file_revision).joins(:project) scope = scope.limit(options[:limit]) unless options[:limit].blank? scope = scope.where(limit_options) unless limit_options.blank? scope = scope.where(project_conditions.join(' AND ')) @@ -516,13 +511,11 @@ class DmsfFile < ActiveRecord::Base end def propfind_cache_key - if self.container_type == 'Project' - if dmsf_folder_id.nil? - # File is in project root - return "PROPFIND/#{self.container_id}" - else - return "PROPFIND/#{self.container_id}/#{self.dmsf_folder_id}" - end + unless dmsf_folder_id + # File is in project root + return "PROPFIND/#{self.project_id}" + else + return "PROPFIND/#{self.project_id}/#{self.dmsf_folder_id}" end end @@ -606,31 +599,6 @@ class DmsfFile < ActiveRecord::Base csv end - def project - unless @project - case self.container_type - when 'Project' - @project = Project.find_by_id(self.container_id) - when 'Issue' - issue = Issue.find_by_id(self.container_id) - @project = issue.project if issue - end - end - @project - end - - def container - unless @container - case self.container_type - when 'Project' - @container = Project.find_by_id(self.container_id) - when 'Issue' - @container = Issue.find_by_id(self.container_id) - end - end - @container - end - def thumbnail(options={}) if image? size = options[:size].to_i @@ -665,4 +633,10 @@ class DmsfFile < ActiveRecord::Base l(:title_unlock_file) end + def container + if self.dmsf_folder && self.dmsf_folder.system + Issue.where(:id => self.dmsf_folder.title.to_i).first + end + end + end diff --git a/app/models/dmsf_file_revision.rb b/app/models/dmsf_file_revision.rb index 87378718..26e5a46f 100644 --- a/app/models/dmsf_file_revision.rb +++ b/app/models/dmsf_file_revision.rb @@ -49,10 +49,8 @@ class DmsfFileRevision < ActiveRecord::Base :timestamp => "#{DmsfFileRevision.table_name}.updated_at", :author_key => "#{DmsfFileRevision.table_name}.user_id", :permission => :view_dmsf_file_revisions, - :scope => select("#{DmsfFileRevision.table_name}.*"). - joins(:dmsf_file).joins( - "LEFT JOIN #{Project.table_name} ON #{DmsfFile.table_name}.container_id = #{Project.table_name}.id"). - where("#{DmsfFile.table_name}.container_type = ?", 'Project').visible + :scope => select("#{DmsfFileRevision.table_name}.*").joins(:dmsf_file). + joins("JOIN #{Project.table_name} ON #{Project.table_name}.id = #{DmsfFile.table_name}.project_id").visible validates :title, :presence => true validates_format_of :name, :with => DmsfFolder::INVALID_CHARACTERS, diff --git a/app/models/dmsf_file_revision_access.rb b/app/models/dmsf_file_revision_access.rb index f83223af..15fcb5b0 100644 --- a/app/models/dmsf_file_revision_access.rb +++ b/app/models/dmsf_file_revision_access.rb @@ -41,8 +41,6 @@ class DmsfFileRevisionAccess < ActiveRecord::Base :author_key => "#{DmsfFileRevisionAccess.table_name}.user_id", :permission => :view_dmsf_file_revision_accesses, :scope => select("#{DmsfFileRevisionAccess.table_name}.*"). - joins(:dmsf_file_revision).joins( - "LEFT JOIN #{DmsfFile.table_name} ON #{DmsfFileRevision.table_name}.dmsf_file_id = #{DmsfFile.table_name}.id " + - "LEFT JOIN #{Project.table_name} ON #{DmsfFile.table_name}.container_id = #{Project.table_name}.id"). - where("#{DmsfFile.table_name}.deleted = ? AND #{DmsfFile.table_name}.container_type = ?", DmsfFile::STATUS_ACTIVE, 'Project') + joins(:dmsf_file_revision).joins(:dmsf_file). + where(["#{DmsfFile.table_name}.deleted = ?", DmsfFile::STATUS_ACTIVE]) end diff --git a/app/models/dmsf_folder.rb b/app/models/dmsf_folder.rb index cb3c9b8d..a1324ba8 100644 --- a/app/models/dmsf_folder.rb +++ b/app/models/dmsf_folder.rb @@ -50,14 +50,15 @@ class DmsfFolder < ActiveRecord::Base AVAILABLE_COLUMNS = %w(id title extension size modified version workflow author).freeze DEFAULT_COLUMNS = %w(title size modified version workflow author).freeze - scope :visible, -> { joins(:project).joins( + scope :visible, -> (system=true) { joins(:project).joins( "LEFT JOIN #{DmsfFolderPermission.table_name} ON #{DmsfFolder.table_name}.id = #{DmsfFolderPermission.table_name}.dmsf_folder_id").where( - :deleted => STATUS_ACTIVE).where(DmsfFolder.visible_condition).distinct + :deleted => STATUS_ACTIVE).where(DmsfFolder.visible_condition(system)).distinct } scope :deleted, -> { joins(:project).joins( "LEFT JOIN #{DmsfFolderPermission.table_name} ON #{DmsfFolder.table_name}.id = #{DmsfFolderPermission.table_name}.dmsf_folder_id").where( :deleted => STATUS_DELETED).where(DmsfFolder.visible_condition).distinct } + scope :system, -> { where(:system => true) } acts_as_customizable @@ -83,8 +84,8 @@ class DmsfFolder < ActiveRecord::Base before_create :default_values - def self.visible_condition - Project.allowed_to_condition(User.current, :view_dmsf_folders) do |role, user| + def self.visible_condition(system=true) + sql = Project.allowed_to_condition(User.current, :view_dmsf_folders) do |role, user| if user.id && user.logged? %{ (#{DmsfFolderPermission.table_name}.object_id IS NULL) OR @@ -92,14 +93,16 @@ class DmsfFolder < ActiveRecord::Base (#{DmsfFolderPermission.table_name}.object_id = #{user.id} AND #{DmsfFolderPermission.table_name}.object_type = 'User') } else - '0=1' + '0 = 1' end end + "#{sql} AND (#{DmsfFolder.table_name}.system = 0 OR 1 = #{(system && Setting.plugin_redmine_dmsf['dmsf_show_system_folders']) ? 1 : 0})" end - def self.permissions(folder) + def self.permissions?(folder, allow_system = true) + return false if folder && folder.system && (!allow_system || !Setting.plugin_redmine_dmsf['dmsf_show_system_folders']) return true if (User.current.admin? || folder.nil?) - if !folder.dmsf_folder || permissions(folder.dmsf_folder) + if !folder.dmsf_folder || permissions?(folder.dmsf_folder, allow_system) if folder.dmsf_folder_permissions.any? role_ids = User.current.roles_for_project(folder.project).map{ |r| r.id } role_permission_ids = folder.dmsf_folder_permissions.roles.map{ |p| p.object_id } @@ -205,7 +208,7 @@ class DmsfFolder < ActiveRecord::Base def self.directory_tree(project, current_folder = nil) tree = [[l(:link_documents), nil]] - project.dmsf_folders.visible.each do |folder| + project.dmsf_folders.visible(false).each do |folder| unless folder == current_folder tree.push(["...#{folder.title}", folder.id]) directory_subtree(tree, folder, 2, current_folder) @@ -316,8 +319,8 @@ class DmsfFolder < ActiveRecord::Base self.project_id, self.id, last_update]).maximum(:updated_at) last_update = time if time time = DmsfFile.where( - ['container_id = ? AND container_type = ? AND dmsf_folder_id = ? AND updated_at > ?', - self.project_id, 'Project', self.id, last_update]).maximum(:updated_at) + ['project_id = ? AND dmsf_folder_id = ? AND updated_at > ?', + self.project_id, self.id, last_update]).maximum(:updated_at) last_update = time if time time = DmsfLink.where( ['project_id = ? AND dmsf_folder_id = ? AND updated_at > ?', @@ -329,7 +332,7 @@ class DmsfFolder < ActiveRecord::Base # Number of items in the folder def items dmsf_folders.visible.where(:project_id => self.project_id).count + - dmsf_files.visible.where(:container_id => self.project_id).count + + dmsf_files.visible.where(:project_id => self.project_id).count + dmsf_links.visible.where(:project_id => self.project_id).count end @@ -351,6 +354,10 @@ class DmsfFolder < ActiveRecord::Base end def self.get_column_position(column) + unless @@dmsf_columns + @@dmsf_columns = Setting.plugin_redmine_dmsf['dmsf_columns'] + @@dmsf_columns = DmsfFolder::DEFAULT_COLUMNS unless columns + end pos = 0 # 0 - checkbox # 1 - id @@ -517,7 +524,7 @@ class DmsfFolder < ActiveRecord::Base private def self.directory_subtree(tree, folder, level, current_folder) - folder.dmsf_folders.visible.each do |subfolder| + folder.dmsf_folders.visible(false).each do |subfolder| unless subfolder == current_folder tree.push(["#{'...' * level}#{subfolder.title}", subfolder.id]) directory_subtree(tree, subfolder, level + 1, current_folder) diff --git a/app/models/dmsf_upload.rb b/app/models/dmsf_upload.rb index c56408a8..b9c25336 100644 --- a/app/models/dmsf_upload.rb +++ b/app/models/dmsf_upload.rb @@ -76,8 +76,7 @@ class DmsfUpload @minor_version = 0 @workflow = nil file = DmsfFile.new - file.container_type = 'Project' - file.container_id = project.id + file.project_id = project.id revision = DmsfFileRevision.new revision.dmsf_file = file @custom_values = revision.custom_field_values diff --git a/app/models/dmsf_workflow.rb b/app/models/dmsf_workflow.rb index c7a6c87f..580e0de0 100644 --- a/app/models/dmsf_workflow.rb +++ b/app/models/dmsf_workflow.rb @@ -106,8 +106,8 @@ class DmsfWorkflow < ActiveRecord::Base def delegates(q, dmsf_workflow_step_assignment_id, dmsf_file_revision_id) if dmsf_workflow_step_assignment_id && dmsf_file_revision_id sql = [ - 'id NOT IN (SELECT a.user_id FROM dmsf_workflow_step_assignments a WHERE id = ?) AND id IN (SELECT m.user_id FROM members m JOIN dmsf_files f ON f.container_id = m.project_id JOIN dmsf_file_revisions r ON r.dmsf_file_id = f.id WHERE r.id = ? AND container_type = ?)', - dmsf_workflow_step_assignment_id, dmsf_file_revision_id, 'Project'] + 'id NOT IN (SELECT a.user_id FROM dmsf_workflow_step_assignments a WHERE id = ?) AND id IN (SELECT m.user_id FROM members m JOIN dmsf_files f ON f.project_id = m.project_id JOIN dmsf_file_revisions r ON r.dmsf_file_id = f.id WHERE r.id = ?)', + dmsf_workflow_step_assignment_id, dmsf_file_revision_id] elsif project sql = ['id IN (SELECT user_id FROM members WHERE project_id = ?)', project.id] else diff --git a/app/views/dmsf/_dir.html.erb b/app/views/dmsf/_dir.html.erb index 87b02ac5..7c4645a5 100644 --- a/app/views/dmsf/_dir.html.erb +++ b/app/views/dmsf/_dir.html.erb @@ -20,8 +20,11 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. %> -<%= check_box_tag(name, id, false, - :title => l(:title_check_for_zip_download_or_email), :id => "subfolder_#{id}") %> + + <% unless (subfolder && subfolder.system) %> + <%= check_box_tag(name, id, false, :title => l(:title_check_for_zip_download_or_email), :id => "subfolder_#{id}") %> + <% end %> + <% if DmsfFolder.is_column_on?('id') %> <%= link_to(subfolder.id, edit_dmsf_path(:id => project, :folder_id => subfolder)) %> <% end %> @@ -68,7 +71,7 @@ <% end %> <% end %> - <% if @folder_manipulation_allowed %> + <% if @folder_manipulation_allowed && !(subfolder && subfolder.system) %> <% if subfolder && subfolder.locked? %> <% if subfolder.unlockable? && (!subfolder.locked_for_user? || @force_file_unlock_allowed) %> diff --git a/app/views/dmsf/_dmsf_rows.erb b/app/views/dmsf/_dmsf_rows.erb index bd8f58cf..82c9d88a 100644 --- a/app/views/dmsf/_dmsf_rows.erb +++ b/app/views/dmsf/_dmsf_rows.erb @@ -19,6 +19,7 @@ <% end %> <% if obj.is_a? DmsfFolder %> + <% classes << ' dmsf_system' if obj.system %> class="dir <%= classes %>"> <%= render(:partial => 'dir', :locals => { diff --git a/app/views/dmsf/_file.html.erb b/app/views/dmsf/_file.html.erb index f9601572..059d666b 100644 --- a/app/views/dmsf/_file.html.erb +++ b/app/views/dmsf/_file.html.erb @@ -133,46 +133,9 @@ <% end %> <% end %> - <% if @file_approval_allowed %> - <% case file.last_revision.workflow %> - <% when DmsfWorkflow::STATE_WAITING_FOR_APPROVAL %> - <% if wf %> - <% assignments = wf.next_assignments(file.last_revision.id) %> - <% index = assignments.find_index{|assignment| assignment.user_id == User.current.id} if assignments %> - <% if index %> - <%= link_to('', - action_dmsf_workflow_path( - :project_id => project.id, - :id => wf.id, - :dmsf_workflow_step_assignment_id => assignments[index].id, - :dmsf_file_revision_id => file.last_revision.id), - :title => l(:title_waiting_for_approval), - :remote => true, - :class => 'icon icon-wf-waiting') %> - <% end %> - <% end %> - <% when DmsfWorkflow::STATE_ASSIGNED %> - <% if User.current && (file.last_revision.dmsf_workflow_assigned_by == User.current.id) && wf %> - <%= link_to('', - start_dmsf_workflow_path( - :id => file.last_revision.dmsf_workflow_id, - :dmsf_file_revision_id => file.last_revision.id), - :title => l(:label_dmsf_wokflow_action_start), - :class => 'icon icon-wf-assigned') %> - <% end %> - <% when DmsfWorkflow::STATE_APPROVED, DmsfWorkflow::STATE_REJECTED %> - <% else %> - <% if @workflows_available %> - <%= link_to('', - assign_dmsf_workflow_path( - :project_id => project.id, - :dmsf_file_revision_id => file.last_revision.id), - :title => l(:label_dmsf_wokflow_action_assign), - :remote => true, - :class => 'icon icon-wf-none') %> - <% end %> - <% end %> - <% end %> + <%= render(:partial => 'dmsf_files/approval_workflow_button', + :locals => {:file => file, :file_approval_allowed => @file_approval_allowed, + :workflows_available => @workflows_available, :project => project, :wf => wf }) %> <%= position %> <%= file.last_revision.size %> diff --git a/app/views/dmsf/_list_view.erb b/app/views/dmsf/_list_view.erb index 49678603..499d0463 100644 --- a/app/views/dmsf/_list_view.erb +++ b/app/views/dmsf/_list_view.erb @@ -65,7 +65,7 @@ <% @subfolders.each do |subfolder| %> - + <%= render(:partial => 'dir', :locals => { :project => @project, diff --git a/app/views/dmsf/edit.html.erb b/app/views/dmsf/edit.html.erb index efcb47f9..95bc1893 100644 --- a/app/views/dmsf/edit.html.erb +++ b/app/views/dmsf/edit.html.erb @@ -25,7 +25,7 @@ <% html_title(l(:dmsf)) %>
- <% if !@folder.new_record? && User.current.allowed_to?(:folder_manipulation, @project) %> + <% if !@folder.new_record? && User.current.allowed_to?(:folder_manipulation, @project) && !@folder.system %> <% unless @folder.locked? %> <%= link_to(l(:button_lock), lock_dmsf_path(:id => @project, :folder_id => @folder), :title => l(:title_lock_file), :class => 'icon icon-lock') %> diff --git a/app/views/dmsf/show.html.erb b/app/views/dmsf/show.html.erb index 3a0cffea..6627cc60 100644 --- a/app/views/dmsf/show.html.erb +++ b/app/views/dmsf/show.html.erb @@ -24,7 +24,7 @@ <% html_title l(:dmsf) %>
- <% if @folder_manipulation_allowed %> + <% if @folder_manipulation_allowed && !@system_folder %> <% if @folder.nil? %> <%= link_to(l(:button_edit), edit_root_dmsf_path(:id => @project), :title => l(:link_edit, :title => l(:link_documents)), @@ -92,16 +92,18 @@ <%= submit_tag(l(:button_delete), :title => l(:title_delete_checked), :name => 'delete_entries') if @file_delete_allowed %> <% end %>
- <% values = @folder ? @folder.custom_field_values : DmsfFolder.new.custom_field_values %> - <% unless values.empty? %> -
- <% custom_value = values.first %> - <% custom_value.custom_field.is_required = false %> - <% custom_value.value = params[:custom_value].present? ? params[:custom_value] : '' %> - <% name = :dmsf_folder %> - <%= content_tag('label', custom_field_name_tag(custom_value.custom_field), - :for => "#{name}_custom_field_values_#{custom_value.custom_field.id}") + ': ' + custom_field_tag(name, custom_value) %> -
+ <% unless @system_folder %> + <% values = @folder ? @folder.custom_field_values : DmsfFolder.new.custom_field_values %> + <% unless values.empty? %> +
+ <% custom_value = values.first %> + <% custom_value.custom_field.is_required = false %> + <% custom_value.value = params[:custom_value].present? ? params[:custom_value] : '' %> + <% name = :dmsf_folder %> + <%= content_tag('label', custom_field_name_tag(custom_value.custom_field), + :for => "#{name}_custom_field_values_#{custom_value.custom_field.id}") + ': ' + custom_field_tag(name, custom_value) %> +
+ <% end %> <% end %>
<% if @tree_view %> @@ -181,7 +183,7 @@ <% if @folder %> return "<%= "#{l(:label_number_of_folders)}: #{@folder.deep_folder_count} #{l(:label_number_of_documents)}: #{@folder.deep_file_count}" %>"; <% else %> - return "<%= "#{l(:label_number_of_folders)}: #{DmsfFolder.visible.where(:project_id => @project.id).count + DmsfLink.visible.where(:project_id => @project.id, :target_type => 'DmsfFolder').count}, #{l(:label_number_of_documents)}: #{DmsfFile.visible.where(:container_id => @project.id, :container_type => 'Project').count + DmsfLink.visible.where(:project_id => @project.id, :target_type => 'DmsfFile').count + DmsfLink.visible.where(:project_id => @project.id, :target_type => 'DmsfUrl').count}" %>"; + return "<%= "#{l(:label_number_of_folders)}: #{DmsfFolder.visible.where(:project_id => @project.id).count + DmsfLink.visible.where(:project_id => @project.id, :target_type => 'DmsfFolder').count}, #{l(:label_number_of_documents)}: #{DmsfFile.visible.where(:project_id => @project.id).count + DmsfLink.visible.where(:project_id => @project.id, :target_type => ['DmsfFile', 'DmsfUrl']).count}" %>"; <% end %> <% else %> return "<%= "#{l(:label_number_of_folders)}: #{@subfolders.count + @dir_links.count}, #{l(:label_number_of_documents)}: #{@files.count + @file_links.count + @url_links.count}" %>"; @@ -207,12 +209,14 @@ <% end %> -<% if (@file_manipulation_allowed && !@locked_for_user) %> +<% if (@file_manipulation_allowed && !@locked_for_user && !@system_folder) %> <%= render(:partial => 'dmsf_upload/multi_upload') %> <% end %> -<% other_formats_links do |f| %> +<% unless @system_folder %> + <% other_formats_links do |f| %> <%= f.link_to 'CSV', :url => params, :onclick => "showModal('csv-export-options', '350px'); return false;" %> + <% end %> <% end %>