drg_cms 0.6.1.9 → 0.7.0.2

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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +260 -0
  3. data/MIT-LICENSE +1 -1
  4. data/README.md +9 -5
  5. data/app/assets/javascripts/drg_cms/drg_cms.js +69 -32
  6. data/app/assets/javascripts/drg_cms_application.js +0 -2
  7. data/app/assets/javascripts/drg_cms_cms.js +2 -3
  8. data/app/assets/stylesheets/drg_cms/drg_cms.css +89 -26
  9. data/app/assets/stylesheets/drg_cms/jstree.css +32 -27
  10. data/app/assets/stylesheets/drg_cms/select-multiple.css +4 -2
  11. data/app/controllers/cmsedit_controller.rb +9 -111
  12. data/app/controllers/dc_application_controller.rb +100 -23
  13. data/app/controllers/dc_common_controller.rb +10 -24
  14. data/app/controls/browse_models_control.rb +3 -1
  15. data/app/controls/cmsedit_control.rb +5 -1
  16. data/app/controls/dc_category_control.rb +61 -0
  17. data/app/controls/dc_report.rb +1 -1
  18. data/app/forms/all_options.yml +2 -0
  19. data/app/forms/cms_menu.yml +3 -2
  20. data/app/forms/dc_browse_models.yml +24 -2
  21. data/app/forms/dc_category.yml +17 -8
  22. data/app/forms/dc_category_as_tree.yml +31 -0
  23. data/app/forms/dc_steps_template.yml +51 -0
  24. data/app/forms/help/dc_category_as_tree.en +4 -0
  25. data/app/forms/help/dc_category_as_tree.sl +5 -0
  26. data/app/helpers/cms_common_helper.rb +66 -1
  27. data/app/helpers/cms_edit_helper.rb +230 -121
  28. data/app/helpers/cms_helper.rb +74 -17
  29. data/app/helpers/cms_index_helper.rb +40 -37
  30. data/app/helpers/dc_application_helper.rb +37 -76
  31. data/app/helpers/dc_category_helper.rb +129 -0
  32. data/app/models/dc_category.rb +50 -24
  33. data/app/models/dc_journal.rb +2 -2
  34. data/app/models/dc_json_ld.rb +18 -41
  35. data/app/models/drgcms_form_fields/date_picker.rb +10 -12
  36. data/app/models/drgcms_form_fields/datetime_picker.rb +10 -11
  37. data/app/models/drgcms_form_fields/drgcms_field.rb +46 -4
  38. data/app/models/drgcms_form_fields/readonly.rb +1 -1
  39. data/app/models/drgcms_form_fields/select.rb +2 -2
  40. data/app/models/drgcms_form_fields/text_autocomplete.rb +2 -2
  41. data/app/models/drgcms_form_fields/text_with_select.rb +1 -0
  42. data/app/models/drgcms_form_fields/tree_select.rb +20 -19
  43. data/app/renderers/dc_common_renderer.rb +20 -3
  44. data/app/views/cmsedit/_form.html.erb +19 -12
  45. data/app/views/cmsedit/edit.html.erb +10 -6
  46. data/app/views/cmsedit/index.html.erb +5 -3
  47. data/app/views/cmsedit/new.html.erb +9 -5
  48. data/app/views/dc_common/_help.html.erb +1 -0
  49. data/app/views/layouts/content.html.erb +1 -1
  50. data/config/locales/drgcms_en.yml +7 -0
  51. data/config/locales/drgcms_sl.yml +7 -0
  52. data/drg_cms.gemspec +3 -3
  53. data/lib/drg_cms/version.rb +1 -1
  54. data/lib/tasks/dc_cleanup.rake +20 -42
  55. metadata +18 -12
  56. data/History.log +0 -109
@@ -116,7 +116,7 @@ def toggle_edit_mode
116
116
  end
117
117
  url << (url.match(/\?/) ? '&' : '?')
118
118
  url << "return_to_ypos=#{ypos}"
119
- redirect_to url
119
+ redirect_to(url, allow_other_host: true)
120
120
  end
121
121
 
122
122
  ####################################################################
@@ -128,15 +128,15 @@ def process_login
128
128
 
129
129
  unless params[:record][:password].blank? #password must not be empty
130
130
  user = DcUser.find_by(username: params[:record][:username], active: true)
