drg_cms 0.6.0.6 → 0.6.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +25 -10
- data/app/assets/javascripts/drg_cms/drg_cms.js +281 -106
- data/app/assets/stylesheets/drg_cms/drg_cms.css +417 -152
- data/app/assets/stylesheets/drg_cms/select-multiple.css +9 -12
- data/app/assets/stylesheets/drg_cms_cms.css +1 -1
- data/app/controllers/cmsedit_controller.rb +247 -175
- data/app/controllers/dc_application_controller.rb +251 -173
- data/app/controllers/dc_common_controller.rb +81 -48
- data/app/controls/dc_help_control.rb +126 -0
- data/app/controls/dc_report.rb +223 -0
- data/app/forms/all_options.yml +38 -10
- data/app/forms/cms_menu.yml +7 -1
- data/app/forms/dc_big_table.yml +1 -0
- data/app/forms/dc_big_table_value.yml +1 -0
- data/app/forms/dc_category.yml +2 -1
- data/app/forms/dc_design.yml +1 -0
- data/app/forms/dc_help_1.yml +109 -0
- data/app/forms/dc_journal.yml +3 -1
- data/app/forms/dc_link.yml +1 -1
- data/app/forms/dc_menu.yml +2 -0
- data/app/forms/dc_menu_item.yml +1 -0
- data/app/forms/dc_page.yml +6 -0
- data/app/forms/dc_part.yml +1 -0
- data/app/forms/dc_piece.yml +1 -0
- data/app/forms/dc_poll.yml +15 -5
- data/app/forms/dc_poll_item.yml +2 -1
- data/app/forms/dc_poll_result.yml +9 -0
- data/app/forms/dc_simple_menu.yml +2 -0
- data/app/forms/dc_site.yml +4 -12
- data/app/forms/dc_user.yml +27 -11
- data/app/forms/dc_user_role.yml +3 -0
- data/app/helpers/cms_common_helper.rb +375 -0
- data/app/helpers/{cmsedit_edit_helper.rb → cms_edit_helper.rb} +109 -65
- data/app/helpers/{cmsedit_helper.rb → cms_helper.rb} +93 -48
- data/app/helpers/{cmsedit_index_helper.rb → cms_index_helper.rb} +240 -206
- data/app/helpers/dc_application_helper.rb +108 -327
- data/app/models/concerns/dc_page_concern.rb +14 -4
- data/app/models/concerns/dc_piece_concern.rb +1 -1
- data/app/models/concerns/dc_policy_rule_concern.rb +20 -8
- data/app/models/concerns/dc_site_concern.rb +67 -44
- data/app/models/concerns/dc_user_concern.rb +58 -19
- data/app/models/dc_design.rb +29 -19
- data/app/models/dc_filter.rb +26 -18
- data/app/models/dc_key_value_store.rb +1 -0
- data/app/models/dc_permission.rb +49 -9
- data/app/models/dc_policy.rb +25 -14
- data/app/models/dc_policy_role.rb +22 -11
- data/app/models/dc_poll.rb +1 -0
- data/app/models/dc_poll_result.rb +4 -2
- data/app/models/dc_temp.rb +6 -3
- data/app/models/dc_user_role.rb +2 -2
- data/app/models/drgcms_form_fields/date_picker.rb +6 -3
- data/app/models/drgcms_form_fields/datetime_picker.rb +4 -3
- data/app/models/drgcms_form_fields/drgcms_field.rb +20 -5
- data/app/models/drgcms_form_fields/embedded.rb +23 -16
- data/app/models/drgcms_form_fields/file_field.rb +2 -2
- data/app/models/drgcms_form_fields/file_select.rb +2 -2
- data/app/models/drgcms_form_fields/hash_field.rb +11 -7
- data/app/models/drgcms_form_fields/hidden_field.rb +1 -1
- data/app/models/drgcms_form_fields/link_to.rb +2 -2
- data/app/models/drgcms_form_fields/method.rb +66 -0
- data/app/models/drgcms_form_fields/multitext_autocomplete.rb +18 -12
- data/app/models/drgcms_form_fields/number_field.rb +4 -3
- data/app/models/drgcms_form_fields/radio.rb +10 -5
- data/app/models/drgcms_form_fields/readonly.rb +13 -17
- data/app/models/drgcms_form_fields/select.rb +58 -41
- data/app/models/drgcms_form_fields/text_autocomplete.rb +41 -33
- data/app/models/drgcms_form_fields.rb +12 -1
- data/app/renderers/dc_big_menu_renderer.rb +1 -0
- data/app/renderers/dc_gallery_renderer.rb +1 -0
- data/app/renderers/dc_menu_renderer.rb +1 -0
- data/app/renderers/dc_page_renderer.rb +8 -6
- data/app/renderers/dc_part_renderer.rb +1 -0
- data/app/renderers/dc_piece_renderer.rb +1 -1
- data/app/renderers/dc_poll_renderer.rb +56 -55
- data/app/renderers/dc_renderer.rb +1 -0
- data/app/renderers/dc_simple_menu_renderer.rb +1 -0
- data/app/views/cmsedit/_edit_stuff.html.erb +5 -2
- data/app/views/cmsedit/edit.html.erb +4 -1
- data/app/views/cmsedit/index.html.erb +3 -2
- data/app/views/cmsedit/new.html.erb +5 -2
- data/app/views/dc_common/_help.html.erb +17 -0
- data/app/views/layouts/models.html.erb +2 -1
- data/config/locales/drgcms_en.yml +17 -2
- data/config/locales/drgcms_sl.yml +22 -4
- data/config/locales/models_en.yml +16 -7
- data/config/locales/models_sl.yml +21 -12
- data/drg_cms.gemspec +16 -16
- data/lib/drg_cms/version.rb +1 -1
- data/lib/drg_cms.rb +98 -0
- data/lib/generators/new_drg_form/new_drg_form_generator.rb +5 -3
- data/lib/tasks/database.rake +6 -56
- metadata +39 -35
- data/app/helpers/application_helper.rb +0 -2
- data/app/models/__dc_dummy.rb +0 -102
@@ -1,4 +1,3 @@
|
|
1
|
-
#coding: utf-8
|
2
1
|
#--
|
3
2
|
# Copyright (c) 2012+ Damjan Rems
|
4
3
|
#
|
@@ -37,11 +36,12 @@ field :subject_link, type: String, default: ''
|
|
37
36
|
field :alt_link, type: String, default: ''
|
38
37
|
field :sub_subject, type: String, default: ''
|
39
38
|
field :picture, type: String
|
40
|
-
field :gallery, type: Boolean, default: false
|
39
|
+
field :gallery, type: Mongoid::Boolean, default: false
|
41
40
|
field :body, type: String, default: ''
|
42
41
|
field :css, type: String, default: ''
|
43
42
|
field :script, type: String, default: ''
|
44
43
|
field :params, type: String
|
44
|
+
field :div_class, type: String
|
45
45
|
field :menu_id, type: String
|
46
46
|
field :author_id, type: BSON::ObjectId
|
47
47
|
field :dc_poll_id, type: BSON::ObjectId
|
@@ -51,7 +51,7 @@ field :user_name, type: String
|
|
51
51
|
field :valid_from, type: DateTime
|
52
52
|
field :valid_to, type: DateTime
|
53
53
|
field :comments, type: Integer, default: 1 # 0 => not allowed, 1 => allowed
|
54
|
-
field :active, type: Boolean, default: true
|
54
|
+
field :active, type: Mongoid::Boolean, default: true
|
55
55
|
field :created_by, type: BSON::ObjectId
|
56
56
|
field :updated_by, type: BSON::ObjectId
|
57
57
|
field :kats, type: Array # Categories
|
@@ -83,6 +83,16 @@ before_save :do_before_save
|
|
83
83
|
|
84
84
|
validates :publish_date, presence: true
|
85
85
|
validate :validate_images_alt_present
|
86
|
+
|
87
|
+
after_save :cache_clear
|
88
|
+
after_destroy :cache_clear
|
89
|
+
|
90
|
+
####################################################################
|
91
|
+
# Clear cache if cache is configured
|
92
|
+
####################################################################
|
93
|
+
def cache_clear
|
94
|
+
DrgCms.cache_clear(:dc_page)
|
95
|
+
end
|
86
96
|
|
87
97
|
######################################################################
|
88
98
|
# Will return subject_link. Field name link should be common for all documents
|
@@ -94,7 +104,7 @@ end
|
|
94
104
|
|
95
105
|
######################################################################
|
96
106
|
# Will return validation error if all images in body field do not have
|
97
|
-
# alt attribute
|
107
|
+
# alt attribute present.
|
98
108
|
######################################################################
|
99
109
|
def validate_images_alt_present
|
100
110
|
errors.add('body', I18n.t('drgcms.img_alt_not_present')) unless DcPage.images_alt_present?(self.body)
|
@@ -45,7 +45,7 @@ module DcPieceConcern
|
|
45
45
|
field :div_id, type: String
|
46
46
|
field :site_id, type: BSON::ObjectId
|
47
47
|
field :order, type: Integer, default: 0
|
48
|
-
field :active, type: Boolean, default: true
|
48
|
+
field :active, type: Mongoid::Boolean, default: true
|
49
49
|
field :valid_from, type: DateTime
|
50
50
|
field :valid_to, type: DateTime
|
51
51
|
|
@@ -25,17 +25,20 @@
|
|
25
25
|
# ActiveSupport::Concern definition for DcPolicyRule class.
|
26
26
|
#########################################################################
|
27
27
|
module DcPolicyRuleConcern
|
28
|
-
|
29
|
-
|
28
|
+
extend ActiveSupport::Concern
|
29
|
+
included do
|
30
30
|
|
31
|
-
|
32
|
-
|
31
|
+
include Mongoid::Document
|
32
|
+
include Mongoid::Timestamps
|
33
33
|
|
34
|
-
|
34
|
+
belongs_to :dc_policy_role
|
35
35
|
|
36
|
-
|
36
|
+
field :permission, type: Integer, default: 0
|
37
37
|
|
38
|
-
|
38
|
+
embedded_in :policy_rules, polymorphic: true
|
39
|
+
|
40
|
+
after_save :cache_clear
|
41
|
+
after_destroy :cache_clear
|
39
42
|
|
40
43
|
#########################################################################
|
41
44
|
# Returns values for permissions ready to be used in select field.
|
@@ -50,7 +53,7 @@ def self.values_for_permissions
|
|
50
53
|
key = 'helpers.label.dc_policy_rule.choices4_permission'
|
51
54
|
c = I18n.t(key)
|
52
55
|
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]) }
|
56
|
+
c.split(',').inject([]) { |r,e| r << (ar = e.split(':'); [ar.first, ar.last.to_i]) }
|
54
57
|
end
|
55
58
|
|
56
59
|
#########################################################################
|
@@ -74,5 +77,14 @@ def self.permission_name_for_value(value)
|
|
74
77
|
'error'
|
75
78
|
end
|
76
79
|
|
80
|
+
private
|
81
|
+
|
82
|
+
####################################################################
|
83
|
+
# Clear cache if cache is configured
|
84
|
+
####################################################################
|
85
|
+
def cache_clear
|
86
|
+
_parent.send(:cache_clear) if _parent.respond_to?(:cache_clear)
|
87
|
+
end
|
88
|
+
|
77
89
|
end
|
78
90
|
end
|
@@ -27,44 +27,55 @@
|
|
27
27
|
module DcSiteConcern
|
28
28
|
extend ActiveSupport::Concern
|
29
29
|
included do
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
30
|
+
|
31
|
+
include Mongoid::Document
|
32
|
+
include Mongoid::Timestamps
|
33
|
+
|
34
|
+
field :name, type: String
|
35
|
+
field :description, type: String
|
36
|
+
field :homepage_link, type: String
|
37
|
+
field :error_link, type: String
|
38
|
+
field :header, type: String, default: ''
|
39
|
+
field :css, type: String, default: ''
|
40
|
+
field :route_name, type: String, default: ''
|
41
|
+
field :page_title, type: String
|
42
|
+
field :document_extension, type: String
|
43
|
+
field :page_table, type: String
|
44
|
+
field :page_class, type: String, default: 'DcPage'
|
45
|
+
field :site_layout, type: String, default: 'content'
|
46
|
+
field :menu_class, type: String, default: 'DcSimpleMenu'
|
47
|
+
field :request_processor, type: String
|
48
|
+
field :files_directory, type: String
|
49
|
+
field :logo, type: String
|
50
|
+
field :active, type: Mongoid::Boolean, default: true
|
51
|
+
field :created_by, type: BSON::ObjectId
|
52
|
+
field :updated_by, type: BSON::ObjectId
|
53
|
+
field :menu_name, type: String
|
54
|
+
field :menu_id, type: BSON::ObjectId
|
55
|
+
field :settings, type: String
|
56
|
+
field :alias_for, type: String
|
57
|
+
field :rails_view, type: String, default: ''
|
58
|
+
field :design, type: String, default: ''
|
59
|
+
field :inherit_policy, type: BSON::ObjectId
|
60
|
+
|
61
|
+
embeds_many :dc_policies
|
62
|
+
embeds_many :dc_parts
|
63
|
+
|
64
|
+
index( { name: 1 }, { unique: true } )
|
65
|
+
index( { alias_for: 1 } )
|
66
|
+
|
67
|
+
validates :name, presence: true
|
68
|
+
validates :name, uniqueness: true
|
69
|
+
|
70
|
+
after_save :cache_clear
|
71
|
+
after_destroy :cache_clear
|
72
|
+
|
73
|
+
####################################################################
|
74
|
+
# Clear cache if cache is configured
|
75
|
+
####################################################################
|
76
|
+
def cache_clear
|
77
|
+
DrgCms.cache_clear(:dc_site)
|
78
|
+
end
|
68
79
|
|
69
80
|
########################################################################
|
70
81
|
# Returns value of site setting. If no value is send as parameter it returns
|
@@ -78,15 +89,15 @@ end
|
|
78
89
|
########################################################################
|
79
90
|
# Returns class object of collection name
|
80
91
|
########################################################################
|
81
|
-
def page_klass
|
92
|
+
def page_klass
|
82
93
|
(self.page_table.blank? ? self.page_class : self.page_table).classify.constantize
|
83
94
|
end
|
84
95
|
|
85
96
|
########################################################################
|
86
97
|
# Returns class object of menu collection name
|
87
98
|
########################################################################
|
88
|
-
def menu_klass
|
89
|
-
(
|
99
|
+
def menu_klass
|
100
|
+
(menu_class.blank? ? 'DcMenu' : menu_class).classify.constantize
|
90
101
|
end
|
91
102
|
|
92
103
|
########################################################################
|
@@ -99,11 +110,23 @@ end
|
|
99
110
|
|
100
111
|
########################################################################
|
101
112
|
# Return choices for selecting policies for the site
|
113
|
+
# @deprecated
|
102
114
|
########################################################################
|
103
|
-
def self.choices4_policies
|
104
|
-
site = ApplicationController.dc_get_site_()
|
115
|
+
#def self.choices4_policies
|
116
|
+
# site = ApplicationController.dc_get_site_()
|
105
117
|
#all.inject([]) { |r,site| r << [ (site.active ? '' : t('drgcms.disabled') ) + site.name, site._id] }
|
106
|
-
[['a','b']]
|
118
|
+
# [['a','b']]
|
119
|
+
#end
|
120
|
+
|
121
|
+
########################################################################
|
122
|
+
# Return choices for selecting policies for the site
|
123
|
+
########################################################################
|
124
|
+
def self.choices_for_menu(menu_class)
|
125
|
+
return [] if menu_class.blank?
|
126
|
+
menu = menu_class.classify.constantize
|
127
|
+
menu.where(active: true).inject([]) do |r, a_menu|
|
128
|
+
r << [a_menu.description, a_menu.id]
|
129
|
+
end
|
107
130
|
end
|
108
131
|
|
109
132
|
end
|
@@ -50,14 +50,14 @@ field :picture, type: String
|
|
50
50
|
field :birthdate, type: Date
|
51
51
|
field :about, type: String
|
52
52
|
field :last_visit, type: Time
|
53
|
-
field :active, type: Boolean, default: true
|
53
|
+
field :active, type: Mongoid::Boolean, default: true
|
54
54
|
field :valid_from, type: Date
|
55
55
|
field :valid_to, type: Date
|
56
56
|
field :created_by, type: BSON::ObjectId
|
57
57
|
field :updated_by, type: BSON::ObjectId
|
58
58
|
|
59
|
-
field :
|
60
|
-
field :
|
59
|
+
field :group, type: Mongoid::Boolean, default: false # false => User, true => Group
|
60
|
+
field :member, type: Array
|
61
61
|
|
62
62
|
embeds_many :dc_user_roles
|
63
63
|
|
@@ -73,23 +73,17 @@ has_secure_password
|
|
73
73
|
|
74
74
|
index( { username: 1 }, { unique: true } )
|
75
75
|
index( { email: 1 }, { unique: true } )
|
76
|
-
index 'dc_user_roles.dc_policy_role_id' => 1
|
77
|
-
index
|
76
|
+
index 'dc_user_roles.dc_policy_role_id' => 1
|
77
|
+
index member: 1
|
78
|
+
index group: 1
|
78
79
|
|
79
80
|
validates_length_of :username, minimum: 4
|
80
81
|
validates :username, uniqueness: true
|
81
|
-
validates :email, uniqueness: true
|
82
|
-
|
82
|
+
validates :email, uniqueness: true
|
83
|
+
validate :do_validate
|
83
84
|
|
84
|
-
|
85
|
-
|
86
|
-
# when entry is left empty.
|
87
|
-
##########################################################################
|
88
|
-
def do_before_save
|
89
|
-
self.name = "#{self.title} #{self.first_name} #{self.middle_name + ' ' unless self.middle_name.blank?}#{self.last_name}".strip
|
90
|
-
# to ensure unique e-mail
|
91
|
-
self.email = "unknown@#{self.id}" if self.email.to_s.strip.size < 5
|
92
|
-
end
|
85
|
+
before_save :do_before_save
|
86
|
+
before_validation :do_before_validation
|
93
87
|
|
94
88
|
##########################################################################
|
95
89
|
# Checks if user has role 'role_id' defined in his roles.
|
@@ -98,7 +92,7 @@ end
|
|
98
92
|
##########################################################################
|
99
93
|
def has_role?(role_id)
|
100
94
|
return false unless role_id
|
101
|
-
|
95
|
+
|
102
96
|
unless BSON::ObjectId.legal?(role_id)
|
103
97
|
role = DcPolicyRole.get_role(role_id)
|
104
98
|
role_id = role.id if role
|
@@ -111,7 +105,7 @@ end
|
|
111
105
|
# Will return all possible values for country field ready for input in select field.
|
112
106
|
# Values are loaded from github when method is first called.
|
113
107
|
##########################################################################
|
114
|
-
def self.choices4_country
|
108
|
+
def self.choices4_country
|
115
109
|
if @@countries.nil?
|
116
110
|
uri = URI.parse("https://raw.githubusercontent.com/umpirsky/country-list/master/country/cldr/en/country.json")
|
117
111
|
http = Net::HTTP.new(uri.host, uri.port)
|
@@ -125,7 +119,7 @@ def self.choices4_country()
|
|
125
119
|
end
|
126
120
|
|
127
121
|
##########################################################################
|
128
|
-
# Performs
|
122
|
+
# Performs logically test on passed email parameter.
|
129
123
|
#
|
130
124
|
# Parameters:
|
131
125
|
# [email] String: e-mail address
|
@@ -143,5 +137,50 @@ def self.is_email?(email)
|
|
143
137
|
email.to_s =~ /^[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/
|
144
138
|
end
|
145
139
|
|
140
|
+
##########################################################################
|
141
|
+
# Will return list of available groups
|
142
|
+
##########################################################################
|
143
|
+
def self.groups_for_select
|
144
|
+
where(group: true, active: true).order_by(name: 1).inject([]) { |r, e| r << [e.name, e.id] }
|
145
|
+
end
|
146
|
+
|
147
|
+
private
|
148
|
+
|
149
|
+
##########################################################################
|
150
|
+
# before_save callback takes care of name field and ensures that e-mail is unique
|
151
|
+
# when entry is left empty.
|
152
|
+
##########################################################################
|
153
|
+
def do_before_save
|
154
|
+
self.name = "#{title} #{first_name} #{middle_name + ' ' unless middle_name.blank?}#{last_name}".squish
|
155
|
+
# to ensure unique e-mail
|
156
|
+
self.email = "unknown@#{id}" if email.blank?
|
157
|
+
end
|
158
|
+
|
159
|
+
##########################################################################
|
160
|
+
# Create random password for groups. Must be done before validation
|
161
|
+
##########################################################################
|
162
|
+
def do_before_validation
|
163
|
+
if new_record? && group
|
164
|
+
self.password = DcUser.random_password(30)
|
165
|
+
self.password_confirmation = password
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
##########################################################################
|
170
|
+
# Perform some additional validations
|
171
|
+
##########################################################################
|
172
|
+
def do_validate
|
173
|
+
if group && member.present?
|
174
|
+
errors.add('member', I18n.t('errors.messages.present'))
|
175
|
+
end
|
176
|
+
end
|
177
|
+
##########################################################################
|
178
|
+
# Will create random password
|
179
|
+
##########################################################################
|
180
|
+
def self.random_password(number)
|
181
|
+
charset = Array('A'..'Z') + Array('0'..'9') + Array('a'..'z')
|
182
|
+
Array.new(number) { charset.sample }.join
|
183
|
+
end
|
184
|
+
|
146
185
|
end
|
147
186
|
end
|
data/app/models/dc_design.rb
CHANGED
@@ -87,25 +87,35 @@
|
|
87
87
|
# <style type="text/css"><%= @css.html_safe %></style><%= javascript_tag @js %>
|
88
88
|
########################################################################
|
89
89
|
class DcDesign
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
90
|
+
include Mongoid::Document
|
91
|
+
include Mongoid::Timestamps
|
92
|
+
|
93
|
+
field :description, type: String, default: ''
|
94
|
+
field :body, type: String, default: ''
|
95
|
+
field :css, type: String, default: ''
|
96
|
+
field :rails_view, type: String, default: ''
|
97
|
+
field :control, type: String, default: ''
|
98
|
+
field :params, type: String, default: ''
|
99
|
+
field :control_method, type: String, default: ''
|
100
|
+
field :author, type: String
|
101
|
+
field :active, type: Boolean, default: true
|
102
|
+
field :created_by, type: BSON::ObjectId
|
103
|
+
field :updated_by, type: BSON::ObjectId
|
104
|
+
field :site_id, type: BSON::ObjectId
|
105
|
+
|
106
|
+
embeds_many :dc_parts
|
107
|
+
|
108
|
+
validates_length_of :description, minimum: 5
|
109
|
+
|
110
|
+
after_save :cache_clear
|
111
|
+
after_destroy :cache_clear
|
112
|
+
|
113
|
+
####################################################################
|
114
|
+
# Clear cache if cache is configured
|
115
|
+
####################################################################
|
116
|
+
def cache_clear
|
117
|
+
DrgCms.cache_clear(:dc_design)
|
118
|
+
end
|
109
119
|
|
110
120
|
########################################################################
|
111
121
|
# Return choices for select for design_id.
|
data/app/models/dc_filter.rb
CHANGED
@@ -106,44 +106,52 @@ end
|
|
106
106
|
############################################################################
|
107
107
|
# Return filter input field for entering variable filter values on index form
|
108
108
|
############################################################################
|
109
|
-
def self.get_filter_field(parent)
|
109
|
+
def self.get_filter_field(parent)
|
110
110
|
return '' if parent.session[ parent.form['table'] ].nil?
|
111
|
+
|
111
112
|
filter = parent.session[ parent.form['table'] ][:filter]
|
112
113
|
return '' if filter.nil?
|
113
|
-
|
114
|
+
|
114
115
|
filter = YAML.load(filter) rescue nil
|
115
116
|
return '' if filter.nil?
|
116
|
-
|
117
|
+
|
117
118
|
field = get_field_form_definition(filter['field'], parent)
|
118
|
-
return '' if field.nil?
|
119
|
-
|
120
|
-
|
119
|
+
return '' if field.nil? && filter['input'].nil?
|
120
|
+
|
121
|
+
saved_readonly = parent.form['readonly']
|
122
|
+
parent.form['readonly'] = nil # must be
|
123
|
+
field ||= {}
|
124
|
+
# If field has choices available in labels, use them. This is most likely select input field.
|
121
125
|
if field['name']
|
122
126
|
choices = parent.t('helpers.label.' + parent.form['table'] + '.choices4_' + field['name'] )
|
123
127
|
unless choices.match( 'translation missing' ) or choices.match('helpers.label')
|
124
128
|
field['choices'] = choices
|
125
129
|
end
|
126
130
|
end
|
127
|
-
# field redefined with input keyword. Name must start with _
|
131
|
+
# field redefined with input keyword. Name must start with _
|
128
132
|
field['name'] = '_filter_field'
|
129
133
|
field['type'] = filter['input'] if filter['input'].to_s.size > 5
|
130
134
|
field['type'] ||= 'text_field'
|
131
135
|
field['readonly'] = false # must be
|
132
|
-
field['html'] ||= {}
|
133
|
-
field['html']['size']
|
134
|
-
# Start with last entered value
|
135
|
-
field['html']['value']
|
136
|
+
field['html'] ||= {}
|
137
|
+
field['html']['size'] = 20
|
138
|
+
# Start with last entered value
|
139
|
+
field['html']['value'] = filter['value'] unless filter['value'] == '#NIL'
|
136
140
|
field['html']['selected'] = field['html']['value'] # for select field
|
137
|
-
# url for filter ON action
|
141
|
+
# url for filter ON action
|
138
142
|
field['html']['data-url'] = parent.url_for(
|
139
|
-
controller: 'cmsedit',action: :index, filter: 'on',
|
140
|
-
table: parent.form['table'], form_name: parent.
|
143
|
+
controller: 'cmsedit', action: :index, filter: 'on',
|
144
|
+
table: parent.form['table'], form_name: parent.params['form_name'])
|
141
145
|
url = field['html']['data-url']
|
142
|
-
#
|
146
|
+
# remove if present
|
147
|
+
field['with_new'] = nil if field['with_new']
|
148
|
+
# create input field object
|
143
149
|
klas_string = field['type'].camelize
|
144
150
|
klas = DrgcmsFormFields::const_get(klas_string) rescue nil
|
151
|
+
parent.form['readonly'] = saved_readonly
|
145
152
|
return '' if klas.nil?
|
146
|
-
|
153
|
+
|
154
|
+
# return data from object and create html code to display field
|
147
155
|
object = klas.new(parent, nil, field).render rescue nil
|
148
156
|
# Error. Forget filter and return
|
149
157
|
if object.nil?
|
@@ -151,11 +159,11 @@ def self.get_filter_field(parent)
|
|
151
159
|
return ''
|
152
160
|
end
|
153
161
|
js = object.js.blank? ? '' : parent.javascript_tag(object.js)
|
154
|
-
%
|
162
|
+
%(<li class="no-background">
|
155
163
|
<span class="filter_field" data-url="#{url}">#{object.html}
|
156
164
|
#{parent.fa_icon('search lg', class: 'record_filter_field_icon')}
|
157
165
|
#{js}</span>
|
158
|
-
</li>
|
166
|
+
</li>)
|
159
167
|
end
|
160
168
|
|
161
169
|
######################################################################
|
data/app/models/dc_permission.rb
CHANGED
@@ -44,23 +44,23 @@ class DcPermission
|
|
44
44
|
#- Available permissions settings
|
45
45
|
|
46
46
|
# User has no access
|
47
|
-
NO_ACCESS
|
47
|
+
NO_ACCESS = 0
|
48
48
|
# User can view documents
|
49
|
-
CAN_VIEW
|
49
|
+
CAN_VIEW = 1
|
50
50
|
# User can create new documents
|
51
|
-
CAN_CREATE
|
51
|
+
CAN_CREATE = 2
|
52
52
|
# User can edit his own documents
|
53
|
-
CAN_EDIT
|
53
|
+
CAN_EDIT = 4
|
54
54
|
# User can edit all documents in collection
|
55
|
-
CAN_EDIT_ALL
|
55
|
+
CAN_EDIT_ALL = 8
|
56
56
|
# User can delete his own documents
|
57
|
-
CAN_DELETE
|
57
|
+
CAN_DELETE = 16
|
58
58
|
# User can delete all documents in collection
|
59
59
|
CAN_DELETE_ALL = 32
|
60
60
|
# User can admin collection (same as can_delete_all, but can see documents which do not belong to current site)
|
61
|
-
CAN_ADMIN
|
61
|
+
CAN_ADMIN = 64
|
62
62
|
# User is superadmin. Basicly same as admin.
|
63
|
-
SUPERADMIN
|
63
|
+
SUPERADMIN = 128
|
64
64
|
|
65
65
|
include Mongoid::Document
|
66
66
|
include Mongoid::Timestamps
|
@@ -75,7 +75,17 @@ embeds_many :dc_policy_rules, as: :policy_rules
|
|
75
75
|
index( { table_name: 1 }, { unique: true } )
|
76
76
|
|
77
77
|
validates :table_name, presence: true
|
78
|
-
validates :table_name, uniqueness: true
|
78
|
+
validates :table_name, uniqueness: true
|
79
|
+
|
80
|
+
after_save :cache_clear
|
81
|
+
after_destroy :cache_clear
|
82
|
+
|
83
|
+
####################################################################
|
84
|
+
# Clear cache if cache is configured
|
85
|
+
####################################################################
|
86
|
+
def cache_clear
|
87
|
+
DrgCms.cache_clear(:dc_permission)
|
88
|
+
end
|
79
89
|
|
80
90
|
########################################################################
|
81
91
|
# Will return choices for permissions prepared for usega in select input field.
|
@@ -85,4 +95,34 @@ def self.values_for_permissions #:nodoc:
|
|
85
95
|
[['NO_ACCESS',0],['CAN_VIEW',1],['CAN_CREATE',2],['CAN_EDIT',4],['CAN_EDIT_ALL',8],['CAN_DELETE',16],['CAN_DELETE_ALL',32],['CAN_ADMIN',64],['SUPERADMIN',128]]
|
86
96
|
end
|
87
97
|
|
98
|
+
#############################################################################
|
99
|
+
# Will return permissions for collection
|
100
|
+
############################################################################
|
101
|
+
def self.permissions_for_table(collection_name)
|
102
|
+
if collection_name.match(';')
|
103
|
+
collection, embedded, rest = collection_name.split(';')
|
104
|
+
else
|
105
|
+
collection, embedded = collection_name, nil
|
106
|
+
end
|
107
|
+
result = permissions_for('*')
|
108
|
+
result = permissions_for("#{collection[0,3]}*", result)
|
109
|
+
result = permissions_for(collection, result)
|
110
|
+
# include permissions for embedded documents
|
111
|
+
result = permissions_for("#{collection};#{embedded}", result) if embedded
|
112
|
+
result
|
113
|
+
end
|
114
|
+
|
115
|
+
#############################################################################
|
116
|
+
#
|
117
|
+
############################################################################
|
118
|
+
def self.permissions_for(collection_name, result = {}) #:nodoc:
|
119
|
+
permissions = if collection_name == '*'
|
120
|
+
self.find_by(is_default: true)
|
121
|
+
else
|
122
|
+
self.find_by(table_name: collection_name, active: true)
|
123
|
+
end
|
124
|
+
permissions.dc_policy_rules.each {|perm| result[perm.dc_policy_role_id] = perm.permission } if permissions
|
125
|
+
result
|
126
|
+
end
|
127
|
+
|
88
128
|
end
|
data/app/models/dc_policy.rb
CHANGED
@@ -45,22 +45,33 @@
|
|
45
45
|
# other policies. Default policy is also used when document has no access policy assigned.
|
46
46
|
#########################################################################
|
47
47
|
class DcPolicy
|
48
|
-
|
49
|
-
|
48
|
+
include Mongoid::Document
|
49
|
+
include Mongoid::Timestamps
|
50
50
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
51
|
+
field :name, type: String
|
52
|
+
field :description, type: String, default: ''
|
53
|
+
field :is_default, type: Boolean, default: false
|
54
|
+
field :active, type: Boolean, default: true
|
55
|
+
field :updated_by, type: BSON::ObjectId
|
56
|
+
field :message, type: String, default: ''
|
57
|
+
|
58
|
+
embeds_many :dc_policy_rules, as: :policy_rules
|
59
|
+
embedded_in :dc_site
|
60
|
+
|
61
|
+
validates :name, length: { minimum: 4 }
|
62
|
+
validates :message, length: { minimum: 5 }
|
63
|
+
|
64
|
+
after_save :cache_clear
|
65
|
+
after_destroy :cache_clear
|
66
|
+
|
67
|
+
####################################################################
|
68
|
+
# Clear cache if cache is configured
|
69
|
+
####################################################################
|
70
|
+
def cache_clear
|
71
|
+
DrgCms.cache_clear(:dc_permission)
|
72
|
+
DrgCms.cache_clear(:dc_site)
|
73
|
+
end
|
60
74
|
|
61
|
-
validates :name, :length => { :minimum => 4 }
|
62
|
-
validates :message, :length => { :minimum => 5 }
|
63
|
-
|
64
75
|
=begin
|
65
76
|
#########################################################################
|
66
77
|
# Returns values for permissions ready to be used in select field.
|