diff --git a/app/models/dmsf_file.rb b/app/models/dmsf_file.rb index f1758c7a..870e7a10 100644 --- a/app/models/dmsf_file.rb +++ b/app/models/dmsf_file.rb @@ -52,6 +52,7 @@ class DmsfFile < ActiveRecord::Base :datetime => Proc.new {|o| o.updated_at }, :author => Proc.new {|o| o.last_revision.user } + #TODO: place into better place def self.storage_path storage_dir = Setting.plugin_redmine_dmsf["dmsf_storage_directory"].strip if !File.exists?(storage_dir) @@ -59,7 +60,131 @@ class DmsfFile < ActiveRecord::Base end storage_dir end - + + def self.project_root_files(project) + find(:all, :conditions => + ["dmsf_folder_id is NULL and project_id = :project_id and deleted = :deleted", + {:project_id => project.id, :deleted => false}], :order => "name ASC") + end + + def self.find_file_by_name(project, folder, name) + if folder.nil? + find(:first, :conditions => + ["dmsf_folder_id is NULL and project_id = :project_id and name = :name and deleted = :deleted", + {:project_id => project.id, :name => name, :deleted => false}]) + else + find(:first, :conditions => + ["dmsf_folder_id = :folder_id and project_id = :project_id and name = :name and deleted = :deleted", + {:project_id => project.id, :folder_id => folder.id, :name => name, :deleted => false}]) + end + end + + def self.from_commited_file(project, folder, commited_file) + file = find_file_by_name(project, folder, commited_file["name"]) + + if file.nil? + file = DmsfFile.new + file.project = project + file.folder = folder + file.name = commited_file["name"] + file.notification = !Setting.plugin_redmine_dmsf["dmsf_default_notifications"].blank? + file.save + end + + return file + end + + def new_storage_filename + filename = DmsfHelper.sanitize_filename(self.name) + timestamp = DateTime.now.strftime("%y%m%d%H%M%S") + while File.exist?(File.join(DmsfFile.storage_path, "#{timestamp}_#{self.id}_#{filename}")) + timestamp.succ! + end + "#{timestamp}_#{id}_#{filename}" + end + + def locked? + self.locks.empty? ? false : self.locks[0].locked + end + + def locked_for_user? + self.locked? && self.locks[0].user != User.current + end + + def lock + lock = DmsfFileLock.new + lock.file = self + lock.user = User.current + lock.locked = true + lock.save + self.reload + return lock + end + + def unlock + lock = DmsfFileLock.new + lock.file = self + lock.user = User.current + lock.locked = false + lock.save + self.reload + return lock + end + + def last_revision + self.revisions.empty? ? nil : self.revisions[0] + end + + def title + self.last_revision.title + end + + def version + self.last_revision.version + end + + def workflow + self.last_revision.workflow + end + + def dmsf_path + path = self.folder.nil? ? [] : self.folder.dmsf_path + path.push(self) + path + end + + def dmsf_path_str + path = self.dmsf_path + string_path = path.map { |element| element.title } + string_path.join("/") + end + + def notify? + return true if self.notification + return true if folder && folder.notify? + return false + end + + def notify_deactivate + self.notification = false + self.save! + end + + def notify_activate + self.notification = true + self.save! + end + + def display_name + #if self.name.length > 33 + # extension = File.extname(self.name) + # return self.name[0, self.name.length - extension.length][0, 25] + "..." + extension + #else + return self.name + #end + end + + # to fullfill searchable module expectations def self.search(tokens, projects=nil, options={}) tokens = [] << tokens unless tokens.is_a?(Array) projects = [] << projects unless projects.nil? || projects.is_a?(Array) @@ -165,115 +290,4 @@ class DmsfFile < ActiveRecord::Base [results, results_count] end - def self.project_root_files(project) - find(:all, :conditions => - ["dmsf_folder_id is NULL and project_id = :project_id and deleted = :deleted", - {:project_id => project.id, :deleted => false}], :order => "name ASC") - end - - def self.find_file_by_name(project, folder, name) - if folder.nil? - find(:first, :conditions => - ["dmsf_folder_id is NULL and project_id = :project_id and name = :name and deleted = :deleted", - {:project_id => project.id, :name => name, :deleted => false}]) - else - find(:first, :conditions => - ["dmsf_folder_id = :folder_id and project_id = :project_id and name = :name and deleted = :deleted", - {:project_id => project.id, :folder_id => folder.id, :name => name, :deleted => false}]) - end - end - - def self.from_commited_file(project, folder, commited_file) - file = find_file_by_name(project, folder, commited_file["name"]) - - if file.nil? - file = DmsfFile.new - file.project = project - file.folder = folder - file.name = commited_file["name"] - file.notification = !Setting.plugin_redmine_dmsf["dmsf_default_notifications"].blank? - file.save - end - - return file - end - - def new_storage_filename - filename = DmsfHelper.sanitize_filename(self.name) - timestamp = DateTime.now.strftime("%y%m%d%H%M%S") - while File.exist?(File.join(DmsfFile.storage_path, "#{timestamp}_#{self.id}_#{filename}")) - timestamp.succ! - end - "#{timestamp}_#{id}_#{filename}" - end - - def locked? - self.locks.empty? ? false : self.locks[0].locked - end - - def locked_for_user? - self.locked? && self.locks[0].user != User.current - end - - def lock - lock = DmsfFileLock.new - lock.file = self - lock.user = User.current - lock.locked = true - lock.save - self.reload - return lock - end - - def unlock - lock = DmsfFileLock.new - lock.file = self - lock.user = User.current - lock.locked = false - lock.save - self.reload - return lock - end - - def last_revision - self.revisions.empty? ? nil : self.revisions[0] - end - - def dmsf_path - path = self.folder.nil? ? [] : self.folder.dmsf_path - path.push(self) - path - end - - def dmsf_path_str - path = self.dmsf_path - string_path = path.map { |element| element.name } - string_path.join("/") - end - - def notify? - return true if self.notification - return true if folder && folder.notify? - return false - end - - def notify_deactivate - self.notification = false - self.save! - end - - def notify_activate - self.notification = true - self.save! - end - - def display_name - #if self.name.length > 33 - # extension = File.extname(self.name) - # return self.name[0, self.name.length - extension.length][0, 25] + "..." + extension - #else - return self.name - #end - end - end \ No newline at end of file diff --git a/app/models/dmsf_folder.rb b/app/models/dmsf_folder.rb index 0cbaca10..18b4eb1f 100644 --- a/app/models/dmsf_folder.rb +++ b/app/models/dmsf_folder.rb @@ -24,15 +24,15 @@ class DmsfFolder < ActiveRecord::Base belongs_to :project belongs_to :folder, :class_name => "DmsfFolder", :foreign_key => "dmsf_folder_id" - has_many :subfolders, :class_name => "DmsfFolder", :foreign_key => "dmsf_folder_id", :order => "name ASC" - has_many :files, :class_name => "DmsfFile", :foreign_key => "dmsf_folder_id", :order => "name ASC", + has_many :subfolders, :class_name => "DmsfFolder", :foreign_key => "dmsf_folder_id", :order => "title ASC" + has_many :files, :class_name => "DmsfFile", :foreign_key => "dmsf_folder_id", :conditions => { :deleted => false } belongs_to :user - validates_presence_of :name - validates_uniqueness_of :name, :scope => [:dmsf_folder_id, :project_id] + validates_presence_of :title + validates_uniqueness_of :title, :scope => [:dmsf_folder_id, :project_id] - validates_format_of :name, :with => @@invalid_characters, + validates_format_of :title, :with => @@invalid_characters, :message => l(:error_contains_invalid_character) validate :check_cycle @@ -52,10 +52,10 @@ class DmsfFolder < ActiveRecord::Base def self.project_root_folders(project) find(:all, :conditions => - ["dmsf_folder_id is NULL and project_id = :project_id", {:project_id => project.id}], :order => "name ASC") + ["dmsf_folder_id is NULL and project_id = :project_id", {:project_id => project.id}], :order => "title ASC") end - def dmsf_path + def dmsf_path folder = self path = [] while !folder.nil? @@ -67,7 +67,7 @@ class DmsfFolder < ActiveRecord::Base def dmsf_path_str path = self.dmsf_path - string_path = path.map { |element| element.name } + string_path = path.map { |element| element.title } string_path.join("/") end @@ -91,7 +91,7 @@ class DmsfFolder < ActiveRecord::Base tree = [["Documents", nil]] DmsfFolder.project_root_folders(project).each do |folder| unless folder == current_folder - tree.push(["...#{folder.name}", folder.id]) + tree.push(["...#{folder.title}", folder.id]) directory_subtree(tree, folder, 2, current_folder) end end @@ -103,7 +103,7 @@ class DmsfFolder < ActiveRecord::Base def self.directory_subtree(tree, folder, level, current_folder) folder.subfolders.each do |subfolder| unless subfolder == current_folder - tree.push(["#{"..." * level}#{subfolder.name}", subfolder.id]) + tree.push(["#{"..." * level}#{subfolder.title}", subfolder.id]) directory_subtree(tree, subfolder, level + 1, current_folder) end end diff --git a/app/views/dmsf/_path.html.erb b/app/views/dmsf/_path.html.erb index 62efa554..d1d8138d 100644 --- a/app/views/dmsf/_path.html.erb +++ b/app/views/dmsf/_path.html.erb @@ -1,7 +1,7 @@ <%= link_to(l(:link_documents), {:controller => "dmsf", :action => "index", :id=> @project }) %> <% path.each do |path_element| %> / - <%= link_to(h(path_element.name), {:controller => "dmsf", :action => "index", :id=> @project, :folder_id => path_element}) %> + <%= link_to(h(path_element.title), {:controller => "dmsf", :action => "index", :id=> @project, :folder_id => path_element}) %> <% if path_element.notification %> <%= image_tag("notify.png", :plugin => "redmine_dmsf", :title => l(:title_notifications_active)) %> <% end %> diff --git a/app/views/dmsf/index.html.erb b/app/views/dmsf/index.html.erb index 458abb89..ea69e961 100644 --- a/app/views/dmsf/index.html.erb +++ b/app/views/dmsf/index.html.erb @@ -5,7 +5,7 @@ <% unless @folder.nil? %> <%= link_to(image_tag("edit.png", :style => "vertical-align: text-top;"), {:controller => "dmsf_detail", :action => "folder_detail", :id => @project, :folder_id => @folder }, - :title => l(:link_edit, :title => h(@folder.name))) %> + :title => l(:link_edit, :title => h(@folder.title))) %> <% end %> <%= link_to(image_tag("add.png", :style => "vertical-align: text-top;"), {:controller => "dmsf_detail", :action => "folder_new", :id => @project, :parent_id => @folder }, @@ -46,7 +46,7 @@ form_tag({:action => "entries_operation", :id => @project, :folder_id => @folder
- <%= label_tag("dmsf_folder_name", l(:label_title) + ":") %> - <%= f.text_field(:name, :size => "32", :required => true) %> + <%= label_tag("dmsf_folder_title", l(:label_title) + ":") %> + <%= f.text_field(:title, :size => "32", :required => true) %>