drg_cms 0.4.39 → 0.4.53

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +49 -0
  3. data/app/assets/images/drg_cms/file_manager.png +0 -0
  4. data/app/assets/javascripts/drg_cms/drg_cms.js +8 -8
  5. data/app/assets/stylesheets/drg_cms/drg_cms.css +22 -20
  6. data/app/controllers/cmsedit_controller.rb +170 -114
  7. data/app/controllers/dc_application_controller.rb +142 -56
  8. data/app/controllers/dc_common_controller.rb +56 -34
  9. data/app/controllers/dc_main_controller.rb +1 -4
  10. data/app/controllers/drgcms_controls/dc_page_controls.rb +3 -0
  11. data/app/forms/all_options.yml +3 -0
  12. data/app/forms/cms_menu.yml +100 -117
  13. data/app/forms/dc_design.yml +1 -1
  14. data/app/forms/dc_ident.yml +37 -0
  15. data/app/forms/dc_menu_item.yml +1 -1
  16. data/app/forms/dc_permission.yml +1 -1
  17. data/app/forms/dc_site.yml +4 -0
  18. data/app/helpers/cmsedit_helper.rb +44 -80
  19. data/app/helpers/dc_ad_renderer.rb +27 -15
  20. data/app/helpers/dc_application_helper.rb +433 -196
  21. data/app/helpers/dc_big_menu_renderer.rb +40 -40
  22. data/app/helpers/dc_captcha_renderer.rb +38 -25
  23. data/app/helpers/dc_common_renderer.rb +15 -48
  24. data/app/helpers/dc_menu_renderer.rb +30 -20
  25. data/app/helpers/dc_page_renderer.rb +14 -18
  26. data/app/helpers/dc_part_renderer.rb +45 -16
  27. data/app/helpers/dc_piece_renderer.rb +23 -29
  28. data/app/helpers/dc_poll_renderer.rb +31 -20
  29. data/app/helpers/dc_renderer.rb +5 -4
  30. data/app/helpers/dc_simple_menu_renderer.rb +90 -68
  31. data/app/models/{__dc_global_data.rb → __dc_stat.rb} +20 -21
  32. data/app/models/dc_ad.rb +13 -1
  33. data/app/models/dc_ad_stat.rb +6 -0
  34. data/app/models/dc_big_menu.rb +15 -2
  35. data/app/models/dc_big_table.rb +27 -4
  36. data/app/models/dc_big_table_locale.rb +7 -0
  37. data/app/models/dc_big_table_value.rb +7 -0
  38. data/app/models/dc_category.rb +9 -3
  39. data/app/models/dc_design.rb +50 -0
  40. data/app/models/dc_dummy.rb +41 -1
  41. data/app/models/dc_folder_permission.rb +9 -2
  42. data/app/models/{dc_global_data.rb → dc_ident.rb} +20 -22
  43. data/app/models/dc_journal.rb +9 -1
  44. data/app/models/dc_key_value_store.rb +41 -4
  45. data/app/models/dc_link.rb +7 -0
  46. data/app/models/dc_menu.rb +20 -3
  47. data/app/models/dc_menu_item.rb +7 -0
  48. data/app/models/dc_page.rb +31 -12
  49. data/app/models/dc_part.rb +34 -4
  50. data/app/models/dc_permission.rb +32 -12
  51. data/app/models/dc_piece.rb +32 -4
  52. data/app/models/dc_policy.rb +17 -11
  53. data/app/models/dc_policy_role.rb +12 -7
  54. data/app/models/dc_policy_rule.rb +32 -4
  55. data/app/models/dc_poll.rb +8 -0
  56. data/app/models/dc_poll_item.rb +6 -0
  57. data/app/models/dc_simple_menu.rb +18 -3
  58. data/app/models/dc_simple_menu_item.rb +20 -2
  59. data/app/models/dc_site.rb +13 -3
  60. data/app/models/dc_stat.rb +8 -1
  61. data/app/models/dc_user.rb +18 -2
  62. data/app/models/dc_user_role.rb +7 -0
  63. data/app/models/dc_visit.rb +5 -0
  64. data/app/{helpers → models}/drgcms_form_field.rb +171 -73
  65. data/app/views/__dc_at_the_beginning/create.html.erb +9 -0
  66. data/app/views/__dc_at_the_beginning/index.html.erb +19 -0
  67. data/app/views/cmsedit/_edit_stuff.html.erb +2 -0
  68. data/app/views/cmsedit/_form.html.erb +0 -1
  69. data/app/views/dc_mail/subscribe.html.erb +0 -0
  70. data/config/initializers/kaminari_patch.rb +5 -4
  71. data/config/locales/drgcms_en.yml +4 -0
  72. data/config/locales/drgcms_sl.yml +1 -0
  73. data/config/locales/models_en.yml +14 -3
  74. data/config/locales/models_sl.yml +13 -4
  75. data/drg_cms.gemspec +4 -4
  76. data/lib/drg_cms.rb +37 -8
  77. data/lib/drg_cms/engine.rb +2 -2
  78. data/lib/drg_cms/version.rb +3 -2
  79. data/lib/tasks/at_the_beginning.yml +0 -0
  80. data/lib/tasks/dc_at_the_beginning.rake +118 -0
  81. data/lib/tasks/dc_cleanup.rake +19 -7
  82. data/lib/tasks/log_statistics.rb +66 -0
  83. data/lib/tasks/site_statistics.rake +29 -12
  84. data/test/dummy/app/controllers/application_controller.rb +1 -1
  85. data/test/dummy/app/helpers/application_helper.rb +1 -1
  86. metadata +15 -26
  87. data/README.rdoc +0 -3
  88. data/app/controllers/dc_at_the_beginning_controller.rb +0 -120
  89. data/app/controllers/dc_mail_controller.rb +0 -89
  90. data/app/forms/dc_forum_cat.yml +0 -54
  91. data/app/forms/dc_forum_forum.yml +0 -53
  92. data/app/forms/dc_forum_msg.yml +0 -124
  93. data/app/forms/dc_forum_privmsg.yml +0 -125
  94. data/app/forms/dc_forum_topic.yml +0 -131
  95. data/app/forms/dc_mail.yml +0 -88
  96. data/app/forms/dc_mail_address.yml +0 -56
  97. data/app/forms/dc_mail_list.yml +0 -44
  98. data/app/forms/dc_mail_list_member.yml +0 -42
  99. data/app/helpers/dc_mail_renderer.rb +0 -76
  100. data/app/models/dc_mail.rb +0 -64
  101. data/app/models/dc_mail_address.rb +0 -69
  102. data/app/models/dc_mail_list.rb +0 -48
  103. data/app/models/dc_mail_list_member.rb +0 -34
  104. data/app/models/dc_sendmail.rb +0 -48
