@@ -257,27 +257,6 class ApplicationController < ActionController::Base | |||||
257 | self.class.read_inheritable_attribute('accept_key_auth_actions') || [] |
|
257 | self.class.read_inheritable_attribute('accept_key_auth_actions') || [] | |
258 | end |
|
258 | end | |
259 |
|
259 | |||
260 | # TODO: move to model |
|
|||
261 | def attach_files(obj, attachments) |
|
|||
262 | attached = [] |
|
|||
263 | unsaved = [] |
|
|||
264 | if attachments && attachments.is_a?(Hash) |
|
|||
265 | attachments.each_value do |attachment| |
|
|||
266 | file = attachment['file'] |
|
|||
267 | next unless file && file.size > 0 |
|
|||
268 | a = Attachment.create(:container => obj, |
|
|||
269 | :file => file, |
|
|||
270 | :description => attachment['description'].to_s.strip, |
|
|||
271 | :author => User.current) |
|
|||
272 | a.new_record? ? (unsaved << a) : (attached << a) |
|
|||
273 | end |
|
|||
274 | if unsaved.any? |
|
|||
275 | flash[:warning] = l(:warning_attachments_not_saved, unsaved.size) |
|
|||
276 | end |
|
|||
277 | end |
|
|||
278 | attached |
|
|||
279 | end |
|
|||
280 |
|
||||
281 | # Returns the number of objects that should be displayed |
|
260 | # Returns the number of objects that should be displayed | |
282 | # on the paginated list |
|
261 | # on the paginated list | |
283 | def per_page_option |
|
262 | def per_page_option |
@@ -47,7 +47,8 class DocumentsController < ApplicationController | |||||
47 | def new |
|
47 | def new | |
48 | @document = @project.documents.build(params[:document]) |
|
48 | @document = @project.documents.build(params[:document]) | |
49 | if request.post? and @document.save |
|
49 | if request.post? and @document.save | |
50 | attach_files(@document, params[:attachments]) |
|
50 | attachments = Attachment.attach_files(@document, params[:attachments]) | |
|
51 | flash[:warning] = attachments[:flash] if attachments[:flash] | |||
51 | flash[:notice] = l(:notice_successful_create) |
|
52 | flash[:notice] = l(:notice_successful_create) | |
52 | redirect_to :action => 'index', :project_id => @project |
|
53 | redirect_to :action => 'index', :project_id => @project | |
53 | end |
|
54 | end | |
@@ -67,8 +68,10 class DocumentsController < ApplicationController | |||||
67 | end |
|
68 | end | |
68 |
|
69 | |||
69 | def add_attachment |
|
70 | def add_attachment | |
70 | attachments = attach_files(@document, params[:attachments]) |
|
71 | attachments = Attachment.attach_files(@document, params[:attachments]) | |
71 | Mailer.deliver_attachments_added(attachments) if !attachments.empty? && Setting.notified_events.include?('document_added') |
|
72 | flash[:warning] = attachments[:flash] if attachments[:flash] | |
|
73 | ||||
|
74 | Mailer.deliver_attachments_added(attachments[:files]) if attachments.present? && attachments[:files].present? && Setting.notified_events.include?('document_added') | |||
72 | redirect_to :action => 'show', :id => @document |
|
75 | redirect_to :action => 'show', :id => @document | |
73 | end |
|
76 | end | |
74 |
|
77 |
@@ -158,7 +158,8 class IssuesController < ApplicationController | |||||
158 | @issue.status = (@allowed_statuses.include? requested_status) ? requested_status : default_status |
|
158 | @issue.status = (@allowed_statuses.include? requested_status) ? requested_status : default_status | |
159 | call_hook(:controller_issues_new_before_save, { :params => params, :issue => @issue }) |
|
159 | call_hook(:controller_issues_new_before_save, { :params => params, :issue => @issue }) | |
160 | if @issue.save |
|
160 | if @issue.save | |
161 | attach_files(@issue, params[:attachments]) |
|
161 | attachments = Attachment.attach_files(@issue, params[:attachments]) | |
|
162 | flash[:warning] = attachments[:flash] if attachments[:flash] | |||
162 | flash[:notice] = l(:notice_successful_create) |
|
163 | flash[:notice] = l(:notice_successful_create) | |
163 | call_hook(:controller_issues_new_after_save, { :params => params, :issue => @issue}) |
|
164 | call_hook(:controller_issues_new_after_save, { :params => params, :issue => @issue}) | |
164 | respond_to do |format| |
|
165 | respond_to do |format| | |
@@ -561,8 +562,6 private | |||||
561 |
|
562 | |||
562 | # TODO: Temporary utility method for #update. Should be split off |
|
563 | # TODO: Temporary utility method for #update. Should be split off | |
563 | # and moved to the Issue model (accepts_nested_attributes_for maybe?) |
|
564 | # and moved to the Issue model (accepts_nested_attributes_for maybe?) | |
564 | # TODO: move attach_files to the model so this can be moved to the |
|
|||
565 | # model also |
|
|||
566 | def issue_update |
|
565 | def issue_update | |
567 | if params[:time_entry] && params[:time_entry][:hours].present? && User.current.allowed_to?(:log_time, @project) |
|
566 | if params[:time_entry] && params[:time_entry][:hours].present? && User.current.allowed_to?(:log_time, @project) | |
568 | @time_entry = TimeEntry.new(:project => @project, :issue => @issue, :user => User.current, :spent_on => Date.today) |
|
567 | @time_entry = TimeEntry.new(:project => @project, :issue => @issue, :user => User.current, :spent_on => Date.today) | |
@@ -571,8 +570,9 private | |||||
571 | end |
|
570 | end | |
572 |
|
571 | |||
573 | if @issue.valid? |
|
572 | if @issue.valid? | |
574 | attachments = attach_files(@issue, params[:attachments]) |
|
573 | attachments = Attachment.attach_files(@issue, params[:attachments]) | |
575 | attachments.each {|a| @journal.details << JournalDetail.new(:property => 'attachment', :prop_key => a.id, :value => a.filename)} |
|
574 | flash[:warning] = attachments[:flash] if attachments[:flash] | |
|
575 | attachments[:files].each {|a| @journal.details << JournalDetail.new(:property => 'attachment', :prop_key => a.id, :value => a.filename)} | |||
576 | call_hook(:controller_issues_edit_before_save, { :params => params, :issue => @issue, :time_entry => @time_entry, :journal => @journal}) |
|
576 | call_hook(:controller_issues_edit_before_save, { :params => params, :issue => @issue, :time_entry => @time_entry, :journal => @journal}) | |
577 | if @issue.save |
|
577 | if @issue.save | |
578 | if !@journal.new_record? |
|
578 | if !@journal.new_record? |
@@ -62,7 +62,8 class MessagesController < ApplicationController | |||||
62 | end |
|
62 | end | |
63 | if request.post? && @message.save |
|
63 | if request.post? && @message.save | |
64 | call_hook(:controller_messages_new_after_save, { :params => params, :message => @message}) |
|
64 | call_hook(:controller_messages_new_after_save, { :params => params, :message => @message}) | |
65 | attach_files(@message, params[:attachments]) |
|
65 | attachments = Attachment.attach_files(@message, params[:attachments]) | |
|
66 | flash[:warning] = attachments[:flash] if attachments[:flash] | |||
66 | redirect_to :action => 'show', :id => @message |
|
67 | redirect_to :action => 'show', :id => @message | |
67 | end |
|
68 | end | |
68 | end |
|
69 | end | |
@@ -75,7 +76,8 class MessagesController < ApplicationController | |||||
75 | @topic.children << @reply |
|
76 | @topic.children << @reply | |
76 | if !@reply.new_record? |
|
77 | if !@reply.new_record? | |
77 | call_hook(:controller_messages_reply_after_save, { :params => params, :message => @reply}) |
|
78 | call_hook(:controller_messages_reply_after_save, { :params => params, :message => @reply}) | |
78 | attach_files(@reply, params[:attachments]) |
|
79 | attachments = Attachment.attach_files(@reply, params[:attachments]) | |
|
80 | flash[:warning] = attachments[:flash] if attachments[:flash] | |||
79 | end |
|
81 | end | |
80 | redirect_to :action => 'show', :id => @topic, :r => @reply |
|
82 | redirect_to :action => 'show', :id => @topic, :r => @reply | |
81 | end |
|
83 | end | |
@@ -88,7 +90,8 class MessagesController < ApplicationController | |||||
88 | @message.sticky = params[:message]['sticky'] |
|
90 | @message.sticky = params[:message]['sticky'] | |
89 | end |
|
91 | end | |
90 | if request.post? && @message.update_attributes(params[:message]) |
|
92 | if request.post? && @message.update_attributes(params[:message]) | |
91 | attach_files(@message, params[:attachments]) |
|
93 | attachments = Attachment.attach_files(@message, params[:attachments]) | |
|
94 | flash[:warning] = attachments[:flash] if attachments[:flash] | |||
92 | flash[:notice] = l(:notice_successful_update) |
|
95 | flash[:notice] = l(:notice_successful_update) | |
93 | @message.reload |
|
96 | @message.reload | |
94 | redirect_to :action => 'show', :board_id => @message.board, :id => @message.root, :r => (@message.parent_id && @message.id) |
|
97 | redirect_to :action => 'show', :board_id => @message.board, :id => @message.root, :r => (@message.parent_id && @message.id) |
@@ -303,9 +303,11 class ProjectsController < ApplicationController | |||||
303 | def add_file |
|
303 | def add_file | |
304 | if request.post? |
|
304 | if request.post? | |
305 | container = (params[:version_id].blank? ? @project : @project.versions.find_by_id(params[:version_id])) |
|
305 | container = (params[:version_id].blank? ? @project : @project.versions.find_by_id(params[:version_id])) | |
306 | attachments = attach_files(container, params[:attachments]) |
|
306 | attachments = Attachment.attach_files(container, params[:attachments]) | |
|
307 | flash[:warning] = attachments[:flash] if attachments[:flash] | |||
|
308 | ||||
307 | if !attachments.empty? && Setting.notified_events.include?('file_added') |
|
309 | if !attachments.empty? && Setting.notified_events.include?('file_added') | |
308 | Mailer.deliver_attachments_added(attachments) |
|
310 | Mailer.deliver_attachments_added(attachments[:files]) | |
309 | end |
|
311 | end | |
310 | redirect_to :controller => 'projects', :action => 'list_files', :id => @project |
|
312 | redirect_to :controller => 'projects', :action => 'list_files', :id => @project | |
311 | return |
|
313 | return |
@@ -76,7 +76,8 class WikiController < ApplicationController | |||||
76 | @content.version = @page.content.version |
|
76 | @content.version = @page.content.version | |
77 | else |
|
77 | else | |
78 | if !@page.new_record? && @content.text == params[:content][:text] |
|
78 | if !@page.new_record? && @content.text == params[:content][:text] | |
79 | attach_files(@page, params[:attachments]) |
|
79 | attachments = Attachment.attach_files(@page, params[:attachments]) | |
|
80 | flash[:warning] = attachments[:flash] if attachments[:flash] | |||
80 | # don't save if text wasn't changed |
|
81 | # don't save if text wasn't changed | |
81 | redirect_to :action => 'index', :id => @project, :page => @page.title |
|
82 | redirect_to :action => 'index', :id => @project, :page => @page.title | |
82 | return |
|
83 | return | |
@@ -87,7 +88,8 class WikiController < ApplicationController | |||||
87 | @content.author = User.current |
|
88 | @content.author = User.current | |
88 | # if page is new @page.save will also save content, but not if page isn't a new record |
|
89 | # if page is new @page.save will also save content, but not if page isn't a new record | |
89 | if (@page.new_record? ? @page.save : @content.save) |
|
90 | if (@page.new_record? ? @page.save : @content.save) | |
90 | attach_files(@page, params[:attachments]) |
|
91 | attachments = Attachment.attach_files(@page, params[:attachments]) | |
|
92 | flash[:warning] = attachments[:flash] if attachments[:flash] | |||
91 | call_hook(:controller_wiki_edit_after_save, { :params => params, :page => @page}) |
|
93 | call_hook(:controller_wiki_edit_after_save, { :params => params, :page => @page}) | |
92 | redirect_to :action => 'index', :id => @project, :page => @page.title |
|
94 | redirect_to :action => 'index', :id => @project, :page => @page.title | |
93 | end |
|
95 | end | |
@@ -211,7 +213,8 class WikiController < ApplicationController | |||||
211 |
|
213 | |||
212 | def add_attachment |
|
214 | def add_attachment | |
213 | return render_403 unless editable? |
|
215 | return render_403 unless editable? | |
214 | attach_files(@page, params[:attachments]) |
|
216 | attachments = Attachment.attach_files(@page, params[:attachments]) | |
|
217 | flash[:warning] = attachments[:flash] if attachments[:flash] | |||
215 | redirect_to :action => 'index', :page => @page.title |
|
218 | redirect_to :action => 'index', :page => @page.title | |
216 | end |
|
219 | end | |
217 |
|
220 |
@@ -133,6 +133,33 class Attachment < ActiveRecord::Base | |||||
133 | def readable? |
|
133 | def readable? | |
134 | File.readable?(diskfile) |
|
134 | File.readable?(diskfile) | |
135 | end |
|
135 | end | |
|
136 | ||||
|
137 | # Bulk attaches a set of files to an object | |||
|
138 | # | |||
|
139 | # Returns a Hash of the results: | |||
|
140 | # :files => array of the attached files | |||
|
141 | # :unsaved => array of the files that could not be attached | |||
|
142 | # :flash => warning message | |||
|
143 | def self.attach_files(obj, attachments) | |||
|
144 | attached = [] | |||
|
145 | unsaved = [] | |||
|
146 | flash = nil | |||
|
147 | if attachments && attachments.is_a?(Hash) | |||
|
148 | attachments.each_value do |attachment| | |||
|
149 | file = attachment['file'] | |||
|
150 | next unless file && file.size > 0 | |||
|
151 | a = Attachment.create(:container => obj, | |||
|
152 | :file => file, | |||
|
153 | :description => attachment['description'].to_s.strip, | |||
|
154 | :author => User.current) | |||
|
155 | a.new_record? ? (unsaved << a) : (attached << a) | |||
|
156 | end | |||
|
157 | if unsaved.any? | |||
|
158 | flash = l(:warning_attachments_not_saved, unsaved.size) | |||
|
159 | end | |||
|
160 | end | |||
|
161 | {:files => attached, :flash => flash, :unsaved => unsaved} | |||
|
162 | end | |||
136 |
|
163 | |||
137 | private |
|
164 | private | |
138 | def sanitize_filename(value) |
|
165 | def sanitize_filename(value) |
General Comments 0
You need to be logged in to leave comments.
Login now