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
This commit is contained in:
Jean-Philippe Lang 2007-12-18 18:50:41 +00:00
parent 524cd689cf
commit 8e00f57a88
8 changed files with 109 additions and 45 deletions

View File

@ -17,12 +17,40 @@
class DocumentsController < ApplicationController class DocumentsController < ApplicationController
layout 'base' 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 def show
@attachments = @document.attachments.find(:all, :order => "created_on DESC") @attachments = @document.attachments.find(:all, :order => "created_on DESC")
end 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 def edit
@categories = Enumeration::get_values('DCAT') @categories = Enumeration::get_values('DCAT')
if request.post? and @document.update_attributes(params[:document]) if request.post? and @document.update_attributes(params[:document])
@ -33,7 +61,7 @@ class DocumentsController < ApplicationController
def destroy def destroy
@document.destroy @document.destroy
redirect_to :controller => 'projects', :action => 'list_documents', :id => @project redirect_to :controller => 'documents', :action => 'index', :project_id => @project
end end
def download def download
@ -57,9 +85,15 @@ class DocumentsController < ApplicationController
private private
def find_project def find_project
@project = Project.find(params[:project_id])
rescue ActiveRecord::RecordNotFound
render_404
end
def find_document
@document = Document.find(params[:id]) @document = Document.find(params[:id])
@project = @document.project @project = @document.project
rescue ActiveRecord::RecordNotFound rescue ActiveRecord::RecordNotFound
render_404 render_404
end end
end end

View File

@ -177,34 +177,6 @@ class ProjectsController < ApplicationController
end end
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 # Add a new issue to @project
# The new issue will be created from an existing one if copy_from parameter is given # The new issue will be created from an existing one if copy_from parameter is given
def add_issue def add_issue

View File

@ -1,13 +1,13 @@
<div class="contextual"> <div class="contextual">
<%= link_to_if_authorized l(:label_document_new), <%= 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', :class => 'icon icon-add',
:onclick => 'Element.show("add-document"); return false;' %> :onclick => 'Element.show("add-document"); return false;' %>
</div> </div>
<div id="add-document" style="display:none;"> <div id="add-document" style="display:none;">
<h2><%=l(:label_document_new)%></h2> <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' %> <%= render :partial => 'documents/form' %>
<div class="box"> <div class="box">
<%= render :partial => 'common/attachments_form'%> <%= render :partial => 'common/attachments_form'%>

View File

@ -1,6 +1,6 @@
<h2><%=l(:label_document_new)%></h2> <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' %> <%= render :partial => 'documents/form' %>
<div class="box"> <div class="box">

View File

@ -16,6 +16,7 @@ ActionController::Routing::Routes.draw do |map|
map.connect 'issues/:issue_id/relations/:action/:id', :controller => 'issue_relations' 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/issues/:action', :controller => 'issues'
map.connect 'projects/:project_id/news/:action', :controller => 'news' 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 'projects/:project_id/boards/:action/:id', :controller => 'boards'
map.connect 'boards/:board_id/topics/:action/:id', :controller => 'messages' map.connect 'boards/:board_id/topics/:action/:id', :controller => 'messages'

View File

@ -58,8 +58,8 @@ Redmine::AccessControl.map do |map|
end end
map.project_module :documents do |map| map.project_module :documents do |map|
map.permission :manage_documents, {:projects => :add_document, :documents => [:edit, :destroy, :add_attachment, :destroy_attachment]}, :require => :loggedin map.permission :manage_documents, {:documents => [:new, :edit, :destroy, :add_attachment, :destroy_attachment]}, :require => :loggedin
map.permission :view_documents, :projects => :list_documents, :documents => [:show, :download] map.permission :view_documents, :documents => [:index, :show, :download]
end end
map.project_module :files do |map| 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_roadmap, :controller => 'projects', :action => 'roadmap'
menu.push :label_issue_plural, { :controller => 'issues', :action => 'index' }, :param => :project_id 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_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_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_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' menu.push :label_attachment_plural, :controller => 'projects', :action => 'list_files'

View File

@ -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

View File

@ -92,13 +92,6 @@ class ProjectsControllerTest < Test::Unit::TestCase
assert_nil Project.find_by_id(1) assert_nil Project.find_by_id(1)
end 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 def test_bulk_edit_issues
@request.session[:user_id] = 2 @request.session[:user_id] = 2
# update issues priority # update issues priority