drg_cms 0.6.0.1 → 0.6.1.1.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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/drg_cms/drg_cms.js +454 -145
- data/app/assets/javascripts/drg_cms_application.js +1 -1
- data/app/assets/stylesheets/drg_cms/drg_cms.css +635 -244
- data/app/assets/stylesheets/drg_cms/select-multiple.css +18 -12
- data/app/assets/stylesheets/drg_cms_cms.css +1 -1
- data/app/controllers/cmsedit_controller.rb +515 -335
- data/app/controllers/dc_application_controller.rb +378 -111
- data/app/controllers/dc_common_controller.rb +105 -14
- data/app/{controllers → controls}/browse_models_control.rb +0 -0
- data/app/controls/dc_help_control.rb +126 -0
- data/app/{controllers → controls}/dc_page_control.rb +24 -8
- data/app/controls/dc_poll_result_control.rb +88 -0
- data/app/controls/dc_report.rb +223 -0
- data/app/{controllers → controls}/design_element_settings_control.rb +0 -0
- data/app/forms/all_options.yml +44 -9
- data/app/forms/cms_menu.yml +28 -18
- data/app/forms/dc_ad.yml +11 -22
- 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 +20 -16
- data/app/forms/dc_filter.yml +3 -6
- data/app/forms/dc_help_1.yml +109 -0
- data/app/forms/dc_journal.yml +3 -1
- data/app/forms/dc_json_ld.yml +59 -0
- data/app/forms/dc_key_value.yml +32 -0
- data/app/forms/dc_link.yml +1 -1
- data/app/forms/dc_menu.yml +2 -0
- data/app/forms/dc_menu_item.yml +2 -0
- data/app/forms/dc_page.yml +3 -5
- 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 +83 -0
- data/app/forms/dc_poll_result_export.yml +35 -0
- data/app/forms/dc_seo.yml +33 -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/forms/json_ld_schema.yml +168 -0
- data/app/helpers/cms_common_helper.rb +375 -0
- data/app/helpers/cms_edit_helper.rb +506 -0
- data/app/helpers/cms_helper.rb +268 -0
- data/app/helpers/cms_index_helper.rb +580 -0
- data/app/helpers/dc_application_helper.rb +218 -306
- data/app/models/concerns/dc_page_concern.rb +40 -6
- data/app/models/concerns/dc_policy_rule_concern.rb +20 -8
- data/app/models/concerns/dc_seo_concern.rb +66 -0
- data/app/models/concerns/dc_site_concern.rb +67 -44
- data/app/models/concerns/dc_user_concern.rb +57 -18
- data/app/models/dc_design.rb +30 -18
- data/app/models/dc_filter.rb +22 -13
- data/app/models/dc_json_ld.rb +152 -0
- data/app/models/dc_key_value.rb +48 -0
- data/app/models/dc_key_value_store.rb +1 -0
- data/app/models/dc_memory.rb +8 -1
- data/app/models/dc_page.rb +0 -1
- 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 +39 -19
- data/app/models/dc_poll_result.rb +46 -0
- data/app/models/dc_temp.rb +140 -0
- data/app/models/dc_user_role.rb +2 -2
- data/app/models/drgcms_form_fields.rb +12 -1
- data/app/models/drgcms_form_fields/action.rb +61 -0
- data/app/models/drgcms_form_fields/comment.rb +8 -4
- data/app/models/drgcms_form_fields/date_picker.rb +11 -9
- data/app/models/drgcms_form_fields/date_select.rb +1 -1
- data/app/models/drgcms_form_fields/datetime_picker.rb +12 -10
- data/app/models/drgcms_form_fields/datetime_select.rb +1 -1
- data/app/models/drgcms_form_fields/drgcms_field.rb +55 -9
- data/app/models/drgcms_form_fields/embedded.rb +26 -16
- data/app/models/drgcms_form_fields/file_field.rb +52 -0
- data/app/models/drgcms_form_fields/file_select.rb +2 -2
- data/app/models/drgcms_form_fields/hash_field.rb +90 -0
- data/app/models/drgcms_form_fields/hidden_field.rb +1 -1
- data/app/models/drgcms_form_fields/html_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 +23 -14
- data/app/models/drgcms_form_fields/number_field.rb +15 -6
- data/app/models/drgcms_form_fields/radio.rb +96 -0
- data/app/models/drgcms_form_fields/readonly.rb +2 -2
- data/app/models/drgcms_form_fields/select.rb +92 -29
- data/app/models/drgcms_form_fields/text_area.rb +1 -1
- data/app/models/drgcms_form_fields/text_autocomplete.rb +31 -17
- data/app/models/drgcms_form_fields/text_field.rb +1 -1
- data/app/models/drgcms_form_fields/text_with_select.rb +6 -3
- data/app/models/drgcms_form_fields/tree_select.rb +15 -4
- data/app/{helpers → renderers}/dc_ad_renderer.rb +0 -0
- data/app/{helpers → renderers}/dc_big_menu_renderer.rb +1 -0
- data/app/{helpers → renderers}/dc_captcha_renderer.rb +0 -0
- data/app/{helpers → renderers}/dc_common_renderer.rb +0 -0
- data/app/{helpers → renderers}/dc_gallery_renderer.rb +1 -0
- data/app/{helpers → renderers}/dc_menu_renderer.rb +11 -4
- data/app/{helpers → renderers}/dc_page_renderer.rb +1 -0
- data/app/{helpers → renderers}/dc_part_renderer.rb +5 -4
- data/app/{helpers → renderers}/dc_piece_renderer.rb +1 -1
- data/app/{helpers → renderers}/dc_poll_renderer.rb +91 -64
- data/app/{helpers → renderers}/dc_renderer.rb +1 -0
- data/app/{helpers → renderers}/dc_simple_menu_renderer.rb +1 -0
- data/app/views/cmsedit/{remove_edit_stuff.js.erb → __remove_edit_stuff.js.erb} +0 -0
- data/app/views/cmsedit/{show.html.erb → __show.html.erb} +0 -0
- data/app/views/cmsedit/_edit_stuff.html.erb +4 -25
- data/app/views/cmsedit/_form.html.erb +4 -3
- data/app/views/cmsedit/_result.html.erb +2 -3
- data/app/views/cmsedit/edit.html.erb +4 -1
- data/app/views/cmsedit/index.html.erb +7 -1
- data/app/views/cmsedit/new.html.erb +3 -1
- 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 +27 -3
- data/config/locales/drgcms_sl.yml +32 -5
- data/config/locales/models_en.yml +65 -17
- data/config/locales/models_sl.yml +69 -18
- data/drg_cms.gemspec +1 -1
- data/lib/drg_cms.rb +61 -1
- data/lib/drg_cms/version.rb +1 -1
- data/lib/generators/new_drg_form/new_drg_form_generator.rb +9 -2
- data/lib/tasks/database.rake +6 -56
- metadata +73 -54
- data/app/assets/stylesheets/drg_cms/__jquery-ui.css +0 -339
- data/app/helpers/application_helper.rb +0 -2
- data/app/helpers/cmsedit_helper.rb +0 -888
- data/app/models/dc_dummy.rb +0 -102
- data/test/fixtures/drg_cms_test_data.rb +0 -87
data/app/models/dc_design.rb
CHANGED
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
# updated_at Time updated_at
|
|
32
32
|
# description String Short description of design
|
|
33
33
|
# body String Body of design which will be rendered like any Rails view
|
|
34
|
+
# params String Parameters used by design
|
|
34
35
|
# css String CSS for design
|
|
35
36
|
# rails_view String Rails view (file) name which will be used to render design
|
|
36
37
|
# author String Creater if design
|
|
@@ -86,24 +87,35 @@
|
|
|
86
87
|
# <style type="text/css"><%= @css.html_safe %></style><%= javascript_tag @js %>
|
|
87
88
|
########################################################################
|
|
88
89
|
class DcDesign
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
|
107
119
|
|
|
108
120
|
########################################################################
|
|
109
121
|
# Return choices for select for design_id.
|
data/app/models/dc_filter.rb
CHANGED
|
@@ -110,45 +110,54 @@ def self.get_filter_field(parent)
|
|
|
110
110
|
return '' if parent.session[ parent.form['table'] ].nil?
|
|
111
111
|
filter = parent.session[ parent.form['table'] ][:filter]
|
|
112
112
|
return '' if filter.nil?
|
|
113
|
-
|
|
113
|
+
|
|
114
114
|
filter = YAML.load(filter) rescue nil
|
|
115
115
|
return '' if filter.nil?
|
|
116
|
-
|
|
116
|
+
|
|
117
117
|
field = get_field_form_definition(filter['field'], parent)
|
|
118
118
|
return '' if field.nil? and filter['input'].nil?
|
|
119
119
|
field = {} if field.nil?
|
|
120
|
-
# If field has choices available in labels, use them. This is most likely select input field.
|
|
120
|
+
# If field has choices available in labels, use them. This is most likely select input field.
|
|
121
121
|
if field['name']
|
|
122
122
|
choices = parent.t('helpers.label.' + parent.form['table'] + '.choices4_' + field['name'] )
|
|
123
123
|
unless choices.match( 'translation missing' ) or choices.match('helpers.label')
|
|
124
124
|
field['choices'] = choices
|
|
125
125
|
end
|
|
126
126
|
end
|
|
127
|
-
# field redefined with input keyword. Name must start with _
|
|
127
|
+
# field redefined with input keyword. Name must start with _
|
|
128
128
|
field['name'] = '_filter_field'
|
|
129
129
|
field['type'] = filter['input'] if filter['input'].to_s.size > 5
|
|
130
130
|
field['type'] ||= 'text_field'
|
|
131
131
|
field['readonly'] = false # must be
|
|
132
132
|
field['html'] ||= {}
|
|
133
133
|
field['html']['size'] = 20
|
|
134
|
-
# Start with last entered value
|
|
135
|
-
field['html']['value']
|
|
134
|
+
# Start with last entered value
|
|
135
|
+
field['html']['value'] = filter['value'] unless filter['value'] == '#NIL'
|
|
136
136
|
field['html']['selected'] = field['html']['value'] # for select field
|
|
137
|
-
# url for filter ON action
|
|
137
|
+
# url for filter ON action
|
|
138
138
|
field['html']['data-url'] = parent.url_for(
|
|
139
139
|
controller: 'cmsedit',action: :index, filter: 'on',
|
|
140
|
-
table: parent.form['table'], form_name: parent.
|
|
140
|
+
table: parent.form['table'], form_name: parent.params['form_name'])
|
|
141
141
|
url = field['html']['data-url']
|
|
142
|
+
# remove if present
|
|
143
|
+
field['with_new'] = nil if field['with_new']
|
|
142
144
|
# create input field object
|
|
143
145
|
klas_string = field['type'].camelize
|
|
144
146
|
klas = DrgcmsFormFields::const_get(klas_string) rescue nil
|
|
145
147
|
return '' if klas.nil?
|
|
146
148
|
# return data from object and create html code to display field
|
|
147
|
-
object = klas.new(parent, nil, field).render
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
parent.
|
|
151
|
-
|
|
149
|
+
object = klas.new(parent, nil, field).render rescue nil
|
|
150
|
+
# Error. Forget filter and return
|
|
151
|
+
if object.nil?
|
|
152
|
+
parent.session[ parent.form['table'] ][:filter] = nil
|
|
153
|
+
return ''
|
|
154
|
+
end
|
|
155
|
+
js = object.js.blank? ? '' : parent.javascript_tag(object.js)
|
|
156
|
+
%Q[<li class="no-background">
|
|
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>]
|
|
152
161
|
end
|
|
153
162
|
|
|
154
163
|
######################################################################
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Copyright (c) 2019+ Damjan Rems
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
#++
|
|
23
|
+
|
|
24
|
+
########################################################################
|
|
25
|
+
# == Schema information
|
|
26
|
+
#
|
|
27
|
+
# Collection name: dc_json_ld : JSON_LD data for site optimization
|
|
28
|
+
#
|
|
29
|
+
# _id BSON::ObjectId _id
|
|
30
|
+
# type String Type of structure
|
|
31
|
+
# data String Structure data in YAML
|
|
32
|
+
# dc_json_lds Object Can embed substructure
|
|
33
|
+
# created_at Time created_at
|
|
34
|
+
# updated_at Time Last updated at
|
|
35
|
+
# created_by BSON::ObjectId created_by
|
|
36
|
+
# updated_by BSON::ObjectId Last updated by
|
|
37
|
+
#
|
|
38
|
+
########################################################################
|
|
39
|
+
class DcJsonLd
|
|
40
|
+
include Mongoid::Document
|
|
41
|
+
include Mongoid::Timestamps
|
|
42
|
+
|
|
43
|
+
field :name, type: String
|
|
44
|
+
field :type, type: String
|
|
45
|
+
field :data, type: String
|
|
46
|
+
field :active, type: Boolean, default: true
|
|
47
|
+
|
|
48
|
+
embeds_many :dc_json_lds, :cyclic => true
|
|
49
|
+
|
|
50
|
+
field :created_by, type: BSON::ObjectId
|
|
51
|
+
field :updated_by, type: BSON::ObjectId
|
|
52
|
+
|
|
53
|
+
validates :name, presence: true
|
|
54
|
+
validates :type, presence: true
|
|
55
|
+
|
|
56
|
+
##########################################################################
|
|
57
|
+
# Returns JSON LD data as YAML
|
|
58
|
+
##########################################################################
|
|
59
|
+
def get_json_ld(parent_data)
|
|
60
|
+
yaml = (YAML.load(self.data) rescue nil) || {}
|
|
61
|
+
yaml['@type'] = self.type if yaml.size > 0
|
|
62
|
+
if dc_json_lds.size > 0
|
|
63
|
+
dc_json_lds.where(active: true).each do |element|
|
|
64
|
+
yml = element.get_json_ld(parent_data)
|
|
65
|
+
if yml.size > 0
|
|
66
|
+
yaml[element.name] ||= []
|
|
67
|
+
yaml[element.name] << yml
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
yaml
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
########################################################################
|
|
75
|
+
# Searches forms path for file_name and returns full file name or nil if not found.
|
|
76
|
+
#
|
|
77
|
+
# @param [String] Form file name. File name can be passed as gem_name.filename. This can
|
|
78
|
+
# be useful when you are extending form but want to retain same name as original form
|
|
79
|
+
# For example. You are extending dc_user form from drg_cms gem and want to
|
|
80
|
+
# retain same dc_user name. This can be done by setting drg_cms.dc_user to extend option.
|
|
81
|
+
#
|
|
82
|
+
# @return [String] Form file name including path or nil if not found.
|
|
83
|
+
########################################################################
|
|
84
|
+
def self.dc_find_form_file(form_file)
|
|
85
|
+
form_path=nil
|
|
86
|
+
if form_file.match(/\.|\//)
|
|
87
|
+
form_path,form_file=form_file.split(/\.|\//)
|
|
88
|
+
end
|
|
89
|
+
DrgCms.paths(:forms).reverse.each do |path|
|
|
90
|
+
f = "#{path}/#{form_file}.yml"
|
|
91
|
+
return f if File.exist?(f) and (form_path.nil? or path.to_s.match(/\/#{form_path}\//i))
|
|
92
|
+
end
|
|
93
|
+
p "Form file #{form_file} not found!"
|
|
94
|
+
nil
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
########################################################################
|
|
98
|
+
# Find document by ids when document are embedded into main d even if embedded
|
|
99
|
+
#
|
|
100
|
+
# @param [tables] Tables parameter as send in url. Tables are separated by ;
|
|
101
|
+
# @param [ids] ids as send in url. ids are separated by ;
|
|
102
|
+
#
|
|
103
|
+
# @return [Document]
|
|
104
|
+
########################################################################
|
|
105
|
+
def self.find_document_by_ids(tables, ids)
|
|
106
|
+
collection = tables.split(';').first.classify.constantize
|
|
107
|
+
ar_ids = ids.split(';')
|
|
108
|
+
# Find top document
|
|
109
|
+
document = collection.find(ar_ids.shift)
|
|
110
|
+
# Search for embedded document
|
|
111
|
+
ar_ids.each {|id| document = document.dc_json_lds.find(id) }
|
|
112
|
+
document
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
#########################################################################
|
|
116
|
+
# Returns possible options for type select field on form.
|
|
117
|
+
#########################################################################
|
|
118
|
+
def self.choices4_type()
|
|
119
|
+
yaml = YAML.load_file( dc_find_form_file('json_ld_schema') )
|
|
120
|
+
|
|
121
|
+
yaml.inject([]) {|result, schema_name| result << schema_name.first }
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
#########################################################################
|
|
125
|
+
# Create menu to add schema element. Called from DRGCMS Form action.
|
|
126
|
+
#########################################################################
|
|
127
|
+
def self.add_schema_menu(parent)
|
|
128
|
+
yaml = YAML.load_file( dc_find_form_file('json_ld_schema') )
|
|
129
|
+
if (level = parent.params['ids'].split(';').size) == 1
|
|
130
|
+
# select only top level elements
|
|
131
|
+
yaml.delete_if { |schema_name, schema_data| schema_data['level'].nil? }
|
|
132
|
+
else
|
|
133
|
+
# select only elemets which are subelements of type
|
|
134
|
+
parent_type = self.find_document_by_ids(parent.params['table'],parent.params['ids']).type
|
|
135
|
+
_yaml = []
|
|
136
|
+
yaml[parent_type].each do |name, data|
|
|
137
|
+
next unless data.class == Hash
|
|
138
|
+
_yaml << [data['type'], yaml[data['type']] ] if data['type'] and yaml[data['type']]
|
|
139
|
+
end
|
|
140
|
+
yaml = _yaml
|
|
141
|
+
end
|
|
142
|
+
# create menu code
|
|
143
|
+
html = '<ul>'
|
|
144
|
+
yaml.each do |schema_name, schema_data|
|
|
145
|
+
next if level == 1 and schema_data['level'].nil?
|
|
146
|
+
url = "/dc_common/add_json_ld_schema?table=#{parent.params['table']}&ids=#{parent.params['ids']}&schema=#{schema_name}&url=#{parent.request.url}"
|
|
147
|
+
html << %Q[<li class="dc-link-ajax dc-animate" data-url="#{url}">#{schema_name}</li>]
|
|
148
|
+
end
|
|
149
|
+
html << '</ul>'
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Copyright (c) 2019+ Damjan Rems
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
|
5
|
+
# a copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
# the following conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be
|
|
13
|
+
# included in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
#++
|
|
23
|
+
|
|
24
|
+
#########################################################################
|
|
25
|
+
# == Schema information
|
|
26
|
+
#
|
|
27
|
+
# Collection name: dc_key_value : Key value items
|
|
28
|
+
#
|
|
29
|
+
# _id BSON::ObjectId _id
|
|
30
|
+
# key String Key
|
|
31
|
+
# value String Value
|
|
32
|
+
#
|
|
33
|
+
# Key-Value items can be embedded into any model and are replacing Hash fields.
|
|
34
|
+
# They can also appear cyclic if required.
|
|
35
|
+
#########################################################################
|
|
36
|
+
class DcKeyValue
|
|
37
|
+
include Mongoid::Document
|
|
38
|
+
include Mongoid::Timestamps
|
|
39
|
+
|
|
40
|
+
field :key, type: String
|
|
41
|
+
field :value, type: String
|
|
42
|
+
|
|
43
|
+
field :created_by, type: BSON::ObjectId
|
|
44
|
+
field :updated_by, type: BSON::ObjectId
|
|
45
|
+
|
|
46
|
+
embedded_in :key_values, polymorphic: true
|
|
47
|
+
|
|
48
|
+
end
|
data/app/models/dc_memory.rb
CHANGED
|
@@ -74,12 +74,19 @@ def initialize(parms = {})
|
|
|
74
74
|
end
|
|
75
75
|
|
|
76
76
|
########################################################################
|
|
77
|
-
#
|
|
77
|
+
# Return id field
|
|
78
78
|
########################################################################
|
|
79
79
|
def id()
|
|
80
80
|
@internals['id']
|
|
81
81
|
end
|
|
82
82
|
|
|
83
|
+
########################################################################
|
|
84
|
+
# Respond_to should always return true.
|
|
85
|
+
########################################################################
|
|
86
|
+
def id=(value)
|
|
87
|
+
@internals['id'] = value
|
|
88
|
+
end
|
|
89
|
+
|
|
83
90
|
########################################################################
|
|
84
91
|
# Respond_to should always return true.
|
|
85
92
|
########################################################################
|
data/app/models/dc_page.rb
CHANGED
|
@@ -31,7 +31,6 @@
|
|
|
31
31
|
# created_at Time created_at
|
|
32
32
|
# updated_at Time Updated
|
|
33
33
|
# subject String Articles subject
|
|
34
|
-
# title String Browser title. Optimization for SEO.
|
|
35
34
|
# subject_link String Friendly link defined
|
|
36
35
|
# alt_link String Alternative link, by which page could be found
|
|
37
36
|
# sub_subject String Sub subject, short description of text
|
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
|