summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/application_controller.rb5
-rw-r--r--app/controllers/documents_controller.rb4
-rw-r--r--app/controllers/issues_controller.rb5
-rw-r--r--app/controllers/messages_controller.rb6
-rw-r--r--app/controllers/projects_controller.rb2
-rw-r--r--app/controllers/wiki_controller.rb6
-rw-r--r--app/models/attachment.rb9
-rw-r--r--vendor/plugins/acts_as_attachable/lib/acts_as_attachable.rb8
8 files changed, 26 insertions, 19 deletions
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index c2fd2c2f5..58d87e7ed 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -301,4 +301,9 @@ class ApplicationController < ActionController::Base
def api_request?
%w(xml json).include? params[:format]
end
+
+ # Renders a warning flash if obj has unsaved attachments
+ def render_attachment_warning_if_needed(obj)
+ flash[:warning] = l(:warning_attachments_not_saved, obj.unsaved_attachments.size) if obj.unsaved_attachments.present?
+ end
end
diff --git a/app/controllers/documents_controller.rb b/app/controllers/documents_controller.rb
index 135ae2198..526bf8123 100644
--- a/app/controllers/documents_controller.rb
+++ b/app/controllers/documents_controller.rb
@@ -48,7 +48,7 @@ class DocumentsController < ApplicationController
@document = @project.documents.build(params[:document])
if request.post? and @document.save
attachments = Attachment.attach_files(@document, params[:attachments])
- flash[:warning] = attachments[:flash] if attachments[:flash]
+ render_attachment_warning_if_needed(@document)
flash[:notice] = l(:notice_successful_create)
redirect_to :action => 'index', :project_id => @project
end
@@ -69,7 +69,7 @@ class DocumentsController < ApplicationController
def add_attachment
attachments = Attachment.attach_files(@document, params[:attachments])
- flash[:warning] = attachments[:flash] if attachments[:flash]
+ render_attachment_warning_if_needed(@document)
Mailer.deliver_attachments_added(attachments[:files]) if attachments.present? && attachments[:files].present? && Setting.notified_events.include?('document_added')
redirect_to :action => 'show', :id => @document
diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb
index 1bbd9b739..aa28ebe81 100644
--- a/app/controllers/issues_controller.rb
+++ b/app/controllers/issues_controller.rb
@@ -159,7 +159,7 @@ class IssuesController < ApplicationController
call_hook(:controller_issues_new_before_save, { :params => params, :issue => @issue })
if @issue.save
attachments = Attachment.attach_files(@issue, params[:attachments])
- flash[:warning] = attachments[:flash] if attachments[:flash]
+ render_attachment_warning_if_needed(@issue)
flash[:notice] = l(:notice_successful_create)
call_hook(:controller_issues_new_after_save, { :params => params, :issue => @issue})
respond_to do |format|
@@ -571,7 +571,8 @@ private
if @issue.valid?
attachments = Attachment.attach_files(@issue, params[:attachments])
- flash[:warning] = attachments[:flash] if attachments[:flash]
+ render_attachment_warning_if_needed(@issue)
+
attachments[:files].each {|a| @journal.details << JournalDetail.new(:property => 'attachment', :prop_key => a.id, :value => a.filename)}
call_hook(:controller_issues_edit_before_save, { :params => params, :issue => @issue, :time_entry => @time_entry, :journal => @journal})
if @issue.save
diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb
index 70226a711..5ad8ea58d 100644
--- a/app/controllers/messages_controller.rb
+++ b/app/controllers/messages_controller.rb
@@ -63,7 +63,7 @@ class MessagesController < ApplicationController
if request.post? && @message.save
call_hook(:controller_messages_new_after_save, { :params => params, :message => @message})
attachments = Attachment.attach_files(@message, params[:attachments])
- flash[:warning] = attachments[:flash] if attachments[:flash]
+ render_attachment_warning_if_needed(@message)
redirect_to :action => 'show', :id => @message
end
end
@@ -77,7 +77,7 @@ class MessagesController < ApplicationController
if !@reply.new_record?
call_hook(:controller_messages_reply_after_save, { :params => params, :message => @reply})
attachments = Attachment.attach_files(@reply, params[:attachments])
- flash[:warning] = attachments[:flash] if attachments[:flash]
+ render_attachment_warning_if_needed(@reply)
end
redirect_to :action => 'show', :id => @topic, :r => @reply
end
@@ -91,7 +91,7 @@ class MessagesController < ApplicationController
end
if request.post? && @message.update_attributes(params[:message])
attachments = Attachment.attach_files(@message, params[:attachments])
- flash[:warning] = attachments[:flash] if attachments[:flash]
+ render_attachment_warning_if_needed(@message)
flash[:notice] = l(:notice_successful_update)
@message.reload
redirect_to :action => 'show', :board_id => @message.board, :id => @message.root, :r => (@message.parent_id && @message.id)
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 58790c28f..a8ab59bd8 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -304,7 +304,7 @@ class ProjectsController < ApplicationController
if request.post?
container = (params[:version_id].blank? ? @project : @project.versions.find_by_id(params[:version_id]))
attachments = Attachment.attach_files(container, params[:attachments])
- flash[:warning] = attachments[:flash] if attachments[:flash]
+ render_attachment_warning_if_needed(container)
if !attachments.empty? && Setting.notified_events.include?('file_added')
Mailer.deliver_attachments_added(attachments[:files])
diff --git a/app/controllers/wiki_controller.rb b/app/controllers/wiki_controller.rb
index e0e159a00..60b59ff5f 100644
--- a/app/controllers/wiki_controller.rb
+++ b/app/controllers/wiki_controller.rb
@@ -77,7 +77,7 @@ class WikiController < ApplicationController
else
if !@page.new_record? && @content.text == params[:content][:text]
attachments = Attachment.attach_files(@page, params[:attachments])
- flash[:warning] = attachments[:flash] if attachments[:flash]
+ render_attachment_warning_if_needed(@page)
# don't save if text wasn't changed
redirect_to :action => 'index', :id => @project, :page => @page.title
return
@@ -89,7 +89,7 @@ class WikiController < ApplicationController
# if page is new @page.save will also save content, but not if page isn't a new record
if (@page.new_record? ? @page.save : @content.save)
attachments = Attachment.attach_files(@page, params[:attachments])
- flash[:warning] = attachments[:flash] if attachments[:flash]
+ render_attachment_warning_if_needed(@page)
call_hook(:controller_wiki_edit_after_save, { :params => params, :page => @page})
redirect_to :action => 'index', :id => @project, :page => @page.title
end
@@ -214,7 +214,7 @@ class WikiController < ApplicationController
def add_attachment
return render_403 unless editable?
attachments = Attachment.attach_files(@page, params[:attachments])
- flash[:warning] = attachments[:flash] if attachments[:flash]
+ render_attachment_warning_if_needed(@page)
redirect_to :action => 'index', :page => @page.title
end
diff --git a/app/models/attachment.rb b/app/models/attachment.rb
index 221618c6a..c752e0e52 100644
--- a/app/models/attachment.rb
+++ b/app/models/attachment.rb
@@ -139,11 +139,9 @@ class Attachment < ActiveRecord::Base
# Returns a Hash of the results:
# :files => array of the attached files
# :unsaved => array of the files that could not be attached
- # :flash => warning message
def self.attach_files(obj, attachments)
attached = []
unsaved = []
- flash = nil
if attachments && attachments.is_a?(Hash)
attachments.each_value do |attachment|
file = attachment['file']
@@ -152,13 +150,10 @@ class Attachment < ActiveRecord::Base
:file => file,
:description => attachment['description'].to_s.strip,
:author => User.current)
- a.new_record? ? (unsaved << a) : (attached << a)
- end
- if unsaved.any?
- flash = l(:warning_attachments_not_saved, unsaved.size)
+ a.new_record? ? (obj.unsaved_attachments << a) : (attached << a)
end
end
- {:files => attached, :flash => flash, :unsaved => unsaved}
+ {:files => attached, :unsaved => obj.unsaved_attachments}
end
private
diff --git a/vendor/plugins/acts_as_attachable/lib/acts_as_attachable.rb b/vendor/plugins/acts_as_attachable/lib/acts_as_attachable.rb
index 78d42c215..e5acdc499 100644
--- a/vendor/plugins/acts_as_attachable/lib/acts_as_attachable.rb
+++ b/vendor/plugins/acts_as_attachable/lib/acts_as_attachable.rb
@@ -32,6 +32,8 @@ module Redmine
has_many :attachments, options.merge(:as => :container,
:order => "#{Attachment.table_name}.created_on",
:dependent => :destroy)
+ attr_accessor :unsaved_attachments
+ after_initialize :initialize_unsaved_attachments
send :include, Redmine::Acts::Attachable::InstanceMethods
end
end
@@ -48,7 +50,11 @@ module Redmine
def attachments_deletable?(user=User.current)
user.allowed_to?(self.class.attachable_options[:delete_permission], self.project)
end
-
+
+ def initialize_unsaved_attachments
+ @unsaved_attachments ||= []
+ end
+
module ClassMethods
end
end