根据项目需要,需将redmine中重要的文件进行备份,备份目录在redmine服务器上。
主要修改了两大部分:第一,添加备份按钮,实现备份功能;第二,为该功能添加权限设置。
首先记录第一点的实现:
(1)修改/usr/local/redmine/redmine-1.1.0/app/views/files/index.html.erb,添加
<td align="left">
<%= link_to(image_tag('move.png'), {:controller => 'attachments', :action => 'copy', :id => file}, :confirm => l(:text_are_you_sure)) if copy_allowed %>
</td>
此处是添加copy图片,使用copy方法实现。
(2)修改/usr/local/redmine/redmine-1.1.0/app/controllers/attchaments_controller.rb,添加copy方法
require 'ftools'
require 'fileutils'(注意大小写)
def copy
#if @attachment.container.is_a?(Version) || @attachment.container.is_a?(Project)
diskfilename = @attachment.diskfile
filename = filename_for_content_disposition(@attachment.filename)
FileUtils.cp "#{diskfilename}", "../../../../home/xxx/tt/#{filename}"
redirect_to :back
rescue ::ActionController::RedirectBackError
redirect_to :controller => 'projects', :action => 'show', :id => @project
end
注:#{diskfilename}的路径是/redmine/files中的文件名,被redmine处理过的文件名;#{filename}才是文件真正的名字
此处是将redmine/files中指定的文件拷贝到../../../../home/xxx/tt/#{filename},之所以只用"../../../../",是因为此处默认的路径是#{RAILS_ROOT}。
注意:目标路径要更改权限:sudo chown www-data:www-data ../../../../home/xxx/tt
第二点的实现:
(1)修改/usr/local/redmine/redmine-1.1.0/app/views/files/index.html.erb,添加
<% copy_allowed = User.current.allowed_to?(:copy_files, @project) %>
此处是根据copy_files的设定与否来决定是否显示copy功能。
(2)修改 /usr/local/redmine/redmine-1.1.0/lib/redmine.rb
map.project_module :files do |map|
map.permission :manage_files, {:files => [:new, :create]}, :require => :loggedin
map.permission :view_files, :files => :index, :versions => :download
map.permission :copy_files, :files => :index, :require => :loggedin
实现在权限报表中权限设置功能。
注:usr/local/redmine/redmine-1.1.0/test/fixtures/roles.yml与lib/redmine/default_data/loader.rb中不缺定是否要修改。但是上述功能已实现。