Module: ControllerMixins::RendererInstanceMethods

Defined in:
lib/controller_mixins/renderer_instance_methods.rb

Instance Method Summary collapse

Instance Method Details

#build_url_path_method(opts) ⇒ Object



215
216
217
218
219
220
221
222
223
224
225
226
227
# File 'lib/controller_mixins/renderer_instance_methods.rb', line 215

def build_url_path_method(opts)
  path = ""

  opts = opts[0] unless opts.at(0).nil?

  path += '/' + opts[:outer_controller].to_s if opts.include?(:outer_controller)
  path += '/' + opts[:outer_id].to_s if opts.include?(:outer_id)
  path += opts.include?(:controller) ? '/' + opts[:controller].to_s : '/' + controller_name
  path += '/' + opts[:id].to_s if opts.include?(:id)
  path += '/' + opts[:action].to_s if opts.include?(:action)

  path
end

#clear_filter?Boolean

Returns:

  • (Boolean)


154
155
156
# File 'lib/controller_mixins/renderer_instance_methods.rb', line 154

def clear_filter?
  !params.blank? && params["clear"]
end

#default_params_for_clear_filter(settings) ⇒ Object



166
167
168
169
170
171
172
173
174
175
176
# File 'lib/controller_mixins/renderer_instance_methods.rb', line 166

def default_params_for_clear_filter(settings)
  default_params = settings[:default].dup
  default_params[:order_by] = settings[:default][:order_by] + " " + settings[:default][:order_by_direction] if !settings[:default][:order_by].blank? && !settings[:default][:order_by_direction].blank?
  default_params[:order_by] = settings[:default][:order] if !settings[:default][:order].blank?

  if defined?(ModelMixins::TableBuilderClassMethods::ON_CLEAR_FILTER_CLEAR_CHECKBOXES) && !ModelMixins::TableBuilderClassMethods::ON_CLEAR_FILTER_CLEAR_CHECKBOXES
    default_params[:checkbox_pool] = params["checkbox_pool"]
  end

  default_params
end

#default_params_for_show_table(settings) ⇒ Object



178
179
180
181
182
183
184
185
# File 'lib/controller_mixins/renderer_instance_methods.rb', line 178

def default_params_for_show_table(settings)
  default_params = settings[:default].dup
  default_params[:order_by] = settings[:default][:order_by] + " " + settings[:default][:order_by_direction] if !settings[:default][:order_by].blank? && !settings[:default][:order_by_direction].blank?
  default_params[:order_by] = settings[:default][:order] if !settings[:default][:order].blank?

  default_params = session["#{settings[:form_id]}_params"] unless session["#{settings[:form_id]}_params"].blank?
  default_params
end

#display_methodObject



158
159
160
# File 'lib/controller_mixins/renderer_instance_methods.rb', line 158

def display_method
  params["___display_method___"]
end

#export_methodObject



162
163
164
# File 'lib/controller_mixins/renderer_instance_methods.rb', line 162

def export_method
  params["___export_method___"]
end

#fill_settings_with(opts) ⇒ Object



199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
# File 'lib/controller_mixins/renderer_instance_methods.rb', line 199

def fill_settings_with opts
  settings = {}
  settings[:symlink_remote] = true
  unless opts.at(0).nil?
    opts = opts[0]
    settings[:symlink_controller] = opts.include?(:controller) ? opts[:controller] : controller_name
    settings[:symlink_outer_controller] = opts[:outer_controller] if opts.include?(:outer_controller)
    settings[:symlink_outer_id] = opts[:outer_id] if opts.include?(:outer_id)
    settings[:symlink_action] = opts[:action] if opts.include?(:action)
    settings[:symlink_id] = opts[:id] if opts.include?(:id)
  else
    settings[:symlink_controller] = controller_name
  end
  settings
end

#is_filtering?(filter_method) ⇒ Boolean

Returns:

  • (Boolean)


193
194
195
196
# File 'lib/controller_mixins/renderer_instance_methods.rb', line 193

def is_filtering?(filter_method)
  action_name == "filter" ||
      (!filter_method.blank? && action_name == filter_method)
end

#is_showing_table?(show_table_method) ⇒ Boolean

Returns:

  • (Boolean)


188
189
190
191
# File 'lib/controller_mixins/renderer_instance_methods.rb', line 188

def is_showing_table?(show_table_method)
  action_name == "index" ||
      (!show_table_method.blank? && action_name == show_table_method)
end

#redirect_destroy_ok(*opts) ⇒ Object

redirect do indexu po uspesnem smazani



