drg_cms 0.5.50.2 → 0.5.51.1

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 (61) hide show
  1. checksums.yaml +4 -4
  2. data/History.log +47 -0
  3. data/README.md +2 -1
  4. data/app/assets/images/32px.png +0 -0
  5. data/app/assets/images/drg_cms/32px.png +0 -0
  6. data/app/assets/images/drg_cms/40px.png +0 -0
  7. data/app/assets/images/drg_cms/throbber.gif +0 -0
  8. data/app/assets/images/throbber.gif +0 -0
  9. data/app/assets/javascripts/drg_cms/drg_cms.js +3 -3
  10. data/app/assets/javascripts/drg_cms/jstree.min.js +6 -0
  11. data/app/assets/javascripts/drg_cms_cms.js +2 -1
  12. data/app/assets/stylesheets/drg_cms/drg_cms.css +9 -0
  13. data/app/assets/stylesheets/drg_cms/jstree.css +1108 -0
  14. data/app/assets/stylesheets/drg_cms_cms.css +1 -0
  15. data/app/controllers/cmsedit_controller.rb +14 -12
  16. data/app/controllers/dc_application_controller.rb +2 -2
  17. data/app/controllers/dc_common_controller.rb +15 -20
  18. data/app/controllers/dc_page_control.rb +8 -0
  19. data/app/controllers/design_element_settings_control.rb +135 -0
  20. data/app/forms/all_options.yml +7 -1
  21. data/app/forms/cms_menu.yml +1 -1
  22. data/app/forms/dc_browse_fields.yml +1 -1
  23. data/app/forms/dc_browse_models.yml +2 -2
  24. data/app/forms/dc_category.yml +4 -4
  25. data/app/forms/dc_menu.yml +6 -0
  26. data/app/forms/dc_page.yml +22 -12
  27. data/app/forms/dc_simple_menu.yml +6 -0
  28. data/app/forms/dc_site.yml +6 -0
  29. data/app/helpers/cmsedit_helper.rb +12 -8
  30. data/app/helpers/dc_application_helper.rb +79 -18
  31. data/app/helpers/dc_menu_renderer.rb +6 -1
  32. data/app/helpers/dc_part_renderer.rb +1 -1
  33. data/app/models/concerns/dc_page_concern.rb +133 -0
  34. data/app/models/concerns/dc_piece_concern.rb +57 -0
  35. data/app/models/concerns/dc_policy_rule_concern.rb +78 -0
  36. data/app/models/concerns/dc_site_concern.rb +94 -0
  37. data/app/models/concerns/dc_user_concern.rb +130 -0
  38. data/app/models/dc_ad.rb +1 -1
  39. data/app/models/dc_big_menu.rb +1 -1
  40. data/app/models/dc_category.rb +19 -4
  41. data/app/models/dc_dummy.rb +3 -2
  42. data/app/models/dc_link.rb +1 -1
  43. data/app/models/dc_memory.rb +127 -0
  44. data/app/models/dc_menu.rb +69 -3
  45. data/app/models/dc_menu_item.rb +17 -0
  46. data/app/models/dc_page.rb +0 -106
  47. data/app/models/dc_part.rb +0 -1
  48. data/app/models/dc_piece.rb +0 -35
  49. data/app/models/dc_policy_rule.rb +0 -56
  50. data/app/models/dc_simple_menu.rb +36 -0
  51. data/app/models/dc_simple_menu_item.rb +0 -0
  52. data/app/models/dc_site.rb +1 -71
  53. data/app/models/dc_user.rb +0 -108
  54. data/app/models/drgcms_form_fields.rb +187 -26
  55. data/app/views/cmsedit/_result.html.erb +3 -4
  56. data/config/locales/models_en.yml +11 -3
  57. data/config/locales/models_sl.yml +7 -0
  58. data/lib/drg_cms.rb +1 -0
  59. data/lib/drg_cms/version.rb +1 -1
  60. data/lib/tasks/log_statistics.rb +14 -8
  61. metadata +16 -2
@@ -56,10 +56,11 @@ class DcMenu
56
56
  field :created_by, type: BSON::ObjectId
57
57
  field :updated_by, type: BSON::ObjectId
58
58
 
59
- index( { name: 1 }, { unique: true } )
60
-
59
+ belongs_to :dc_site
61
60
  embeds_many :dc_menu_items
62
61
 
62
+ index( { name: 1 }, { unique: true } )
63
+
63
64
  validates :name, :length => { :minimum => 4 }
64
65
  validates :name, uniqueness: true
65
66
  validates_length_of :description, minimum: 10
@@ -77,7 +78,7 @@ class DcMenu
77
78
  # Returns:
78
79
  # Array. Of choices prepared for select input field.
79
80
  #######################################################################
80
- def self.choices4_menu(site)
81
+ def self.choices4_menu(site)
81
82
  rez = []
82
83
  menus = (site.menu_name.blank? ? all : where(name: site.menu_name)).to_a
83
84
  menus.each do |menu|
@@ -88,5 +89,70 @@ class DcMenu
88
89
  end
89
90
  rez
90
91
  end
92
+
93
+ #######################################################################
94
+ # Subroutine of choices4_menu_as_tree
95
+ #######################################################################
96
+ def self.do_sub_menu(menus, parent, ids) #:nodoc:
97
+ result = []
98
+ menus.each do |item|
99
+ long_id = "#{ids};#{item.id}"
100
+ result << [item.caption, long_id, parent, item.order]
101
+ sub_menus = item.dc_menu_items.order_by(order: 1).to_a
102
+ result += do_sub_menu(sub_menus, long_id, long_id) if sub_menus.size > 0
103
+ end
104
+ result
105
+ end
106
+
107
+ #######################################################################
108
+ # Will return menu structure for menus belonging to the site.
109
+ #
110
+ # Parameters:
111
+ # [Site] DcSite document. Site for which menu belongs to. If site is not specified
112
+ # all current menus in collection will be returned.
113
+ #
114
+ # Returns:
115
+ # Array. Of choices prepared for tree:select input field.
116
+ #######################################################################
117
+ def self.choices4_menu_as_tree(site_id=nil)
118
+ qry = where(active: true)
119
+ #
120
+ ar = [nil]
121
+ if site_id.class == BSON::ObjectId
122
+ ar << site_id
123
+ elsif site_id.respond_to?(:id)
124
+ ar << site_id.id
125
+ end
126
+ qry = qry.in(dc_site_id: ar)
127
+ #
128
+ result = []
129
+ qry.each do |menu|
130
+ result << [menu.name, menu.id, nil,0]
131
+ sub_menus = menu.dc_menu_items.order_by(order: 1).to_a
132
+ result += do_sub_menu(sub_menus, menu.id, menu.id.to_s) if sub_menus.size > 0
133
+ end
134
+ result
135
+ end
136
+
137
+ #######################################################################
138
+ # Will update link value of selected menu_item
139
+ #
140
+ # Parameters:
141
+ # [path] String. String path to MenuItem document, separated by ;
142
+ # [link] String. New value of the link field
143
+ #######################################################################
144
+ def self.update_menu_item_link(path, link)
145
+ return unless path and link
146
+ #
147
+ ar = path.split(';')
148
+ menu = find(ar.shift)
149
+ while (item = ar.shift) do
150
+ menu = menu.dc_menu_items.find(item)
151
+ end
152
+ return unless menu.respond_to?(:link) # top level selected
153
+ #
154
+ menu.link = link
155
+ menu.save
156
+ end
91
157
 
92
158
  end
@@ -63,4 +63,21 @@ class DcMenuItem
63
63
  field :updated_by, type: BSON::ObjectId
64
64
 
65
65
  embeds_many :dc_menu_items, :cyclic => true
66
+
67
+ #######################################################################
68
+ # Will return menu path for the item as array of id-s. Method can be used
69
+ # to determine all parents of current item.
70
+ #
71
+ # Returns:
72
+ # Array. Of parent items ids.
73
+ #######################################################################
74
+ def menu_path()
75
+ path, parent = [], self
76
+ while parent
77
+ path << parent.id
78
+ parent = parent._parent
79
+ end
80
+ path.reverse
81
+ end
82
+
66
83
  end