131
- if user and user.authenticate(params[:record][:password])
131
+ if user && user.authenticate(params[:record][:password])
132
132
  fill_login_data(user, params[:record][:remember_me].to_i == 1)
133
- return redirect_to params[:return_to] || '/'
133
+ return redirect_to(params[:return_to] || '/', allow_other_host: true)
134
134
  else
135
135
  clear_login_data # on the safe side
136
136
  end
137
137
  end
138
138
  flash[:error] = t('drgcms.invalid_username')
139
- redirect_to params[:return_to_error] || '/'
139
+ redirect_to(params[:return_to] || '/', allow_other_host: true)
140
140
  end
141
141
 
142
142
  ####################################################################
@@ -144,7 +144,7 @@ end
144
144
  ####################################################################
145
145
  def logout
146
146
  clear_login_data
147
- redirect_to params[:return_to] || '/'
147
+ redirect_to(params[:return_to] || '/', allow_other_host: true)
148
148
  end
149
149
 
150
150
  ####################################################################
@@ -156,14 +156,14 @@ def login
156
156
  user = DcUser.find(cookies.signed[:remember_me])
157
157
  if user and user.active
158
158
  fill_login_data(user, true)
159
- return redirect_to params[:return_to]
159
+ return(redirect_to params[:return_to], allow_other_host: true)
160
160
  else
161
161
  clear_login_data # on the safe side
162
162
  end
163
163
  end
164
164
  # Display login
165
165
  route = params[:route] || 'poll'
166
- redirect_to "/#{route}?poll_id=login&return_to=#{params[:return_to]}"
166
+ redirect_to("/#{route}?poll_id=login&return_to=#{params[:return_to]}", allow_other_host: true)
167
167
  end
168
168
 
169
169
  ####################################################################
@@ -268,7 +268,7 @@ end
268
268
  ########################################################################
269
269
  def add_json_ld_schema
270
270
  edited_document = DcJsonLd.find_document_by_ids(CmsHelper.table_param(params), params[:ids])
271
- yaml = YAML.load_file( dc_find_form_file('json_ld_schema') )
271
+ yaml = YAML.load_file( CmsHelper.form_file_find('json_ld_schema') )
272
272
  schema_data = yaml[params[:schema]]
273
273
  # Existing document
274
274
  if edited_document.dc_json_lds.find_by(type: "@#{params[:schema]}")
@@ -283,12 +283,10 @@ end
283
283
  # Will provide help data
284
284
  ########################################################################
285
285
  def help
286
+ dc_form_read
286
287
  form_name = CmsHelper.form_param(params) || CmsHelper.table_param(params)
287
- @form = form_name ? YAML.load_file(dc_find_form_file(form_name)) : {}
288
- return render json: {} if @form.nil?
289
-
290
288
  help_file_name = @form['help'] || @form['extend'] || form_name
291
- help_file_name = find_help_file(help_file_name)
289
+ help_file_name = DcApplicationController.find_help_file(help_file_name)
292
290
  @help = YAML.load_file(help_file_name) if help_file_name
293
291
  # no auto generated help on index action
294
292
  return render json: {} if params[:type] == 'index' && @help.nil?
@@ -298,18 +296,6 @@ end
298
296
 
299
297
  protected
300
298
 
301
- ########################################################################
302
- # Will search for help file and return it's path if found
303
- ########################################################################
304
- def find_help_file(help_file_name)
305
- file_name = nil
306
- DrgCms.paths(:forms).reverse.each do |path|
307
- f = "#{path}/help/#{help_file_name}.#{I18n.locale}"
308
- file_name = f and break if File.exist?(f)
309
- end
310
- file_name
311
- end
312
-
313
299
  ########################################################################
314
300
  # Subroutine of add_json_ld_schema for adding one element
315
301
  ########################################################################
@@ -49,6 +49,8 @@ end
49
49
  def collections
50
50
  @records = []
51
51
  all_collections.each do |collection|
52
+ next if params[:filter] && !collection.match(/#{params[:filter]}/i)
53
+
52
54
  @records << DcMemory.new({'id' => collection, 'description' => t("helpers.label.#{collection}.tabletitle") })
53
55
  end
54
56
  @records
@@ -75,7 +77,7 @@ def all_fields
75
77
  '_default' => options[:default]
76
78
  })
77
79
  end
78
- # embedded documents
80
+ # embedded documents
79
81
  document.embedded_relations.each do |a_embedded|
