adminsite 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|