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:
parent
524cd689cf
commit
8e00f57a88
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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'%>
|
|
@ -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">
|
|
@ -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'
|
||||
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue