Class: QueriesController

Inherits:
VisualQuery::BaseController
  • Object
show all
Defined in:
app/controllers/queries_controller.rb

Instance Method Summary collapse

Instance Method Details

#columnsObject

columns to show as a list when building the query



51
52
53
54
55
56
# File 'app/controllers/queries_controller.rb', line 51

def columns
  # TODO: sanitize klass before constantizing
  klass = params[:klass].constantize
  @columns = (klass.primary_key.is_a?(Array) ? klass.primary_key : [klass.primary_key]) + klass.content_columns.map(&:name)
  render :partial => 'columns'
end

#createObject



118
119
120
121
122
# File 'app/controllers/queries_controller.rb', line 118

def create
  @query = Tutuf::VisualQuery::Base.new(params)
  @message = _("Справката беше записана") if res = @query.save
  render :partial => "name", :status => res ? 200 : 409
end

#destroyObject



128
129
130
131
132
133
134
135
136
137
138
# File 'app/controllers/queries_controller.rb', line 128

def destroy
  @query = Tutuf::VisualQuery::Base.find_by_name(params[:name])
  if @query.destroy
    flash[:notice] = _("Справката „#{@query.name}“ беше изтрита")
    redirect_to visual_query.queries_path
  else
    flash[:error] = _("Справката „#{@query.name}“ не може да бъде изтрита")
    index
    render :action => :index
  end
end

#edit_sqlObject



21
22
23
24
25
# File 'app/controllers/queries_controller.rb', line 21

def edit_sql
  @query = Tutuf::VisualQuery::Base.find_by_name(params[:name])
  @sql = @query.query
  render :sql_form
end

#filterObject



58
59
60
61
62
63
64
# File 'app/controllers/queries_controller.rb', line 58

def filter
  @data_type = Tutuf::VisualQuery::Base.data_type(params)
  @schema = params[:schema].empty? ? "public" : params[:schema]
  @rel_name, @col_name = params[:rel_name], params[:col_name]
  @field_prefix = "filters[]"
  render :partial => "filter"
end

#indexObject



7
8
9
10
# File 'app/controllers/queries_controller.rb', line 7

def index
  @custom_reports = @@custom_reports.keys if defined?(@@custom_reports)
  @queries = Tutuf::VisualQuery::Base.find_all
end

#join_dataObject



43
44
45
46
47
48
# File 'app/controllers/queries_controller.rb', line 43

def join_data
  # TODO: sanitize klass before constantizing
  klass = params[:klass].constantize
  table_name = klass.table_name
  render(:json => {:relation_human_name => _(table_name), :columns => results_columns(table_name, Tutuf::VisualQuery::Base.columns(klass))})
end

#list_joinableObject



36
37
38
39
40
41
# File 'app/controllers/queries_controller.rb', line 36

def list_joinable
  # TODO: sanitize klass before constantizing
  @klass = params[:klass].camelize.constantize
  @reflections = Tutuf::VisualQuery::Base.joinable_relations(@klass)
  render :partial => "list_joinable_relations"
end

#newObject



12
13
14
# File 'app/controllers/queries_controller.rb', line 12

def new
  @klasses = Tutuf::VisualQuery::Base.klasses
end

#new_sqlObject



16
17
18
19
# File 'app/controllers/queries_controller.rb', line 16

def new_sql
  @sql = params[:sql]
  render :sql_form
end

#remove_filterObject



71
72
73
# File 'app/controllers/queries_controller.rb', line 71

def remove_filter
  render :partial => "results_column_filter", :locals => {:column => {:schema => params[:schema], :rel_name => params[:rel_name], :col_name => params[:col_name]}}
end

#resultsObject



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'app/controllers/queries_controller.rb', line 75

def results
  if params[:name] && !params[:name].empty? && params[:name] != 'undefined'
    query = Tutuf::VisualQuery::Base.find_by_name(params[:name])
  else
    query = Tutuf::VisualQuery::Base.new(params)
  end

  respond_to do |format|
    format.html do # Ajax request
      @headers = sql = !params[:sql].blank?
      begin
        @results = query.to_a(@headers)
        if query.large_result_set?
          @max_result_length = query.max_result_length
          render :partial => "warning_large_result_set"
          return
        elsif @results.empty?
          @colspan = params[:all_columns].length
          render :partial => "results_empty" , :status => :not_found
          return
        end
        render :partial => "results"
      rescue ActiveRecord::StatementInvalid => e
        if sql
          render :inline => e.to_s, :status => :unprocessable_entity
        else
          raise e
        end
      end
    end

    format.csv do
      send_data(query.to_csv,
                :type => "text/csv; charset=utf-8; header=present",
                :filename => "#{query.name}.csv")
    end

    format.json do
      render :text => query.to_json
    end
  end
end

#showObject



124
125
126
# File 'app/controllers/queries_controller.rb', line 124

def show
  render(:not_found, :status => 404) unless @query = Tutuf::VisualQuery::Base.find_by_name(params[:name])
end

#sort_conditionObject



66
67
68
69
# File 'app/controllers/queries_controller.rb', line 66

def sort_condition
  @index = params[:index].to_i
  render :partial => "sort_condition"
end

#update_sqlObject



27
28
29
30
31
32
33
34
# File 'app/controllers/queries_controller.rb', line 27

def update_sql
  @query = Tutuf::VisualQuery::Base.find_by_name(params[:name])
  if @query.update_sql(params)
    render :inline => _("Справката беше редактирана"), :status =>  200
  else
    render :inline => @query.errors.full_messages.join(" "), :status =>  422
  end
end