@@ -22,112 +22,6 @@
22
22
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
23
  #++
24
24
 
25
- #########################################################################
26
- # ActiveSupport::Concern definition for DcPage class.
27
- #########################################################################
28
- module DcPageConcern
29
- extend ActiveSupport::Concern
30
- included do
31
-
32
- include Mongoid::Document
33
- include Mongoid::Timestamps
34
-
35
- field :subject, type: String, default: ''
36
- field :title, type: String
37
- field :subject_link, type: String, default: ''
38
- field :alt_link, type: String, default: ''
39
- field :sub_subject, type: String, default: ''
40
- field :picture, type: String
41
- field :gallery, type: String
42
- field :body, type: String, default: ''
43
- field :css, type: String, default: ''
44
- field :script, type: String, default: ''
45
- field :params, type: String
46
- field :menu_id, type: BSON::ObjectId
47
- field :author_id, type: BSON::ObjectId
48
- field :dc_poll_id, type: BSON::ObjectId
49
- field :author_name, type: String
50
- field :publish_date, type: DateTime
51
- field :user_name, type: String
52
- field :valid_from, type: DateTime
53
- field :valid_to, type: DateTime
54
- field :comments, type: Integer, default: 1 # 0 => not allowed, 1 => allowed
55
- field :active, type: Boolean, default: true
56
- field :created_by, type: BSON::ObjectId
57
- field :updated_by, type: BSON::ObjectId
58
- field :kats, type: Array # Categories
59
-
60
- field :policy_id, type: BSON::ObjectId
61
-
62
- embeds_many :dc_parts
63
-
64
- belongs_to :dc_site
65
- belongs_to :dc_design
66
-
67
- index ({ dc_site_id: 1, subject_link: 1 })
68
- index kats: 1
69
- index alt_link: 1
70
-
71
- before_save :do_before_save
72
-
73
- validates :publish_date, presence: true
74
-
75
- ######################################################################
76
- protected
77
-
78
- ######################################################################
79
- # Clears subject link of chars that shouldn't be there and also takes care
80
- # than link size is not larger than 100 chars.
81
- ######################################################################
82
- def clear_link(link)
83
- link.gsub!(/\.|\?|\!\&|»|«|\,|\"|\'|\:/,'')
84
- link.gsub!('<br>','')
85
- link.gsub!(' ','-')
86
- link.gsub!('---','-')
87
- link.gsub!('--','-')
88
- # it shall not be greater than 100 chars. Don't break in the middle of words
89
- if link.size > 100
90
- link = link[0,100]
91
- link.chop! until link[-1,1] == '-' or link.size < 10 # delete until -
92
- end
93
- link.chop! if link[-1,1] == '-' # remove - at the end
94
- link
95
- end
96
-
97
- ######################################################################
98
- # Implementation of before_save callback.
99
- ######################################################################
100
- def do_before_save
101
- if self.subject_link.empty?
102
- self.subject_link = clear_link(self.subject.downcase.strip)
103
- # add date to link, but only if something is written in subject
104
- self.subject_link << self.publish_date.strftime('-%Y%m%d') if self.subject_link.size > 1
105
- end
106
- end
107
-
108
- ######################################################################
109
- # Return all pages belonging to site ready for select input field. Used
110
- # by dc_menu* forms, for selecting page which will be linked by menu option.
111
- #
112
- # Parameters:
113
- # [site] Site document.
114
- ######################################################################
115
- def self.all_pages_for_site(site)
116
- where(dc_site_id: site._id, active: true).order(subject: 1).
117
- inject([]) { |r,page| r << [ page.subject, page.subject_link] }
118
- end
119
-
120
- ########################################################################
121
- # Return filter options
122
- ########################################################################
123
- def self.dc_filters
124
- {'title' => 'drgcms.filters.this_site_only', 'operation' => 'eq',
125
- 'field' => 'dc_site_id', 'value' => '@current_site'}
126
- end
127
-
128
- end
129
- end
130
-
131
25
  #########################################################################
132
26
  # == Schema information
133
27
  #
@@ -20,7 +20,6 @@
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
- require_dependency DrgCms.model 'dc_piece'
24
23
 
25
24
  ########################################################################
26
25
  # == Schema information
@@ -21,41 +21,6 @@
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
23
 
24
-
25
- #########################################################################
26
- # ActiveSupport::Concern definition for DcPiece class.
27
- #########################################################################
28
- module DcPieceConcern
29
- extend ActiveSupport::Concern
30
- included do
31
-
32
- include Mongoid::Document
33
- include Mongoid::Timestamps
34
-
35
- field :name, type: String, default: ''
36
- field :description, type: String, default: ''
37
- field :picture, type: String
38
- field :thumbnail, type: String
39
- field :body, type: String, default: ''
40
- field :css, type: String, default: ''
41
- field :script, type: String, default: ''
42
- field :script_type, type: String, default: ''
43
- field :params, type: String, default: ''
44
- field :piece_id, type: BSON::ObjectId
45
- field :div_id, type: String
46
- field :site_id, type: BSON::ObjectId
47
- field :order, type: Integer, default: 0
48
- field :active, type: Boolean, default: true
49
- field :valid_from, type: DateTime
50
- field :valid_to, type: DateTime
51
-
52
- field :created_by, type: BSON::ObjectId
53
- field :updated_by, type: BSON::ObjectId
54
-
55
- validates :name, presence: true
56
- end
57
- end
58
-
59
24
  ########################################################################
60
25
  # == Schema information
61
26
  #
@@ -21,62 +21,6 @@
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
23
 
24
- #########################################################################
25
- # ActiveSupport::Concern definition for DcPolicyRule class.
26
- #########################################################################
27
- module DcPolicyRuleConcern
28
- extend ActiveSupport::Concern
29
- included do
30
-
31
- include Mongoid::Document
32
- include Mongoid::Timestamps
33
-
34
- belongs_to :dc_policy_role
35
-
36
- field :permission, type: Integer, default: 0
37
-
38
- embedded_in :policy_rules, polymorphic: true
39
-
40
- #########################################################################
41
- # Returns values for permissions ready to be used in select field.
42
- #
43
- # Example (as used in DRG CMS form):
44
- # 20:
45
- # name: permission
46
- # type: select
47
- # eval: DcPolicyRule.values_for_permissions
48
- #########################################################################
49
- def self.values_for_permissions
50
- key = 'helpers.label.dc_policy_rule.choices4_permission'
51
- c = I18n.t(key)
52
- c = I18n.t(key, locale: 'en') if c.class == Hash or c.match( 'translation missing' )
53
- c.split(',').inject([]) {|r,e| r << (ar = e.split(':'); [ar.first, ar.last.to_i]) }
54
- end
55
-
56
- #########################################################################
57
- # Will return translated permission name for value.
58
- #
59
- # Parameters:
60
- # [value] Integer. Permission value
61
- #
62
- # Example (as used in DRG CMS form):
63
- # result_set:
64
- # columns:
65
- # 2:
66
- # name: permission
67
- # eval: DcPolicyRule.permission_name_for_value
68
- #
69
- # Returns:
70
- # String. Name (description) for value
71
- #########################################################################
72
- def self.permission_name_for_value(value)
73
- values_for_permissions.each {|v| return v.first if v.last.to_i == value.to_i}
74
- 'error'
75
- end
76
-
77
- end
78
- end
79
-
80
24
  #########################################################################
81
25
  # == Schema information
82
26
  #
@@ -58,6 +58,7 @@ class DcSimpleMenu
58
58
  index( { name: 1 }, { unique: true } )
59
59
 
60
60
  embeds_many :dc_simple_menu_items
61
+ belongs_to :dc_site #, optional: true
61
62
 
62
63
  validates_length_of :description, minimum: 10
63
64
 
@@ -86,4 +87,39 @@ class DcSimpleMenu
86
87
  rez
87
88
  end
88
89
 
90
+ #######################################################################
91
+ # Will return menu structure for menus belonging to the site.
92
+ #
93
+ # Parameters:
94
+ # [Site] DcSite document. Site for which menu belongs to. If site is not specified
95
+ # all current menus in collection will be returned.
96
+ #
97
+ # Returns:
98
+ # Array. Of choices prepared for tree:select input field.
99
+ #######################################################################
100
+ def self.choices4_menu_as_tree(site_id=nil)
101
+ qry = where(active: true)
102
+ #
103
+ ar = [nil]
104
+ ar << (site_id.respond_to?(:id) ? site_id.id : site_id)
105
+ qry = qry.in(dc_site_id: ar)
106
+ #
107
+ result = []
108
+ qry.each do |menu|
109
+ result << [menu.name, menu.id, nil,0]
110
+ menu.dc_simple_menu_items.order_by(order: 1).each do |item|
111
+ result << [item.caption, item.id, menu.id, item.order]
112
+ end
113
+ end
114
+ result
115
+ end
116
+
117
+ #######################################################################
118
+ # Will update link value of selected menu_item.
119
+ #
120
+ # Do nothing. The method is defined only for compatibility.
121
+ #######################################################################
122
+ def self.update_menu_item_link(path, link)
123
+ end
124
+
89
125
  end
File without changes
@@ -21,77 +21,6 @@
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
23
 
24
- #########################################################################
25
- # ActiveSupport::Concern definition for DcSite class.
26
- #########################################################################
27
- module DcSiteConcern
28
- extend ActiveSupport::Concern
29
- included do
30
- include Mongoid::Document
31
- include Mongoid::Timestamps
32
-
33
- field :name, type: String
34
- field :description, type: String
35
- field :homepage_link, type: String
36
- field :error_link, type: String
37
- field :header, type: String, default: ''
38
- field :css, type: String, default: ''
39
- field :route_name, type: String, default: ''
40
- field :page_title, type: String
41
- field :document_extension, type: String
42
- field :page_table, type: String
43
- field :page_class, type: String, default: 'DcPage'
44
- field :site_layout, type: String, default: 'content'
45
- field :menu_class, type: String, default: 'DcSimpleMenu'
46
- field :request_processor, type: String
47
- field :files_directory, type: String
48
- field :logo, type: String
49
- field :active, type: Boolean, default: true
50
- field :created_by, type: BSON::ObjectId
51
- field :updated_by, type: BSON::ObjectId
52
- field :menu_name, type: String
53
- field :settings, type: String
54
- field :alias_for, type: String
55
- field :rails_view, type: String, default: ''
56
- field :design, type: String, default: ''
57
-
58
- embeds_many :dc_policies
59
- embeds_many :dc_parts
60
-
61
- index( { name: 1 }, { unique: true } )
62
-
63
- validates :name, presence: true
64
- validates :name, uniqueness: true
65
-
66
- ########################################################################
67
- # Returns value of site setting. If no value is send as parameter it returns
68
- # all settings hash object.
69
- ########################################################################
70
- def params(what=nil)
71
- @params ||= self.settings.to_s.size > 5 ? YAML.load(self.settings) : {}
72
- what.nil? ? @params : @params[what.to_s]
73
- end
74
-
75
- ########################################################################
76
- # Return choices for select for site_id
77
- ########################################################################
78
- def self.choices4_site
79
- all.inject([]) { |r,site| r << [ (site.active ? '' : t('drgcms.disabled') ) + site.name, site._id] }
80
- end
81
-
82
- ########################################################################
83
- # Return choices for selecting policies for the site
84
- ########################################################################
85
- def self.choices4_policies
86
- site = ApplicationController.dc_get_site_()
87
- #all.inject([]) { |r,site| r << [ (site.active ? '' : t('drgcms.disabled') ) + site.name, site._id] }
88
- [['a','b']]
89
- end
90
-
91
- end
92
- end
93
-
94
-
95
24
  ######################################################################
96
25
  # == Schema information
97
26
  #
@@ -123,6 +52,7 @@ end
123
52
  # alias_for String Is alias name for entered site name
124
53
  # rails_view String Rails view filename used as standard design
125
54
  # design String Standard design can also be defined at the site level
55
+ # inherit_policy BSON::ObjectId Use policy from other site
126
56
  # dc_policies Embedded:DcPolicy Access policies defined for the site
127
57
  # dc_parts Embedded:DcPart Parts contained in site
128
58
  #