drg_cms 0.5.8 → 0.5.8.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/drg_cms/drg_cms.js +53 -0
- data/app/assets/javascripts/drg_cms/jquery.the-modal.js +260 -0
- data/app/assets/javascripts/drg_cms_cms.js +3 -0
- data/app/assets/stylesheets/drg_cms/drg_cms.css +68 -33
- data/app/assets/stylesheets/drg_cms/the-modal.css +33 -0
- data/app/assets/stylesheets/drg_cms_cms.css +1 -0
- data/app/controllers/cmsedit_controller.rb +69 -54
- data/app/controllers/dc_application_controller.rb +21 -17
- data/app/controllers/dc_common_controller.rb +0 -0
- data/app/forms/all_options.yml +3 -2
- data/app/forms/cms_menu.yml +30 -17
- data/app/forms/dc_big_table_value.yml +3 -0
- data/app/forms/dc_filter.yml +56 -0
- data/app/forms/dc_key_value_store.yml +33 -0
- data/app/helpers/cmsedit_helper.rb +32 -82
- data/app/models/dc_ad.rb +27 -1
- data/app/models/dc_ad_stat.rb +10 -1
- data/app/models/dc_big_menu.rb +18 -1
- data/app/models/dc_big_table.rb +15 -2
- data/app/models/dc_big_table_locale.rb +13 -2
- data/app/models/dc_big_table_value.rb +14 -2
- data/app/models/dc_category.rb +16 -2
- data/app/models/dc_design.rb +17 -1
- data/app/models/dc_dummy.rb +5 -1
- data/app/models/dc_filter.rb +172 -0
- data/app/models/dc_folder_permission.rb +11 -1
- data/app/models/dc_ident.rb +9 -1
- data/app/models/dc_internals.rb +58 -0
- data/app/models/dc_journal.rb +14 -1
- data/app/models/dc_key_value_store.rb +8 -2
- data/app/models/dc_link.rb +14 -1
- data/app/models/dc_menu.rb +16 -1
- data/app/models/dc_menu_item.rb +19 -1
- data/app/models/dc_page.rb +43 -1
- data/app/models/dc_part.rb +28 -1
- data/app/models/dc_permission.rb +11 -1
- data/app/models/dc_piece.rb +25 -1
- data/app/models/dc_policy.rb +14 -1
- data/app/models/dc_policy_role.rb +10 -1
- data/app/models/dc_policy_rule.rb +9 -1
- data/app/models/dc_poll.rb +23 -1
- data/app/models/dc_poll_item.rb +16 -1
- data/app/models/dc_simple_menu.rb +16 -1
- data/app/models/dc_simple_menu_item.rb +17 -1
- data/app/models/dc_site.rb +43 -13
- data/app/models/dc_stat.rb +14 -3
- data/app/models/dc_user.rb +38 -1
- data/app/models/dc_user_role.rb +13 -1
- data/app/models/dc_visit.rb +11 -1
- data/app/models/drgcms_form_fields.rb +20 -4
- data/config/locales/drgcms_en.yml +11 -6
- data/config/locales/drgcms_sl.yml +8 -4
- data/config/locales/models_en.yml +20 -1
- data/config/locales/models_sl.yml +18 -0
- data/lib/drg_cms/version.rb +1 -1
- data/lib/generators/new_drg_form/new_drg_form_generator.rb +1 -1
- data/lib/tasks/browse_models.rake +17 -2
- metadata +8 -2
@@ -0,0 +1,33 @@
|
|
1
|
+
.themodal-lock {
|
2
|
+
/* when modal is opened we're removing scrollbars from the main content */
|
3
|
+
overflow: hidden;
|
4
|
+
}
|
5
|
+
|
6
|
+
.themodal-overlay {
|
7
|
+
/* overlay will stay fixed and will take all the space available */
|
8
|
+
position: fixed;
|
9
|
+
bottom: 0;
|
10
|
+
left: 0;
|
11
|
+
top: 0;
|
12
|
+
right: 0;
|
13
|
+
z-index: 100;
|
14
|
+
|
15
|
+
/* if modal content doesn't fit inside the overlay, display scrollbars */
|
16
|
+
overflow: auto;
|
17
|
+
|
18
|
+
/* allow one-finger iPad scrolling */
|
19
|
+
-webkit-overflow-scrolling: touch;
|
20
|
+
|
21
|
+
}
|
22
|
+
|
23
|
+
/* fix for iPad glitches */
|
24
|
+
.themodal-overlay > * {
|
25
|
+
-webkit-transform: translateZ(0px);
|
26
|
+
}
|
27
|
+
|
28
|
+
.themodal-overlay {
|
29
|
+
background: rgba(0, 0, 0, 0.5);
|
30
|
+
/* IE6–IE8 */
|
31
|
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = #7F000000, endColorstr = #7F000000);
|
32
|
+
zoom: 1;
|
33
|
+
}
|
@@ -107,33 +107,64 @@ end
|
|
107
107
|
# Set aditional filter options when filter is defined by filter method in control object.
|
108
108
|
########################################################################
|
109
109
|
def user_filter_options(model) #:nodoc:
|
110
|
-
|
111
|
-
if
|
112
|
-
session[:
|
113
|
-
return model
|
114
|
-
end
|
115
|
-
#
|
116
|
-
table, field, oper, value = if params[:filter] == 'on'
|
117
|
-
[model.to_s, params[:filter_field], params[:filter_oper], params[:record][params[:filter_field]] ]
|
110
|
+
table_name = @tables.first[1]
|
111
|
+
if session[table_name]
|
112
|
+
DcFilter.get_filter(session[table_name][:filter]) || model
|
118
113
|
else
|
119
|
-
|
114
|
+
model
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
########################################################################
|
119
|
+
# Will set session[table_name][:filter] and save last filter settings to session.
|
120
|
+
# subroutine of check_filter_options.
|
121
|
+
########################################################################
|
122
|
+
def set_session_filter(table_name)
|
123
|
+
if params[:filter] == 'off' # clear all values
|
124
|
+
session[table_name][:filter] = nil
|
125
|
+
return
|
120
126
|
end
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
127
|
+
|
128
|
+
filter_value = if params[:filter_value].nil?
|
129
|
+
# NIL indicates that no filtering is needed
|
130
|
+
'#NIL'
|
131
|
+
else
|
132
|
+
if params[:filter_value].class == String and params[:filter_value][0] == '@'
|
133
|
+
# Internal value. Remove leading @ and evaluate expression
|
134
|
+
expression = DcInternals.get(params[:filter_value])
|
135
|
+
eval(expression) rescue nil
|
136
|
+
else
|
137
|
+
# No filter when empty
|
138
|
+
params[:filter_value] == '' ? '#NIL' : params[:filter_value]
|
139
|
+
end
|
125
140
|
end
|
126
|
-
#
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
141
|
+
# if filter field parameter is omitted then just set filter value
|
142
|
+
session[table_name][:filter] =
|
143
|
+
if params[:filter_field].nil?
|
144
|
+
saved = YAML.load(session[table_name][:filter])
|
145
|
+
saved['value'] = filter_value
|
146
|
+
saved.to_yaml
|
147
|
+
else
|
148
|
+
# As field defined. Split name and alternative input field
|
149
|
+
field = if params[:filter_field].match(' as ')
|
150
|
+
params[:filter_input] = params[:filter_field].split(' as ').last.strip
|
151
|
+
params[:filter_field].split(' as ').first.strip
|
152
|
+
else
|
153
|
+
params[:filter_field]
|
154
|
+
end
|
155
|
+
#
|
156
|
+
{'field' => field,
|
157
|
+
'operation' => params[:filter_oper],
|
158
|
+
'value' => filter_value,
|
159
|
+
'input' => params[:filter_input],
|
160
|
+
'table' => table_name }.to_yaml
|
161
|
+
end
|
162
|
+
# must be. Otherwise kaminari includes parameter on paging
|
163
|
+
params[:filter] = nil
|
164
|
+
params[:filter_id] = nil
|
165
|
+
params[:filter_oper] = nil
|
166
|
+
params[:filter_input] = nil
|
167
|
+
params[:filter_field] = nil
|
137
168
|
end
|
138
169
|
|
139
170
|
########################################################################
|
@@ -141,40 +172,22 @@ end
|
|
141
172
|
########################################################################
|
142
173
|
def check_filter_options() #:nodoc:
|
143
174
|
table_name = @tables.first[1]
|
175
|
+
model = @tables.first[0]
|
144
176
|
session[table_name] ||= {}
|
145
177
|
# process page
|
146
178
|
session[table_name][:page] = params[:page] if params[:page]
|
147
179
|
# new filter is applied
|
148
180
|
if params[:filter]
|
149
|
-
|
150
|
-
if params[:filter] == 'off' # clear all values
|
151
|
-
nil
|
152
|
-
else
|
153
|
-
[ params[:filter_field], params[:filter_oper], params[:record][params[:filter_field]] ].join("\t")
|
154
|
-
end
|
181
|
+
set_session_filter(table_name)
|
155
182
|
session[table_name][:page] = 1
|
156
|
-
params[:filter] = nil # must be. Otherwise kaminari includes parameter on paging and everything goes wrong
|
157
183
|
end
|
158
|
-
# if data model has field dc_site_id ensure that only documents which belong
|
159
|
-
# to the site are selected.
|
160
|
-
model = @tables.first[0]
|
184
|
+
# if data model has field dc_site_id ensure that only documents which belong to the site are selected.
|
161
185
|
site_id = dc_get_site._id if dc_get_site
|
162
186
|
# dont't filter site if no dc_site_id field or user is ADMIN
|
163
187
|
site_id = nil if !model.method_defined?('dc_site_id') or dc_user_can(DcPermission::CAN_ADMIN)
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
value = /#{value}/i if oper == 'like' # do regex if operation is like
|
168
|
-
# when field type is ObjectId transform value
|
169
|
-
if model.fields[field] and model.fields[field].type == BSON::ObjectId
|
170
|
-
value = BSON::ObjectId.from_string(value) rescue nil
|
171
|
-
flash[:error] = t('drgcms.not_id') if value.nil?
|
172
|
-
end
|
173
|
-
@records = if site_id
|
174
|
-
model.where(dc_site_id: site_id, field => value)
|
175
|
-
else
|
176
|
-
model.where(field => value)
|
177
|
-
end
|
188
|
+
#
|
189
|
+
if @records = DcFilter.get_filter(session[table_name][:filter])
|
190
|
+
@records = @records.and(dc_site_id: site_id) if site_id
|
178
191
|
else
|
179
192
|
@records = if site_id
|
180
193
|
model.where(dc_site_id: site_id)
|
@@ -182,6 +195,7 @@ def check_filter_options() #:nodoc:
|
|
182
195
|
model
|
183
196
|
end
|
184
197
|
end
|
198
|
+
|
185
199
|
# pagination if required
|
186
200
|
per_page = (@form['result_set']['per_page'] || 30).to_i
|
187
201
|
if per_page > 0
|
@@ -197,6 +211,11 @@ def index
|
|
197
211
|
if @form['result_set'].nil?
|
198
212
|
return process_return_to(params[:return_to] || 'reload')
|
199
213
|
end
|
214
|
+
# for now enable only filtering of main tables
|
215
|
+
if @tables.size == 1
|
216
|
+
check_filter_options()
|
217
|
+
check_sort_options()
|
218
|
+
end
|
200
219
|
# result set is defined by filter method in control object
|
201
220
|
if @form['result_set']['filter']
|
202
221
|
if respond_to?(@form['result_set']['filter'])
|
@@ -204,7 +223,7 @@ def index
|
|
204
223
|
# something iz wrong. flash[] should have explanation.
|
205
224
|
if @records.class == FalseClass
|
206
225
|
@records = []
|
207
|
-
return render(action:
|
226
|
+
return render(action: :index)
|
208
227
|
end
|
209
228
|
# pagination
|
210
229
|
unless @form['table'] == 'dc_dummy'
|
@@ -215,13 +234,9 @@ def index
|
|
215
234
|
p "Error: result_set:filter: #{@form['result_set']['filter']} not found in controls!"
|
216
235
|
end
|
217
236
|
else
|
218
|
-
if @tables.size
|
219
|
-
check_filter_options()
|
220
|
-
check_sort_options()
|
221
|
-
else
|
237
|
+
if @tables.size > 1
|
222
238
|
rec = @tables.first[0].find(@ids.first) # top most document.id
|
223
239
|
1.upto(@tables.size - 2) { |i| rec = rec.send(@tables[i][1].pluralize).find(@ids[i]) } # find embedded childrens by ids
|
224
|
-
# p rec,@tables, @tables.last[1].pluralize
|
225
240
|
@records = rec.send(@tables.last[1].pluralize) # current embedded set
|
226
241
|
# sort by order if order field is present in model
|
227
242
|
if @tables.last[1].classify.constantize.respond_to?(:order)
|
@@ -23,15 +23,19 @@
|
|
23
23
|
#++
|
24
24
|
|
25
25
|
##########################################################################
|
26
|
-
#
|
26
|
+
# DcApplicationControllerController holds methods which are useful for all
|
27
|
+
# application controllers.
|
27
28
|
##########################################################################
|
28
29
|
class DcApplicationController < ActionController::Base
|
29
30
|
protect_from_forgery
|
30
31
|
|
32
|
+
before_filter :dc_reload_patches if Rails.env.development?
|
33
|
+
|
31
34
|
########################################################################
|
32
|
-
# Writes anything passed as parameter to logger file.
|
35
|
+
# Writes anything passed as parameter to logger file.
|
36
|
+
# Very useful for debuging strange errors.
|
33
37
|
#
|
34
|
-
#
|
38
|
+
# @param [Objects] args any parameter can be passed
|
35
39
|
########################################################################
|
36
40
|
def dc_dump(*args)
|
37
41
|
args.each do |arg|
|
@@ -49,15 +53,13 @@ end
|
|
49
53
|
####################################################################
|
50
54
|
# Checks if user has required role.
|
51
55
|
#
|
52
|
-
# [
|
53
|
-
# [
|
54
|
-
#
|
55
|
-
# is passed, dc_policy_roles files is searched for appropriate role.
|
56
|
+
# @param [DcPolicyRole] role can be passed as DcPolicyRole object or
|
57
|
+
# @param [String] role as role name. If passed as name, dc_policy_roles
|
58
|
+
# is searched for appropriate role.
|
56
59
|
#
|
57
|
-
# [
|
58
|
-
# Boolean. True if user has required role added to his profile.
|
60
|
+
# @return [Boolean] True if user has required role added to his profile.
|
59
61
|
#
|
60
|
-
#
|
62
|
+
# @example If user has required role
|
61
63
|
# if dc_user_has_role('admin') ...
|
62
64
|
# if dc_user_has_role('Site editors') ...
|
63
65
|
####################################################################
|
@@ -73,12 +75,14 @@ def dc_user_has_role(role)
|
|
73
75
|
end
|
74
76
|
|
75
77
|
####################################################################
|
76
|
-
#
|
78
|
+
# Determines site from url and returns site document.
|
77
79
|
#
|
78
|
-
# [
|
79
|
-
#
|
80
|
-
# site document is returned. If site has alias set then alias site document is
|
80
|
+
# @return [DcSite] site document. If site is not found and not in production environment,
|
81
|
+
# 'test' document is returned. If site has alias set then alias site document is
|
81
82
|
# returned.
|
83
|
+
#
|
84
|
+
# @example Returns Google analytics code from site settings
|
85
|
+
# settings = dc_get_site.params['ga_acc']
|
82
86
|
####################################################################
|
83
87
|
def dc_get_site()
|
84
88
|
return @site if @site
|
@@ -101,9 +105,9 @@ end
|
|
101
105
|
####################################################################
|
102
106
|
# Determine and return site record from url. It would be nice but it is not working.
|
103
107
|
####################################################################
|
104
|
-
def self.dc_get_site_() #:nodoc:
|
105
|
-
|
106
|
-
end
|
108
|
+
#def self.dc_get_site_() #:nodoc:
|
109
|
+
# self.dc_get_site()
|
110
|
+
#end
|
107
111
|
|
108
112
|
########################################################################
|
109
113
|
# Searches forms path for file_name and returns full file name or nil if not found.
|
File without changes
|
data/app/forms/all_options.yml
CHANGED
@@ -44,9 +44,9 @@ result_set:
|
|
44
44
|
actions_width: 100
|
45
45
|
per_page: 10
|
46
46
|
table_style: 'color: green;'
|
47
|
-
table_class:
|
47
|
+
table_class: tclass
|
48
48
|
tr_style: 'color: green;'
|
49
|
-
tr_class:
|
49
|
+
tr_class: trclass
|
50
50
|
|
51
51
|
actions: standard
|
52
52
|
|
@@ -75,6 +75,7 @@ result_set:
|
|
75
75
|
columns:
|
76
76
|
1:
|
77
77
|
name: name
|
78
|
+
eval: dc_name4_id,dc_site,name
|
78
79
|
style: 'align: left; width: 100px'
|
79
80
|
2:
|
80
81
|
name: title
|
data/app/forms/cms_menu.yml
CHANGED
@@ -23,7 +23,7 @@
|
|
23
23
|
|
24
24
|
menu:
|
25
25
|
10_system_menu:
|
26
|
-
caption: drgcms.
|
26
|
+
caption: drgcms.cms_main
|
27
27
|
icon: support lg
|
28
28
|
|
29
29
|
items:
|
@@ -42,11 +42,6 @@ menu:
|
|
42
42
|
controller: cmsedit
|
43
43
|
icon: file-text-o lg
|
44
44
|
table: dc_page
|
45
|
-
40:
|
46
|
-
caption: helpers.label.dc_user.tabletitle
|
47
|
-
controller: cmsedit
|
48
|
-
icon: users lg
|
49
|
-
table: dc_user
|
50
45
|
50:
|
51
46
|
caption: helpers.label.dc_piece.tabletitle
|
52
47
|
controller: cmsedit
|
@@ -83,37 +78,55 @@ menu:
|
|
83
78
|
controller: cmsedit
|
84
79
|
icon: money lg
|
85
80
|
table: dc_ad
|
86
|
-
|
87
|
-
|
81
|
+
|
82
|
+
11_system_menu:
|
83
|
+
caption: drgcms.cms_advanced
|
84
|
+
icon: star lg
|
85
|
+
items:
|
86
|
+
10:
|
87
|
+
caption: helpers.label.dc_user.tabletitle
|
88
88
|
controller: cmsedit
|
89
|
-
icon:
|
90
|
-
table:
|
91
|
-
|
89
|
+
icon: users lg
|
90
|
+
table: dc_user
|
91
|
+
20:
|
92
92
|
caption: helpers.label.dc_policy_role.tabletitle
|
93
93
|
controller: cmsedit
|
94
94
|
icon: user-secret lg
|
95
95
|
table: dc_policy_role
|
96
|
-
|
96
|
+
30:
|
97
97
|
caption: helpers.label.dc_permission.tabletitle
|
98
98
|
controller: cmsedit
|
99
99
|
icon: shield lg
|
100
100
|
table: dc_permission
|
101
|
-
|
101
|
+
40:
|
102
102
|
caption: helpers.label.dc_folder_permission.tabletitle
|
103
103
|
controller: cmsedit
|
104
104
|
icon: shield lg
|
105
105
|
table: dc_folder_permission
|
106
|
-
|
106
|
+
60:
|
107
|
+
caption: helpers.label.dc_big_table.tabletitle
|
108
|
+
controller: cmsedit
|
109
|
+
icon: table lg
|
110
|
+
table: dc_big_table
|
111
|
+
70:
|
112
|
+
caption: helpers.label.dc_key_value_store.tabletitle
|
113
|
+
controller: cmsedit
|
114
|
+
icon: list lg
|
115
|
+
table: dc_key_value_store
|
116
|
+
80:
|
117
|
+
caption: helpers.label.dc_filter.tabletitle
|
118
|
+
controller: cmsedit
|
119
|
+
icon: filter lg
|
120
|
+
table: dc_filter
|
121
|
+
500:
|
107
122
|
caption: helpers.label.dc_journal.tabletitle
|
108
123
|
controller: cmsedit
|
109
124
|
icon: undo lg
|
110
125
|
table: dc_journal
|
111
126
|
|
112
|
-
|
127
|
+
600:
|
113
128
|
caption: drgcms.browse_collections
|
114
129
|
controller: cmsedit
|
115
130
|
icon: table lg
|
116
131
|
table: dc_dummy
|
117
132
|
formname: dc_browse_models
|
118
|
-
|
119
|
-
|
@@ -0,0 +1,56 @@
|
|
1
|
+
## DRG Form for dc_filter
|
2
|
+
---
|
3
|
+
table: dc_filter
|
4
|
+
|
5
|
+
index:
|
6
|
+
filter: description,table,dc_user_id
|
7
|
+
actions: standard
|
8
|
+
|
9
|
+
result_set:
|
10
|
+
actions: standard
|
11
|
+
|
12
|
+
columns:
|
13
|
+
10:
|
14
|
+
name: dc_user_id
|
15
|
+
eval: dc_name4_id,dc_user,name
|
16
|
+
20:
|
17
|
+
name: table
|
18
|
+
30:
|
19
|
+
name: description
|
20
|
+
40:
|
21
|
+
name: public
|
22
|
+
eval: dc_icon4_boolean
|
23
|
+
|
24
|
+
form:
|
25
|
+
actions: standard
|
26
|
+
|
27
|
+
fields:
|
28
|
+
|
29
|
+
10:
|
30
|
+
name: description
|
31
|
+
type: text_field
|
32
|
+
html:
|
33
|
+
size: 50
|
34
|
+
|
35
|
+
20:
|
36
|
+
name: table
|
37
|
+
type: text_with_select
|
38
|
+
eval: dc_choices4_all_collections
|
39
|
+
html:
|
40
|
+
size: 30
|
41
|
+
|
42
|
+
30:
|
43
|
+
name: dc_user_id
|
44
|
+
type: select
|
45
|
+
eval: dc_choices4('dc_user','name','_id')
|
46
|
+
html:
|
47
|
+
include_blank: true
|
48
|
+
40:
|
49
|
+
name: public
|
50
|
+
type: check_box
|
51
|
+
|
52
|
+
50:
|
53
|
+
name: filter
|
54
|
+
type: text_area
|
55
|
+
html:
|
56
|
+
size: 80x20
|