diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2007-05-26 15:42:37 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2007-05-26 15:42:37 +0000 |
commit | f8ef65e8f64111b5bfa45abd42e0e684afd61f07 (patch) | |
tree | f38d893e289b9eb42f7732eeb33c225b8379ad41 /app/controllers | |
parent | 6446c312beab7e23162827a79bd9ab6f9e4d7958 (diff) | |
download | redmine-f8ef65e8f64111b5bfa45abd42e0e684afd61f07.tar.gz redmine-f8ef65e8f64111b5bfa45abd42e0e684afd61f07.zip |
Attachments can now be added to wiki pages (original patch by Pavol Murin). Only authorized users can add/delete attachments.
Attached images can be displayed inline, using textile image tag (for wiki pages, issue descriptions and forum messages).
git-svn-id: http://redmine.rubyforge.org/svn/trunk@541 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/controllers')
-rw-r--r-- | app/controllers/attachments_controller.rb | 39 | ||||
-rw-r--r-- | app/controllers/issues_controller.rb | 10 | ||||
-rw-r--r-- | app/controllers/messages_controller.rb | 10 | ||||
-rw-r--r-- | app/controllers/wiki_controller.rb | 27 |
4 files changed, 68 insertions, 18 deletions
diff --git a/app/controllers/attachments_controller.rb b/app/controllers/attachments_controller.rb new file mode 100644 index 000000000..3528e7220 --- /dev/null +++ b/app/controllers/attachments_controller.rb @@ -0,0 +1,39 @@ +# redMine - project management software +# Copyright (C) 2006-2007 Jean-Philippe Lang +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +class AttachmentsController < ApplicationController + before_filter :find_project, :check_project_privacy + + # sends an attachment + def download + send_file @attachment.diskfile, :filename => @attachment.filename + end + + # sends an image to be displayed inline + def show + render(:nothing => true, :status => 404) and return unless @attachment.diskfile =~ /\.(jpeg|jpg|gif|png)$/i + send_file @attachment.diskfile, :type => "image/#{$1}", :disposition => 'inline' + end + +private + def find_project + @attachment = Attachment.find(params[:id]) + @project = @attachment.project + rescue + render_404 + end +end diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 0a8d19a31..f57dfc888 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -29,6 +29,8 @@ class IssuesController < ApplicationController include IssueRelationsHelper helper :watchers include WatchersHelper + helper :attachments + include AttachmentsHelper def show @status_options = @issue.status.find_new_statuses_allowed_to(logged_in_user.role_for_project(@project), @issue.tracker) if logged_in_user @@ -146,14 +148,6 @@ class IssuesController < ApplicationController redirect_to :action => 'show', :id => @issue end - # Send the file in stream mode - def download - @attachment = @issue.attachments.find(params[:attachment_id]) - send_file @attachment.diskfile, :filename => @attachment.filename - rescue - render_404 - end - private def find_project @issue = Issue.find(params[:id], :include => [:project, :tracker, :status, :author, :priority, :category]) diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb index 16a04097f..1b0d2a680 100644 --- a/app/controllers/messages_controller.rb +++ b/app/controllers/messages_controller.rb @@ -22,6 +22,9 @@ class MessagesController < ApplicationController verify :method => :post, :only => [ :reply, :destroy ], :redirect_to => { :action => :show } + helper :attachments + include AttachmentsHelper + def show @reply = Message.new(:subject => "RE: #{@message.subject}") render :action => "show", :layout => false if request.xhr? @@ -48,13 +51,6 @@ class MessagesController < ApplicationController redirect_to :action => 'show', :id => @message end - def download - @attachment = @message.attachments.find(params[:attachment_id]) - send_file @attachment.diskfile, :filename => @attachment.filename - rescue - render_404 - end - private def find_project @board = Board.find(params[:board_id], :include => :project) diff --git a/app/controllers/wiki_controller.rb b/app/controllers/wiki_controller.rb index f68b71ecc..d8f23cfd1 100644 --- a/app/controllers/wiki_controller.rb +++ b/app/controllers/wiki_controller.rb @@ -17,10 +17,13 @@ class WikiController < ApplicationController layout 'base' - before_filter :find_wiki, :check_project_privacy, :except => [:preview] - before_filter :authorize, :only => :destroy + before_filter :find_wiki, :check_project_privacy + before_filter :authorize, :only => [:destroy, :add_attachment, :destroy_attachment] - verify :method => :post, :only => [ :destroy ], :redirect_to => { :action => :index } + verify :method => :post, :only => [:destroy, :destroy_attachment], :redirect_to => { :action => :index } + + helper :attachments + include AttachmentsHelper # display a page (in editing mode if it doesn't exist) def index @@ -107,10 +110,28 @@ class WikiController < ApplicationController end def preview + page = @wiki.find_page(params[:page]) + @attachements = page.attachments if page @text = params[:content][:text] render :partial => 'preview' end + def add_attachment + @page = @wiki.find_page(params[:page]) + # Save the attachments + params[:attachments].each { |file| + next unless file.size > 0 + a = Attachment.create(:container => @page, :file => file, :author => logged_in_user) + } if params[:attachments] and params[:attachments].is_a? Array + redirect_to :action => 'index', :page => @page.title + end + + def destroy_attachment + @page = @wiki.find_page(params[:page]) + @page.attachments.find(params[:attachment_id]).destroy + redirect_to :action => 'index', :page => @page.title + end + private def find_wiki |