drg_cms 0.6.0.8 → 0.6.1.5
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.
- checksums.yaml +4 -4
- data/README.md +25 -10
- data/app/assets/javascripts/drg_cms/drg_cms.js +208 -81
- data/app/assets/stylesheets/drg_cms/drg_cms.css +298 -93
- data/app/assets/stylesheets/drg_cms/select-multiple.css +1 -1
- data/app/controllers/cmsedit_controller.rb +174 -167
- data/app/controllers/dc_application_controller.rb +230 -196
- data/app/controllers/dc_common_controller.rb +88 -50
- data/app/controls/dc_help_control.rb +138 -0
- data/app/controls/dc_report.rb +12 -16
- data/app/forms/all_options.yml +14 -5
- data/app/forms/cms_menu.yml +7 -1
- data/app/forms/dc_big_table.yml +0 -2
- data/app/forms/dc_big_table_value.yml +0 -2
- data/app/forms/dc_category.yml +2 -1
- data/app/forms/dc_design.yml +2 -2
- data/app/forms/dc_folder_permission.yml +0 -2
- data/app/forms/dc_help_1.yml +110 -0
- data/app/forms/dc_journal.yml +3 -1
- data/app/forms/dc_json_ld.yml +0 -3
- data/app/forms/dc_link.yml +1 -1
- data/app/forms/dc_menu.yml +8 -12
- data/app/forms/dc_menu_item.yml +2 -3
- data/app/forms/dc_page.yml +7 -2
- data/app/forms/dc_part.yml +1 -0
- data/app/forms/dc_piece.yml +1 -0
- data/app/forms/dc_policy.yml +2 -5
- data/app/forms/dc_poll.yml +13 -16
- data/app/forms/dc_seo.yml +1 -2
- data/app/forms/dc_simple_menu.yml +3 -2
- data/app/forms/dc_site.yml +5 -8
- data/app/forms/dc_user.yml +27 -11
- data/app/forms/dc_user_role.yml +3 -0
- data/app/helpers/cms_common_helper.rb +68 -4
- data/app/helpers/cms_edit_helper.rb +73 -55
- data/app/helpers/cms_helper.rb +70 -32
- data/app/helpers/cms_index_helper.rb +155 -102
- data/app/helpers/dc_application_helper.rb +132 -109
- 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 +56 -44
- data/app/models/concerns/dc_user_concern.rb +58 -19
- data/app/models/dc_big_table.rb +2 -2
- data/app/models/dc_design.rb +29 -19
- data/app/models/dc_filter.rb +28 -22
- data/app/models/dc_key_value_store.rb +1 -0
- data/app/models/dc_permission.rb +19 -9
- data/app/models/dc_policy.rb +25 -14
- data/app/models/dc_policy_role.rb +22 -11
- data/app/models/dc_temp.rb +8 -1
- data/app/models/dc_user_role.rb +2 -2
- data/app/models/drgcms_form_fields/comment.rb +11 -2
- data/app/models/drgcms_form_fields/date_picker.rb +2 -0
- data/app/models/drgcms_form_fields/drgcms_field.rb +2 -1
- data/app/models/drgcms_form_fields/embedded.rb +9 -10
- data/app/models/drgcms_form_fields/file_field.rb +1 -1
- 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/link_to.rb +2 -2
- data/app/models/drgcms_form_fields/method.rb +5 -4
- data/app/models/drgcms_form_fields/multitext_autocomplete.rb +1 -1
- data/app/models/drgcms_form_fields/number_field.rb +4 -3
- data/app/models/drgcms_form_fields/readonly.rb +13 -17
- data/app/models/drgcms_form_fields/select.rb +24 -25
- data/app/models/drgcms_form_fields/text_autocomplete.rb +22 -14
- data/app/renderers/dc_page_renderer.rb +7 -6
- data/app/renderers/dc_poll_renderer.rb +16 -20
- data/app/views/cmsedit/_edit_stuff.html.erb +5 -2
- data/app/views/cmsedit/_form.html.erb +3 -2
- data/app/views/cmsedit/_result.html.erb +21 -18
- 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 +20 -2
- data/config/locales/models_en.yml +7 -5
- data/config/locales/models_sl.yml +12 -9
- data/drg_cms.gemspec +16 -16
- data/lib/drg_cms/version.rb +1 -1
- data/lib/drg_cms.rb +94 -2
- metadata +32 -30
- data/app/models/__dc_dummy.rb +0 -102
@@ -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,14 +89,14 @@ 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
|
99
|
+
def menu_klass
|
89
100
|
(menu_class.blank? ? 'DcMenu' : menu_class).classify.constantize
|
90
101
|
end
|
91
102
|
|
@@ -99,12 +110,13 @@ 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']]
|
107
|
-
end
|
118
|
+
# [['a','b']]
|
119
|
+
#end
|
108
120
|
|
109
121
|
########################################################################
|
110
122
|
# Return choices for selecting policies for the site
|
@@ -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_big_table.rb
CHANGED
@@ -78,10 +78,10 @@ class DcBigTable
|
|
78
78
|
########################################################################
|
79
79
|
# Will return possible choices for specified key prepared for usega in select input field.
|
80
80
|
########################################################################
|
81
|
-
def self.choices4(key, site, locale=nil)
|
81
|
+
def self.choices4(key, site = nil, locale = nil)
|
82
82
|
result = []
|
83
83
|
choices = find_by(key: key, site: site)
|
84
|
-
choices = find_by(key: key, site: nil) if choices.nil?
|
84
|
+
choices = find_by(key: key, site: nil) if site && choices.nil?
|
85
85
|
if choices
|
86
86
|
choices.dc_big_table_values.each do |choice|
|
87
87
|
description = choice.description
|
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,8 +106,9 @@ 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
|
|
@@ -115,8 +116,11 @@ def self.get_filter_field(parent)
|
|
115
116
|
return '' if filter.nil?
|
116
117
|
|
117
118
|
field = get_field_form_definition(filter['field'], parent)
|
118
|
-
return '' if field.nil?
|
119
|
-
|
119
|
+
return '' if field.nil? && filter['input'].nil?
|
120
|
+
|
121
|
+
saved_readonly = parent.form['readonly']
|
122
|
+
parent.form['readonly'] = false # must be
|
123
|
+
field ||= {}
|
120
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'] )
|
@@ -129,35 +133,37 @@ def self.get_filter_field(parent)
|
|
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']
|
136
|
+
field['html'] ||= {}
|
137
|
+
field['html']['size'] = 20
|
134
138
|
# Start with last entered value
|
135
139
|
field['html']['value'] = filter['value'] unless filter['value'] == '#NIL'
|
136
140
|
field['html']['selected'] = field['html']['value'] # for select field
|
137
141
|
# url for filter ON action
|
138
142
|
field['html']['data-url'] = parent.url_for(
|
139
|
-
controller: 'cmsedit',action: :index, filter: 'on',
|
143
|
+
controller: 'cmsedit', action: :index, filter: 'on',
|
140
144
|
table: parent.form['table'], form_name: parent.params['form_name'])
|
141
145
|
url = field['html']['data-url']
|
142
146
|
# remove if present
|
143
147
|
field['with_new'] = nil if field['with_new']
|
144
|
-
# create input field object
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
# return data from object and create html code to display field
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
148
|
+
# create input field object
|
149
|
+
html = ''
|
150
|
+
klass_string = field['type'].camelize
|
151
|
+
klass = DrgcmsFormFields::const_get(klass_string) rescue nil
|
152
|
+
# return data from object and create html code to display field
|
153
|
+
if klass
|
154
|
+
if drg_field = klass.new(parent, nil, field).render rescue nil
|
155
|
+
js = drg_field.js.blank? ? '' : parent.javascript_tag(drg_field.js)
|
156
|
+
html = %(<li class="no-background">
|
157
|
+
<span class="filter_field" data-url="#{url}">#{drg_field.html}
|
158
|
+
#{parent.fa_icon('search lg', class: 'record_filter_field_icon')}
|
159
|
+
#{js}</span></li>)
|
160
|
+
else
|
161
|
+
# Error. Forget filter
|
162
|
+
parent.session[ parent.form['table'] ][:filter] = nil
|
163
|
+
end
|
154
164
|
end
|
155
|
-
|
156
|
-
|
157
|
-
<span class="filter_field" data-url="#{url}">#{object.html}
|
158
|
-
#{parent.fa_icon('search lg', class: 'record_filter_field_icon')}
|
159
|
-
#{js}</span>
|
160
|
-
</li>]
|
165
|
+
parent.form['readonly'] = saved_readonly
|
166
|
+
html
|
161
167
|
end
|
162
168
|
|
163
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.
|
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.
|
@@ -38,18 +38,29 @@
|
|
38
38
|
# which can be persistent, when application is used as Rails plugin.
|
39
39
|
#########################################################################
|
40
40
|
class DcPolicyRole
|
41
|
-
|
42
|
-
|
41
|
+
include Mongoid::Document
|
42
|
+
include Mongoid::Timestamps
|
43
43
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
44
|
+
field :name, type: String
|
45
|
+
field :system_name, type: String
|
46
|
+
field :active, type: Boolean, default: true
|
47
|
+
|
48
|
+
index( { name: 1 }, { unique: true } )
|
49
|
+
index( system_name: 1 )
|
50
|
+
|
51
|
+
validates :name, :length => { :minimum => 4 }
|
52
|
+
validates :name, uniqueness: true
|
53
|
+
|
54
|
+
after_save :cache_clear
|
55
|
+
after_destroy :cache_clear
|
56
|
+
|
57
|
+
####################################################################
|
58
|
+
# Clear cache if cache is configured
|
59
|
+
####################################################################
|
60
|
+
def cache_clear
|
61
|
+
DrgCms.cache_clear(:dc_permission)
|
62
|
+
DrgCms.cache_clear(:dc_site)
|
63
|
+
end
|
53
64
|
|
54
65
|
########################################################################
|
55
66
|
# Return all defined roles as choices for use in select field.
|
data/app/models/dc_temp.rb
CHANGED
@@ -46,7 +46,7 @@ class DcTemp
|
|
46
46
|
########################################################################
|
47
47
|
def initialize(parms = {})
|
48
48
|
super()
|
49
|
-
parms.stringify_keys
|
49
|
+
parms = parms.nil? ? {} : parms.stringify_keys
|
50
50
|
self.key = parms.delete('key') if parms['key']
|
51
51
|
self.active = parms.delete('active') if parms['active']
|
52
52
|
self.order = parms.delete('order') if parms['order']
|
@@ -137,4 +137,11 @@ def self.prepare(key:, clear: nil)
|
|
137
137
|
self.where(key: key)
|
138
138
|
end
|
139
139
|
|
140
|
+
########################################################################
|
141
|
+
# Order data by new key. Will update order field with values from new field
|
142
|
+
########################################################################
|
143
|
+
def self.reorder_by(key, new_order)
|
144
|
+
self.where(key: key).each { |doc| doc.order = data[key]; doc.save }
|
145
|
+
end
|
146
|
+
|
140
147
|
end
|
data/app/models/dc_user_role.rb
CHANGED
@@ -57,8 +57,8 @@ class DcUserRole
|
|
57
57
|
# Determine of role is still active
|
58
58
|
###############################################################################
|
59
59
|
def active?
|
60
|
-
now = Time.
|
61
|
-
|
60
|
+
now = Time.current
|
61
|
+
active && (valid_from.nil? || now > valid_from) && (valid_to.nil? || now < valid_to)
|
62
62
|
end
|
63
63
|
|
64
64
|
end
|
@@ -31,12 +31,17 @@ module DrgcmsFormFields
|
|
31
31
|
# * +type:+ comment (required)
|
32
32
|
# * +caption:+ Caption text written in label place. If set to false comment
|
33
33
|
# will occupy whole row. (required)
|
34
|
-
#
|
34
|
+
# * +html:+ Optional html attributes will be added to div surrounding the comment.
|
35
|
+
#
|
35
36
|
# Form example:
|
36
37
|
# 30:
|
37
38
|
# type: comment
|
38
39
|
# text: myapp.comment_text
|
39
40
|
# caption: false
|
41
|
+
# html:
|
42
|
+
# style: 'color: red'
|
43
|
+
# class: some_class
|
44
|
+
# id: some_id
|
40
45
|
###########################################################################
|
41
46
|
class Comment < DrgcmsField
|
42
47
|
|
@@ -45,7 +50,11 @@ class Comment < DrgcmsField
|
|
45
50
|
###########################################################################
|
46
51
|
def render
|
47
52
|
comment = @yaml['comment'] || @yaml['text']
|
48
|
-
@html
|
53
|
+
@yaml['html'] ||= {}
|
54
|
+
@yaml['html']['class'] = 'dc-comment ' + @yaml['html']['class'].to_s
|
55
|
+
html = @yaml['html'].inject('') { |r, e| r << %( #{e[0]}="#{e[1]}") }
|
56
|
+
|
57
|
+
@html << %(<div #{html}>#{t(comment, comment).gsub("\n",'<br>')}</div>)
|
49
58
|
self
|
50
59
|
end
|
51
60
|
end
|
@@ -78,6 +78,8 @@ def render
|
|
78
78
|
@yaml['options']['lang'] ||= "'#{I18n.locale}'"
|
79
79
|
@yaml['options']['format'] ||= "'#{t('datetimepicker.formats.date')}'"
|
80
80
|
@yaml['options']['timepicker'] = false
|
81
|
+
@yaml['options']['scrollMonth'] ||= false
|
82
|
+
@yaml['options']['scrollInput'] ||= false
|
81
83
|
|
82
84
|
record = record_text_for(@yaml['name'])
|
83
85
|
@html << @parent.text_field(record, @yaml['name'], @yaml['html'])
|
@@ -135,7 +135,8 @@ def ro_standard(value=nil)
|
|
135
135
|
@record.respond_to?(@yaml['name']) ? @record.send(@yaml['name']) : nil
|
136
136
|
end
|
137
137
|
end
|
138
|
-
|
138
|
+
#@html << (value.blank? ? '' : "<div class='dc-readonly'>#{value}</div>")
|
139
|
+
@html << %(<div id="#{@yaml['name']}" class="dc-readonly">#{value}</div>)
|
139
140
|
self
|
140
141
|
end
|
141
142
|
|