239
240
241
242
243
244
245
# File 'lib/controller_mixins/renderer_instance_methods.rb', line 239

def redirect_destroy_ok(*opts)
  if request.xhr?
    render :json => {:status => "ok", :message => I18n.t("activerecord.info.messages.deleted"), :settings => fill_settings_with(opts)}, :status => :moved_permanently
  else
    redirect_to build_url_path_method(opts), :status => :moved_permanently
  end
end

#redirect_not_found(*opts) ⇒ Object

redirect do indexu pokud neni zaznam v db



230
231
232
233
234
235
236
# File 'lib/controller_mixins/renderer_instance_methods.rb', line 230

def redirect_not_found(*opts)
  if request.xhr?
    render :json => {:message => I18n.t("activerecord.errors.messages.record_not_found"), :settings => fill_settings_with(opts)}, :status => :moved_permanently
  else
    redirect_to build_url_path_method(opts), :status => :moved_permanently
  end
end

#redirect_save_failed(*opts) ⇒ Object

redirect po uspesnem save



258
259
260
261
262
263
264
265
# File 'lib/controller_mixins/renderer_instance_methods.rb', line 258

def redirect_save_failed(*opts)
  if request.xhr?
    render :json => {:status => "ok", :message => I18n.t("activerecord.errors.messages.save_failed"), :settings => fill_settings_with(opts)}, :status => :moved_permanently
  else
    redirect_to build_url_path_method(opts), :status => :moved_permanently
  end

end

#redirect_save_ok(*opts) ⇒ Object

redirect po uspesnem save



248
249
250
251
252
253
254
255
# File 'lib/controller_mixins/renderer_instance_methods.rb', line 248

def redirect_save_ok(*opts)
  if request.xhr?
    render :json => {:status => "ok", :message => I18n.t("activerecord.info.messages.saved"), :settings => fill_settings_with(opts)}, :status => :moved_permanently
  else
    redirect_to build_url_path_method(opts), :status => :moved_permanently
  end

end

#render_table(settings, logged_user = nil, template = nil, &proc) ⇒ Hash | renderuje

Nastavi data pro tabulku.

Parameters:

  • settings (Hash)
  • logger_user (User)
  • template (String) (defaults to: nil)

Returns:

  • (Hash | renderuje)

    Hash vraci pro vykresleni tabulky, renderuje pri filtrovani



66
67
68
69
70
71
72
73
74
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
117
118
119
120
121
# File 'lib/controller_mixins/renderer_instance_methods.rb', line 66

def render_table(settings, logged_user=nil, template = nil, &proc)
  settings[:template] = template unless template.blank?
  data = yield
  class_obj = data.respond_to?(:klass) ? data.klass : data

  filter_method = settings[:filter_method]
  show_table_method = settings[:show_table_method]

  default_params = set_default_params(filter_method, show_table_method, settings)

  case display_method
    when "print"
      # vyjímka pro tisk tabulek
      # printing page, it should be opened in new window
      settings[:display_method] = display_method
      settings = class_obj.prepare_settings(logged_user, data, settings, default_params, nil, 10000)

      render_table_for_printing(settings, show_table_method)
    when "print_by_checkboxes"
      # vyjímka pro tisk tabulek
      # printing page, it should be opened in new window
      settings[:filter_method] = "only_by_checkboxes"
      settings[:display_method] = display_method
      settings = class_obj.prepare_settings(logged_user, data, settings, default_params)

      render_table_for_printing(settings, show_table_method)
    else
      case export_method
        when "csv"
          @settings = class_obj.prepare_settings(logged_user, data, @settings, default_params, nil, 50000)
          generate_and_return_csv(get_data_for_csv_from_settings(@settings),
                                  (@settings.blank? || @settings[:csv].blank? || @settings[:csv][:name].blank?) ? 'export.csv' : @settings[:csv][:name])
        when "csv_by_checkboxes"
          settings[:filter_method] = "only_by_checkboxes"
          @settings = class_obj.prepare_settings(logged_user, data, @settings, default_params)
          generate_and_return_csv(get_data_for_csv_from_settings(@settings),
                                  (@settings.blank? || @settings[:csv].blank? || @settings[:csv][:name].blank?) ? 'export.csv' : @settings[:csv][:name])
        else

          settings = class_obj.prepare_settings(logged_user, data, settings, default_params)

          # Filtrovani se renderuje zde
          if is_filtering?(filter_method)

            if clear_filter? # Tlacitko Smazat filtr
              render_table_on_clear_filter(settings, show_table_method)
            else # Ostatni filtry
              render_tbody_on_filter(settings)
            end

          end
      end
  end

  # Cele vykresleni stranky normalne z metody, ktera toto zavolala
