summaryrefslogtreecommitdiffstats
path: root/app/controllers
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2007-05-26 15:42:37 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2007-05-26 15:42:37 +0000
commitf8ef65e8f64111b5bfa45abd42e0e684afd61f07 (patch)
treef38d893e289b9eb42f7732eeb33c225b8379ad41 /app/controllers
parent6446c312beab7e23162827a79bd9ab6f9e4d7958 (diff)
downloadredmine-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.rb39
-rw-r--r--app/controllers/issues_controller.rb10
-rw-r--r--app/controllers/messages_controller.rb10
-rw-r--r--app/controllers/wiki_controller.rb27
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