80
82
  embedded = a_embedded.last
81
83
  description = I18n.t("helpers.help.#{params[:id]}.#{embedded.key}")
@@ -43,11 +43,15 @@ end
43
43
  ######################################################################
44
44
  def filter_on
45
45
  table_name = CmsHelper.table_param(params).strip.split(';').first.underscore
46
+ session[table_name] ||= {}
46
47
  session[table_name][:page] = 1
47
48
  set_session_filter(table_name)
48
49
  url = url_for( controller: 'cmsedit', t: table_name, f: CmsHelper.form_param(params))
49
50
 
50
- render json: { url: url }
51
+ respond_to do |format|
52
+ format.json { render json: { url: url } }
53
+ format.html { redirect_to url }
54
+ end
51
55
  end
52
56
 
53
57
  ########################################################################
@@ -0,0 +1,61 @@
1
+ #--
2
+ # Copyright (c) 2014+ 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
+ # DrgcmsControls for DcPage model.
26
+ ######################################################################
27
+ module DcCategoryControl
28
+
29
+ ######################################################################
30
+ # Called when new empty record is created
31
+ ######################################################################
32
+ def dc_new_record
33
+ if params[:selected]
34
+
35
+ end
36
+ if params[:from_menu]
37
+ # find menu and submenu. Menu class is defined in Site.
38
+ menu_a = params[:id].split(';')
39
+ menu = dc_get_site.menu_klass.find(menu_a.shift)
40
+ menu_items_method = "#{dc_get_site.menu_class}_items".underscore
41
+ menu_i = menu.send(menu_items_method).find(menu_a.shift)
42
+ while menu_a.size > 0 do menu_i = menu_i.send(menu_items_method).find(menu_a.shift) end
43
+ # Fill values for form
44
+ @record.subject = menu_i.caption
45
+ @record.dc_site_id = menu.dc_site_id
46
+ @record.menu_id = params[:id]
47
+ # set update_menu on save parameter
48
+ params['p__update_menu'] = '1'
49
+ else
50
+ @record.design_id = params[:design_id] if params[:design_id]
51
+ return unless params[:page_id]
52
+ # inherit some values from currently active page
53
+ if page = DcPage.find(params[:page_id])
54
+ @record.design_id = page.design_id
55
+ @record.menu = page.menu
56
+ @record.dc_site_id = page.dc_site_id
57
+ end
58
+ end
59
+ end
60
+
61
+ end
@@ -132,7 +132,7 @@ end
132
132
  # Export data to Excel
133
133
  ######################################################################
134
134
  def export_to_excel(report_id)
135
- read_drg_form if @form.blank?
135
+ dc_form_read if @form.blank?
136
136
  # use report options if present
137
137
  columns = (@form['report'] ? @form['report'] : @form)['result_set']['columns'].sort
138
138
 
@@ -156,6 +156,8 @@ form:
156
156
  or
157
157
  active:
158
158
  method: SomeClass.is_active_method
159
+ html:
160
+ data-validate: no
159
161
 
160
162
  5:
161
163
  type: window
@@ -62,12 +62,13 @@ menu:
62
62
  controller: cmsedit
63
63
  icon: more_horiz-o
64
64
  table: dc_simple_menu
65
- 90:
65
+ 90:
66
66
  caption: helpers.label.dc_category.tabletitle
67
67
  controller: cmsedit
68
68
  icon: list
69
69
  table: dc_category
70
- 100:
70
+
71
+ 100:
71
72
  caption: helpers.label.dc_poll.tabletitle
72
73
  controller: cmsedit
73
74
  icon: poll-o
@@ -6,6 +6,16 @@ controls: browse_models
6
6
  permissions:
7
7
  can_view: admin
8
8
 
9
+ index:
10
+ actions:
11
+ 10:
12
+ type: field
13
+ name: filter
14
+ field_type: text_field
15
+ caption: Filter
16
+ size: 10
17
+
18
+
9
19
  result_set:
10
20
  filter: collections
11
21
 
@@ -19,8 +29,20 @@ result_set:
19
29
  10:
20
30
  name: id
21
31
  caption: Collection
22
- td_style: 'font-weight: bold;width: 150px;'
23
-
32
+ td_style: 'font-weight: bold;'
33
+
24
34
  20:
25
35
  name: description
26
36
  caption: Decription
