在redmine中添加服务器文件备份功能

来源:互联网 发布:落一叶而知秋 编辑:程序博客网 时间:2024/05/29 21:28

根据项目需要,需将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中不缺定是否要修改。但是上述功能已实现。


原创粉丝点击