diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2007-12-18 18:50:41 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2007-12-18 18:50:41 +0000 |
commit | 8e00f57a886ae529ae308a17bfc9a363056754bf (patch) | |
tree | c6b14ccef81ea31948c3ce87d1176593ca56b152 | |
parent | 524cd689cf8743c389aab6a767a09383891dc5c6 (diff) | |
download | redmine-8e00f57a886ae529ae308a17bfc9a363056754bf.tar.gz redmine-8e00f57a886ae529ae308a17bfc9a363056754bf.zip |
Moved ProjectsController#list_documents and add_document to DocumentsController#index and new.
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1011 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r-- | app/controllers/documents_controller.rb | 42 | ||||
-rw-r--r-- | app/controllers/projects_controller.rb | 28 | ||||
-rw-r--r-- | app/views/documents/index.rhtml (renamed from app/views/projects/list_documents.rhtml) | 4 | ||||
-rw-r--r-- | app/views/documents/new.rhtml (renamed from app/views/projects/add_document.rhtml) | 2 | ||||
-rw-r--r-- | config/routes.rb | 1 | ||||
-rw-r--r-- | lib/redmine.rb | 6 | ||||
-rw-r--r-- | test/functional/documents_controller_test.rb | 64 | ||||
-rw-r--r-- | test/functional/projects_controller_test.rb | 7 |
8 files changed, 109 insertions, 45 deletions
diff --git a/app/controllers/documents_controller.rb b/app/controllers/documents_controller.rb index 104cca10c..b37a8371a 100644 --- a/app/controllers/documents_controller.rb +++ b/app/controllers/documents_controller.rb @@ -17,12 +17,40 @@ class DocumentsController < ApplicationController layout 'base' - before_filter :find_project, :authorize - + before_filter :find_project, :only => [:index, :new] + before_filter :find_document, :except => [:index, :new] + before_filter :authorize + + def index + @sort_by = %w(category date title author).include?(params[:sort_by]) ? params[:sort_by] : 'category' + documents = @project.documents.find :all, :include => [:attachments, :category] + case @sort_by + when 'date' + @grouped = documents.group_by {|d| d.created_on.to_date } + when 'title' + @grouped = documents.group_by {|d| d.title.first.upcase} + when 'author' + @grouped = documents.select{|d| d.attachments.any?}.group_by {|d| d.attachments.last.author} + else + @grouped = documents.group_by(&:category) + end + render :layout => false if request.xhr? + end + def show @attachments = @document.attachments.find(:all, :order => "created_on DESC") end + def new + @document = @project.documents.build(params[:document]) + if request.post? and @document.save + attach_files(@document, params[:attachments]) + flash[:notice] = l(:notice_successful_create) + Mailer.deliver_document_added(@document) if Setting.notified_events.include?('document_added') + redirect_to :action => 'index', :project_id => @project + end + end + def edit @categories = Enumeration::get_values('DCAT') if request.post? and @document.update_attributes(params[:document]) @@ -33,7 +61,7 @@ class DocumentsController < ApplicationController def destroy @document.destroy - redirect_to :controller => 'projects', :action => 'list_documents', :id => @project + redirect_to :controller => 'documents', :action => 'index', :project_id => @project end def download @@ -57,9 +85,15 @@ class DocumentsController < ApplicationController private def find_project + @project = Project.find(params[:project_id]) + rescue ActiveRecord::RecordNotFound + render_404 + end + + def find_document @document = Document.find(params[:id]) @project = @document.project rescue ActiveRecord::RecordNotFound render_404 - end + end end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 7b1e4ef3d..84203a34d 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -177,34 +177,6 @@ class ProjectsController < ApplicationController end end - # Add a new document to @project - def add_document - @document = @project.documents.build(params[:document]) - if request.post? and @document.save - attach_files(@document, params[:attachments]) - flash[:notice] = l(:notice_successful_create) - Mailer.deliver_document_added(@document) if Setting.notified_events.include?('document_added') - redirect_to :action => 'list_documents', :id => @project - end - end - - # Show documents list of @project - def list_documents - @sort_by = %w(category date title author).include?(params[:sort_by]) ? params[:sort_by] : 'category' - documents = @project.documents.find :all, :include => [:attachments, :category] - case @sort_by - when 'date' - @grouped = documents.group_by {|d| d.created_on.to_date } - when 'title' - @grouped = documents.group_by {|d| d.title.first.upcase} - when 'author' - @grouped = documents.select{|d| d.attachments.any?}.group_by {|d| d.attachments.last.author} - else - @grouped = documents.group_by(&:category) - end - render :layout => false if request.xhr? - end - # Add a new issue to @project # The new issue will be created from an existing one if copy_from parameter is given def add_issue diff --git a/app/views/projects/list_documents.rhtml b/app/views/documents/index.rhtml index 6829b9bf5..a7cefb733 100644 --- a/app/views/projects/list_documents.rhtml +++ b/app/views/documents/index.rhtml @@ -1,13 +1,13 @@ <div class="contextual"> <%= link_to_if_authorized l(:label_document_new), - {:controller => 'projects', :action => 'add_document', :id => @project}, + {:controller => 'documents', :action => 'new', :project_id => @project}, :class => 'icon icon-add', :onclick => 'Element.show("add-document"); return false;' %> </div> <div id="add-document" style="display:none;"> <h2><%=l(:label_document_new)%></h2> -<% form_tag({:action => 'add_document', :id => @project}, :class => "tabular", :multipart => true) do %> +<% form_tag({:controller => 'documents', :action => 'new', :project_id => @project}, :class => "tabular", :multipart => true) do %> <%= render :partial => 'documents/form' %> <div class="box"> <%= render :partial => 'common/attachments_form'%> diff --git a/app/views/projects/add_document.rhtml b/app/views/documents/new.rhtml index 6c3fe2c7b..4f728da79 100644 --- a/app/views/projects/add_document.rhtml +++ b/app/views/documents/new.rhtml @@ -1,6 +1,6 @@ <h2><%=l(:label_document_new)%></h2> -<% form_tag( { :action => 'add_document', :id => @project }, :class => "tabular", :multipart => true) do %> +<% form_tag({:controller => 'documents', :action => 'new', :project_id => @project}, :class => "tabular", :multipart => true) do %> <%= render :partial => 'documents/form' %> <div class="box"> diff --git a/config/routes.rb b/config/routes.rb index 5048da2f5..febb5e247 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -16,6 +16,7 @@ ActionController::Routing::Routes.draw do |map| map.connect 'issues/:issue_id/relations/:action/:id', :controller => 'issue_relations' map.connect 'projects/:project_id/issues/:action', :controller => 'issues' map.connect 'projects/:project_id/news/:action', :controller => 'news' + map.connect 'projects/:project_id/documents/:action', :controller => 'documents' map.connect 'projects/:project_id/boards/:action/:id', :controller => 'boards' map.connect 'boards/:board_id/topics/:action/:id', :controller => 'messages' diff --git a/lib/redmine.rb b/lib/redmine.rb index 1f1053438..921e16b30 100644 --- a/lib/redmine.rb +++ b/lib/redmine.rb @@ -58,8 +58,8 @@ Redmine::AccessControl.map do |map| end map.project_module :documents do |map| - map.permission :manage_documents, {:projects => :add_document, :documents => [:edit, :destroy, :add_attachment, :destroy_attachment]}, :require => :loggedin - map.permission :view_documents, :projects => :list_documents, :documents => [:show, :download] + map.permission :manage_documents, {:documents => [:new, :edit, :destroy, :add_attachment, :destroy_attachment]}, :require => :loggedin + map.permission :view_documents, :documents => [:index, :show, :download] end map.project_module :files do |map| @@ -97,7 +97,7 @@ Redmine::MenuManager.map :project_menu do |menu| menu.push :label_roadmap, :controller => 'projects', :action => 'roadmap' menu.push :label_issue_plural, { :controller => 'issues', :action => 'index' }, :param => :project_id menu.push :label_news_plural, { :controller => 'news', :action => 'index' }, :param => :project_id - menu.push :label_document_plural, :controller => 'projects', :action => 'list_documents' + menu.push :label_document_plural, { :controller => 'documents', :action => 'index' }, :param => :project_id menu.push :label_wiki, { :controller => 'wiki', :action => 'index', :page => nil }, :if => Proc.new { |p| p.wiki && !p.wiki.new_record? } menu.push :label_board_plural, { :controller => 'boards', :action => 'index', :id => nil }, :param => :project_id, :if => Proc.new { |p| p.boards.any? } menu.push :label_attachment_plural, :controller => 'projects', :action => 'list_files' diff --git a/test/functional/documents_controller_test.rb b/test/functional/documents_controller_test.rb new file mode 100644 index 000000000..7ba308ec5 --- /dev/null +++ b/test/functional/documents_controller_test.rb @@ -0,0 +1,64 @@ +# 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. + +require File.dirname(__FILE__) + '/../test_helper' +require 'documents_controller' + +# Re-raise errors caught by the controller. +class DocumentsController; def rescue_action(e) raise e end; end + +class DocumentsControllerTest < Test::Unit::TestCase + fixtures :projects, :users, :roles, :members, :enabled_modules, :documents, :enumerations + + def setup + @controller = DocumentsController.new + @request = ActionController::TestRequest.new + @response = ActionController::TestResponse.new + User.current = nil + end + + def test_index + get :index, :project_id => 'ecookbook' + assert_response :success + assert_template 'index' + assert_not_nil assigns(:grouped) + end + + def test_new_with_one_attachment + @request.session[:user_id] = 2 + post :new, :project_id => 'ecookbook', + :document => { :title => 'DocumentsControllerTest#test_post_new', + :description => 'This is a new document', + :category_id => 2}, + :attachments => [ ActionController::TestUploadedFile.new(Test::Unit::TestCase.fixture_path + '/files/testfile.txt', 'text/plain') ] + + assert_redirected_to 'projects/ecookbook/documents' + + document = Document.find_by_title('DocumentsControllerTest#test_post_new') + assert_not_nil document + assert_equal Enumeration.find(2), document.category + assert_equal 1, document.attachments.size + assert_equal 'testfile.txt', document.attachments.first.filename + end + + def test_destroy + @request.session[:user_id] = 2 + post :destroy, :id => 1 + assert_redirected_to 'projects/ecookbook/documents' + assert_nil Document.find_by_id(1) + end +end diff --git a/test/functional/projects_controller_test.rb b/test/functional/projects_controller_test.rb index 556d5d407..896f59074 100644 --- a/test/functional/projects_controller_test.rb +++ b/test/functional/projects_controller_test.rb @@ -92,13 +92,6 @@ class ProjectsControllerTest < Test::Unit::TestCase assert_nil Project.find_by_id(1) end - def test_list_documents
- get :list_documents, :id => 1
- assert_response :success - assert_template 'list_documents'
- assert_not_nil assigns(:grouped)
- end - def test_bulk_edit_issues @request.session[:user_id] = 2 # update issues priority |