end

#render_table_for(logged_user, template = nil, &proc) ⇒ Object



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
# File 'lib/controller_mixins/renderer_instance_methods.rb', line 3

def render_table_for(logged_user, template = nil, &proc)
  @settings[:template] = template unless template.blank?
  data = yield
  class_obj = data.respond_to?(:klass) ? data.klass : data
  if action_name == "filter"
    case params["___display_method___"]
      when "print_by_checkboxes"
        # printing page, it should be opened in new window
        @settings = class_obj.prepare_settings(logged_user, data, @settings, default_params)


        render :layout => "print", :action => :index
      else
        case params["___export_method___"]
          when "csv"
            @settings = class_obj.prepare_settings(logged_user, data, @settings, default_params)
          else
            # default print of table
            default_params = params
            if !params.blank? && params["clear"]
              default_params = @settings[:default].dup
              default_params[:order_by] = @settings[:default][:order_by] + " " + @settings[:default][:order_by_direction] if !@settings[:default][:order_by].blank? && !@settings[:default][:order_by_direction].blank?
              default_params[:order_by] = @settings[:default][:order] if !@settings[:default][:order].blank?
            end

            @settings = class_obj.prepare_settings(logged_user, data, @settings, default_params)
            if !params.blank? && params["clear"]
              session["#{@settings[:form_id]}_params"] = ""
              render :layout => false, :action => :index
            else
              @paginate = render_to_string(:partial => "/helpers/build_table_pager", :locals => {:settings => @settings})
              session["#{@settings[:form_id]}_params"] = params
              if @settings[:template].blank?
                # if there is no template a will return json and tbody renders in javascript template
                returned_t_body = @settings.to_json
              else
                # or there is template so i will return template rendered here in ruby
                returned_t_body = render_to_string(:partial => @settings[:template], :locals => {:settings => @settings})
              end

              render :layout => false, :json => {:settings => returned_t_body, :paginate => @paginate}.to_json
            end
        end
    end

  elsif action_name == "index"
    default_params = @settings[:default].dup
    default_params[:order_by] = @settings[:default][:order_by] + " " + @settings[:default][:order_by_direction] if !@settings[:default][:order_by].blank? && !@settings[:default][:order_by_direction].blank?
    default_params[:order_by] = @settings[:default][:order] if !@settings[:default][:order].blank?

    default_params = session["#{@settings[:form_id]}_params"] unless session["#{@settings[:form_id]}_params"].blank?
    @settings = class_obj.prepare_settings(logged_user, data, @settings, default_params)
  end
end

#render_table_for_printing(settings, show_table_method) ⇒ Object



130
131
132
# File 'lib/controller_mixins/renderer_instance_methods.rb', line 130

def render_table_for_printing(settings, show_table_method)
  render :layout => "print", :action => (show_table_method.blank? ? :index : show_table_method)
end

#render_table_on_clear_filter(settings, show_table_method) ⇒ Object



134
135
136
137
138
# File 'lib/controller_mixins/renderer_instance_methods.rb', line 134

def render_table_on_clear_filter(settings, show_table_method)
  session["#{settings[:form_id]}_params"] = ""

  render :layout => false, :action => (show_table_method.blank? ? :index : show_table_method)
end

#render_tbody_on_filter(settings) ⇒ Object



140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/controller_mixins/renderer_instance_methods.rb', line 140

def render_tbody_on_filter(settings)
  paginate = render_to_string(:partial => "/helpers/build_table_pager", :locals => {:settings => settings})
  session["#{settings[:form_id]}_params"] = params
  if settings[:template].blank?
    # if there is no template a will return json and tbody renders in javascript template
    returned_t_body = settings.to_json
  else
    # or there is template so i will return template rendered here in ruby
    returned_t_body = render_to_string(:partial => settings[:template], :locals => {:settings => settings})
  end

  render :layout => false, :json => {:settings => returned_t_body, :paginate => paginate}.to_json
end

#set_default_params(filter_method, show_table_method, settings) ⇒ Object



123
124
125
126
127
128
# File 'lib/controller_mixins/renderer_instance_methods.rb', line 123

def set_default_params(filter_method, show_table_method, settings)
  default_params = params
  default_params = default_params_for_clear_filter(settings) if is_filtering?(filter_method) && clear_filter?
  default_params = default_params_for_show_table(settings) if is_showing_table?(show_table_method)
  default_params
end