@@ -21,24 +21,23 @@
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
23
 
24
- ###########################################################################
25
- # Based on knowledge found here
26
- # http://jolierouge.net/2011/05/ruby-on-rails-session-in-models-not-so-evil-actually/
27
- ###########################################################################
28
- class DcGlobalData
29
- # This is a Locator/Broker class for global data that
30
- # Needs to be accessible everywhere!
31
- def self.method_missing(sym, *args, &block)
32
- @@attrs ||= {}
33
- sym = sym.to_s
34
- if sym.include? "=" then
35
- @@attrs[sym.gsub('=','')] = args.first
36
- else
37
- # if @@attrs[sym].class == Hash then
38
- # return ValueProxy.new(@@attrs[sym])
39
- # else
40
- return @@attrs[sym]
41
- # end
42
- end
43
- end
44
- end
24
+ ########################################################################
25
+ # Mongoid::Document model for dc_stat documents.
26
+ #
27
+ #
28
+ ########################################################################
29
+
30
+ class DcStat #:nodoc:
31
+ include Mongoid::Document
32
+ include Mongoid::Timestamps
33
+
34
+ field :key1, type: String
35
+ field :key2, type: String
36
+ field :key3, type: String
37
+ field :value, type: Integer, default: 0
38
+ field :text1, type: String
39
+ field :text2, type: String
40
+ field :link, type: String
41
+
42
+ index( { key1: 1, key2: 1, key3: 1 } )
43
+ end
@@ -21,6 +21,15 @@
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
23
 
