File: app/controllers/documents_controller.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  class: DocumentsController#18
inherits from
  ApplicationController   
has properties
method: index #28
method: show #45
method: new #49
method: create #54
method: edit #67
method: update #70
method: destroy #80
method: add_attachment #85

Class Hierarchy

Code

   1  # Redmine - project management software
   2  # Copyright (C) 2006-2011  Jean-Philippe Lang
   3  #
   4  # This program is free software; you can redistribute it and/or
   5  # modify it under the terms of the GNU General Public License
   6  # as published by the Free Software Foundation; either version 2
   7  # of the License, or (at your option) any later version.
   8  #
   9  # This program is distributed in the hope that it will be useful,
  10  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12  # GNU General Public License for more details.
  13  #
  14  # You should have received a copy of the GNU General Public License
  15  # along with this program; if not, write to the Free Software
  16  # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  17 
  18  class DocumentsController < ApplicationController
  19    default_search_scope :documents
  20    model_object Document
  21    before_filter :find_project_by_project_id, :only => [:index, :new, :create]
  22    before_filter :find_model_object, :except => [:index, :new, :create]
  23    before_filter :find_project_from_association, :except => [:index, :new, :create]
  24    before_filter :authorize
  25 
  26    helper :attachments
  27 
  28    def index
  29      @sort_by = %w(category date title author).include?(params[:sort_by]) ? params[:sort_by] : 'category'
  30      documents = @project.documents.find :all, :include => [:attachments, :category]
  31      case @sort_by
  32      when 'date'
  33        @grouped = documents.group_by {|d| d.updated_on.to_date }
  34      when 'title'
  35        @grouped = documents.group_by {|d| d.title.first.upcase}
  36      when 'author'
  37        @grouped = documents.select{|d| d.attachments.any?}.group_by {|d| d.attachments.last.author}
  38      else
  39        @grouped = documents.group_by(&:category)
  40      end
  41      @document = @project.documents.build
  42      render :layout => false if request.xhr?
  43    end
  44 
  45    def show
  46      @attachments = @document.attachments.find(:all, :order => "created_on DESC")
  47    end
  48 
  49    def new
  50      @document = @project.documents.build
  51      @document.safe_attributes = params[:document]
  52    end
  53 
  54    def create
  55      @document = @project.documents.build
  56      @document.safe_attributes = params[:document]
  57      @document.save_attachments(params[:attachments])
  58      if @document.save
  59        render_attachment_warning_if_needed(@document)
  60        flash[:notice] = l(:notice_successful_create)
  61        redirect_to :action => 'index', :project_id => @project
  62      else
  63        render :action => 'new'
  64      end
  65    end
  66 
  67    def edit
  68    end
  69 
  70    def update
  71      @document.safe_attributes = params[:document]
  72      if request.put? and @document.save
  73        flash[:notice] = l(:notice_successful_update)
  74        redirect_to :action => 'show', :id => @document
  75      else
  76        render :action => 'edit'
  77      end
  78    end
  79 
  80    def destroy
  81      @document.destroy if request.delete?
  82      redirect_to :controller => 'documents', :action => 'index', :project_id => @project
  83    end
  84 
  85    def add_attachment
  86      attachments = Attachment.attach_files(@document, params[:attachments])
  87      render_attachment_warning_if_needed(@document)
  88 
  89      Mailer.deliver_attachments_added(attachments[:files]) if attachments.present? && attachments[:files].present? && Setting.notified_events.include?('document_added')
  90      redirect_to :action => 'show', :id => @document
  91    end
  92  end