File: app/controllers/issue_categories_controller.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  class: IssueCategoriesController#18
inherits from
  ApplicationController   
has properties
method: index #27
method: show #34
method: new #41
method: create #46
method: edit #74
method: update #77
method: destroy #95
method: find_model_object #115

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 IssueCategoriesController < ApplicationController
  19    menu_item :settings
  20    model_object IssueCategory
  21    before_filter :find_model_object, :except => [:index, :new, :create]
  22    before_filter :find_project_from_association, :except => [:index, :new, :create]
  23    before_filter :find_project_by_project_id, :only => [:index, :new, :create]
  24    before_filter :authorize
  25    accept_api_auth :index, :show, :create, :update, :destroy
  26    
  27    def index
  28      respond_to do |format|
  29        format.html { redirect_to :controller => 'projects', :action => 'settings', :tab => 'categories', :id => @project }
  30        format.api { @categories = @project.issue_categories.all }
  31      end
  32    end
  33 
  34    def show
  35      respond_to do |format|
  36        format.html { redirect_to :controller => 'projects', :action => 'settings', :tab => 'categories', :id => @project }
  37        format.api
  38      end
  39    end
  40 
  41    def new
  42      @category = @project.issue_categories.build
  43      @category.safe_attributes = params[:issue_category]
  44    end
  45 
  46    def create
  47      @category = @project.issue_categories.build
  48      @category.safe_attributes = params[:issue_category]
  49      if @category.save
  50        respond_to do |format|
  51          format.html do
  52            flash[:notice] = l(:notice_successful_create)
  53            redirect_to :controller => 'projects', :action => 'settings', :tab => 'categories', :id => @project
  54          end
  55          format.js do
  56            # IE doesn't support the replace_html rjs method for select box options
  57            render(:update) {|page| page.replace "issue_category_id",
  58              content_tag('select', content_tag('option') + options_from_collection_for_select(@project.issue_categories, 'id', 'name', @category.id), :id => 'issue_category_id', :name => 'issue[category_id]')
  59            }
  60          end
  61          format.api { render :action => 'show', :status => :created, :location => issue_category_path(@category) }
  62        end
  63      else
  64        respond_to do |format|
  65          format.html { render :action => 'new'}
  66          format.js do
  67            render(:update) {|page| page.alert(@category.errors.full_messages.join('\n')) }
  68          end
  69          format.api { render_validation_errors(@category) }
  70        end
  71      end
  72    end
  73 
  74    def edit
  75    end
  76 
  77    def update
  78      @category.safe_attributes = params[:issue_category]
  79      if @category.save
  80        respond_to do |format|
  81          format.html {
  82            flash[:notice] = l(:notice_successful_update)
  83            redirect_to :controller => 'projects', :action => 'settings', :tab => 'categories', :id => @project
  84          }
  85          format.api { head :ok }
  86        end
  87      else
  88        respond_to do |format|
  89          format.html { render :action => 'edit' }
  90          format.api { render_validation_errors(@category) }
  91        end
  92      end
  93    end
  94 
  95    def destroy
  96      @issue_count = @category.issues.size
  97      if @issue_count == 0 || params[:todo] || api_request? 
  98        reassign_to = nil
  99        if params[:reassign_to_id] && (params[:todo] == 'reassign' || params[:todo].blank?)
 100          reassign_to = @project.issue_categories.find_by_id(params[:reassign_to_id])
 101        end
 102        @category.destroy(reassign_to)
 103        respond_to do |format|
 104          format.html { redirect_to :controller => 'projects', :action => 'settings', :id => @project, :tab => 'categories' }
 105          format.api { head :ok }
 106        end
 107        return
 108      end
 109      @categories = @project.issue_categories - [@category]
 110    end
 111 
 112  private
 113    # Wrap ApplicationController's find_model_object method to set
 114    # @category instead of just @issue_category
 115    def find_model_object
 116      super
 117      @category = @object
 118    end
 119  end