24
+ ##########################################################################
25
+ # Mongoid::Document model for dc_ads collection.
26
+ #
27
+ # Ads can be defined as picture file, flash file or script.
28
+ #
29
+ # More than one ad can be shown on the same place of design. They are grouped by
30
+ # position field, have priority, valid time period and can be limited by number of
31
+ # clicks or displays.
32
+ ##########################################################################
24
33
  class DcAd
25
34
  include Mongoid::Document
26
35
  include Mongoid::Timestamps
@@ -31,7 +40,7 @@ class DcAd
31
40
  field :file, type: String, default: ''
32
41
  field :script, type: String, default: ''
33
42
  field :link, type: String, default: ''
34
- field :link_target, type: String, default: ''
43
+ field :link_target, type: String, default: ''
35
44
  field :height, type: Integer
36
45
  field :width, type: Integer
37
46
  field :valid_from, type: DateTime
@@ -49,4 +58,7 @@ class DcAd
49
58
  belongs_to :dc_site
50
59
 
51
60
  index( { dc_site: 1, position: 1 } )
61
+
62
+ validates :position, presence: true
63
+ validates :description, presence: true
52
64
  end
@@ -21,6 +21,12 @@
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
23
 
24
+ ##########################################################################
25
+ # Mongoid::Document model for dc_ad_stats collection.
26
+ #
27
+ # Documents in this collection holds data about displays and clicks on ads which
28
+ # can be further processed for statistical purposes.
29
+ ##########################################################################
24
30
  class DcAdStat
25
31
  include Mongoid::Document
26
32
  include Mongoid::Timestamps
@@ -20,6 +20,15 @@
20
20
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
+
24
+ ##########################################################################
25
+ # Mongoid::Document model for dc_big_menus collection.
26
+ #
27
+ # This menu system is still experimental. It can be used for sites with menu
28
+ # which has many sub menus each linked to its own document. Unlike other menu
29
+ # models which provide menu in single document (with embedded documents as sub menus) this
30
+ # menu system provides one document for every menu option.
31
+ ##########################################################################
23
32
  class DcBigMenu
24
33
  include Mongoid::Document
25
34
  include Mongoid::Timestamps
@@ -41,7 +50,9 @@ class DcBigMenu
41
50
  index( { dc_site_id: 1, parent: 1 } )
42
51
  index( { page_id: 1 } )
43
52
 
44
- ###########################################################################
53
+ ###########################################################################
54
+ # Process submenu. Subroutine of choices4_menu.
55
+ ###########################################################################
45
56
  def self.add_sub_menu(site, parent, rez, level)
46
57
  #TODO Make this faster
47
58
  only(:_id,:parent,:caption).where(dc_site_id: site._id, parent: parent).sort( order: 1).to_a.each do |m|
@@ -50,7 +61,9 @@ def self.add_sub_menu(site, parent, rez, level)
50
61
  end
51
62
  end
52
63
 
53
- ###########################################################################
64
+ ###########################################################################
65
+ # Returns available menu choices for selecting menu
66
+ ###########################################################################
54
67
  def self.choices4_menu(site)
55
68
  rez = []
56
69
  self.add_sub_menu(site, nil, rez, -1)
