Custom fileds copy/move
This commit is contained in:
parent
bf75681708
commit
c0777e292e
@ -28,7 +28,7 @@ class DmsfController < ApplicationController
|
|||||||
helper :all
|
helper :all
|
||||||
|
|
||||||
def show
|
def show
|
||||||
if @folder.nil?
|
unless @folder
|
||||||
@subfolders = @project.dmsf_folders.visible
|
@subfolders = @project.dmsf_folders.visible
|
||||||
@files = @project.dmsf_files.visible
|
@files = @project.dmsf_files.visible
|
||||||
else
|
else
|
||||||
@ -37,7 +37,11 @@ class DmsfController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
@files.sort! do |a,b|
|
@files.sort! do |a,b|
|
||||||
a.last_revision.title <=> b.last_revision.title
|
if a.last_revision && b.last_revision
|
||||||
|
a.last_revision.title <=> b.last_revision.title
|
||||||
|
else
|
||||||
|
0
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -103,10 +103,7 @@ class DmsfFile < ActiveRecord::Base
|
|||||||
errors[:base] << l(:error_file_is_locked)
|
errors[:base] << l(:error_file_is_locked)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
if Setting.plugin_redmine_dmsf['dmsf_really_delete_files']
|
if Setting.plugin_redmine_dmsf['dmsf_really_delete_files']
|
||||||
CustomValue.where(:customized_id => self.id).all.each do |v|
|
|
||||||
v.destroy
|
|
||||||
end
|
|
||||||
self.revisions.visible.each {|r| r.delete(true)}
|
self.revisions.visible.each {|r| r.delete(true)}
|
||||||
self.destroy
|
self.destroy
|
||||||
else
|
else
|
||||||
@ -179,12 +176,7 @@ class DmsfFile < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
projects
|
projects
|
||||||
end
|
end
|
||||||
|
|
||||||
# Overrides Redmine::Acts::Customizable::InstanceMethods#available_custom_fields
|
|
||||||
def available_custom_fields
|
|
||||||
DmsfFileRevisionCustomField.all
|
|
||||||
end
|
|
||||||
|
|
||||||
def move_to(project, folder)
|
def move_to(project, folder)
|
||||||
if self.locked_for_user?
|
if self.locked_for_user?
|
||||||
errors[:base] << l(:error_file_is_locked)
|
errors[:base] << l(:error_file_is_locked)
|
||||||
@ -196,18 +188,11 @@ class DmsfFile < ActiveRecord::Base
|
|||||||
new_revision.folder = folder
|
new_revision.folder = folder
|
||||||
new_revision.project = folder ? folder.project : project
|
new_revision.project = folder ? folder.project : project
|
||||||
new_revision.comment = l(:comment_moved_from, :source => "#{self.project.identifier}:#{self.dmsf_path_str}")
|
new_revision.comment = l(:comment_moved_from, :source => "#{self.project.identifier}:#{self.dmsf_path_str}")
|
||||||
|
|
||||||
new_revision.custom_values = []
|
new_revision.custom_values = []
|
||||||
temp_custom_values = self.last_revision.custom_values.select{|cv| new_revision.available_custom_fields.include?(cv.custom_field)}.map(&:clone)
|
self.last_revision.custom_values.each do |cv|
|
||||||
new_revision.custom_values = temp_custom_values
|
new_revision.custom_values << CustomValue.new({:custom_field => cv.custom_field, :value => cv.value})
|
||||||
|
end
|
||||||
# Add default value for CFs not existing
|
|
||||||
present_custom_fields = new_revision.custom_values.collect(&:custom_field).uniq
|
|
||||||
new_revision.available_custom_fields.each do |cf|
|
|
||||||
unless present_custom_fields.include?(cf)
|
|
||||||
new_revision.custom_values << CustomValue.new({:custom_field => cf, :value => cf.default_value}) if cf.default_value
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# If the target project differs from the source project we must physically move the file
|
# If the target project differs from the source project we must physically move the file
|
||||||
if self.project != new_revision.project
|
if self.project != new_revision.project
|
||||||
@ -219,7 +204,7 @@ class DmsfFile < ActiveRecord::Base
|
|||||||
self.folder = new_revision.folder
|
self.folder = new_revision.folder
|
||||||
self.project = new_revision.project
|
self.project = new_revision.project
|
||||||
|
|
||||||
self.save && new_revision.save
|
self.save && new_revision.save
|
||||||
end
|
end
|
||||||
|
|
||||||
def copy_to(project, folder)
|
def copy_to(project, folder)
|
||||||
@ -237,19 +222,14 @@ class DmsfFile < ActiveRecord::Base
|
|||||||
new_revision.project = folder ? folder.project : project
|
new_revision.project = folder ? folder.project : project
|
||||||
new_revision.comment = l(:comment_copied_from, :source => "#{self.project.identifier}: #{self.dmsf_path_str}")
|
new_revision.comment = l(:comment_copied_from, :source => "#{self.project.identifier}: #{self.dmsf_path_str}")
|
||||||
|
|
||||||
new_revision.custom_values = Array.new(self.last_revision.custom_values)
|
new_revision.custom_values = []
|
||||||
|
self.last_revision.custom_values.each do |cv|
|
||||||
# Add default value for CFs not existing
|
new_revision.custom_values << CustomValue.new({:custom_field => cv.custom_field, :value => cv.value})
|
||||||
present_custom_fields = new_revision.custom_values.collect(&:custom_field).uniq
|
|
||||||
new_revision.available_custom_fields.each do |cf|
|
|
||||||
unless present_custom_fields.include?(cf)
|
|
||||||
new_revision.custom_values << CustomValue.new({:custom_field => cf, :value => cf.default_value}) if cf.default_value
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
unless new_revision.save
|
unless new_revision.save
|
||||||
file.delete
|
file.delete
|
||||||
else
|
else
|
||||||
# If the target project differs from the source project we must physically copy the file
|
# If the target project differs from the source project we must physically copy the file
|
||||||
if project != self.project
|
if project != self.project
|
||||||
if File.exist? self.last_revision.disk_file
|
if File.exist? self.last_revision.disk_file
|
||||||
@ -263,21 +243,21 @@ class DmsfFile < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
# To fullfill searchable module expectations
|
# To fullfill searchable module expectations
|
||||||
def self.search(tokens, projects=nil, options={})
|
def self.search(tokens, projects = nil, options = {})
|
||||||
tokens = [] << tokens unless tokens.is_a?(Array)
|
tokens = [] << tokens unless tokens.is_a?(Array)
|
||||||
projects = [] << projects unless projects.nil? || projects.is_a?(Array)
|
projects = [] << projects unless projects.nil? || projects.is_a?(Array)
|
||||||
|
|
||||||
find_options = {:include => [:project,:revisions]}
|
find_options = {:include => [:project,:revisions]}
|
||||||
find_options[:order] = "dmsf_files.updated_at " + (options[:before] ? 'DESC' : 'ASC')
|
find_options[:order] = 'dmsf_files.updated_at ' + (options[:before] ? 'DESC' : 'ASC')
|
||||||
|
|
||||||
limit_options = {}
|
limit_options = {}
|
||||||
limit_options[:limit] = options[:limit] if options[:limit]
|
limit_options[:limit] = options[:limit] if options[:limit]
|
||||||
if options[:offset]
|
if options[:offset]
|
||||||
limit_options[:conditions] = "(dmsf_files.updated_at " + (options[:before] ? '<' : '>') + "'#{connection.quoted_date(options[:offset])}')"
|
limit_options[:conditions] = '(dmsf_files.updated_at ' + (options[:before] ? '<' : '>') + "'#{connection.quoted_date(options[:offset])}')"
|
||||||
end
|
end
|
||||||
|
|
||||||
columns = ["dmsf_files.name","dmsf_file_revisions.title", "dmsf_file_revisions.description"]
|
columns = %w(dmsf_files.name, dmsf_file_revisions.title, dmsf_file_revisions.description)
|
||||||
columns = ["dmsf_file_revisions.title"] if options[:titles_only]
|
columns = ['dmsf_file_revisions.title'] if options[:titles_only]
|
||||||
|
|
||||||
token_clauses = columns.collect {|column| "(LOWER(#{column}) LIKE ?)"}
|
token_clauses = columns.collect {|column| "(LOWER(#{column}) LIKE ?)"}
|
||||||
|
|
||||||
@ -309,7 +289,7 @@ class DmsfFile < ActiveRecord::Base
|
|||||||
unless database.nil?
|
unless database.nil?
|
||||||
enquire = Xapian::Enquire.new(database)
|
enquire = Xapian::Enquire.new(database)
|
||||||
|
|
||||||
queryString = tokens.join(' ')
|
query_string = tokens.join(' ')
|
||||||
qp = Xapian::QueryParser.new()
|
qp = Xapian::QueryParser.new()
|
||||||
stemmer = Xapian::Stem.new(Setting.plugin_redmine_dmsf['dmsf_stemming_lang'].strip)
|
stemmer = Xapian::Stem.new(Setting.plugin_redmine_dmsf['dmsf_stemming_lang'].strip)
|
||||||
qp.stemmer = stemmer
|
qp.stemmer = stemmer
|
||||||
@ -330,7 +310,7 @@ class DmsfFile < ActiveRecord::Base
|
|||||||
qp.default_op = Xapian::Query::OP_OR
|
qp.default_op = Xapian::Query::OP_OR
|
||||||
end
|
end
|
||||||
|
|
||||||
query = qp.parse_query(queryString)
|
query = qp.parse_query(query_string)
|
||||||
|
|
||||||
enquire.query = query
|
enquire.query = query
|
||||||
matchset = enquire.mset(0, 1000)
|
matchset = enquire.mset(0, 1000)
|
||||||
|
|||||||
@ -71,20 +71,14 @@ class DmsfFileRevision < ActiveRecord::Base
|
|||||||
errors[:base] << l(:error_at_least_one_revision_must_be_present)
|
errors[:base] << l(:error_at_least_one_revision_must_be_present)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
dependent = DmsfFileRevision.find(:source_dmsf_file_revision_id => self.id, :deleted => false).all
|
dependent = DmsfFileRevision.where(:source_dmsf_file_revision_id => self.id, :deleted => false).all
|
||||||
dependent.each do |d|
|
dependent.each do |d|
|
||||||
d.source_revision = self.source_revision
|
d.source_revision = self.source_revision
|
||||||
d.save!
|
d.save!
|
||||||
end
|
end
|
||||||
if Setting.plugin_redmine_dmsf['dmsf_really_delete_files']
|
if Setting.plugin_redmine_dmsf['dmsf_really_delete_files']
|
||||||
dependent = DmsfFileRevision..where(:disk_filename => self.disk_filename).all
|
dependencies = DmsfFileRevision.where(:disk_filename => self.disk_filename).all.count
|
||||||
File.delete(self.disk_file) if dependent.length <= 1 && File.exist?(self.disk_file)
|
File.delete(self.disk_file) if dependencies <= 1 && File.exist?(self.disk_file)
|
||||||
DmsfFileRevisionAccess.where(:dmsf_file_revision_id => self.id).all.each do |a|
|
|
||||||
a.destroy
|
|
||||||
end
|
|
||||||
CustomValue.find(:customized_id => self.id).all.each do |v|
|
|
||||||
v.destroy
|
|
||||||
end
|
|
||||||
self.destroy
|
self.destroy
|
||||||
else
|
else
|
||||||
self.deleted = true
|
self.deleted = true
|
||||||
@ -132,8 +126,7 @@ class DmsfFileRevision < ActiveRecord::Base
|
|||||||
# TODO: use standard clone method
|
# TODO: use standard clone method
|
||||||
def clone
|
def clone
|
||||||
new_revision = DmsfFileRevision.new
|
new_revision = DmsfFileRevision.new
|
||||||
new_revision.file = self.file
|
new_revision.file = self.file
|
||||||
new_revision.project = self.project
|
|
||||||
new_revision.disk_filename = self.disk_filename
|
new_revision.disk_filename = self.disk_filename
|
||||||
new_revision.size = self.size
|
new_revision.size = self.size
|
||||||
new_revision.mime_type = self.mime_type
|
new_revision.mime_type = self.mime_type
|
||||||
@ -141,17 +134,11 @@ class DmsfFileRevision < ActiveRecord::Base
|
|||||||
new_revision.description = self.description
|
new_revision.description = self.description
|
||||||
new_revision.workflow = self.workflow
|
new_revision.workflow = self.workflow
|
||||||
new_revision.major_version = self.major_version
|
new_revision.major_version = self.major_version
|
||||||
new_revision.minor_version = self.minor_version
|
new_revision.minor_version = self.minor_version
|
||||||
|
|
||||||
new_revision.source_revision = self
|
new_revision.source_revision = self
|
||||||
new_revision.user = User.current
|
new_revision.user = User.current
|
||||||
|
new_revision.name = self.name
|
||||||
new_revision.name = self.name
|
new_revision
|
||||||
new_revision.folder = self.folder
|
|
||||||
|
|
||||||
new_revision.custom_values = self.custom_values.map(&:clone)
|
|
||||||
|
|
||||||
return new_revision
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def workflow_str(name)
|
def workflow_str(name)
|
||||||
|
|||||||
@ -192,15 +192,10 @@ class DmsfFolder < ActiveRecord::Base
|
|||||||
new_folder.description = self.description
|
new_folder.description = self.description
|
||||||
new_folder.user = User.current
|
new_folder.user = User.current
|
||||||
|
|
||||||
new_folder.custom_values = Array.new(self.custom_values)
|
new_folder.custom_values = []
|
||||||
|
self.custom_values.each do |cv|
|
||||||
# Add default value for CFs not existing
|
new_folder.custom_values << CustomValue.new({:custom_field => cv.custom_field, :value => cv.value})
|
||||||
present_custom_fields = new_folder.custom_values.collect(&:custom_field).uniq
|
end
|
||||||
new_folder.available_custom_fields.each do |cf|
|
|
||||||
unless present_custom_fields.include?(cf)
|
|
||||||
new_folder.custom_values << CustomValue.new({:custom_field => cf, :value => cf.default_value}) if cf.default_value
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return new_folder unless new_folder.save
|
return new_folder unless new_folder.save
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
# Redmine plugin for Document Management System "Features"
|
# Redmine plugin for Document Management System "Features"
|
||||||
#
|
#
|
||||||
# Copyright (C) 2011 Vít Jonáš <vit.jonas@gmail.com>
|
# Copyright (C) 2011 Vít Jonáš <vit.jonas@gmail.com>
|
||||||
|
# Copyright (C) 2012 Daniel Munn <dan.munn@munnster.co.uk>
|
||||||
|
# Copyright (C) 2013 Karel Pičman <karel.picman@kontron.com>
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
@ -17,20 +19,18 @@
|
|||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
class DmsfUpload
|
class DmsfUpload
|
||||||
attr_accessor :name
|
attr_accessor :name
|
||||||
|
|
||||||
attr_accessor :disk_filename
|
attr_accessor :disk_filename
|
||||||
attr_reader :size
|
attr_reader :size
|
||||||
attr_accessor :mime_type
|
attr_accessor :mime_type
|
||||||
attr_accessor :title
|
attr_accessor :title
|
||||||
attr_accessor :description
|
attr_accessor :description
|
||||||
|
|
||||||
attr_accessor :comment
|
attr_accessor :comment
|
||||||
attr_accessor :major_version
|
attr_accessor :major_version
|
||||||
attr_accessor :minor_version
|
attr_accessor :minor_version
|
||||||
attr_accessor :locked
|
attr_accessor :locked
|
||||||
|
|
||||||
attr_accessor :workflow
|
attr_accessor :workflow
|
||||||
|
attr_accessor :custom_values
|
||||||
|
|
||||||
def disk_file
|
def disk_file
|
||||||
"#{DmsfHelper.temp_dir}/#{self.disk_filename}"
|
"#{DmsfHelper.temp_dir}/#{self.disk_filename}"
|
||||||
@ -38,9 +38,9 @@ class DmsfUpload
|
|||||||
|
|
||||||
def self.create_from_uploaded_file(project, folder, uploaded_file)
|
def self.create_from_uploaded_file(project, folder, uploaded_file)
|
||||||
uploaded = {
|
uploaded = {
|
||||||
"disk_filename" => DmsfHelper.temp_filename(uploaded_file.original_filename),
|
'disk_filename' => DmsfHelper.temp_filename(uploaded_file.original_filename),
|
||||||
"content_type" => uploaded_file.content_type.to_s,
|
'content_type' => uploaded_file.content_type.to_s,
|
||||||
"original_filename" => uploaded_file.original_filename,
|
'original_filename' => uploaded_file.original_filename,
|
||||||
}
|
}
|
||||||
|
|
||||||
File.open("#{DmsfHelper.temp_dir}/#{uploaded["disk_filename"]}", "wb") do |f|
|
File.open("#{DmsfHelper.temp_dir}/#{uploaded["disk_filename"]}", "wb") do |f|
|
||||||
@ -52,12 +52,12 @@ class DmsfUpload
|
|||||||
end
|
end
|
||||||
|
|
||||||
def initialize(project, folder, uploaded)
|
def initialize(project, folder, uploaded)
|
||||||
@name = uploaded["original_filename"]
|
@name = uploaded['original_filename']
|
||||||
|
|
||||||
dmsf_file = DmsfFile.visible.find_file_by_name(project, folder, @name)
|
dmsf_file = DmsfFile.visible.find_file_by_name(project, folder, @name)
|
||||||
|
|
||||||
@disk_filename = uploaded["disk_filename"]
|
@disk_filename = uploaded['disk_filename']
|
||||||
@mime_type = uploaded["content_type"]
|
@mime_type = uploaded['content_type']
|
||||||
@size = File.size(disk_file)
|
@size = File.size(disk_file)
|
||||||
|
|
||||||
if dmsf_file.nil? || dmsf_file.last_revision.nil?
|
if dmsf_file.nil? || dmsf_file.last_revision.nil?
|
||||||
@ -65,7 +65,8 @@ class DmsfUpload
|
|||||||
@description = nil
|
@description = nil
|
||||||
@major_version = 0
|
@major_version = 0
|
||||||
@minor_version = 0
|
@minor_version = 0
|
||||||
@workflow = nil
|
@workflow = nil
|
||||||
|
@custom_values = DmsfFileRevision.new(:file => DmsfFile.new(:project => @project)).custom_field_values
|
||||||
else
|
else
|
||||||
last_revision = dmsf_file.last_revision
|
last_revision = dmsf_file.last_revision
|
||||||
@title = last_revision.title
|
@title = last_revision.title
|
||||||
@ -73,9 +74,18 @@ class DmsfUpload
|
|||||||
@major_version = last_revision.major_version
|
@major_version = last_revision.major_version
|
||||||
@minor_version = last_revision.minor_version
|
@minor_version = last_revision.minor_version
|
||||||
@workflow = last_revision.workflow
|
@workflow = last_revision.workflow
|
||||||
|
@custom_values = Array.new(dmsf_file.last_revision.custom_values)
|
||||||
|
|
||||||
|
# Add default value for CFs not existing
|
||||||
|
present_custom_fields = dmsf_file.last_revision.custom_values.collect(&:custom_field).uniq
|
||||||
|
dmsf_file.last_revision.available_custom_fields.each do |cf|
|
||||||
|
unless present_custom_fields.include?(cf)
|
||||||
|
@custom_values << CustomValue.new({:custom_field => cf, :value => cf.default_value}) if cf.default_value
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@locked = !dmsf_file.nil? && dmsf_file.locked_for_user?
|
@locked = dmsf_file && dmsf_file.locked_for_user?
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@ -167,16 +167,20 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
<% workflows_available = DmsfWorkflow.where(['project_id = ? OR project_id IS NULL', @project.id]).count > 0 %>
|
<% workflows_available = DmsfWorkflow.where(['project_id = ? OR project_id IS NULL', @project.id]).count > 0 %>
|
||||||
<% @files.each do |file| %>
|
<% @files.each do |file| %>
|
||||||
|
<% unless file.last_revision %>
|
||||||
|
<% Rails.logger.error "Error: dmsf_file id #{file.id} has no revision!" %>
|
||||||
|
<% next %>
|
||||||
|
<% end %>
|
||||||
<% wf = DmsfWorkflow.find_by_id(file.last_revision.dmsf_workflow_id) %>
|
<% wf = DmsfWorkflow.find_by_id(file.last_revision.dmsf_workflow_id) %>
|
||||||
<tr class="file">
|
<tr class="file">
|
||||||
<td class="check"><%= check_box_tag("files[]", file.id, false, :title => l(:title_check_for_zip_download_or_email)) %></td>
|
<td class="check"><%= check_box_tag('files[]', file.id, false, :title => l(:title_check_for_zip_download_or_email)) %></td>
|
||||||
<td class="title">
|
<td class="title">
|
||||||
<% file_download_url = url_for({:only_path => false, :controller => :dmsf_files, :action => "show", :id => file, :download => ""}) %>
|
<% file_download_url = url_for({:only_path => false, :controller => :dmsf_files, :action => 'show', :id => file, :download => ''}) %>
|
||||||
<%= link_to(h(file.last_revision.display_title),
|
<%= link_to(h(file.last_revision.display_title),
|
||||||
file_download_url,
|
file_download_url,
|
||||||
:class => "icon icon-file #{DmsfHelper.filetype_css(file.name)}",
|
:class => "icon icon-file #{DmsfHelper.filetype_css(file.name)}",
|
||||||
:title => l(:title_title_version_version_download, :title => h(file.title), :version => file.version),
|
:title => l(:title_title_version_version_download, :title => h(file.title), :version => file.version),
|
||||||
"data-downloadurl" => "#{file.last_revision.detect_content_type}:#{h(file.name)}:#{file_download_url}") %>
|
'data-downloadurl' => "#{file.last_revision.detect_content_type}:#{h(file.name)}:#{file_download_url}") %>
|
||||||
<div class="filename" title="<%= l(:title_filename_for_download)%>"><%= h(file.display_name) %></div>
|
<div class="filename" title="<%= l(:title_filename_for_download)%>"><%= h(file.display_name) %></div>
|
||||||
<%#= render 'custom_fields', :object => file.last_revision %>
|
<%#= render 'custom_fields', :object => file.last_revision %>
|
||||||
</td>
|
</td>
|
||||||
@ -300,7 +304,7 @@
|
|||||||
<br class="clear" />
|
<br class="clear" />
|
||||||
</td>
|
</td>
|
||||||
<td class="hidden">1</td>
|
<td class="hidden">1</td>
|
||||||
<td class="hidden"><%=file.last_revision.size%></td>
|
<td class="hidden"><%= file.last_revision.size %></td>
|
||||||
</tr>
|
</tr>
|
||||||
<% end %>
|
<% end %>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|||||||
@ -1,7 +1,9 @@
|
|||||||
<%#
|
<%#=
|
||||||
# Redmine plugin for Document Management System "Features"
|
# Redmine plugin for Document Management System "Features"
|
||||||
#
|
#
|
||||||
# Copyright (C) 2013 Karel Picman <karel.picman@kontron.com>
|
# Copyright (C) 2011 Vít Jonáš <vit.jonas@gmail.com>
|
||||||
|
# Copyright (C) 2012 Daniel Munn <dan.munn@munnster.co.uk>
|
||||||
|
# Copyright (C) 2013 Karel Pičman <karel.picman@kontron.com>
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
|
|||||||
@ -1,7 +1,9 @@
|
|||||||
<%#
|
<%#=
|
||||||
# Redmine plugin for Document Management System "Features"
|
# Redmine plugin for Document Management System "Features"
|
||||||
#
|
#
|
||||||
# Copyright (C) 2013 Karel Picman <karel.picman@kontron.com>
|
# Copyright (C) 2011 Vít Jonáš <vit.jonas@gmail.com>
|
||||||
|
# Copyright (C) 2012 Daniel Munn <dan.munn@munnster.co.uk>
|
||||||
|
# Copyright (C) 2013 Karel Pičman <karel.picman@kontron.com>
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
@ -61,9 +63,8 @@
|
|||||||
<%= number_to_human_size(upload.size) %>
|
<%= number_to_human_size(upload.size) %>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<br style="clear: both"/>
|
<br style="clear: both"/>
|
||||||
<% values = DmsfFileRevision.new(:file => DmsfFile.new(:project => @project)).custom_field_values %>
|
<% upload.custom_values.each do |value| %>
|
||||||
<% values.each do |value| %>
|
|
||||||
<p><%= custom_field_tag_with_label("commited_files[#{i}][dmsf_file_revision]", value) %></p>
|
<p><%= custom_field_tag_with_label("commited_files[#{i}][dmsf_file_revision]", value) %></p>
|
||||||
<% end %>
|
<% end %>
|
||||||
<p>
|
<p>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user