drg_cms 0.5.10.7 → 0.5.10.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/drg_cms/drg_cms.css +3 -1
- data/app/controllers/dc_application_controller.rb +37 -7
- data/app/controllers/dc_common_controller.rb +10 -5
- data/app/forms/all_options.yml +1 -1
- data/app/forms/dc_category.yml +7 -0
- data/app/forms/dc_page.yml +9 -3
- data/app/helpers/dc_application_helper.rb +80 -14
- data/app/helpers/dc_common_renderer.rb +1 -0
- data/app/helpers/dc_simple_menu_renderer.rb +1 -1
- data/app/models/dc_category.rb +6 -3
- data/app/models/dc_policy_role.rb +12 -0
- data/app/models/drgcms_form_fields.rb +15 -2
- data/config/locales/models_en.yml +2 -0
- data/config/locales/models_sl.yml +2 -0
- data/drg_cms.gemspec +5 -4
- data/lib/drg_cms/version.rb +1 -1
- data/lib/tasks/dc_cleanup.rake +16 -0
- metadata +23 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bdf44bace6e210feb0eb13a51f30edac416f50af
|
4
|
+
data.tar.gz: 883617538b019a15dd6cb1aa320b56cf9f578247
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef0e470d00455dbf50ade1b16c041ea73926e329c6cc94ae2345860ffa314148089e823f4e979266d469fd92a755b1f79487966943c5f4e6940163c6ebb71e2e
|
7
|
+
data.tar.gz: 9525e91d098007daedf5171f7973d1a5a9d38f46c8b4304c39ff70c5c8b3c90172dd4df83d425b3eb565f71153e1055068e640af7dfa0f0b1a8446f4838c0d52
|
@@ -198,12 +198,6 @@ def dc_user_can(permission, table=params[:table])
|
|
198
198
|
add_permissions_for table_name
|
199
199
|
end
|
200
200
|
end
|
201
|
-
# Sometimes anonymous user is allowed to use cmsedit. Search for system default role.
|
202
|
-
#TODO This might not be the best idea. Check in the future.
|
203
|
-
if session[:user_roles].nil? or session[:user_roles] == []
|
204
|
-
guest = DcUserRole.find_by(:system_name => 'guest')
|
205
|
-
session[:user_roles] = guest ? [guest.id] : []
|
206
|
-
end
|
207
201
|
# Return true if any of the permissions user has is higher or equal to requested permission
|
208
202
|
session[:user_roles].each {|r| return true if @permissions[r] and @permissions[r] >= permission }
|
209
203
|
false
|
@@ -268,6 +262,36 @@ def dc_not_modified?(*documents)
|
|
268
262
|
false
|
269
263
|
end
|
270
264
|
|
265
|
+
##########################################################################
|
266
|
+
# Will determine design content or view filename which defines design.
|
267
|
+
#
|
268
|
+
# Returns:
|
269
|
+
# design_body: design body as defined in site or design document.
|
270
|
+
# design_view: view file name which will be used for rendering design
|
271
|
+
##########################################################################
|
272
|
+
def get_design_and_render(design_doc)
|
273
|
+
layout = @site.site_layout.blank? ? 'content' : @site.site_layout
|
274
|
+
site_top = '<%= dc_page_top %>'
|
275
|
+
site_bottom = '<%= dc_page_bottom %>'
|
276
|
+
#
|
277
|
+
if design_doc
|
278
|
+
if !design_doc.rails_view.blank?
|
279
|
+
if design_doc.rails_view.downcase != 'site'
|
280
|
+
return render design_doc.rails_view, layout: layout
|
281
|
+
end
|
282
|
+
elsif !design_doc.body.blank?
|
283
|
+
design = site_top + design_doc.body + site_bottom
|
284
|
+
return render(inline: design, layout: layout)
|
285
|
+
end
|
286
|
+
end
|
287
|
+
#
|
288
|
+
if @site.rails_view.blank?
|
289
|
+
design = site_top + @site.design + site_bottom
|
290
|
+
return render(inline: design, layout: layout)
|
291
|
+
end
|
292
|
+
render @site.rails_view, layout: layout
|
293
|
+
end
|
294
|
+
|
271
295
|
##########################################################################
|
272
296
|
# This is default page process action. It will search for site, page and
|
273
297
|
# design documents, collect parameters from different objects, add CMS edit code if allowed
|
@@ -334,7 +358,8 @@ def dc_process_default_request()
|
|
334
358
|
dc_log_visit()
|
335
359
|
end
|
336
360
|
@page_title = @page.title.blank? ? "#{@site.page_title}-#{@page.subject}" : @page.title
|
337
|
-
|
361
|
+
# define design
|
362
|
+
=begin
|
338
363
|
design = @design ? @design.body : @site.design
|
339
364
|
# render view. inline if defined in design
|
340
365
|
view_filename = @design ? @design.rails_view.to_s : ''
|
@@ -346,6 +371,8 @@ def dc_process_default_request()
|
|
346
371
|
else
|
347
372
|
render view_filename, layout: layout
|
348
373
|
end
|
374
|
+
=end
|
375
|
+
get_design_and_render @design
|
349
376
|
end
|
350
377
|
|
351
378
|
##########################################################################
|
@@ -378,6 +405,7 @@ def dc_single_sitedoc_request
|
|
378
405
|
#
|
379
406
|
@page_title = "#{@site.page_title} #{@part.name}"
|
380
407
|
@js, @css = '', ''
|
408
|
+
=begin
|
381
409
|
layout = @site.site_layout.blank? ? 'content' : @site.site_layout
|
382
410
|
if @site.rails_view.blank?
|
383
411
|
design = @site.design + '<style type="text/css"><%= @css.html_safe %></style><%= javascript_tag @js %>'
|
@@ -386,6 +414,8 @@ def dc_single_sitedoc_request
|
|
386
414
|
else
|
387
415
|
render @site.rails_view, layout: layout
|
388
416
|
end
|
417
|
+
=end
|
418
|
+
get_design_and_render nil
|
389
419
|
end
|
390
420
|
|
391
421
|
########################################################################
|
@@ -149,8 +149,7 @@ end
|
|
149
149
|
def restore_from_journal
|
150
150
|
# Only administrators can perform this operation
|
151
151
|
unless dc_user_has_role('admin')
|
152
|
-
{ 'msg_info' => (t ('drgcms.not_authorized')) }
|
153
|
-
return render inline: result.to_json, formats: 'js'
|
152
|
+
return render inline: { 'msg_info' => (t ('drgcms.not_authorized')) }.to_json, formats: 'js'
|
154
153
|
end
|
155
154
|
# selected fields to hash
|
156
155
|
restore = params[:select].inject({}) {|r,v| r[v.first] = 0 if v.last == '1'; r}
|
@@ -305,11 +304,10 @@ def fill_login_data(user, remember_me)
|
|
305
304
|
session[:user_id] = user.id
|
306
305
|
session[:user_name] = user.name
|
307
306
|
session[:edit_mode] = 0
|
308
|
-
session[:user_roles] =
|
307
|
+
session[:user_roles] = []
|
309
308
|
# special for SUPERADMIN
|
310
309
|
sa = DcPolicyRole.find_by(system_name: 'superadmin')
|
311
310
|
if sa and (role = user.dc_user_roles.find_by(dc_policy_role_id: sa.id))
|
312
|
-
session[:user_roles] = []
|
313
311
|
session[:user_roles] << role.dc_policy_role_id
|
314
312
|
session[:edit_mode] = 2
|
315
313
|
return
|
@@ -328,9 +326,16 @@ def fill_login_data(user, remember_me)
|
|
328
326
|
# set edit_mode
|
329
327
|
# session[:edit_mode] = 1 if policy_role.has_cms_menu
|
330
328
|
session[:edit_mode] = 1 if policy_role.permission > 1
|
331
|
-
session[:user_roles] ||= [] #
|
332
329
|
session[:user_roles] << role.dc_policy_role_id
|
333
330
|
end
|
331
|
+
# Add default guest role if no role set
|
332
|
+
# This was previously in dc_user_can. I belive it should be here.
|
333
|
+
#TODO This might not be the best idea. Check in the future.
|
334
|
+
if session[:user_roles].size == 0
|
335
|
+
guest = DcUserRole.find_by(:system_name => 'guest')
|
336
|
+
session[:user_roles] << guest.id if guest
|
337
|
+
end
|
338
|
+
|
334
339
|
# Save remember me cookie if not CMS user and remember me is selected
|
335
340
|
if session[:edit_mode] == 0 and remember_me
|
336
341
|
cookies.signed[:remember_me] = { :value => user.id, :expires => 180.days.from_now}
|
data/app/forms/all_options.yml
CHANGED
@@ -135,7 +135,7 @@ form:
|
|
135
135
|
name: dc_site_id
|
136
136
|
type: select
|
137
137
|
multiple: true || 1
|
138
|
-
eval: dc_choices4('model','description_field_name','_id')
|
138
|
+
eval: "dc_choices4('model','description_field_name','_id',site: :with_nil)"
|
139
139
|
eval: ModelName.choices4_site
|
140
140
|
html:
|
141
141
|
include_blank: true
|
data/app/forms/dc_category.yml
CHANGED
data/app/forms/dc_page.yml
CHANGED
@@ -89,10 +89,16 @@ form:
|
|
89
89
|
include_blank: true
|
90
90
|
120:
|
91
91
|
name: kats
|
92
|
-
type: multitext_autocomplete
|
93
|
-
search: dc_category.name
|
92
|
+
# type: multitext_autocomplete
|
93
|
+
# search: dc_category.name
|
94
|
+
# html:
|
95
|
+
# size: 30
|
96
|
+
type: select
|
97
|
+
multiple: true
|
98
|
+
eval: "dc_choices4('DcCategory','name','_id',site: :with_nil)"
|
94
99
|
html:
|
95
|
-
|
100
|
+
include_blank: true
|
101
|
+
size: 4
|
96
102
|
|
97
103
|
2advanced:
|
98
104
|
10:
|
@@ -124,17 +124,82 @@ def dc_replace_in_design(opts={})
|
|
124
124
|
design.sub!(opts[:replace], opts[:with])
|
125
125
|
end
|
126
126
|
end
|
127
|
-
render(inline: design, layout:
|
127
|
+
render(inline: design, layout: nil)
|
128
128
|
end
|
129
129
|
|
130
130
|
########################################################################
|
131
|
-
#
|
131
|
+
# Used for designs with lots of common code and one (or more) part which differs.
|
132
|
+
# It will simply replace anchor code with value of variable.
|
133
|
+
#
|
134
|
+
# Example: As used in design. Backslashing < and % is important \<\%
|
135
|
+
# <% part = "<div class='some-class'>\<\%= dc_render(:my_renderer, method: 'render_method') \%\></div>" %>
|
136
|
+
# <%= dc_replace_in_design(piece: 'piece_name', replace: '[main]', with: part) %>
|
137
|
+
#
|
138
|
+
# Want to replace more than one part. Use array.
|
139
|
+
# <%= dc_replace_in_design(replace: ['[part1]','[part2]'], with: [part1, part2]) %>
|
140
|
+
#
|
141
|
+
# This helper is replacement for old 'script' method defined in dc_piece_renderer,
|
142
|
+
# but it uses design defined in site document if piece parameter is not set.
|
132
143
|
########################################################################
|
133
|
-
def
|
134
|
-
|
135
|
-
|
144
|
+
def dc_render_from_site(opts={})
|
145
|
+
design = opts[:piece] ? DcPiece.find(name: opts[:piece]).script : dc_get_site.design
|
146
|
+
layout = opts[:layout] || (dc_get_site.site_layout.size > 2 ? dc_get_site.site_layout : nil)
|
147
|
+
|
148
|
+
render(inline: design, layout: opts[:layout], with: opts[:with])
|
136
149
|
end
|
137
150
|
|
151
|
+
|
152
|
+
|
153
|
+
########################################################################
|
154
|
+
# Used for designs with lots of common code and one (or more) part which differs.
|
155
|
+
# Point is to define design once and replace some parts of design dinamically.
|
156
|
+
# Design may be defined in site and design doc defines only parts that vary
|
157
|
+
# from page to page.
|
158
|
+
#
|
159
|
+
# Example: As used in design.
|
160
|
+
# <%= dc_render_design_part(@main) %>
|
161
|
+
#
|
162
|
+
# main variable is defined in design body for example:
|
163
|
+
#
|
164
|
+
# @main = Proc.new {render partial: 'parts/home'}
|
165
|
+
#
|
166
|
+
# This helper is replacement dc_render_from_site method which will soon be deprecated.
|
167
|
+
########################################################################
|
168
|
+
def dc_render_design_part(part)
|
169
|
+
if part.nil?
|
170
|
+
''
|
171
|
+
elsif part.class == Proc
|
172
|
+
result = part.call
|
173
|
+
result.class == Array ? result.first : result
|
174
|
+
elsif part.class == String
|
175
|
+
eval part
|
176
|
+
else
|
177
|
+
part.to_s
|
178
|
+
end.html_safe
|
179
|
+
end
|
180
|
+
|
181
|
+
def dc_render_design(part)
|
182
|
+
dc_render_design_part(part)
|
183
|
+
end
|
184
|
+
|
185
|
+
########################################################################
|
186
|
+
# Helper for rendering top CMS menu when in editing mode
|
187
|
+
########################################################################
|
188
|
+
def dc_page_top()
|
189
|
+
if @design and !@design.rails_view.blank?
|
190
|
+
# Evaluate parameters in design body
|
191
|
+
eval(@design.body)
|
192
|
+
end
|
193
|
+
session[:edit_mode] > 0 ? render(partial: 'cmsedit/edit_stuff') : ''
|
194
|
+
end
|
195
|
+
|
196
|
+
########################################################################
|
197
|
+
# Helper for adding additional css and javascript code added by documents
|
198
|
+
# and renderers during page rendering.
|
199
|
+
########################################################################
|
200
|
+
def dc_page_bottom()
|
201
|
+
%Q[<style type="text/css">#{@css}</style>#{javascript_tag @js}].html_safe
|
202
|
+
end
|
138
203
|
############################################################################
|
139
204
|
# Creates title div for DRG CMS dialogs. Title may also contain pagination section on right side if
|
140
205
|
# result_set is provided as parameter.
|
@@ -818,8 +883,9 @@ end
|
|
818
883
|
# [model] String. Collection (table) name in lowercase format.
|
819
884
|
# [name] String. Field name containing description text.
|
820
885
|
# [id] String. Field name containing id field. Default is '_id'
|
821
|
-
# [options] Hash. Various options. Currently
|
822
|
-
# documents belonging to current site
|
886
|
+
# [options] Hash. Various options. Currently site: (:only, :with_nil, :all) is used.
|
887
|
+
# Will return only documents belonging to current site, also with site not defined,
|
888
|
+
# or all documents.
|
823
889
|
#
|
824
890
|
# Example (as used in forms):
|
825
891
|
# 50:
|
@@ -830,7 +896,11 @@ end
|
|
830
896
|
def dc_choices4(model, name, id='_id', options = {})
|
831
897
|
model = model.classify.constantize
|
832
898
|
qry = model.only(id, name)
|
833
|
-
|
899
|
+
if (param = options[:site])
|
900
|
+
sites = [dc_get_site.id] unless param == :all
|
901
|
+
sites << nil if param == :with_nil
|
902
|
+
qry = qry.in(dc_site_id: sites) if sites
|
903
|
+
end
|
834
904
|
qry = qry.and(active: true) if model.method_defined?(:active)
|
835
905
|
# qry = qry.sort(name => 1)
|
836
906
|
# choices = []
|
@@ -957,13 +1027,9 @@ end
|
|
957
1027
|
def dc_user_has_role( role, user=nil, roles=nil )
|
958
1028
|
roles = _origin.session[:user_roles] if roles.nil?
|
959
1029
|
user = _origin.session[:user_id] if user.nil?
|
960
|
-
return false if user.nil?
|
1030
|
+
return false if user.nil? or roles.nil?
|
961
1031
|
#
|
962
|
-
|
963
|
-
rol = role
|
964
|
-
role = DcPolicyRole.find_by(name: rol)
|
965
|
-
role = DcPolicyRole.find_by(system_name: rol) if role.nil?
|
966
|
-
end
|
1032
|
+
role = DcPolicyRole.get_role(role)
|
967
1033
|
return false if role.nil?
|
968
1034
|
# role is included in roles array
|
969
1035
|
roles.include?(role._id)
|
@@ -41,6 +41,7 @@ include DcApplicationHelper
|
|
41
41
|
# Defines renderer's class method
|
42
42
|
########################################################################
|
43
43
|
def layout_4print
|
44
|
+
return '' if @parent.params[:renderer].blank?
|
44
45
|
opts = @opts.dup
|
45
46
|
opts[:method] = @parent.params[:method]
|
46
47
|
klass = (@parent.params[:renderer] + '_renderer').classify
|
@@ -110,7 +110,7 @@ def link_4menu(item)
|
|
110
110
|
caption << ' '
|
111
111
|
end
|
112
112
|
# - in first place won't write caption text
|
113
|
-
caption = caption.html_safe + (item.caption[0] == '-' ? '' : item.caption )
|
113
|
+
caption = caption.html_safe + (item.caption[0] == '-' ? '' : item.caption.html_safe )
|
114
114
|
|
115
115
|
target = item.target.blank? ? nil : item.target
|
116
116
|
@parent.link_to(caption, link, {target: target})
|
data/app/models/dc_category.rb
CHANGED
@@ -53,16 +53,19 @@ class DcCategory
|
|
53
53
|
field :order, type: Integer, default: 0
|
54
54
|
field :created_by, type: BSON::ObjectId
|
55
55
|
field :updated_by, type: BSON::ObjectId
|
56
|
+
field :dc_site_id, type: BSON::ObjectId
|
56
57
|
|
57
58
|
validates :name, :presence => true
|
58
59
|
|
59
60
|
index name: 1
|
60
61
|
index ctype: 1
|
62
|
+
index site_id: 1
|
61
63
|
|
62
64
|
#########################################################################
|
63
65
|
# Returns all values where parent value is nil (top level parent).
|
64
66
|
#########################################################################
|
65
|
-
|
66
|
-
|
67
|
-
|
67
|
+
def self.values_for_parent #:nodoc:
|
68
|
+
where(parent: nil).sort(name: 1).inject([]) {|r,v| r << [v.name, v._id]}
|
69
|
+
end
|
70
|
+
|
68
71
|
end
|
@@ -58,4 +58,16 @@ def self.choices4_roles
|
|
58
58
|
where(active: true).order_by(name: 1).inject([]) { |r,role| r << [ role.name, role._id] }
|
59
59
|
end
|
60
60
|
|
61
|
+
########################################################################
|
62
|
+
# Search for role when role parameter is String.
|
63
|
+
########################################################################
|
64
|
+
def self.get_role(role)
|
65
|
+
if role.class == String
|
66
|
+
rol = role
|
67
|
+
role = find_by(name: rol) || find_by(system_name: rol)
|
68
|
+
end
|
69
|
+
role
|
70
|
+
end
|
71
|
+
|
72
|
+
|
61
73
|
end
|
@@ -468,7 +468,7 @@ def render
|
|
468
468
|
link = @parent.link_to(@parent.fa_icon('remove lg', class: 'dc-animate dc-red'), '#',
|
469
469
|
onclick: "$('##{rec.id}').hide(); var v = $('##{record}_#{@yaml['name']}_#{rec.id}'); v.val(\"-\" + v.val());return false;")
|
470
470
|
field = @parent.hidden_field(record, "#{@yaml['name']}_#{rec.id}", value: element)
|
471
|
-
"<div id=\"#{rec.id}\" style=\"padding:2px;\">#{link} #{rec
|
471
|
+
"<div id=\"#{rec.id}\" style=\"padding:2px;\">#{link} #{rec.send(field_name)}<br>#{field}</div>"
|
472
472
|
else
|
473
473
|
'** error **'
|
474
474
|
end
|
@@ -650,6 +650,19 @@ def render
|
|
650
650
|
self
|
651
651
|
end
|
652
652
|
|
653
|
+
###########################################################################
|
654
|
+
# Return value.
|
655
|
+
###########################################################################
|
656
|
+
def self.get_data(params, name)
|
657
|
+
if params['record'][name].class == Array
|
658
|
+
params['record'][name].delete_if {|e| e.blank? }
|
659
|
+
return nil if params['record'][name].size == 0
|
660
|
+
# convert to BSON objects
|
661
|
+
return params['record'][name].map{ |e| BSON::ObjectId.from_string(e) }
|
662
|
+
end
|
663
|
+
params['record'][name]
|
664
|
+
end
|
665
|
+
|
653
666
|
end
|
654
667
|
|
655
668
|
###########################################################################
|
@@ -1136,7 +1149,7 @@ def render
|
|
1136
1149
|
# Found value to be written in field
|
1137
1150
|
if value
|
1138
1151
|
record = t.find(value)
|
1139
|
-
value_displayed = record
|
1152
|
+
value_displayed = record.send(ret_name) if record
|
1140
1153
|
end
|
1141
1154
|
# return if readonly
|
1142
1155
|
return ro_standard(value_displayed) if @readonly
|
@@ -391,6 +391,7 @@ en:
|
|
391
391
|
order: Order
|
392
392
|
parent: Parent
|
393
393
|
active: Active
|
394
|
+
dc_site_id: Valid for site
|
394
395
|
updated_at: Spremenjen
|
395
396
|
|
396
397
|
dc_mail:
|
@@ -777,6 +778,7 @@ en:
|
|
777
778
|
order: Additional order, which can be used for sorting.
|
778
779
|
parent: Parent category. Leave blank if this is top level category.
|
779
780
|
active: Category is active.
|
781
|
+
dc_site_id: Category is valid only for site
|
780
782
|
updated_at: Last update
|
781
783
|
|
782
784
|
dc_mail:
|
@@ -396,6 +396,7 @@ sl:
|
|
396
396
|
order: Zaporedje
|
397
397
|
parent: Nadrejeni
|
398
398
|
active: Aktiven
|
399
|
+
dc_site_id: Spletišče
|
399
400
|
updated_at: Spremenjen
|
400
401
|
|
401
402
|
dc_mail:
|
@@ -790,6 +791,7 @@ sl:
|
|
790
791
|
order: Zaporedje, ki se lahko uporabi pri grupiranju člankov.
|
791
792
|
parent: Nadrejena kategorija. Pustite prazno če je to najvišja kategorija.
|
792
793
|
active: Aktivna
|
794
|
+
dc_site_id: Kategorija velja za stran
|
793
795
|
updated_at: Podatki so bili zadnjič spremenjeni
|
794
796
|
|
795
797
|
dc_mail:
|
data/drg_cms.gemspec
CHANGED
@@ -14,17 +14,18 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.homepage = "http://www.drgcms.org"
|
15
15
|
s.summary = "DRG CMS: Rapid web application development tool for Ruby, Rails and MongoDB"
|
16
16
|
s.description = "DRG CMS can be used for rapid building of complex, data-entry intensive web sites as well as building your in-house private cloud applications."
|
17
|
-
s.license = "MIT
|
17
|
+
s.license = "MIT"
|
18
18
|
s.files = Dir["{app,config,db,lib}/**/*"] + ["MIT-LICENSE", "Rakefile", "README.md", "History.log", "drg_cms.gemspec"]
|
19
19
|
s.test_files = Dir["test/**/*"]
|
20
20
|
|
21
21
|
s.add_dependency 'rails', '~> 4'
|
22
22
|
s.add_dependency 'jquery-rails'
|
23
|
-
s.add_dependency 'jquery-ui-rails'
|
23
|
+
s.add_dependency 'jquery-ui-rails', '~> 5'
|
24
|
+
s.add_dependency 'non-stupid-digest-assets'
|
24
25
|
|
25
26
|
s.add_dependency 'bcrypt' #, '~> 3.0.0'
|
26
|
-
s.add_dependency '
|
27
|
-
s.add_dependency '
|
27
|
+
s.add_dependency 'mongoid', '~> 5'
|
28
|
+
s.add_dependency 'mongo_session_store-rails4'
|
28
29
|
s.add_dependency 'kaminari'
|
29
30
|
s.add_dependency 'font-awesome-rails'
|
30
31
|
s.add_dependency 'sort_alphabetical'
|
data/lib/drg_cms/version.rb
CHANGED
data/lib/tasks/dc_cleanup.rake
CHANGED
@@ -46,6 +46,22 @@ namespace :drg_cms do
|
|
46
46
|
DcSite.collection.database.command(eval: "db.runCommand ( { compact: 'sessions' } )" )
|
47
47
|
end
|
48
48
|
|
49
|
+
###########################################################################
|
50
|
+
desc 'Clears mongodb session documents created by web robots'
|
51
|
+
task :clear_sessions_from_robots, [:name] => :environment do |t, args|
|
52
|
+
# This should remove all sessions documents created by web robots
|
53
|
+
# ActionDispatch::Session::MongoidStore::Session.where('$where' => 'this.created_at == this.updated_at').limit(1000).each do |doc|
|
54
|
+
n = 0
|
55
|
+
ActionDispatch::Session::MongoidStore::Session.batch_size(1000).all.each do |doc|
|
56
|
+
if (doc.created_at == doc.updated_at)
|
57
|
+
doc.delete
|
58
|
+
p "Deleted #{n}" if (n+=1)%1000 == 0
|
59
|
+
end
|
60
|
+
end
|
61
|
+
p "Deleted #{n}"
|
62
|
+
DcSite.collection.database.command(eval: "db.runCommand ( { compact: 'sessions' } )" )
|
63
|
+
end
|
64
|
+
|
49
65
|
###########################################################################
|
50
66
|
desc 'Removes all statistics from dc_visits up to specified date and save them to visits_date.json.'
|
51
67
|
task :clear_visits, [:name] => :environment do |t, args|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: drg_cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.10.
|
4
|
+
version: 0.5.10.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Damjan Rems
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -42,18 +42,18 @@ dependencies:
|
|
42
42
|
name: jquery-ui-rails
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '5'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '5'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: non-stupid-digest-assets
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: bcrypt
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
@@ -82,6 +82,20 @@ dependencies:
|
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: mongoid
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '5'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '5'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: mongo_session_store-rails4
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - ">="
|
@@ -349,7 +363,7 @@ files:
|
|
349
363
|
- test/test_helper.rb
|
350
364
|
homepage: http://www.drgcms.org
|
351
365
|
licenses:
|
352
|
-
- MIT
|
366
|
+
- MIT
|
353
367
|
metadata: {}
|
354
368
|
post_install_message:
|
355
369
|
rdoc_options: []
|