@@ -20,6 +20,29 @@
20
20
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
+
24
+ ##########################################################################
25
+ # Mongoid::Document model for dc_big_table collection.
26
+ #
27
+ # Big table is meant to be a common space for defining default choices for select fields on forms.
28
+ # Documents are organized as key-value pair with the difference that values for the key can
29
+ # be defined for every site and can also be localized.
30
+ #
31
+ # Usage (as used in forms):
32
+ #
33
+ # In the example administrator may help user by providing values that can be used
34
+ # on DcAd document position field by defining them in ads-position key of big table.
35
+ # Example is from dc_ads.yml form.
36
+ #
37
+ # 10:
38
+ # name: position
39
+ # type: text_with_select
40
+ # eval: dc_big_table 'ads-positions'
41
+ # html:
42
+ # size: 20
43
+ #
44
+ # dc_big_table collection embeds many DcBigTableValue documents.
45
+ ##########################################################################
23
46
  class DcBigTable
24
47
  include Mongoid::Document
25
48
  include Mongoid::Timestamps
@@ -34,17 +57,17 @@ class DcBigTable
34
57
 
35
58
  embeds_many :dc_big_table_values
36
59
 
37
- index( { name: 1, site_id: 1 } )
60
+ index( { key: 1, site_id: 1 } )
38
61
 
39
62
  validates :key, presence: true
40
63
  validates :description, presence: true
41
64
 
42
65
  ########################################################################
43
- #
66
+ # Will return possible choices for specified key prepared for usega in select input field.
44
67
  ########################################################################
45
- def self.choices4(name, site, locale=nil)
68
+ def self.choices4(key, site, locale=nil)
46
69
  a = []
47
- r = find(name: name, site: site)
70
+ r = find(key: key, site: site)
48
71
  if r
49
72
  r.dc_big_table_values.each do |v|
50
73
  desc = v.description
@@ -20,6 +20,13 @@
20
20
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
+
24
+ #####################################################################
25
+ # Mongoid::Document model for dc_big_table_locale embedded document.
26
+ #
27
+ # Documents are embedded in DcBigTableValue documents. Every value defined in
28
+ # DcBigTableValue parent document can have its locale translation.
29
+ #####################################################################
23
30
  class DcBigTableLocale
24
31
  include Mongoid::Document
25
32
  include Mongoid::Timestamps
@@ -20,6 +20,13 @@
20
20
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
+
24
+ #####################################################################
25
+ # Mongoid::Document model for dc_big_table_values embedded documents.
26
+ #
27
+ # Documents are embedded in DcBigTable document. Every value defined has its own description,
28
+ # which can further be translated in embedded DcBigTableLocale documents.
29
+ #####################################################################
23
30
  class DcBigTableValue
24
31
  include Mongoid::Document
25
32
  include Mongoid::Timestamps
@@ -20,6 +20,13 @@
20
20
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
+
24
+ #####################################################################
25
+ # Mongoid::Document model for dc_categories collection.
26
+ #
27
+ # Categories are used on DcPage documents for grouping documents. Categorization
28
+ # is most useful for grouping news, blog entries ...
29
+ #####################################################################
23
30
  class DcCategory
24
31
  include Mongoid::Document
25
32
  include Mongoid::Timestamps
@@ -39,10 +46,9 @@ class DcCategory
39
46
  index ctype: 1
40
47
 
41
48
  #########################################################################
42
- # returns all possible parent values
49
+ # Returns all values where parent value is nil (top level parent).
43
50
  #########################################################################
44
-
45
- def self.values_for_parent
51
+ def self.values_for_parent #:nodoc:
46
52
  where(parent: nil).sort(name: 1).inject([]) {|r,v| r << [v.name, v._id]}
47
53
  end
48
54
  end
