render :layout => !request.xhr?
end
+ # TODO: split method into new (GET) and create (POST)
+ def new
+ if request.post?
+ container = (params[:version_id].blank? ? @project : @project.versions.find_by_id(params[:version_id]))
+ attachments = Attachment.attach_files(container, params[:attachments])
+ render_attachment_warning_if_needed(container)
+
+ if !attachments.empty? && Setting.notified_events.include?('file_added')
+ Mailer.deliver_attachments_added(attachments[:files])
+ end
+ redirect_to :controller => 'files', :action => 'index', :id => @project
+ return
+ end
+ @versions = @project.versions.sort
+ end
end
class ProjectsController < ApplicationController
menu_item :overview
menu_item :roadmap, :only => :roadmap
- menu_item :files, :only => [:add_file]
menu_item :settings, :only => :settings
before_filter :find_project, :except => [ :index, :list, :add, :copy ]
@project = nil
end
- def add_file
- if request.post?
- container = (params[:version_id].blank? ? @project : @project.versions.find_by_id(params[:version_id]))
- attachments = Attachment.attach_files(container, params[:attachments])
- render_attachment_warning_if_needed(container)
-
- if !attachments.empty? && Setting.notified_events.include?('file_added')
- Mailer.deliver_attachments_added(attachments[:files])
- end
- redirect_to :controller => 'files', :action => 'index', :id => @project
- return
- end
- @versions = @project.versions.sort
- end
-
def save_activities
if request.post? && params[:enumerations]
Project.transaction do
<div class="contextual">
-<%= link_to_if_authorized l(:label_attachment_new), {:controller => 'projects', :action => 'add_file', :id => @project}, :class => 'icon icon-add' %>
+<%= link_to_if_authorized l(:label_attachment_new), {:controller => 'files', :action => 'new', :id => @project}, :class => 'icon icon-add' %>
</div>
<h2><%=l(:label_attachment_plural)%></h2>
--- /dev/null
+<h2><%=l(:label_attachment_new)%></h2>
+
+<%= error_messages_for 'attachment' %>
+<div class="box">
+<% form_tag({ :action => 'new', :id => @project }, :multipart => true, :class => "tabular") do %>
+
+<% if @versions.any? %>
+<p><label for="version_id"><%=l(:field_version)%></label>
+<%= select_tag "version_id", content_tag('option', '') +
+ options_from_collection_for_select(@versions, "id", "name") %></p>
+<% end %>
+
+<p><label><%=l(:label_attachment_plural)%></label><%= render :partial => 'attachments/form' %></p>
+</div>
+<%= submit_tag l(:button_add) %>
+<% end %>
+++ /dev/null
-<h2><%=l(:label_attachment_new)%></h2>
-
-<%= error_messages_for 'attachment' %>
-<div class="box">
-<% form_tag({ :action => 'add_file', :id => @project }, :multipart => true, :class => "tabular") do %>
-
-<% if @versions.any? %>
-<p><label for="version_id"><%=l(:field_version)%></label>
-<%= select_tag "version_id", content_tag('option', '') +
- options_from_collection_for_select(@versions, "id", "name") %></p>
-<% end %>
-
-<p><label><%=l(:label_attachment_plural)%></label><%= render :partial => 'attachments/form' %></p>
-</div>
-<%= submit_tag l(:button_add) %>
-<% end %>
project_views.connect 'projects/:id.:format', :action => 'show'
project_views.connect 'projects/:id/:action', :action => /destroy|settings/
project_views.connect 'projects/:id/files', :controller => 'files', :action => 'index'
- project_views.connect 'projects/:id/files/new', :action => 'add_file'
+ project_views.connect 'projects/:id/files/new', :controller => 'files', :action => 'new'
project_views.connect 'projects/:id/settings/:tab', :action => 'settings'
project_views.connect 'projects/:project_id/issues/:copy_from/copy', :controller => 'issues', :action => 'new'
end
project_actions.connect 'projects', :action => 'add'
project_actions.connect 'projects.:format', :action => 'add', :format => /xml/
project_actions.connect 'projects/:id/:action', :action => /edit|destroy|archive|unarchive/
- project_actions.connect 'projects/:id/files/new', :action => 'add_file'
+ project_actions.connect 'projects/:id/files/new', :controller => 'files', :action => 'new'
project_actions.connect 'projects/:id/activities/save', :action => 'save_activities'
end
end
map.project_module :files do |map|
- map.permission :manage_files, {:projects => :add_file}, :require => :loggedin
+ map.permission :manage_files, {:files => :new}, :require => :loggedin
map.permission :view_files, :files => :index, :versions => :download
end
:attributes => { :href => '/attachments/download/9/version_file.zip' }
end
+ def test_add_file
+ set_tmp_attachments_directory
+ @request.session[:user_id] = 2
+ Setting.notified_events = ['file_added']
+ ActionMailer::Base.deliveries.clear
+
+ assert_difference 'Attachment.count' do
+ post :new, :id => 1, :version_id => '',
+ :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}}
+ assert_response :redirect
+ end
+ assert_redirected_to 'projects/ecookbook/files'
+ a = Attachment.find(:first, :order => 'created_on DESC')
+ assert_equal 'testfile.txt', a.filename
+ assert_equal Project.find(1), a.container
+
+ mail = ActionMailer::Base.deliveries.last
+ assert_kind_of TMail::Mail, mail
+ assert_equal "[eCookbook] New file", mail.subject
+ assert mail.body.include?('testfile.txt')
+ end
+
+ def test_add_version_file
+ set_tmp_attachments_directory
+ @request.session[:user_id] = 2
+ Setting.notified_events = ['file_added']
+
+ assert_difference 'Attachment.count' do
+ post :new, :id => 1, :version_id => '2',
+ :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}}
+ assert_response :redirect
+ end
+ assert_redirected_to 'projects/ecookbook/files'
+ a = Attachment.find(:first, :order => 'created_on DESC')
+ assert_equal 'testfile.txt', a.filename
+ assert_equal Version.find(2), a.container
+ end
+
end
assert_nil Project.find_by_id(1)
end
- def test_add_file
- set_tmp_attachments_directory
- @request.session[:user_id] = 2
- Setting.notified_events = ['file_added']
- ActionMailer::Base.deliveries.clear
-
- assert_difference 'Attachment.count' do
- post :add_file, :id => 1, :version_id => '',
- :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}}
- end
- assert_redirected_to 'projects/ecookbook/files'
- a = Attachment.find(:first, :order => 'created_on DESC')
- assert_equal 'testfile.txt', a.filename
- assert_equal Project.find(1), a.container
-
- mail = ActionMailer::Base.deliveries.last
- assert_kind_of TMail::Mail, mail
- assert_equal "[eCookbook] New file", mail.subject
- assert mail.body.include?('testfile.txt')
- end
-
- def test_add_version_file
- set_tmp_attachments_directory
- @request.session[:user_id] = 2
- Setting.notified_events = ['file_added']
-
- assert_difference 'Attachment.count' do
- post :add_file, :id => 1, :version_id => '2',
- :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}}
- end
- assert_redirected_to 'projects/ecookbook/files'
- a = Attachment.find(:first, :order => 'created_on DESC')
- assert_equal 'testfile.txt', a.filename
- assert_equal Version.find(2), a.container
- end
-
def test_archive
@request.session[:user_id] = 1 # admin
post :archive, :id => 1
should_route :get, "/projects/4223/settings/members", :controller => 'projects', :action => 'settings', :id => '4223', :tab => 'members'
should_route :get, "/projects/567/destroy", :controller => 'projects', :action => 'destroy', :id => '567'
should_route :get, "/projects/33/files", :controller => 'files', :action => 'index', :id => '33'
- should_route :get, "/projects/33/files/new", :controller => 'projects', :action => 'add_file', :id => '33'
+ should_route :get, "/projects/33/files/new", :controller => 'files', :action => 'new', :id => '33'
should_route :get, "/projects/33/roadmap", :controller => 'versions', :action => 'index', :project_id => '33'
should_route :get, "/projects/33/activity", :controller => 'activities', :action => 'index', :id => '33'
should_route :get, "/projects/33/activity.atom", :controller => 'activities', :action => 'index', :id => '33', :format => 'atom'
should_route :post, "/projects.xml", :controller => 'projects', :action => 'add', :format => 'xml'
should_route :post, "/projects/4223/edit", :controller => 'projects', :action => 'edit', :id => '4223'
should_route :post, "/projects/64/destroy", :controller => 'projects', :action => 'destroy', :id => '64'
- should_route :post, "/projects/33/files/new", :controller => 'projects', :action => 'add_file', :id => '33'
+ should_route :post, "/projects/33/files/new", :controller => 'files', :action => 'new', :id => '33'
should_route :post, "/projects/64/archive", :controller => 'projects', :action => 'archive', :id => '64'
should_route :post, "/projects/64/unarchive", :controller => 'projects', :action => 'unarchive', :id => '64'
should_route :post, "/projects/64/activities/save", :controller => 'projects', :action => 'save_activities', :id => '64'