aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-server/src/main/webapp/WEB-INF/app/controllers/manual_measures_controller.rb
blob: b7d85bac9512f2f268d2acaaa2dbc22f1ed3bd47 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#
# Sonar, entreprise quality control tool.
# Copyright (C) 2008-2011 SonarSource
# mailto:contact AT sonarsource DOT com
#
# Sonar is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 3 of the License, or (at your option) any later version.
#
# Sonar 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
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with Sonar; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
#
class ManualMeasuresController < ApplicationController

  SECTION=Navigation::SECTION_RESOURCE
  before_filter :load_resource
  verify :method => :post, :only => [:save, :delete], :redirect_to => {:action => :index}
  helper MetricsHelper
  
  def index
    load_measures()
  end

  def new
    if params[:metric].present?
      @metric=Metric.by_key(params[:metric])
      @measure=ManualMeasure.find(:first, :conditions => ['resource_id=? and metric_id=?', @resource.id, @metric.id]) || ManualMeasure.new
    else
      @metric=nil
      @measure=nil
    end
  end

  def save
    @metric=Metric.by_key(params[:metric])
    @measure=ManualMeasure.find(:first, :conditions => ['resource_id=? and metric_id=?', @resource.id, @metric.id])
    if @measure.nil?
      @measure=ManualMeasure.new(:resource => @resource, :user_login => current_user.login, :metric_id => @metric.id)
    end
    @measure.typed_value=params[:val]
    @measure.description=params[:desc]
    if @measure.valid?
      @measure.save
      if (params[:redirect_to_new]=='true')
        redirect_to :action => 'new', :id => params[:id]
      else
        redirect_to :action => 'index', :id => params[:id], :metric => params[:metric]
      end
    else
      render :action => :new, :metric => @metric.id, :id => params[:id]
    end
  end

  def delete
    metric=Metric.by_key(params[:metric])
    ManualMeasure.destroy_all(['resource_id=? and metric_id=?', @resource.id, metric.id])
    redirect_to :action => 'index', :id => params[:id], :metric => params[:metric]
  end

  private

  def load_resource
    @resource=Project.by_key(params[:id])
    return redirect_to home_path unless @resource
    return access_denied unless has_role?(:admin, @resource)
    @snapshot=@resource.last_snapshot
  end

  def load_measures
    @measures=ManualMeasure.find(:all, :conditions => ['resource_id=?', @resource.id]).select { |m| m.metric.enabled }
  end
end