@@ -20,6 +20,55 @@
20
20
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
+
24
+ ########################################################################
25
+ # Mongoid::Document model for dc_designs collection.
26
+ #
27
+ # Designs are essential parts of DRG CMS. Every DcPage document must have its design document defined.
28
+ # If DcPage documents are anchors for url addresses, DcDesign documents define how
29
+ # will page data be rendered in browser.
30
+ #
31
+ # DcDesign documents define what would normally be written into Rails view file. The code
32
+ # is saved in the body field of DcDesign document. If you prefere Rails way, enter view
33
+ # file name into rails_view field and put your code into file into views directory
34
+ # (ex. designs/home_page for ../views/designs/home_page.html.erb file).
35
+ #
36
+ # If you choose to save code to Rails view file you must add one top and bottom line to every source file.
37
+ # Top line will provide CMS edit menu, bottom line will provide additional CSS and javascript code
38
+ # scooped when renderers are called.
39
+ #
40
+ # Example (as written in body of dc_design):
41
+ # <div id="site">
42
+ # <div id="site-top-bg">
43
+ # <div id="site-top"><div id="logo"><%= dc_render(:dc_piece, name: 'site-top') %></div>
44
+ # <div id="login"><%= dc_render(:common, method: 'login') %></div>
45
+ # </div>
46
+ # <%= dc_render(:dc_menu, name: 'test-menu') %>
47
+ # </div>
48
+ #
49
+ # <div id="page"><%= dc_render(:dc_page) %></div>
50
+ # </div>
51
+ # <div id="site-bottom"><%= dc_render(:dc_piece, name: 'site-bottom') %></div>
52
+ #
53
+ # Example (as written in Rails view file):
54
+ #
55
+ # <!-- Pay attention on lines added at the top and bottom of file -->
56
+ # <%= render partial: 'cmsedit/edit_stuff' if session[:edit_mode] > 0 %>
57
+ #
58
+ # <div id="site">
59
+ # <div id="site-top-bg">
60
+ # <div id="site-top"><div id="logo"><%= dc_render(:dc_piece, name: 'site-top') %></div>
61
+ # <div id="login"><%= dc_render(:common, method: 'login') %></div>
62
+ # </div>
63
+ # <%= dc_render(:dc_menu, name: 'test-menu') %>
64
+ # </div>
65
+ #
66
+ # <div id="page"><%= dc_render(:dc_page) %></div>
67
+ # </div>
68
+ # <div id="site-bottom"><%= dc_render(:dc_piece, name: 'site-bottom') %></div>
69
+ #
70
+ # <style type="text/css"><%= @css.html_safe %></style><%= javascript_tag @js %>
71
+ ########################################################################
23
72
  class DcDesign
24
73
  include Mongoid::Document
25
74
  include Mongoid::Timestamps
@@ -35,6 +84,7 @@ class DcDesign
35
84
  field :updated_by, type: BSON::ObjectId
36
85
 
37
86
  embeds_many :dc_parts
87
+ # embeds_many :dc_parts, as: :dc_parts
38
88
 
39
89
  index( { name: 1 }, { unique: true } )
40
90
 
@@ -21,10 +21,50 @@
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
23
 
24
+ ########################################################################
25
+ # Mongoid::Document model for dc_dummy collection.
26
+ #
27
+ # Which is not collection at all. DcDummy model is used for entering data on forms
28
+ # where data will not be saved to database but will instead be processed by custom
29
+ # made routine. For example entering begin and end date on report.
30
+ #
31
+ # Example (as used in forms):
32
+ #
33
+ # table: dc_dummy
34
+ # title: Enter time period
35
+ #
36
+ # form:
37
+ # actions:
38
+ # 1:
39
+ # type: ajax
40
+ # method: post
41
+ # controller: reports
42
+ # action: do_some_report
43
+ # caption: Run report
44
+ #
45
+ # fields:
46
+ # 10:
47
+ # name: date_start
48
+ # type: date_picker
49
+ # caption: Start date
50
+ # 20:
51
+ # name: date_end
52
+ # type: date_picker
53
+ # caption: End date
54
+ #
55
+ # And suppose your report saved data to file named public/report.pdf. Put this line at the end of do_some_report
56
+ # action:
57
+ # render inline: { :window_report => '/report.pdf' }.to_json, formats: 'js'
58
+ #
59
+ # As result report.pdf file will be opened in new browser window.
60
+ ########################################################################
24
61
  class DcDummy