37
+
38
+ script: '
39
+ $(document).ready( function() {
40
+ $("#record_filter").keydown( function(e) {
41
+ if (e.which == "13" || e.which == "9") {
42
+ let url = "/cmsedit?form_name=dc_browse_models&table=dc_memory&filter=" + this.value;
43
+ window.location.href = url;
44
+ e.preventDefault();
45
+ };
46
+ });
47
+ });
48
+ '
@@ -3,8 +3,17 @@
3
3
  table: dc_category
4
4
 
5
5
  index:
6
- filter: name, description, ctype, parent
7
- actions: standard
6
+ filter: name, description, dc_site_id, parent
7
+ actions:
8
+ 1: new
9
+ 2: filter
10
+ 10:
11
+ type: link
12
+ icon: account_tree-o
13
+ caption: drgcms.category_as_tree
14
+ table: dc_category
15
+ form_name: dc_category_as_tree
16
+ # controller: cmsedit
8
17
 
9
18
  result_set:
10
19
  actions:
@@ -36,13 +45,11 @@ form:
36
45
  10:
37
46
  name: name
38
47
  type: text_field
39
- html:
40
- size: 30
48
+ size: 30
41
49
  20:
42
50
  name: description
43
51
  type: text_field
44
- html:
45
- size: 100
52
+ size: 100
46
53
  30:
47
54
  name: ctype
48
55
  type: select
@@ -51,8 +58,7 @@ form:
51
58
  40:
52
59
  name: order
53
60
  type: text_field
54
- html:
55
- size: 5
61
+ size: 5
56
62
  50:
57
63
  name: dc_site_id
58
64
  type: select
@@ -65,4 +71,7 @@ form:
65
71
  eval: DcCategory.values_for_parent
66
72
  html:
67
73
  include_blank: true
74
+ 70:
75
+ name: active
76
+ type: check_box
68
77
 
@@ -0,0 +1,31 @@
1
+ ## YAML Template for page
2
+ ---
3
+ extend: dc_category
4
+
5
+ index:
6
+ actions:
7
+ 10: /
8
+
9
+ result_set:
10
+ type: method
11
+ eval: categories_as_tree
12
+
13
+ form:
14
+ actions:
15
+ standard: /
16
+ 1:
17
+ type: link
18
+ caption: drgcms.back
19
+ icon: arrow-back
20
+ form_name: dc_category_as_tree
21
+ table: dc_category
22
+ params:
23
+ ids:
24
+ object: params
25
+ method: ids
26
+
27
+ 10:
28
+ type: submit
29
+ caption: 'drgcms.save&back'
30
+ form_name: dc_category_as_tree
31
+ table: dc_category
@@ -0,0 +1,51 @@
1
+ ## Template for standard options on wizard form
2
+ form:
3
+ css: '#dc-form-left {display: block;width: 20%}'
4
+ actions:
5
+ 1:
6
+ type: ajax
7
+ caption: drgcms.cancel
8
+ icon: cancel
9
+ method: post
10
+ form_name: x
11
+ action: run
12
+ control: x.steps_cancel
13
+ params:
14
+ step: x
15
+ next_step: x
16
+
17
+ 10:
18
+ type: ajax
19
+ caption: drgcms.back
20
+ icon: arrow-back
21
+ method: post
22
+ form_name: x
23
+ action: run
24
+ control: x.steps
25
+ params:
26
+ step: x
27
+ next_step: x
28
+
29
+ 20:
30
+ type: ajax
31
+ caption: drgcms.next
32
+ icon: arrow-forward
33
+ method: post
34
+ form_name: x
35
+ action: run
36
+ control: x.steps
37
+ params:
38
+ step: x
39
+ next_step: x
40
+
41
+ 100:
42
+ type: ajax
43
+ caption: drgcms.finish
44
+ icon: done
45
+ method: post
46
+ form_name: x
47
+ action: run
48
+ control: x.steps_finish
49
+ params:
50
+ step: x
51
+ next_step: x
@@ -0,0 +1,4 @@
1
+ ---
2
+ index: "<p>Updates categories in a Tree view. For edit menu click right mouse button
3
+ over selected category.</p>\r\n"
4
+ form: ''
@@ -0,0 +1,5 @@
1
+ ---
2
+ index: "<p>Urejanje kategorij v drevesnem pogledu. Poi&scaron;čite va&scaron;o kategorijo
3
+ in kliknite desni gumb na mi&scaron;ki za menu.</p>\r\n"
4
+ form: "<p>Urejanje kategorij v drevesnem pogledu. Poi&scaron;čite va&scaron;o kategorijo
5
+ in kliknite desni gumb na mi&scaron;ki za menu.</p>\r\n"
@@ -81,12 +81,26 @@ end
81
81
  # Translation is provided by lang.helpers.label.table_name.field_name locale. If
