Module: KirguduBase::Controllers::BasicActions::Base::ShowActions

Defined in:
app/helpers/kirgudu_base/controllers/basic_actions.rb

Instance Method Summary collapse

Instance Method Details

#showObject



162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
# File 'app/helpers/kirgudu_base/controllers/basic_actions.rb', line 162

def show
  unless self.class.respond_to?(:get_kb_page)
    raise "Method :get_kb_page must be implemented for controller '#{self.class}'"
  end

  options = {
    logger: self.string_logger
  }


  local_data = {
    errors: [],
    messages: [],
    page: self.class.get_kb_page(:show)
  }

  if local_data[:page].nil?
    respond_to do |format|
      format.html { render_html1 "#{self.class.get_method_latest_result(:get_kb_template)}/#{self.class.get_method_latest_result(:get_kb_view_path, :page_404)}" }
      format.json { render_json_page_404 }
    end
    return
  end

  # fill parent for data
  filters_for_parents = {}
  self.fill_obligatory_db_query_params(filters_for_parents)
  self.fill_parents_for_local_data(local_data, filters_for_parents)
  # fill filters for search
  filters = {}
  self.fill_obligatory_db_query_params(filters)
  filters.merge!(local_data[:parent_ids])
  # getting local entry
  local_data[:entry] = self.entry_class.get_entry_by_id(params[:id], filters, options)
  # entry not found, showing not found page
  unless local_data[:entry]
    local_data[:errors] << I18n.t("#{self.to_i18n}.messages.not_found", entry_id: params[:id])
    respond_to do |format|
      format.html { render_html1 "#{self.class.get_method_latest_result(:get_kb_template)}/#{self.class.get_method_latest_result(:get_kb_view_path, :entry_not_found)}", locals: {data: local_data} }
      format.json { render_json_not_found message: local_data[:errors] }
    end
    return
  end
  # getting lists
  local_data[:page].lists.each_pair do |key, list|
    if list.relation
      filters_for_list = {}
      self.fill_obligatory_db_query_params(filters_for_list)
      reflection = self.entry_class.reflections[list.relation.name]
      list_per_page = list.relation.per_page_param
      list_page = list.relation.page_param

      begin
        filters_for_list[:per_page] = params[list_per_page].to_i
      rescue
      end
      filters_for_list[:per_page] ||= 30
      filters_for_list[:per_page] = 30 if filters_for_list[:per_page] == 0

      begin
        filters_for_list[:page] = params[list_page].to_i if params[list_page]
      rescue
      end

      filters_for_list[reflection.foreign_key] = local_data[:entry].id

      #logger.info "FILTERS for LIST: #{filters_for_list.to_json}"

      local_data[:"list_entries_#{list.name}"] = eval(reflection.class_name).get_entries(nil, filters_for_list, options)
    end
  end if local_data[:page].lists


  # fill parent for data
  filters_for_parents = {}
  self.fill_obligatory_db_query_params(filters_for_parents)
  self.fill_parents_for_local_data(local_data, filters_for_parents)

  # building breadcrumbs
  self.kb_dp_breadcrumbs_build_for_index(local_data, false) #not index page

  # rendering page
  respond_to do |format|
    format.html { render_html1 "#{self.class.get_method_latest_result(:get_kb_template)}/#{self.class.get_method_latest_result(:get_kb_view_path, :show)}", locals: {data: local_data} }
    format.json { render_json_ok local_data[:entry] }
  end
end