Class: DcApplicationController

Inherits:
ActionController::Base
  • Object
show all
Defined in:
app/controllers/dc_application_controller.rb

Overview

DcApplicationControllerController holds methods which are useful for all application controllers.

Instance Method Summary collapse

Instance Method Details

#dc_dump(*args) ⇒ Object

Writes anything passed as parameter to logger file. Very useful for debuging strange errors.



39
40
41
42
43
# File 'app/controllers/dc_application_controller.rb', line 39

def dc_dump(*args)
  args.each do |arg|
    logger.debug arg.to_s
  end
end

#dc_edit_mode?Boolean

Return true if CMS is in edit mode



50
51
52
# File 'app/controllers/dc_application_controller.rb', line 50

def dc_edit_mode?
  session[:edit_mode] > 1
end

#dc_get_siteDcSite

Determines site from url and returns site document.

‘test’ document is returned. If site has alias set then alias site document is returned.

Examples:

Returns Google analytics code from site settings

settings = dc_get_site.params['ga_acc']


83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'app/controllers/dc_application_controller.rb', line 83

def dc_get_site
  return @site if @site

  uri  = URI.parse(request.url)
  cache_key = ['dc_site', uri.host]

  @site = dc_cache_read(cache_key)
  return @site if @site

  @site = DcSite.find_by(name: uri.host)
  # Site can be aliased

  if @site && !@site.alias_for.blank?
    @site = DcSite.find_by(name: @site.alias_for)
  end
  # Development environment. Check if site with name test exists and use

  # alias_for as pointer to real site.

  if @site.nil? && ENV["RAILS_ENV"] != 'production'
    @site = DcSite.find_by(name: 'test')
    @site = DcSite.find_by(name: @site.alias_for) if @site
  end
  @site = nil if @site && !@site.active # site is disabled

  dc_cache_write(cache_key, @site)
end

#dc_log_visitObject

Will write document to dc_visits collection unless visit comes from robot. It also sets session variable to true if robot.



135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'app/controllers/dc_application_controller.rb', line 135

def dc_log_visit
  if request.env["HTTP_USER_AGENT"] and request.env["HTTP_USER_AGENT"].match(/\(.*https?:\/\/.*\)/)
    logger.info "ROBOT: #{Time.now.strftime('%Y.%m.%d %H:%M:%S')} id=#{@page.id} ip=#{request.remote_ip}."
    session[:is_robot] = true
  else
    DcVisit.create(site_id: @site.id, 
                   user_id: session[:user_id], 
                   page_id: @page.id, 
                   ip: request.remote_ip,
                   session_id: request.session_options[:id],
                   time: Time.now )
  end
end

#dc_render_404(where_the_error_is = nil) ⇒ Object

Will render public/404.html file with some debug code includded.

Examples:

Render error

site = dc_get_site()
return dc_render_404('Site') unless site


126
127
128
129
# File 'app/controllers/dc_application_controller.rb', line 126

def dc_render_404(where_the_error_is=nil)
  logger.info("Error 404;#{request.env['REQUEST_URI'] rescue ''};#{request.referer};#{where_the_error_is}")
  render(file: Rails.root.join('public/404.html'), status: 404)
end

#dc_user_has_role(role) ⇒ Boolean

Checks if user has required role.

as role name. If passed as name, dc_policy_roles is searched for appropriate role.

Examples:

If user has required role

if dc_user_has_role('admin') ...
if dc_user_has_role('Site editors') ...


66
67
68
69
70
71
# File 'app/controllers/dc_application_controller.rb', line 66

def dc_user_has_role(role)
  role = DcPolicyRole.get_role(role)
  return false if role.nil? || session[:user_roles].nil?
  # role exists in user_roles

  session[:user_roles].include?(role._id)
end

#set_page_titleObject

Will set page title according to data on dc_page or dc_site

Sets internal @page_title variable.



112
113
114
115
# File 'app/controllers/dc_application_controller.rb', line 112

def set_page_title
  @page_title = @page.title.blank? ? @page.subject : @page.title
  dc_add_meta_tag(:name, 'description', @page.meta_description)
end