82
82
  # translation is not found method will capitalize field_name and replace '_' with ' '.
83
83
  ############################################################################
84
- def t_name(field_name, default='')
84
+ def t_label_for_field(field_name, default='')
85
85
  c = t("helpers.label.#{@form['table']}.#{field_name}", default)
86
86
  c = field_name.capitalize.gsub('_',' ') if c.match( 'translation missing' )
87
87
  c
88
88
  end
89
89
 
90
+ ############################################################################
91
+ # Returns label for field translated to current locale for usage browser header.
92
+ # Translation is provided by lang.helpers.label.table_name.field_name locale. If
93
+ # not found method will look in standard drgcms translations.
94
+ #
95
+ ############################################################################
96
+ def t_label_for_column(options)
97
+ label = options['caption'] || options['label']
98
+ label = (options['name'] ? "helpers.label.#{@form['table']}.#{options['name']}" : '') if label.nil?
99
+ label = t(label) if label.match(/\./)
100
+ label = t("drgcms.#{options['name']}") if label.match('helpers.') # standard field names like created_by, updated_at
101
+ label
102
+ end
103
+
90
104
  ###########################################################################
91
105
  # When select field is used on form options for select can be provided by
92
106
  # helpers.label.table_name.choices4_name locale. This is how select
@@ -374,4 +388,55 @@ def dc_help_body
374
388
  (params[:type] == 'index' ? @help['index'] : @help['form']).html_safe
375
389
  end
376
390
 
391
+ ############################################################################
392
+ # Will return code for help button if there is any help text available for the form.
393
+ ############################################################################
394
+ def dc_help_button(result_set)
395
+ type = result_set.nil? ? 'form' : 'index'
396
+ form_name = CmsHelper.form_param(params) || CmsHelper.table_param(params)
397
+ url = url_for(controller: :dc_common, action: :help, type: type, f: form_name)
398
+ html = %(<div class="dc-help-icon dc-link-ajax" data-url=#{url}>#{fa_icon('question-circle')}</div>)
399
+ return html if type == 'form'
400
+
401
+ # check if index has any help available
402
+ help_file_name = @form['help'] || @form['extend'] || form_name
403
+ help_file_name = DcApplicationController.find_help_file(help_file_name)
404
+ if help_file_name
405
+ help = YAML.load_file(help_file_name)
406
+ return html if help['index']
407
+ end
408
+ ''
409
+ end
410
+
411
+ ############################################################################
412
+ # Will return html code for steps menu when form with steps is processed.
413
+ ############################################################################
414
+ def dc_steps_menu_get(parent)
415
+ yaml = @form['form']['steps']
416
+ return '' unless yaml
417
+
418
+ html = %(<ul id="dc-steps-menu"><h2>#{t('drgcms.steps')}</h2>)
419
+ control = @form['control'] ? @form['control'] : @form['table']
420
+ parms = { controller: 'cmsedit', action: 'run', control: "#{control}.steps",
421
+ table: CmsHelper.table_param(params),
422
+ form_name: CmsHelper.form_param(params),
423
+ id: @record.id }
424
+
425
+ yaml.sort.each_with_index do |data, i|
426
+ n = i + 1
427
+ step = data.last # it's an array
428
+ url = case params[:step].to_i
429
+ when n + 1 then url_for(parms.merge({ step: n + 1, next_step: n}))
430
+ when n then url_for(parms.merge({ step: n, next_step: n}))
431
+ when n - 1 then url_for(parms.merge({ step: n - 1, next_step: n}))
432
+ else
433
+ ''
434
+ end
435
+ _class = url.present? ? 'dc-link-ajax' : ''
436
+ _class << (params[:step].to_i == n ? ' active' : '')
437
+ html << %(<li class="#{_class}" data-url="#{url}">#{step['title']}</li>)
438
+ end
439
+ html << '</ul>'
440
+ end
441
+
377
442
  end