]> source.dussan.org Git - redmine.git/commitdiff
multiple file upload
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 5 Nov 2006 18:38:20 +0000 (18:38 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 5 Nov 2006 18:38:20 +0000 (18:38 +0000)
git-svn-id: http://redmine.rubyforge.org/svn/trunk@40 e93f8b46-1217-0410-a6f0-8f06a7374b81

redmine/app/controllers/issues_controller.rb
redmine/app/controllers/projects_controller.rb
redmine/app/views/issues/show.rhtml
redmine/app/views/projects/add_issue.rhtml
redmine/public/javascripts/application.js
redmine/public/stylesheets/application.css

index 8bf3805db7d9b2d50d884ec116685d384702174f..d428c75bfee95ed9071bbfd598005f1ee232c0df 100644 (file)
@@ -101,12 +101,11 @@ class IssuesController < ApplicationController
   end\r
 \r
   def add_attachment\r
-    # Save the attachment\r
-    if params[:attachment][:file].size > 0\r
-      @attachment = @issue.attachments.build(params[:attachment])      \r
-      @attachment.author_id = self.logged_in_user.id if self.logged_in_user\r
+    # Save the attachments\r
+    params[:attachments].each { |a|\r
+      @attachment = @issue.attachments.build(:file => a, :author => self.logged_in_user) unless a.size == 0\r
       @attachment.save\r
-    end\r
+    } if params[:attachments] and params[:attachments].is_a? Array\r
     redirect_to :action => 'show', :id => @issue\r
   end\r
 \r
index 8666dae08c14ec191d573d70a86a349e54eed4e1..9e1dc14ef23d696ec23fc8558fd5e809d3c7a5b4 100644 (file)
@@ -187,11 +187,10 @@ class ProjectsController < ApplicationController
     else\r
       @issue.attributes = params[:issue]\r
       @issue.author_id = self.logged_in_user.id if self.logged_in_user\r
-      # Create the document if a file was sent\r
-      if params[:attachment][:file].size > 0\r
-        @attachment = @issue.attachments.build(params[:attachment])                            \r
-        @attachment.author_id = self.logged_in_user.id if self.logged_in_user\r
-      end\r
+      # Multiple file upload\r
+      params[:attachments].each { |a|\r
+        @attachment = @issue.attachments.build(:file => a, :author => self.logged_in_user) unless a.size == 0\r
+      } if params[:attachments] and params[:attachments].is_a? Array\r
       @custom_values = @project.custom_fields_for_issues(@tracker).collect { |x| CustomValue.new(:custom_field => x, :customized => @issue, :value => params["custom_fields"][x.id.to_s]) }\r
       @issue.custom_values = @custom_values                    \r
       if @issue.save\r
index b1affb5a4d8b96f3c7a2cd539a8965c2d36cc65a..104d33654dbae756a0b683c9d98501fadaa1cc7d 100644 (file)
@@ -77,18 +77,6 @@ end %>
 </p>\r
 </div>\r
 \r
-<% if authorize_for('issues', 'add_note') %>\r
-  <div class="box">\r
-  <h3><%= l(:label_add_note) %></h3>\r
-  <%= start_form_tag ({:controller => 'issues', :action => 'add_note', :id => @issue}, :class => "tabular" ) %>\r
-  <p><label for="history_notes"><%=l(:field_notes)%></label>\r
-    <%= text_area 'history', 'notes', :cols => 60, :rows => 10  %></p>\r
-  <%= submit_tag l(:button_add) %>\r
-  <%= end_form_tag %>\r
-  </div>\r
-<% end %>\r
-\r
-<div class="splitcontentleft">\r
 <div class="box">\r
 <h3><%=l(:label_history)%></h3>\r
 <table width="100%">\r
@@ -104,9 +92,7 @@ end %>
 <% end %>
 </table>\r
 </div>\r
-</div>\r
 \r
-<div class="splitcontentright">\r
 <div class="box">\r
 <h3><%=l(:label_attachment_plural)%></h3>\r
 <table width="100%">\r
@@ -127,11 +113,22 @@ end %>
 </table>\r
 <br />\r
 <% if authorize_for('issues', 'add_attachment') %>\r
-  <%= start_form_tag ({ :controller => 'issues', :action => 'add_attachment', :id => @issue }, :multipart => true) %>\r
-  <%=l(:label_attachment_new)%>: <%= file_field 'attachment', 'file'  %>\r
+  <%= start_form_tag ({ :controller => 'issues', :action => 'add_attachment', :id => @issue }, :multipart => true, :class => "tabular") %>\r
+  <p id="attachments_p"><label><%=l(:label_attachment_new)%>\r
+  <%= link_to_function image_tag('add', :align => "top"), "addFileField()" %></label>\r
+  <%= file_field_tag 'attachments[]', :size => 30  %></p>\r
   <%= submit_tag l(:button_add) %>\r
   <%= end_form_tag %> \r
 <% end %>\r
 </div>\r
-</div>\r
 \r
+<% if authorize_for('issues', 'add_note') %>\r
+  <div class="box">\r
+  <h3><%= l(:label_add_note) %></h3>\r
+  <%= start_form_tag ({:controller => 'issues', :action => 'add_note', :id => @issue}, :class => "tabular" ) %>\r
+  <p><label for="history_notes"><%=l(:field_notes)%></label>\r
+    <%= text_area 'history', 'notes', :cols => 60, :rows => 10  %></p>\r
+  <%= submit_tag l(:button_add) %>\r
+  <%= end_form_tag %>\r
+  </div>\r
+<% end %>\r
index 11e61d6b31e43bacf0595c0bf863ce1089d6308d..3e22940b3b365f10fcd986bda3ff4958e48de880 100644 (file)
@@ -17,8 +17,9 @@
        <p><%= custom_field_tag_with_label @custom_value %></p>
 <% end %>\r
 \r
-<p><label for="attachment_file"><%=l(:label_attachment)%></label>
-<%= file_field 'attachment', 'file'  %></p>\r
+<p id="attachments_p"><label for="attachment_file"><%=l(:label_attachment)%>
+<%= link_to_function image_tag('add', :align => "top"), "addFileField()" %></label>
+<%= file_field_tag 'attachments[]', :size => 30  %></p>
 <!--[eoform:issue]-->\r
 </div>
 
index d8083a9579fa4e7da8273f47429af046cab4dd66..3625914ab7e2dd2fdf60793556b2c6e48c483119 100644 (file)
@@ -5,4 +5,15 @@ function checkAll (id, checked) {
       el.elements[i].checked = checked;\r
     }\r
        }\r
+}\r
+\r
+function addFileField() {\r
+    var f = document.createElement("input");\r
+    f.type = "file";\r
+    f.name = "attachments[]";\r
+    f.size = 30;\r
+        \r
+    p = document.getElementById("attachments_p");\r
+    p.appendChild(document.createElement("br"));\r
+    p.appendChild(f);\r
 }
\ No newline at end of file
index d4b3bc5f13ebc7069f978605136193b7aa07ecb6..ef9736bd00292a77d1ecf2a8e315695d7225f9fc 100644 (file)
@@ -198,6 +198,7 @@ textarea {
 \r
 input {\r
        vertical-align: middle;\r
+       margin-bottom: 4px;\r
 }\r
 \r
 input.button-small \r