drg_cms 0.5.8 → 0.5.8.2
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 +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
|