adminsite 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +209 -0
- data/MIT-LICENSE +20 -0
- data/README.markdown +122 -0
- data/Rakefile +14 -0
- data/USAGE +18 -0
- data/VERSION +1 -0
- data/app/admin_configs/adminsite/adminsite_admin_user_admin_config.rb +43 -0
- data/app/admin_configs/adminsite/adminsite_file_asset_admin_config.rb +32 -0
- data/app/admin_configs/adminsite/adminsite_page_admin_config.rb +46 -0
- data/app/admin_configs/adminsite/adminsite_page_layout_admin_config.rb +31 -0
- data/app/assets/images/adminsite/admin/accept.png +0 -0
- data/app/assets/images/adminsite/admin/add.png +0 -0
- data/app/assets/images/adminsite/admin/arrow_left.png +0 -0
- data/app/assets/images/adminsite/admin/arrow_refresh.png +0 -0
- data/app/assets/images/adminsite/admin/arrow_up.png +0 -0
- data/app/assets/images/adminsite/admin/cross.png +0 -0
- data/app/assets/images/adminsite/admin/logo.gif +0 -0
- data/app/assets/images/adminsite/admin/logo.png +0 -0
- data/app/assets/images/adminsite/admin/magnifier.png +0 -0
- data/app/assets/images/adminsite/admin/newspaper_add.png +0 -0
- data/app/assets/images/adminsite/admin/newspaper_delete.png +0 -0
- data/app/assets/images/adminsite/admin/openid-icon-small.gif +0 -0
- data/app/assets/images/adminsite/admin/page_white_magnify.png +0 -0
- data/app/assets/images/adminsite/admin/pencil.png +0 -0
- data/app/assets/images/adminsite/admin/rails.png +0 -0
- data/app/assets/images/adminsite/admin/reorder.gif +0 -0
- data/app/assets/images/adminsite/admin/spinner.gif +0 -0
- data/app/assets/javascripts/adminsite/admin.js +13 -0
- data/app/assets/javascripts/adminsite/admin/code_editor.js.coffee +40 -0
- data/app/assets/javascripts/adminsite/admin/hide_and_show.js +26 -0
- data/app/assets/stylesheets/adminsite/admin.scss +16 -0
- data/app/assets/stylesheets/adminsite/admin/base.scss +521 -0
- data/app/assets/stylesheets/adminsite/admin/code_editor.scss +29 -0
- data/app/assets/stylesheets/adminsite/admin/pagination.scss +28 -0
- data/app/controllers/adminsite/admin/adminsite_admin_users_controller.rb +21 -0
- data/app/controllers/adminsite/admin/adminsite_file_assets_controller.rb +57 -0
- data/app/controllers/adminsite/admin/adminsite_page_layouts_controller.rb +41 -0
- data/app/controllers/adminsite/admin/adminsite_pages_controller.rb +40 -0
- data/app/controllers/adminsite/admin/base_controller.rb +16 -0
- data/app/controllers/adminsite/admin/crud_controller.rb +27 -0
- data/app/controllers/adminsite/admin/iframe_controller.rb +28 -0
- data/app/controllers/adminsite/admin/resources_controller.rb +148 -0
- data/app/controllers/adminsite/admin_application_controller.rb +9 -0
- data/app/controllers/adminsite/admin_user_sessions_controller.rb +5 -0
- data/app/controllers/adminsite/contents_controller.rb +88 -0
- data/app/helpers/admin/adminsite_application_helper.rb +174 -0
- data/app/helpers/admin_application_helper.rb +3 -0
- data/app/models/adminsite/admin_config/base.rb +100 -0
- data/app/models/adminsite/admin_user.rb +10 -0
- data/app/models/adminsite/file_asset.rb +22 -0
- data/app/models/adminsite/page.rb +59 -0
- data/app/models/adminsite/page_layout.rb +9 -0
- data/app/views/adminsite/admin/adminsite_file_assets/index.html.haml +39 -0
- data/app/views/adminsite/admin/adminsite_page_layouts/edit.html.haml +5 -0
- data/app/views/adminsite/admin/adminsite_page_layouts/index.html.haml +9 -0
- data/app/views/adminsite/admin/adminsite_page_layouts/new.html.haml +5 -0
- data/app/views/adminsite/admin/adminsite_pages/edit.html.haml +5 -0
- data/app/views/adminsite/admin/adminsite_pages/index.html.haml +16 -0
- data/app/views/adminsite/admin/adminsite_pages/new.html.haml +5 -0
- data/app/views/adminsite/admin/crud/index.html.haml +4 -0
- data/app/views/adminsite/admin/crud/show.html.haml +15 -0
- data/app/views/adminsite/admin/iframe/index.haml +14 -0
- data/app/views/adminsite/admin/resources/_form.haml +6 -0
- data/app/views/adminsite/admin/resources/_list.haml +18 -0
- data/app/views/adminsite/admin/resources/_search_form.html.haml +41 -0
- data/app/views/adminsite/admin/resources/edit.haml +13 -0
- data/app/views/adminsite/admin/resources/index.haml +13 -0
- data/app/views/adminsite/admin/resources/new.haml +14 -0
- data/app/views/adminsite/admin/resources/show.haml +15 -0
- data/app/views/adminsite/admin/shared/_admin_menu.html.haml +6 -0
- data/app/views/adminsite/admin/shared/_content_menu.html.haml +4 -0
- data/app/views/adminsite/admin/shared/_page_assets_list.html.haml +6 -0
- data/app/views/adminsite/admin/shared/_syntax_help.html.haml +24 -0
- data/app/views/adminsite/admin_user_sessions/new.html.haml +14 -0
- data/app/views/layouts/adminsite/admin.html.haml +31 -0
- data/config/initializers/adminsite_constants.rb +2 -0
- data/config/initializers/assets.rb +7 -0
- data/config/initializers/devise.rb +265 -0
- data/config/initializers/filter_parameter_logging.rb +4 -0
- data/config/initializers/paperclip.rb +15 -0
- data/config/initializers/time_formats.rb +1 -0
- data/config/locales/da.devise.yaml +57 -0
- data/config/locales/da.yaml +199 -0
- data/config/locales/en.devise.yaml +60 -0
- data/config/locales/en.yaml +205 -0
- data/config/routes.rb +17 -0
- data/db/migrate/20101007000000_create_admin.rb +59 -0
- data/db/migrate/20101007000001_create_cms_tables.rb +39 -0
- data/lib/adminsite.rb +28 -0
- data/lib/adminsite/configuration.rb +15 -0
- data/lib/adminsite/engine.rb +30 -0
- data/lib/adminsite/liquid/tags/asset.rb +70 -0
- data/lib/adminsite/version.rb +3 -0
- data/lib/generators/adminsite/add_dashboard/add_dashboard_generator.rb +34 -0
- data/lib/generators/adminsite/add_dashboard/templates/controllers/admin_dashboard_controller.rb +13 -0
- data/lib/generators/adminsite/add_dashboard/templates/views/index.html.haml +6 -0
- data/lib/generators/adminsite/add_iframe/add_iframe_generator.rb +42 -0
- data/lib/generators/adminsite/add_iframe/templates/controllers/admin_iframe_controller.rb +16 -0
- data/lib/generators/adminsite/add_resource/USAGE +0 -0
- data/lib/generators/adminsite/add_resource/add_resource_generator.rb +40 -0
- data/lib/generators/adminsite/add_resource/templates/admin_configs/resource_admin_config.rb +47 -0
- data/lib/generators/adminsite/add_resource/templates/controllers/admin_resource_controller.rb +19 -0
- data/lib/generators/adminsite/install/USAGE +13 -0
- data/lib/generators/adminsite/install/install_generator.rb +51 -0
- data/lib/generators/adminsite/install/templates/assets/adminsite.js +17 -0
- data/lib/generators/adminsite/install/templates/assets/adminsite.scss +14 -0
- data/lib/generators/adminsite/install/templates/config/locales/adminsite.da.yml +4 -0
- data/lib/generators/adminsite/install/templates/config/locales/adminsite.en.yml +6 -0
- data/lib/generators/adminsite/install/templates/recipes/application.rb +18 -0
- data/lib/generators/adminsite/install/templates/views/_admin_menu.html.haml +8 -0
- data/lib/recipes/adminsite.rb +82 -0
- data/lib/tasks/adminsite.rake +147 -0
- metadata +384 -0
@@ -0,0 +1,9 @@
|
|
1
|
+
# Filters added to this controller apply to all controllers in the application.
|
2
|
+
# Likewise, all the methods added will be available for all controllers.
|
3
|
+
|
4
|
+
class Adminsite::AdminApplicationController < ActionController::Base
|
5
|
+
helper :all, "admin/adminsite_application"
|
6
|
+
layout 'adminsite/admin'
|
7
|
+
before_filter :authenticate_adminsite_admin_user!
|
8
|
+
|
9
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
class Adminsite::ContentsController < ApplicationController
|
2
|
+
include ActionController::Caching::Pages
|
3
|
+
self.page_cache_directory = Adminsite::Engine.config.action_controller.page_cache_directory
|
4
|
+
|
5
|
+
before_filter :set_p3p
|
6
|
+
|
7
|
+
def show
|
8
|
+
retrive_page_or_404(params[:page_url], params[:id], params[:format])
|
9
|
+
end
|
10
|
+
|
11
|
+
def render_404(format = params[:format])
|
12
|
+
page = find_page_by_url('404', format)
|
13
|
+
if page.nil?
|
14
|
+
render :file => Rails.root.join('public', '404.html'), :status => 404, layout: nil
|
15
|
+
else
|
16
|
+
render :text => page.render(liquid_attributes), :status => 404 and return
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class << self
|
21
|
+
|
22
|
+
def fallback_format
|
23
|
+
'html'
|
24
|
+
end
|
25
|
+
|
26
|
+
def find_page_by_url(url, format)
|
27
|
+
page = nil
|
28
|
+
urls = ["#{url}.#{format || fallback_format}" ]
|
29
|
+
urls.unshift(url) if format.nil?
|
30
|
+
urls.push(url) if format == 'html'
|
31
|
+
urls.each do |full_url|
|
32
|
+
page ||= Adminsite::Page.find_by_url(full_url)
|
33
|
+
end
|
34
|
+
page
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def find_page_by_url(url, format)
|
41
|
+
self.class.find_page_by_url(url, format)
|
42
|
+
end
|
43
|
+
|
44
|
+
def set_p3p
|
45
|
+
response.headers['P3P'] = 'CP="CAO PSA OUR"'
|
46
|
+
end
|
47
|
+
|
48
|
+
def content_params
|
49
|
+
{ :authenticity_token => form_authenticity_token,
|
50
|
+
:authenticity_param => request_forgery_protection_token,
|
51
|
+
:notice => flash[:notice],
|
52
|
+
:error => flash[:error]
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
56
|
+
def liquid_attributes
|
57
|
+
return @liquid_attributes if @liquid_attributes.present?
|
58
|
+
|
59
|
+
@liquid_attributes = {}
|
60
|
+
if defined?(liquid_params)
|
61
|
+
@liquid_attributes = content_params.merge(liquid_params)
|
62
|
+
else
|
63
|
+
@liquid_attributes = content_params
|
64
|
+
Rails.logger.warn("Please define liquid_params in your application controller")
|
65
|
+
end
|
66
|
+
Rails.logger.debug("Content params: #{@liquid_attributes.inspect}")
|
67
|
+
@liquid_attributes
|
68
|
+
end
|
69
|
+
|
70
|
+
def retrive_page_or_404(url, id, format)
|
71
|
+
page = find_page_by_url(url, format)
|
72
|
+
unless page.nil?
|
73
|
+
return if page.requires_login && !authenticate_content_user
|
74
|
+
|
75
|
+
render :text => page.render(liquid_attributes)
|
76
|
+
if page.cacheable?
|
77
|
+
cache_page
|
78
|
+
logger.info("Caching page: #{page.url}")
|
79
|
+
else
|
80
|
+
logger.info("Not caching page: #{page.url}")
|
81
|
+
end
|
82
|
+
return
|
83
|
+
else
|
84
|
+
render_404(format)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
@@ -0,0 +1,174 @@
|
|
1
|
+
module Admin::AdminsiteApplicationHelper
|
2
|
+
|
3
|
+
def column_of_attr(search_attr)
|
4
|
+
return if search_attr.blank?
|
5
|
+
resource_class.columns.each{|c| return c if c.name == search_attr.to_s.downcase }
|
6
|
+
nil
|
7
|
+
end
|
8
|
+
|
9
|
+
def input_type_of_column(column)
|
10
|
+
case
|
11
|
+
when column.sql_type.match(/\Acharacter varying/)
|
12
|
+
return :string
|
13
|
+
when column.sql_type.match(/\Atimestamp/)
|
14
|
+
return :date
|
15
|
+
when column.sql_type.match(/\integer/)
|
16
|
+
return :number
|
17
|
+
else
|
18
|
+
column.sql_type.try(:to_sym)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def ransack_predicate_input_type(input_type)
|
23
|
+
case input_type
|
24
|
+
when :boolean
|
25
|
+
return [:eq]
|
26
|
+
when :text
|
27
|
+
return [:eq, :cont]
|
28
|
+
when :string
|
29
|
+
return [:eq, :cont]
|
30
|
+
when :date
|
31
|
+
return [:lteq, :gteq]
|
32
|
+
when :number
|
33
|
+
return [:eq, :lteq, :gteq]
|
34
|
+
else
|
35
|
+
[:eq]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def format_response_value(value)
|
40
|
+
value = value.url if defined?(PictureUploader) && value.is_a?(PictureUploader)
|
41
|
+
response = '<td>'
|
42
|
+
if is_url?(value)
|
43
|
+
response += link_to(value,value, target: :blank)
|
44
|
+
response += "<br/>#{image_tag(value)}" if is_image?(value)
|
45
|
+
else
|
46
|
+
response += h value
|
47
|
+
end
|
48
|
+
response + '</td>'
|
49
|
+
end
|
50
|
+
|
51
|
+
def is_url?(value)
|
52
|
+
value.is_a?(String) && value.match(/\A[\/]|\Ahttp[s]*:/)
|
53
|
+
end
|
54
|
+
|
55
|
+
def image_extensions
|
56
|
+
%w(.png .gif .jpg .tif)
|
57
|
+
end
|
58
|
+
|
59
|
+
def is_image?(path)
|
60
|
+
image_extensions.include?( File.extname(path).split('?').first.try(:downcase) )
|
61
|
+
end
|
62
|
+
|
63
|
+
def error_messages_for(obj)
|
64
|
+
return if obj.errors.blank?
|
65
|
+
msgs = obj.errors.full_messages.collect{|msg| "<li>#{ h msg }</li>" }
|
66
|
+
raw ['<ul>', msgs, '</ul>'].flatten.join
|
67
|
+
end
|
68
|
+
|
69
|
+
def recognize_path(path)
|
70
|
+
return {} if path.try(:strip).blank?
|
71
|
+
begin
|
72
|
+
return Adminsite::Engine.routes.recognize_path(path) # '/admin/profiles'
|
73
|
+
return Rails.application.routes.recognize_path(path)
|
74
|
+
rescue Exception => e
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def current_admin_menu
|
79
|
+
@current_admin_menu ||= params[:admin_menu]
|
80
|
+
end
|
81
|
+
|
82
|
+
def menu_item(label, url, child_controller_names = [], klasses = nil, method = nil, admin_menu = label)
|
83
|
+
link = link_to(label, "#{url}?admin_menu=#{admin_menu}", method: method, )
|
84
|
+
result = raw "<li class='#{html_classes(url, nil, klasses, admin_menu, label )}'>#{link}</li>"
|
85
|
+
|
86
|
+
if current_url?(url, label) || ( child_controller_active?(child_controller_names) && current_admin_menu == admin_menu)
|
87
|
+
child_controller_names.each do |child_controller_name|
|
88
|
+
child_menu = content_menu_item(child_controller_name, admin_menu, nil, nil )
|
89
|
+
content_for(:content_menu, child_menu)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
result
|
93
|
+
end
|
94
|
+
|
95
|
+
def content_menu_label(url, controller_name)
|
96
|
+
menu_controller = recognize_path(url)[:controller]
|
97
|
+
return controller_name.titlecase if menu_controller.blank?
|
98
|
+
eval("#{menu_controller}_controller".classify).content_menu_label
|
99
|
+
end
|
100
|
+
|
101
|
+
def content_menu_item(controller_name, admin_menu, klasses, method )
|
102
|
+
if controller_name != controller_name.pluralize
|
103
|
+
url = eval("admin_#{controller_name}_index_path")
|
104
|
+
else
|
105
|
+
url = eval("admin_#{controller_name}_path")
|
106
|
+
end
|
107
|
+
link = link_to(content_menu_label(url, controller_name), "#{url}?admin_menu=#{admin_menu}", method: method, )
|
108
|
+
raw "<li class='#{html_classes(url, controller_name, klasses, admin_menu )}'>#{link}</li>"
|
109
|
+
end
|
110
|
+
|
111
|
+
def current_url?(url, label = '')
|
112
|
+
if label.present?
|
113
|
+
return request.fullpath == "#{url}?admin_menu=#{label}"
|
114
|
+
else
|
115
|
+
return request.fullpath == url
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
def child_controller_active?(child_controller_names)
|
120
|
+
child_controller_names.include?(controller.controller_name)
|
121
|
+
end
|
122
|
+
|
123
|
+
def html_classes(url, controller_name, klasses = nil, admin_menu = '', label = '')
|
124
|
+
result = []
|
125
|
+
result |= [klasses].flatten if klasses.present?
|
126
|
+
result |= ['current'] if current_url?(url, admin_menu)
|
127
|
+
result |= ['active'] if current_admin_menu == label || controller_name == controller.controller_name
|
128
|
+
result.join(' ')
|
129
|
+
end
|
130
|
+
|
131
|
+
def label_resource
|
132
|
+
@resource.send(resource_admin_config.label_attribute)
|
133
|
+
end
|
134
|
+
|
135
|
+
def label_resource_class
|
136
|
+
resource_class.name.underscore.gsub('_', ' ')
|
137
|
+
end
|
138
|
+
|
139
|
+
def label_resource_class_plural
|
140
|
+
label_resource_class.pluralize
|
141
|
+
end
|
142
|
+
|
143
|
+
def link_to_back(text, path = admin_resource_path)
|
144
|
+
link_to text, path, :class => 'back'
|
145
|
+
end
|
146
|
+
|
147
|
+
def link_to_new(text, path = admin_resource_path(nil, :new) )
|
148
|
+
link_to text, path, :class => 'add'
|
149
|
+
end
|
150
|
+
|
151
|
+
def link_to_show(resource)
|
152
|
+
link_to image_tag('adminsite/admin/magnifier.png', :size => '16x16'), admin_resource_path(resource.id), target: :blank
|
153
|
+
end
|
154
|
+
|
155
|
+
def link_to_edit(resource)
|
156
|
+
link_to image_tag('adminsite/admin/pencil.png', :size => '16x16'), admin_resource_path(resource.id, :edit)
|
157
|
+
end
|
158
|
+
|
159
|
+
def link_to_destroy(resource)
|
160
|
+
link_to image_tag('adminsite/admin/cross.png', :size => '16x16'), admin_resource_path(resource.id), :confirm => 'Are you sure?', :method => :delete
|
161
|
+
end
|
162
|
+
|
163
|
+
def display_resource_value(resource, attr)
|
164
|
+
value = nil
|
165
|
+
attr.to_s.split('.').each{|a| value = (value || resource).send(a) }
|
166
|
+
value = display_referenced_resource(value) if value.is_a?(ActiveRecord::Base)
|
167
|
+
format_response_value(value).html_safe
|
168
|
+
end
|
169
|
+
|
170
|
+
def display_referenced_resource(resource)
|
171
|
+
link_to resource.title, send("edit_admin_#{resource.class.name.underscore.gsub('/','_')}_path", resource.id, admin_menu: params[:admin_menu])
|
172
|
+
end
|
173
|
+
|
174
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
module Adminsite
|
2
|
+
module AdminConfig
|
3
|
+
class Base #
|
4
|
+
|
5
|
+
@@admin_configs = {}
|
6
|
+
|
7
|
+
class << self
|
8
|
+
|
9
|
+
def admin_default_config_class(class_name)
|
10
|
+
config_class = 'Adminsite::AdminConfig::Base'
|
11
|
+
return config_class if class_name.blank?
|
12
|
+
|
13
|
+
config_class_name = class_name.to_s.gsub('::','')
|
14
|
+
begin
|
15
|
+
# Test if "Adminsite::AdminConfig::#{config_class_name.gsub('::','')}" is defined
|
16
|
+
config_class = "Adminsite::#{config_class_name}AdminConfig"
|
17
|
+
eval(config_class)
|
18
|
+
rescue NameError, LoadError => e
|
19
|
+
puts("AdminConfig for #{config_class_name} not found. Use fallback: #{config_class}")
|
20
|
+
Rails.logger.warn("AdminConfig for #{config_class_name} not found. Use fallback: #{config_class}")
|
21
|
+
end
|
22
|
+
config_class
|
23
|
+
end
|
24
|
+
|
25
|
+
def admin_config_of_class(class_name, admin_config_class = nil)
|
26
|
+
admin_config_class ||= @@admin_configs[class_name.to_s]
|
27
|
+
if admin_config_class.blank?
|
28
|
+
admin_config_class = admin_default_config_class(class_name.to_s)
|
29
|
+
register_admin_configs(class_name.to_s, admin_config_class)
|
30
|
+
end
|
31
|
+
eval(admin_config_class).new(class_name)
|
32
|
+
end
|
33
|
+
|
34
|
+
def register_admin_configs(class_name, admin_config, override = true)
|
35
|
+
if override
|
36
|
+
@@admin_configs[class_name] = admin_config
|
37
|
+
else
|
38
|
+
@@admin_configs[class_name] ||= admin_config
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def all_registered_admin_configs
|
43
|
+
@@admin_configs
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
attr_reader :resource_class
|
48
|
+
|
49
|
+
def ignore_columns
|
50
|
+
['created_at', 'updated_at', 'id']
|
51
|
+
end
|
52
|
+
|
53
|
+
def column_names
|
54
|
+
@column_names ||= resource_class.column_names
|
55
|
+
end
|
56
|
+
|
57
|
+
def attributes_index
|
58
|
+
column_names
|
59
|
+
end
|
60
|
+
|
61
|
+
def attributes_edit
|
62
|
+
@attributes_edit ||= (column_names - ignore_columns)
|
63
|
+
end
|
64
|
+
|
65
|
+
def attributes_show
|
66
|
+
attributes_edit
|
67
|
+
end
|
68
|
+
|
69
|
+
def attributes_search
|
70
|
+
attributes_index
|
71
|
+
end
|
72
|
+
|
73
|
+
def default_member_actions
|
74
|
+
[ :show,
|
75
|
+
:edit,
|
76
|
+
:destroy]
|
77
|
+
end
|
78
|
+
|
79
|
+
def actions_index
|
80
|
+
[ :new ]
|
81
|
+
end
|
82
|
+
|
83
|
+
def label_attribute
|
84
|
+
:title
|
85
|
+
end
|
86
|
+
|
87
|
+
def scopes
|
88
|
+
[:all]
|
89
|
+
end
|
90
|
+
|
91
|
+
protected
|
92
|
+
|
93
|
+
def initialize(resource_class)
|
94
|
+
require Adminsite::Engine.root.join("app/models/#{resource_class.name.underscore}") unless defined?(resource_class)
|
95
|
+
@resource_class = resource_class
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module Adminsite
|
2
|
+
class AdminUser < ActiveRecord::Base
|
3
|
+
# Include default devise modules. Others available are:
|
4
|
+
# :token_authenticatable, :confirmable, :lockable and :timeoutable
|
5
|
+
devise :database_authenticatable, :registerable,
|
6
|
+
:recoverable, :rememberable, :trackable, :validatable
|
7
|
+
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Adminsite
|
2
|
+
class FileAsset < ActiveRecord::Base
|
3
|
+
|
4
|
+
has_attached_file :attachment
|
5
|
+
|
6
|
+
validates_with AttachmentPresenceValidator, :attributes => :attachment
|
7
|
+
validates_with AttachmentSizeValidator, :attributes => :attachment, :less_than => 2.megabytes
|
8
|
+
validates_attachment :attachment, content_type: { content_type: /\A.*\Z/ }
|
9
|
+
# do_not_validate_attachment_file_type :image
|
10
|
+
|
11
|
+
class << self
|
12
|
+
def attachment_url_for(name)
|
13
|
+
asset = find_by_attachment_file_name(name)
|
14
|
+
if asset.nil?
|
15
|
+
"http://missing.jpg?#{name}"
|
16
|
+
else
|
17
|
+
asset.attachment.url(:original, false)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
class Adminsite::Page < ActiveRecord::Base
|
2
|
+
belongs_to :page_layout
|
3
|
+
validates_presence_of :title
|
4
|
+
validates_presence_of :page_layout
|
5
|
+
validates_presence_of :url
|
6
|
+
|
7
|
+
class << self
|
8
|
+
|
9
|
+
def cleanup_all_cached
|
10
|
+
Adminsite::Page.all.each do |p|
|
11
|
+
p.cleanup_cached
|
12
|
+
end
|
13
|
+
logger.info("Page cache has been wiped out: deleted all cached pages.")
|
14
|
+
end
|
15
|
+
|
16
|
+
def cacheable
|
17
|
+
where(cacheable: true)
|
18
|
+
end
|
19
|
+
|
20
|
+
def requires_login
|
21
|
+
where(requires_login: true)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
def cache_dir
|
27
|
+
@cache_dir ||= Adminsite::ContentsController.page_cache_directory # Adminsite::Engine.config.action_controller.page_cache_directory
|
28
|
+
end
|
29
|
+
|
30
|
+
def cleanup_cached
|
31
|
+
return if self.url.blank?
|
32
|
+
logger.info("Removing cached page for: #{self.url}")
|
33
|
+
cache_file_path = "#{cache_dir}/#{self.url}"
|
34
|
+
if !remove_cache_file(cache_file_path)
|
35
|
+
remove_cache_file("#{cache_file_path}.html")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def remove_cache_file(file_path)
|
40
|
+
if File.exist?(file_path)
|
41
|
+
logger.info("Removing cached page at: #{file_path}")
|
42
|
+
FileUtils.rm(file_path)
|
43
|
+
true
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def render(args)
|
48
|
+
page_layout.render(layout_args(args))
|
49
|
+
end
|
50
|
+
|
51
|
+
def layout_args(args)
|
52
|
+
args.stringify_keys.merge(:content_for_template => content_for_template(args))
|
53
|
+
end
|
54
|
+
|
55
|
+
def content_for_template(liquid_params)
|
56
|
+
liquid_template = Liquid::Template.parse(body)
|
57
|
+
liquid_template.render(liquid_params.stringify_keys)
|
58
|
+
end
|
59
|
+
end
|