drg_cms 0.6.0.8 → 0.6.1.0

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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/drg_cms/drg_cms.js +100 -58
  3. data/app/assets/stylesheets/drg_cms/drg_cms.css +177 -43
  4. data/app/controllers/cmsedit_controller.rb +149 -145
  5. data/app/controllers/dc_application_controller.rb +235 -113
  6. data/app/controllers/dc_common_controller.rb +32 -3
  7. data/app/controls/dc_help_control.rb +126 -0
  8. data/app/controls/dc_report.rb +5 -7
  9. data/app/forms/all_options.yml +10 -4
  10. data/app/forms/cms_menu.yml +7 -1
  11. data/app/forms/dc_category.yml +2 -1
  12. data/app/forms/dc_design.yml +1 -0
  13. data/app/forms/dc_help_1.yml +109 -0
  14. data/app/forms/dc_journal.yml +3 -1
  15. data/app/forms/dc_link.yml +1 -1
  16. data/app/forms/dc_menu.yml +2 -0
  17. data/app/forms/dc_menu_item.yml +1 -0
  18. data/app/forms/dc_page.yml +2 -0
  19. data/app/forms/dc_part.yml +1 -0
  20. data/app/forms/dc_piece.yml +1 -0
  21. data/app/forms/dc_poll.yml +3 -0
  22. data/app/forms/dc_simple_menu.yml +2 -0
  23. data/app/forms/dc_site.yml +2 -6
  24. data/app/forms/dc_user.yml +27 -11
  25. data/app/forms/dc_user_role.yml +3 -0
  26. data/app/helpers/cms_common_helper.rb +69 -4
  27. data/app/helpers/cms_edit_helper.rb +32 -24
  28. data/app/helpers/cms_helper.rb +64 -26
  29. data/app/helpers/cms_index_helper.rb +84 -72
  30. data/app/helpers/dc_application_helper.rb +33 -24
  31. data/app/models/concerns/dc_page_concern.rb +11 -2
  32. data/app/models/concerns/dc_policy_rule_concern.rb +20 -8
  33. data/app/models/concerns/dc_site_concern.rb +56 -44
  34. data/app/models/concerns/dc_user_concern.rb +57 -18
  35. data/app/models/dc_design.rb +29 -19
  36. data/app/models/dc_key_value_store.rb +1 -0
  37. data/app/models/dc_permission.rb +19 -9
  38. data/app/models/dc_policy.rb +25 -14
  39. data/app/models/dc_policy_role.rb +22 -11
  40. data/app/models/dc_temp.rb +1 -1
  41. data/app/models/dc_user_role.rb +2 -2
  42. data/app/models/drgcms_form_fields/embedded.rb +5 -8
  43. data/app/models/drgcms_form_fields/file_field.rb +1 -1
  44. data/app/models/drgcms_form_fields/file_select.rb +2 -2
  45. data/app/models/drgcms_form_fields/hash_field.rb +11 -7
  46. data/app/models/drgcms_form_fields/link_to.rb +2 -2
  47. data/app/models/drgcms_form_fields/method.rb +5 -4
  48. data/app/models/drgcms_form_fields/multitext_autocomplete.rb +1 -1
  49. data/app/models/drgcms_form_fields/select.rb +10 -9
  50. data/app/models/drgcms_form_fields/text_autocomplete.rb +2 -2
  51. data/app/views/cmsedit/edit.html.erb +2 -0
  52. data/app/views/cmsedit/index.html.erb +2 -1
  53. data/app/views/cmsedit/new.html.erb +2 -0
  54. data/app/views/dc_common/_help.html.erb +8 -0
  55. data/app/views/layouts/models.html.erb +2 -1
  56. data/config/locales/drgcms_en.yml +12 -0
  57. data/config/locales/drgcms_sl.yml +15 -0
  58. data/config/locales/models_en.yml +5 -5
  59. data/config/locales/models_sl.yml +7 -6
  60. data/lib/drg_cms.rb +58 -0
  61. data/lib/drg_cms/version.rb +1 -1
  62. metadata +5 -3
  63. data/app/models/__dc_dummy.rb +0 -102
@@ -1,6 +1,5 @@
1
- #coding: utf-8
2
1
  #--
3
- # Copyright (c) 2012-2013 Damjan Rems
2
+ # Copyright (c) 2012+ Damjan Rems
4
3
  #
5
4
  # Permission is hereby granted, free of charge, to any person obtaining
6
5
  # a copy of this software and associated documentation files (the
@@ -125,6 +124,8 @@ def process_login
125
124
  if user and user.authenticate(params[:record][:password])
126
125
  fill_login_data(user, params[:record][:remember_me].to_i == 1)
127
126
  return redirect_to params[:return_to] || '/'
127
+ else
128
+ clear_login_data # on the safe side
128
129
  end
129
130
  end
130
131
  flash[:error] = t('drgcms.invalid_username')
@@ -149,7 +150,6 @@ def login
149
150
  if user and user.active
150
151
  fill_login_data(user, true)
151
152
  return redirect_to params[:return_to]
152
-
153
153
  else
154
154
  clear_login_data # on the safe side
155
155
  end
@@ -269,8 +269,37 @@ def add_json_ld_schema
269
269
  render json: {'reload_' => 1}
270
270
  end
271
271
 
272
+ ########################################################################
273
+ # Will provide help data
274
+ ########################################################################
275
+ def help
276
+ form_name = params[:form_name] || params[:table]
277
+ @form = form_name ? YAML.load_file(dc_find_form_file(form_name)) : {}
278
+ return render json: {} if @form.nil?
279
+
280
+ help_file_name = @form['help'] || @form['extend'] || params[:form_name] || params[:table]
281
+ help_file_name = find_help_file(help_file_name)
282
+ @help = YAML.load_file(help_file_name) if help_file_name
283
+ # no auto generated help on index action
284
+ return render json: {} if params[:type] == 'index' && @help.nil?
285
+
286
+ render json: { popup: render_to_string(partial: 'help') }
287
+ end
288
+
272
289
  protected
273
290
 
291
+ ########################################################################
292
+ # Will search for help file and return it's path if found
293
+ ########################################################################
294
+ def find_help_file(help_file_name)
295
+ file_name = nil
296
+ DrgCms.paths(:forms).reverse.each do |path|
297
+ f = "#{path}/help/#{help_file_name}.#{I18n.locale}"
298
+ file_name = f and break if File.exist?(f)
299
+ end
300
+ file_name
301
+ end
302
+
274
303
  ########################################################################
275
304
  # Subroutine of add_json_ld_schema for adding one element
276
305
  ########################################################################
@@ -0,0 +1,126 @@
1
+ #--
2
+ # Copyright (c) 2021+ 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
+ # Controls for creating help files
26
+ ######################################################################
27
+ module DcHelpControl
28
+
29
+ ######################################################################
30
+ # Will fill dc_temp with help documents found in a defined project directory.
31
+ ######################################################################
32
+ def project_refresh
33
+ DcTemp.clear(temp_key)
34
+ if params[:record][:select_project].present?
35
+ # far less complicated if saved to session
36
+ session[:help_project] = params[:record][:select_project]
37
+ session[:help_lang] = params[:record][:lang_1]
38
+ help_dir_name = "#{session[:help_project]}/help/"
39
+ # create help directory if not yet exists
40
+ FileUtils.mkdir(help_dir_name) unless File.exist?(help_dir_name)
41
+ Dir["#{help_dir_name}*"].each do |file_name|
42
+ lang = File.extname(file_name).sub('.','')
43
+ next unless lang == session[:help_lang]
44
+
45
+ DcTemp.new(key: temp_key,
46
+ project: session[:help_project],
47
+ form_name: File.basename(file_name,'.*'),
48
+ lang: lang,
49
+ updated_at: File.mtime(file_name)).save
50
+ end
51
+ end
52
+ render json: { url: url_for(controller: :cmsedit, table: :dc_temp, form_name: :dc_help_1) }
53
+ end
54
+
55
+ ######################################################################
56
+ # Will populate fields with default values
57
+ ######################################################################
58
+ def dc_new_record
59
+ @record.project = session[:help_project]
60
+ @record.lang = session[:help_lang]
61
+ end
62
+
63
+ ######################################################################
64
+ # Will read data from help file
65
+ ######################################################################
66
+ def dc_before_edit
67
+ file_name = "#{session[:help_project]}/help/#{@record.form_name}.#{session[:help_lang]}"
68
+ data = YAML.load_file(file_name)
69
+ @record.index = data['index']
70
+ @record.form = data['form']
71
+ flash[:warning] = "Use only in development!" unless Rails.env.development?
72
+ end
73
+
74
+ ######################################################################
75
+ # Will save data to help file
76
+ ######################################################################
77
+ def dc_before_save
78
+ rec = params[:record]
79
+ file_name = "#{session[:help_project]}/help/#{@record.form_name}.#{@record.lang}"
80
+ data = { 'index' => @record.index, 'form' => @record.form }
81
+ File.write(file_name, data.to_yaml)
82
+ end
83
+
84
+ ######################################################################
85
+ # Will return query to report data
86
+ ######################################################################
87
+ def data_filter
88
+ DcTemp.where(key: temp_key).order_by(order: 1)
89
+ end
90
+
91
+ private
92
+
93
+ ######################################################################
94
+ # Will return choices for select project input field on a form
95
+ ######################################################################
96
+ def self.choices_for_project
97
+ r = DrgCms.paths(:forms).map do |path|
98
+ path = path.to_s
99
+ a = path.split('/')
100
+ project = a[a.size - 3]
101
+ project = if project == 'app'
102
+ a[a.size - 4] + ' : ' + a.last(2).join('/')
103
+ else
104
+ project + ' : ' + a.last
105
+ end
106
+ [project, path]
107
+ end
108
+ [[I18n.t('drgcms.dc_help.project'), nil]] + r.sort
109
+ end
110
+
111
+ ######################################################################
112
+ # Will return choices for selecting help file name, based on forms already
113
+ # present in forms directory.
114
+ ######################################################################
115
+ def self.choices_for_form_name(session)
116
+ Dir["#{session[:help_project]}/*.yml"].map { |file_name| File.basename(file_name,'.*') }.sort
117
+ end
118
+
119
+ ######################################################################
120
+ # Will return temp key for data saved in dc_temp file
121
+ ######################################################################
122
+ def temp_key
123
+ "dc-help-#{session[:user_id]}"
124
+ end
125
+
126
+ end
@@ -36,14 +36,12 @@ def dc_new_record
36
36
  end
37
37
 
38
38
  ######################################################################
39
- # Check if report option is present in form and shuffle form, so it can
40
- # be used to display result.
39
+ # If exists, set report section as form, so it can be used to display result.
41
40
  ######################################################################
42
41
  def dc_update_form
43
- return unless @form && @form['report'] && params[:table] = 'dc_temp'
42
+ return unless @form && @form['report'] && params[:table] == 'dc_temp'
44
43
 
45
- # copy form data under report option to top
46
- @form['report'].each { |key, data| @form[key] = data }
44
+ @form = @form['report']
47
45
  end
48
46
 
49
47
  ######################################################################
@@ -118,7 +116,7 @@ end
118
116
  # Will write bulk data to dc_temp collection.
119
117
  ######################################################################
120
118
  def bulk_write(doc, the_end = false)
121
- if doc.class == TrueClass
119
+ if doc.nil? || doc.class == TrueClass
122
120
  the_end = true
123
121
  else
124
122
  @bulk << doc
@@ -134,7 +132,7 @@ end
134
132
  # Export data to Excel
135
133
  ######################################################################
136
134
  def export_to_excel(report_id)
137
- read_drg_cms_form if @form.blank?
135
+ read_drg_form if @form.blank?
138
136
  # use report options if present
139
137
  columns = (@form['report'] ? @form['report'] : @form)['result_set']['columns'].sort
140
138
 
@@ -17,9 +17,7 @@ javascript code
17
17
 
18
18
  index:
19
19
  filter: name, id as text_field
20
- select_fields: id,name
21
- deny_fields: body,email
22
-
20
+
23
21
  actions: standard
24
22
 
25
23
  actions:
@@ -58,6 +56,8 @@ result_set:
58
56
  footer: custom_footer
59
57
  actions_width: 100
60
58
  per_page: 10
59
+ select_fields: id,name
60
+ deny_fields: body,email
61
61
 
62
62
  dblclick:
63
63
  table: model_name
@@ -196,7 +196,13 @@ form:
196
196
  eval: ModelName.choices4_site
197
197
  eval: dc_big_table 'key-name'
198
198
  html:
199
- include_blank: true
199
+ include_blank: true
200
+ 90:
201
+ name: kats
202
+ type: multitext_autocomplete
203
+ search: dc_category.name
204
+ with_new: model_name
205
+ size: 30
200
206
 
201
207
  40:
202
208
  name: operation
@@ -127,10 +127,16 @@ menu:
127
127
  controller: cmsedit
128
128
  icon: trash-o lg
129
129
  table: dc_removed_url
130
+ 400:
131
+ caption: drgcms.dc_help.title
132
+ controller: cmsedit
133
+ icon: question-circle lg
134
+ table: dc_temp
135
+ form_name: dc_help_1
130
136
  500:
131
137
  caption: helpers.label.dc_journal.tabletitle
132
138
  controller: cmsedit
133
- icon: undo lg
139
+ icon: history lg
134
140
  table: dc_journal
135
141
 
136
142
  600:
@@ -9,7 +9,8 @@ index:
9
9
  result_set:
10
10
  actions:
11
11
  1: edit
12
- 2: delete
12
+ 2: duplicate
13
+ 5: delete
13
14
 
14
15
  columns:
15
16
  1:
@@ -77,6 +77,7 @@ form:
77
77
  10:
78
78
  name: dc_parts
79
79
  type: embedded
80
+ caption: false
80
81
  form_name: dc_part
81
82
  html:
82
83
  height: 1000
@@ -0,0 +1,109 @@
1
+ ## Form for creating help files
2
+ ---
3
+ table: dc_temp
4
+ title: drgcms.dc_help.title
5
+ control: dc_help
6
+
7
+ index:
8
+ actions:
9
+
10
+ 10:
11
+ type: field
12
+ name: select_project
13
+ field_type: select
14
+ caption: drgcms.dc_help.project
15
+ eval: DcHelpControl.choices_for_project
16
+ default:
17
+ eval: '@parent.session[:help_project]'
18
+
19
+ 20:
20
+ type: field
21
+ name: lang_1
22
+ caption: drgcms.dc_help.lang
23
+ field_type: text_field
24
+ size: 5
25
+ default:
26
+ eval: '@parent.session[:help_lang]'
27
+ html:
28
+ placeholder: drgcms.dc_help.lang
29
+
30
+ 50:
31
+ type: ajax
32
+ caption: drgcms.dc_help.project_refresh
33
+ title: drgcms.dc_help.project_refresh_title
34
+ icon: refresh
35
+ action: run
36
+ method: post
37
+ control: dc_help.project_refresh
38
+
39
+ 60: new
40
+
41
+ result_set:
42
+ filter: data_filter
43
+ actions:
44
+ 1: edit
45
+ columns:
46
+ 10:
47
+ name: form_name
48
+ caption: drgcms.dc_help.form_name
49
+ width: 10%
50
+ 20:
51
+ name: lang
52
+ caption: drgcms.dc_help.lang
53
+ width: 10%
54
+ 30:
55
+ name: updated_at
56
+ caption: drgcms.dc_help.updated_at
57
+ width: 10%
58
+ format: T
59
+
60
+ form:
61
+ actions:
62
+ 1: back
63
+ 2: save
64
+
65
+ title:
66
+ edit: dc_help edit_title
67
+ show: dc_help show_title
68
+
69
+ tabs:
70
+ 1basic:
71
+ caption: drgcms.dc_help.1basic
72
+ 10:
73
+ name: project
74
+ type: readonly
75
+ size: 20
76
+ 20:
77
+ name: form_name
78
+ caption: drgcms.dc_help.form_name
79
+ type: text_with_select
80
+ eval: DcHelpControl.choices_for_form_name(@parent.session)
81
+ size: 20
82
+ html:
83
+ minlength: 4
84
+ 30:
85
+ name: lang
86
+ caption: drgcms.dc_help.lang
87
+ type: text_field
88
+ size: 2
89
+ html:
90
+ minlength: 2
91
+ maxlength: 2
92
+
93
+ 2index:
94
+ caption: drgcms.dc_help.2index
95
+ 10:
96
+ name: index
97
+ caption: false
98
+ line: top
99
+ type: html_field
100
+ options: "height: 600"
101
+
102
+ 3form:
103
+ caption: drgcms.dc_help.3form
104
+ 10:
105
+ name: form
106
+ caption: false
107
+ line: top
108
+ type: html_field
109
+ options: "height: 600"
@@ -14,9 +14,11 @@ result_set:
14
14
  columns:
15
15
  10:
16
16
  name: operation
17
+ width: 10%
17
18
  15:
18
19
  name: time
19
- 20:
20
+ width: 10%
21
+ 20:
20
22
  name: user_id
21
23
  eval: dc_name4_id,dc_user,first_name
22
24
  30:
@@ -51,7 +51,7 @@ form:
51
51
  name: page_id
52
52
  type: text_autocomplete
53
53
  table:
54
- eval: '@parent.session[:site_page_table]'
54
+ eval: '@parent.dc_get_site.page_class'
55
55
  search: subject
56
56
  size: 60
57
57
 
@@ -62,6 +62,7 @@ form:
62
62
  10:
63
63
  name: dc_menu_items
64
64
  type: embedded
65
+ caption: false
65
66
  form_name: dc_menu_item
66
67
  html:
67
68
  height: 1000
@@ -69,6 +70,7 @@ form:
69
70
  tab3:
70
71
  20:
71
72
  name: css
73
+ caption: false
72
74
  type: text_area
73
75
  html:
74
76
  size: 100x50