25
62
  include Mongoid::Document
26
63
 
27
- def method_missing(m, *args, &block)
64
+ ########################################################################
65
+ # Ignore errors.
66
+ ########################################################################
67
+ def method_missing(m, *args, &block) #:nodoc:
28
68
  nil
29
69
  end
30
70
  end
@@ -22,7 +22,14 @@
22
22
  #++
23
23
 
24
24
  #########################################################################
25
- #
25
+ # Mongoid::Document model for dc_folder_permissions collection.
26
+ #
27
+ # Similar to DcPermission DcFolderPermission model defines documents
28
+ # for accessing file system. Permissions defined on a parent folder automatically
29
+ # apply to all folders below unless folder on lower level has its own permission document.
30
+ #
31
+ # At least one document must exist for file manager to work. Default document
32
+ # usually defines that admin role has ADMINISTRATOR rights on top level folder.
26
33
  #########################################################################
27
34
  class DcFolderPermission
28
35
  include Mongoid::Document
@@ -30,7 +37,7 @@ include Mongoid::Timestamps
30
37
 
31
38
  field :folder_name, type: String
32
39
  field :inherited, type: Boolean, default: true
33
- field :is_default, type: Boolean, default: false
40
+ #field :is_default, type: Boolean, default: false
34
41
  field :active, type: Boolean, default: true
35
42
 
36
43
  embeds_many :dc_policy_rules
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2012+ Damjan Rems
2
+ # Copyright (c) 2015+ Damjan Rems
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -21,24 +21,22 @@
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
23
 
24
- ###########################################################################
25
- # Based on knowledge found here
26
- # http://jolierouge.net/2011/05/ruby-on-rails-session-in-models-not-so-evil-actually/
27
- ###########################################################################
28
- class DcGlobalData
29
- # This is a Locator/Broker class for global data that
30
- # Needs to be accessible everywhere!
31
- def self.method_missing(sym, *args, &block)
32
- @@attrs ||= {}
33
- sym = sym.to_s
34
- if sym.include? "=" then
35
- @@attrs[sym.gsub('=','')] = args.first
36
- else
37
- # if @@attrs[sym].class == Hash then
38
- # return ValueProxy.new(@@attrs[sym])
39
- # else
40
- return @@attrs[sym]
41
- # end
42
- end
43
- end
44
- end
24
+ ########################################################################
25
+ # Mongoid::Document model for dc_idents emdedded documents.
26
+ #
27
+ # dc_idents are similar to mongoid hash structure and can be used for saveing
28
+ # key/value object. Fact is that I have overlooked the existance of MongoDB Hash field type
29
+ # and this structure will be used until drg_forms_field which will use Hash field type is created.
30
+ #########################################################################
31
+ class DcIdent
32
+ include Mongoid::Document
33
+ include Mongoid::Timestamps
34
+
35
+ field :key, type: String
36
+ field :value, type: String
37
+
38
+ embedded_in :idents, polymorphic: true
39
+
40
+ validates :key, presence: true
41
+ validates :value, presence: true
42
+ end
@@ -21,6 +21,14 @@
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
23
 
24
+ #########################################################################
25
+ # Mongoid::Document model for dc_journals collection.
26
+ #
27
+ # dc_journals collections saves all data that has been updated through cmsedit
28
+ # controller. It saves old and new values of changed fields and can be used for
29
+ # instant restore of single document field or tracking who and when updated
30
+ # particular document.
31
+ #########################################################################
24
32
  class DcJournal
25
33
  include Mongoid::Document
26
34
 
@@ -32,7 +40,7 @@ class DcJournal
32
40
  field :ids, type: String
33
41
  field :ip, type: String
34
42
  field :time, type: DateTime
35
- field :diff, type: String
43
+ field :diff, type: String
36
44
 
37
45
  index( { user_id: 1, time: -1 } )
38
46
  index( { time: 1 } )