annotate app/controllers/versions_controller.rb @ 45:65d9e2cabaa3 luisf

Added tipoftheday to the config/settings in order to correct previous issues. Tip of the day is now working correctly. Added the heading strings to the locales files.
author luisf
date Tue, 23 Nov 2010 11:50:01 +0000
parents 94944d00e43c
children cbb26bc654de
rev   line source
Chris@0 1 # redMine - project management software
Chris@0 2 # Copyright (C) 2006 Jean-Philippe Lang
Chris@0 3 #
Chris@0 4 # This program is free software; you can redistribute it and/or
Chris@0 5 # modify it under the terms of the GNU General Public License
Chris@0 6 # as published by the Free Software Foundation; either version 2
Chris@0 7 # of the License, or (at your option) any later version.
Chris@0 8 #
Chris@0 9 # This program is distributed in the hope that it will be useful,
Chris@0 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@0 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@0 12 # GNU General Public License for more details.
Chris@0 13 #
Chris@0 14 # You should have received a copy of the GNU General Public License
Chris@0 15 # along with this program; if not, write to the Free Software
Chris@0 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Chris@0 17
Chris@0 18 class VersionsController < ApplicationController
Chris@0 19 menu_item :roadmap
Chris@0 20 model_object Version
chris@22 21 before_filter :find_model_object, :except => [:index, :new, :create, :close_completed]
chris@22 22 before_filter :find_project_from_association, :except => [:index, :new, :create, :close_completed]
chris@22 23 before_filter :find_project, :only => [:index, :new, :create, :close_completed]
Chris@0 24 before_filter :authorize
Chris@0 25
Chris@0 26 helper :custom_fields
Chris@0 27 helper :projects
chris@22 28
chris@22 29 def index
chris@22 30 @trackers = @project.trackers.find(:all, :order => 'position')
chris@22 31 retrieve_selected_tracker_ids(@trackers, @trackers.select {|t| t.is_in_roadmap?})
chris@22 32 @with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1')
chris@22 33 project_ids = @with_subprojects ? @project.self_and_descendants.collect(&:id) : [@project.id]
chris@22 34
chris@22 35 @versions = @project.shared_versions || []
chris@22 36 @versions += @project.rolled_up_versions.visible if @with_subprojects
chris@22 37 @versions = @versions.uniq.sort
chris@22 38 @versions.reject! {|version| version.closed? || version.completed? } unless params[:completed]
chris@22 39
chris@22 40 @issues_by_version = {}
chris@22 41 unless @selected_tracker_ids.empty?
chris@22 42 @versions.each do |version|
chris@22 43 issues = version.fixed_issues.visible.find(:all,
chris@22 44 :include => [:project, :status, :tracker, :priority],
chris@22 45 :conditions => {:tracker_id => @selected_tracker_ids, :project_id => project_ids},
chris@22 46 :order => "#{Project.table_name}.lft, #{Tracker.table_name}.position, #{Issue.table_name}.id")
chris@22 47 @issues_by_version[version] = issues
chris@22 48 end
chris@22 49 end
chris@22 50 @versions.reject! {|version| !project_ids.include?(version.project_id) && @issues_by_version[version].blank?}
chris@22 51 end
Chris@0 52
Chris@0 53 def show
Chris@1 54 @issues = @version.fixed_issues.visible.find(:all,
Chris@1 55 :include => [:status, :tracker, :priority],
Chris@1 56 :order => "#{Tracker.table_name}.position, #{Issue.table_name}.id")
Chris@0 57 end
Chris@0 58
Chris@0 59 def new
Chris@0 60 @version = @project.versions.build
Chris@0 61 if params[:version]
Chris@0 62 attributes = params[:version].dup
Chris@0 63 attributes.delete('sharing') unless attributes.nil? || @version.allowed_sharings.include?(attributes['sharing'])
Chris@0 64 @version.attributes = attributes
Chris@0 65 end
chris@22 66 end
chris@22 67
chris@22 68 def create
chris@22 69 # TODO: refactor with code above in #new
chris@22 70 @version = @project.versions.build
chris@22 71 if params[:version]
chris@22 72 attributes = params[:version].dup
chris@22 73 attributes.delete('sharing') unless attributes.nil? || @version.allowed_sharings.include?(attributes['sharing'])
chris@22 74 @version.attributes = attributes
chris@22 75 end
chris@22 76
Chris@0 77 if request.post?
Chris@0 78 if @version.save
Chris@0 79 respond_to do |format|
Chris@0 80 format.html do
Chris@0 81 flash[:notice] = l(:notice_successful_create)
Chris@0 82 redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
Chris@0 83 end
Chris@0 84 format.js do
Chris@0 85 # IE doesn't support the replace_html rjs method for select box options
Chris@0 86 render(:update) {|page| page.replace "issue_fixed_version_id",
Chris@0 87 content_tag('select', '<option></option>' + version_options_for_select(@project.shared_versions.open, @version), :id => 'issue_fixed_version_id', :name => 'issue[fixed_version_id]')
Chris@0 88 }
Chris@0 89 end
Chris@0 90 end
Chris@0 91 else
Chris@0 92 respond_to do |format|
chris@22 93 format.html { render :action => 'new' }
Chris@0 94 format.js do
Chris@0 95 render(:update) {|page| page.alert(@version.errors.full_messages.join('\n')) }
Chris@0 96 end
Chris@0 97 end
Chris@0 98 end
Chris@0 99 end
Chris@0 100 end
chris@22 101
chris@22 102 def edit
chris@22 103 end
Chris@0 104
chris@22 105 def update
chris@22 106 if request.put? && params[:version]
Chris@0 107 attributes = params[:version].dup
Chris@0 108 attributes.delete('sharing') unless @version.allowed_sharings.include?(attributes['sharing'])
Chris@0 109 if @version.update_attributes(attributes)
Chris@0 110 flash[:notice] = l(:notice_successful_update)
Chris@0 111 redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
chris@37 112 else
chris@37 113 respond_to do |format|
chris@37 114 format.html { render :action => 'edit' }
chris@37 115 end
Chris@0 116 end
Chris@0 117 end
Chris@0 118 end
Chris@0 119
Chris@0 120 def close_completed
chris@22 121 if request.put?
Chris@0 122 @project.close_completed_versions
Chris@0 123 end
Chris@0 124 redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
Chris@0 125 end
Chris@0 126
Chris@0 127 def destroy
Chris@0 128 if @version.fixed_issues.empty?
Chris@0 129 @version.destroy
Chris@0 130 redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
Chris@0 131 else
Chris@0 132 flash[:error] = l(:notice_unable_delete_version)
Chris@0 133 redirect_to :controller => 'projects', :action => 'settings', :tab => 'versions', :id => @project
Chris@0 134 end
Chris@0 135 end
Chris@0 136
Chris@0 137 def status_by
Chris@0 138 respond_to do |format|
Chris@0 139 format.html { render :action => 'show' }
Chris@0 140 format.js { render(:update) {|page| page.replace_html 'status_by', render_issue_status_by(@version, params[:status_by])} }
Chris@0 141 end
Chris@0 142 end
Chris@0 143
Chris@0 144 private
Chris@0 145 def find_project
Chris@0 146 @project = Project.find(params[:project_id])
Chris@0 147 rescue ActiveRecord::RecordNotFound
Chris@0 148 render_404
Chris@0 149 end
chris@22 150
chris@22 151 def retrieve_selected_tracker_ids(selectable_trackers, default_trackers=nil)
chris@22 152 if ids = params[:tracker_ids]
chris@22 153 @selected_tracker_ids = (ids.is_a? Array) ? ids.collect { |id| id.to_i.to_s } : ids.split('/').collect { |id| id.to_i.to_s }
chris@22 154 else
chris@22 155 @selected_tracker_ids = (default_trackers || selectable_trackers).collect {|t| t.id.to_s }
chris@22 156 end
chris@22 157 end
chris@22 158
Chris@0 159 end