drg_cms 0.4.39 → 0.4.53

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.
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 } )