drg_cms 0.6.0.3 → 0.6.0.6

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 (68) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/drg_cms/drg_cms.js +259 -102
  3. data/app/assets/javascripts/drg_cms_cms.js +1 -1
  4. data/app/assets/stylesheets/drg_cms/drg_cms.css +314 -142
  5. data/app/assets/stylesheets/drg_cms/select-multiple.css +11 -2
  6. data/app/controllers/cmsedit_controller.rb +313 -236
  7. data/app/controllers/dc_application_controller.rb +29 -4
  8. data/app/controllers/dc_common_controller.rb +19 -16
  9. data/app/{controllers → controls}/browse_models_control.rb +0 -0
  10. data/app/{controllers → controls}/dc_page_control.rb +24 -8
  11. data/app/controls/dc_poll_result_control.rb +88 -0
  12. data/app/{controllers → controls}/design_element_settings_control.rb +0 -0
  13. data/app/forms/all_options.yml +11 -3
  14. data/app/forms/cms_menu.yml +22 -18
  15. data/app/forms/dc_design.yml +6 -3
  16. data/app/forms/dc_filter.yml +3 -6
  17. data/app/forms/dc_poll_result.yml +74 -0
  18. data/app/forms/dc_poll_result_export.yml +35 -0
  19. data/app/helpers/cmsedit_edit_helper.rb +471 -0
  20. data/app/helpers/cmsedit_helper.rb +151 -821
  21. data/app/helpers/cmsedit_index_helper.rb +567 -0
  22. data/app/helpers/dc_application_helper.rb +48 -31
  23. data/app/models/{dc_dummy.rb → __dc_dummy.rb} +0 -0
  24. data/app/models/dc_filter.rb +12 -5
  25. data/app/models/dc_memory.rb +8 -1
  26. data/app/models/dc_poll.rb +38 -19
  27. data/app/models/dc_poll_result.rb +44 -0
  28. data/app/models/dc_temp.rb +137 -0
  29. data/app/models/drgcms_form_fields/action.rb +61 -0
  30. data/app/models/drgcms_form_fields/comment.rb +8 -4
  31. data/app/models/drgcms_form_fields/date_picker.rb +7 -6
  32. data/app/models/drgcms_form_fields/date_select.rb +1 -1
  33. data/app/models/drgcms_form_fields/datetime_picker.rb +8 -7
  34. data/app/models/drgcms_form_fields/datetime_select.rb +1 -1
  35. data/app/models/drgcms_form_fields/drgcms_field.rb +39 -7
  36. data/app/models/drgcms_form_fields/embedded.rb +7 -2
  37. data/app/models/drgcms_form_fields/file_field.rb +52 -0
  38. data/app/models/drgcms_form_fields/html_field.rb +1 -1
  39. data/app/models/drgcms_form_fields/multitext_autocomplete.rb +7 -4
  40. data/app/models/drgcms_form_fields/number_field.rb +15 -6
  41. data/app/models/drgcms_form_fields/radio.rb +91 -0
  42. data/app/models/drgcms_form_fields/readonly.rb +1 -1
  43. data/app/models/drgcms_form_fields/select.rb +14 -2
  44. data/app/models/drgcms_form_fields/text_area.rb +1 -1
  45. data/app/models/drgcms_form_fields/text_autocomplete.rb +1 -1
  46. data/app/models/drgcms_form_fields/text_field.rb +1 -1
  47. data/app/models/drgcms_form_fields/text_with_select.rb +6 -3
  48. data/app/models/drgcms_form_fields/tree_select.rb +11 -3
  49. data/app/renderers/dc_poll_renderer.rb +29 -11
  50. data/app/views/cmsedit/{remove_edit_stuff.js.erb → __remove_edit_stuff.js.erb} +0 -0
  51. data/app/views/cmsedit/{show.html.erb → __show.html.erb} +0 -0
  52. data/app/views/cmsedit/_edit_stuff.html.erb +2 -4
  53. data/app/views/cmsedit/_form.html.erb +4 -3
  54. data/app/views/cmsedit/_result.html.erb +2 -3
  55. data/app/views/cmsedit/edit.html.erb +2 -1
  56. data/app/views/cmsedit/index.html.erb +6 -1
  57. data/app/views/cmsedit/new.html.erb +1 -1
  58. data/config/locales/drgcms_en.yml +7 -0
  59. data/config/locales/drgcms_sl.yml +8 -1
  60. data/config/locales/models_en.yml +13 -4
  61. data/config/locales/models_sl.yml +13 -2
  62. data/drg_cms.gemspec +1 -1
  63. data/lib/drg_cms.rb +1 -0
  64. data/lib/drg_cms/version.rb +1 -1
  65. data/lib/generators/new_drg_form/new_drg_form_generator.rb +7 -2
  66. metadata +20 -13
  67. data/app/assets/stylesheets/drg_cms/__jquery-ui.css +0 -339
  68. data/test/fixtures/drg_cms_test_data.rb +0 -87
@@ -128,8 +128,7 @@ def dc_find_form_file(form_file)
128
128
  f = "#{path}/#{form_file}.yml"
129
129
  return f if File.exist?(f) and (form_path.nil? or path.to_s.match(/\/#{form_path}\//i))
130
130
  end
131
- logger.error "Form file #{form_file} not found!"
132
- nil
131
+ raise "Exception: Form file '#{form_file}' not found!"
133
132
  end
134
133
 
135
134
  #######################################################################
@@ -598,6 +597,14 @@ def clear_login_data
598
597
  cookies.delete :remember_me
599
598
  end
600
599
 
600
+ ############################################################################
601
+ # Sets at least default guest user to user roles when no user is set.
602
+ ############################################################################
603
+ def set_default_guest_user_role
604
+ guest = DcPolicyRole.find_by(system_name: 'guest')
605
+ session[:user_roles] = [guest.id] if guest
606
+ end
607
+
601
608
  ####################################################################
602
609
  # Fills session with data related to successful login.
603
610
  #
@@ -610,8 +617,9 @@ def fill_login_data(user, remember_me=false)
610
617
  session[:edit_mode] = 0
611
618
  session[:user_roles] = []
612
619
  # Every user has guest role
613
- guest = DcPolicyRole.find_by(system_name: 'guest')
614
- session[:user_roles] << guest.id if guest
620
+ # guest = DcPolicyRole.find_by(system_name: 'guest')
621
+ # session[:user_roles] << guest.id if guest
622
+ set_default_guest_user_role
615
623
  return unless user and user.active
616
624
  # special for SUPERADMIN
617
625
  sa = DcPolicyRole.find_by(system_name: 'superadmin')
@@ -715,4 +723,21 @@ def dc_add_meta_tag(type, name, content)
715
723
  @meta_tags[key] = content
716
724
  end
717
725
 
726
+ ########################################################################
727
+ # Will prepare flash[:update] data, which will be used for updating fields
728
+ # on forms parent form fields.
729
+ #
730
+ # Parameters:
731
+ # [field_name] String: Field name
732
+ # [value] String: New value
733
+ # [readonly] Boolean: Field is readonly
734
+ #
735
+ ########################################################################
736
+ def dc_update_form_field(field_name, value, readonly=false)
737
+ key_name = (readonly ? 'td_' : '') + "record_#{field_name}"
738
+ flash[:update] ||= {}
739
+ flash[:update][key_name] = value
740
+ end
741
+
742
+
718
743
  end
@@ -45,7 +45,12 @@ layout false
45
45
  # JSON array [label, value, id] of first 20 documents that confirm to query.
46
46
  ########################################################################
47
47
  def autocomplete
48
- # return '' unless session[:edit_mode] > 0 #
48
+ # table parameter must be defined. If not, get it from search parameter
49
+ if params['table'].nil? and params['search'].match(/\./)
50
+ name = params['search'].split('.').first
51
+ params['table'] = name.underscore
52
+ end
53
+
49
54
  return render plain: t('drgcms.not_authorized') unless dc_user_can(DcPermission::CAN_VIEW)
50
55
  # TODO Double check if previous line works as it should.
51
56
  table = params['table'].classify.constantize
@@ -88,26 +93,24 @@ end
88
93
  ##########################################################################
89
94
  def toggle_edit_mode
90
95
  session[:edit_mode] ||= 0
91
- # called without logged in
92
- if session[:edit_mode] < 1
93
- dc_render_404
94
- else
96
+ # error when not logged in
97
+ return dc_render_404 if session[:edit_mode] < 1
95
98
  # if return_to_ypos parameter is present it will forward it and thus scroll to
96
99
  # aproximate position it was when toggle was clicked
97
- session[:edit_mode] = (session[:edit_mode] == 1) ? 2 : 1
98
- uri = Rack::Utils.parse_nested_query(request.url)
100
+ session[:edit_mode] = (session[:edit_mode] == 1) ? 2 : 1
101
+ uri = Rack::Utils.parse_nested_query(request.url)
99
102
  # it parses only on & so first (return_to) parameter also contains url
100
- url = uri.first.last
101
- if (i = url.index('?return_to_ypos')).to_i > 0
102
- url = url[0,i]
103
- end
103
+ url = uri.first.last
104
+ if (i = url.index('return_to_ypos')).to_i > 0
105
+ url = url[0,i-1]
106
+ end
104
107
  # offset CMS menu
105
- if (ypos = uri['return_to_ypos'].to_i) > 0
106
- ypos += session[:edit_mode] == 2 ? 250 : -250
107
- end
108
- url << "?return_to_ypos=#{ypos}"
109
- redirect_to url
108
+ if (ypos = uri['return_to_ypos'].to_i) > 0
109
+ ypos += session[:edit_mode] == 2 ? 250 : -250
110
110
  end
111
+ url << (url.match(/\?/) ? '&' : '?')
112
+ url << "return_to_ypos=#{ypos}"
113
+ redirect_to url
111
114
  end
112
115
 
113
116
  ####################################################################
@@ -31,12 +31,29 @@ module DcPageControl
31
31
  # Called when new empty record is created
32
32
  ######################################################################
33
33
  def dc_new_record()
34
- @record.design_id = params[:design_id] if params[:design_id]
35
- return unless params[:page_id]
36
- #
37
- if page = DcPage.find(params[:page_id])
38
- @record.design_id = page.design_id
39
- @record.menu = page.menu
34
+ # Called from menu. Fill in values, that could be obtained from menu
35
+ if params[:from_menu]
36
+ # find menu and submenu. Menu class is defined in Site.
37
+ menu_a = params[:id].split(';')
38
+ menu = dc_get_site.menu_klass.find(menu_a.shift)
39
+ menu_items_method = "#{dc_get_site.menu_class}_items".underscore
40
+ menu_i = menu.send(menu_items_method).find(menu_a.shift)
41
+ while menu_a.size > 0 do menu_i = menu_i.send(menu_items_method).find(menu_a.shift) end
42
+ # Fill values for form
43
+ @record.subject = menu_i.caption
44
+ @record.dc_site_id = menu.dc_site_id
45
+ @record.menu_id = params[:id]
46
+ # set update_menu on save parameter
47
+ params['p__update_menu'] = '1'
48
+ else
49
+ @record.design_id = params[:design_id] if params[:design_id]
50
+ return unless params[:page_id]
51
+ # inherit some values from currently active page
52
+ if page = DcPage.find(params[:page_id])
53
+ @record.design_id = page.design_id
54
+ @record.menu = page.menu
55
+ @record.dc_site_id = page.dc_site_id
56
+ end
40
57
  end
41
58
  end
42
59
 
@@ -44,8 +61,7 @@ end
44
61
  # Called just after record is saved to DB.
45
62
  ######################################################################
46
63
  def dc_after_save()
47
- if params[:_record] and params[:_record][:_update_menu] == '1'
48
- # menu_class = dc_get_site.menu_class.classify.constantize
64
+ if params.dig(:_record,:_update_menu).to_s == '1'
49
65
  dc_get_site.menu_klass.update_menu_item_link(@record)
50
66
  end
51
67
  end
@@ -0,0 +1,88 @@
1
+ #encoding: utf-8
2
+ #--
3
+ # Copyright (c) 2014+ Damjan Rems
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+ #++
24
+
25
+ ######################################################################
26
+ # DrgcmsControls for DcPage model.
27
+ ######################################################################
28
+ module DcPollResultControl
29
+
30
+ ######################################################################
31
+ # Filter result data when filter is set
32
+ ######################################################################
33
+ def poll_filter()
34
+ get_query
35
+ end
36
+
37
+ ######################################################################
38
+ # Filter action called. Update url to reflect filter conditions and reload form.
39
+ ######################################################################
40
+ def do_filter
41
+ url = url_for(controller: :cmsedit, action: :index, table: :dc_poll_result,
42
+ 'record[dc_poll_id]' => params[:record][:dc_poll_id],
43
+ 'record[start_date]' => params[:record][:start_date],
44
+ 'record[end_date]' => params[:record][:end_date]
45
+ )
46
+ dc_render_ajax(operation: :url, value: url)
47
+ end
48
+
49
+ ######################################################################
50
+ # Export data to file
51
+ ######################################################################
52
+ def do_export
53
+ c, keys = '', []
54
+ get_query.to_a.each do |doc|
55
+ # ensure, that fields are always in same order
56
+ data = YAML.load(doc.data)
57
+ if c.blank?
58
+ data.each {|k,v| keys << k}
59
+ c << I18n.t('helpers.label.dc_poll_result.created_at') + "\t"
60
+ c << keys.join("\t") + "\n"
61
+ end
62
+ c << doc.created_at.strftime(I18n.t('date.formats.default') ) + "\t"
63
+ keys.each {|k| c << data[k] + "\t"}
64
+ c << "\n"
65
+ end
66
+ File.write(Rails.root.join('public','export.csv'), c)
67
+ dc_render_ajax(operation: :window, value: 'export.csv')
68
+ end
69
+
70
+ private
71
+ ######################################################################
72
+ # Creates query for Poll results
73
+ ######################################################################
74
+ def get_query()
75
+ if params.dig(:record,:dc_poll_id).nil?
76
+ qry = DcPollResult.all
77
+ else
78
+ qry = DcPollResult.where(dc_poll_id: params[:record][:dc_poll_id])
79
+ unless params[:record][:start_date].blank?
80
+ start_date = DrgcmsFormFields::DatePicker.get_data(params,'start_date').beginning_of_day
81
+ end_date = DrgcmsFormFields::DatePicker.get_data(params,'end_date').end_of_day
82
+ qry = qry.and(:created_at.gt => start_date).and(:created_at.lt => end_date)
83
+ end
84
+ end
85
+ qry
86
+ end
87
+
88
+ end
@@ -7,9 +7,16 @@ controls: controls_file
7
7
  readonly: 1
8
8
  permissions:
9
9
  can_view: role_name
10
+
11
+ script: "
12
+ javascript code
13
+ "
10
14
 
11
15
  index:
12
16
  filter: name, id as text_field
17
+ select_fields: id,name
18
+ deny_fields: body,email
19
+
13
20
  actions: standard
14
21
 
15
22
  actions:
@@ -18,6 +25,7 @@ index:
18
25
  3: sort
19
26
 
20
27
  actions:
28
+ standard: yes
21
29
  1:
22
30
  type: new
23
31
  caption: Alternative caption
@@ -51,7 +59,7 @@ result_set:
51
59
  table_class: tclass
52
60
  tr_style: 'color: green;'
53
61
  tr_class: trclass
54
- tr_class:
62
+ tr_style:
55
63
  eval: "document['result'] < 0 ? 'color: red;' : 'color: #000;'"
56
64
 
57
65
  actions: standard
@@ -107,8 +115,7 @@ form:
107
115
  title:
108
116
  edit: Title for edit
109
117
  show: Title for show
110
- labels_pos: top
111
-
118
+ labels_pos: top
112
119
 
113
120
  actions: standard
114
121
  actions: none
@@ -120,6 +127,7 @@ form:
120
127
  action: action
121
128
  method: (get),put,post
122
129
  caption: ajax_call
130
+ control: control_name.method_to_call
123
131
  when_new: false
124
132
  5:
125
133
  type: window
@@ -45,38 +45,42 @@ menu:
45
45
  50:
46
46
  caption: helpers.label.dc_piece.tabletitle
47
47
  controller: cmsedit
48
- icon: puzzle-piece lg
48
+ icon: puzzle-piece lg
49
49
  table: dc_piece
50
50
  60:
51
51
  caption: helpers.label.dc_link.tabletitle
52
52
  controller: cmsedit
53
- icon: link lg
53
+ icon: link lg
54
54
  table: dc_link
55
55
  70:
56
56
  caption: helpers.label.dc_menu.tabletitle
57
57
  controller: cmsedit
58
- icon: th-list lg
58
+ icon: th-list lg
59
59
  table: dc_menu
60
60
  80:
61
61
  caption: helpers.label.dc_simple_menu.tabletitle
62
62
  controller: cmsedit
63
- icon: ellipsis-h lg
63
+ icon: ellipsis-h lg
64
64
  table: dc_simple_menu
65
65
  90:
66
66
  caption: helpers.label.dc_category.tabletitle
67
67
  controller: cmsedit
68
- icon: list lg
68
+ icon: list lg
69
69
  table: dc_category
70
-
71
70
  100:
72
71
  caption: helpers.label.dc_poll.tabletitle
73
72
  controller: cmsedit
74
- icon: list-alt lg
73
+ icon: list-alt lg
75
74
  table: dc_poll
76
75
  110:
76
+ caption: helpers.label.dc_poll_result.tabletitle
77
+ controller: cmsedit
78
+ icon: database lg
79
+ table: dc_poll_result
80
+ 120:
77
81
  caption: helpers.label.dc_ad.tabletitle
78
82
  controller: cmsedit
79
- icon: money lg
83
+ icon: money lg
80
84
  table: dc_ad
81
85
 
82
86
  11_system_menu:
@@ -86,52 +90,52 @@ menu:
86
90
  10:
87
91
  caption: helpers.label.dc_user.tabletitle
88
92
  controller: cmsedit
89
- icon: users lg
93
+ icon: users lg
90
94
  table: dc_user
91
95
  20:
92
96
  caption: helpers.label.dc_policy_role.tabletitle
93
97
  controller: cmsedit
94
- icon: user-secret lg
98
+ icon: user-secret lg
95
99
  table: dc_policy_role
96
100
  30:
97
101
  caption: helpers.label.dc_permission.tabletitle
98
102
  controller: cmsedit
99
- icon: shield lg
103
+ icon: shield lg
100
104
  table: dc_permission
101
105
  40:
102
106
  caption: helpers.label.dc_folder_permission.tabletitle
103
107
  controller: cmsedit
104
- icon: shield lg
108
+ icon: shield lg
105
109
  table: dc_folder_permission
106
110
  60:
107
111
  caption: helpers.label.dc_big_table.tabletitle
108
112
  controller: cmsedit
109
- icon: table lg
113
+ icon: table lg
110
114
  table: dc_big_table
111
115
  70:
112
116
  caption: helpers.label.dc_key_value_store.tabletitle
113
117
  controller: cmsedit
114
- icon: list lg
118
+ icon: list lg
115
119
  table: dc_key_value_store
116
120
  80:
117
121
  caption: helpers.label.dc_filter.tabletitle
118
122
  controller: cmsedit
119
- icon: filter lg
123
+ icon: filter lg
120
124
  table: dc_filter
121
125
  90:
122
126
  caption: helpers.label.dc_removed_url.tabletitle
123
127
  controller: cmsedit
124
- icon: trash-o lg
128
+ icon: trash-o lg
125
129
  table: dc_removed_url
126
130
  500:
127
131
  caption: helpers.label.dc_journal.tabletitle
128
132
  controller: cmsedit
129
- icon: undo lg
133
+ icon: undo lg
130
134
  table: dc_journal
131
135
 
132
136
  600:
133
137
  caption: drgcms.browse_collections
134
138
  controller: cmsedit
135
- icon: table lg
139
+ icon: table lg
136
140
  table: dc_memory
137
141
  form_name: dc_browse_models
@@ -4,7 +4,7 @@ title: Site design
4
4
  table: dc_design
5
5
 
6
6
  index:
7
- filter: description, body as text_field
7
+ filter: description, body as text_field, site_id
8
8
  actions: standard
9
9
 
10
10
  result_set:
@@ -17,9 +17,12 @@ result_set:
17
17
  3: delete
18
18
 
19
19
  columns:
20
- 2:
20
+ 10:
21
21
  name: description
22
- width: 80%
22
+ width: 50%
23
+ 20:
24
+ name: updated_at
25
+
23
26
 
24
27
  form:
25
28
  title:
@@ -29,15 +29,13 @@ form:
29
29
  10:
30
30
  name: description
31
31
  type: text_field
32
- html:
33
- size: 50
32
+ size: 50
34
33
 
35
34
  20:
36
35
  name: table
37
36
  type: text_with_select
38
37
  eval: dc_choices4_all_collections
39
- html:
40
- size: 30
38
+ size: 30
41
39
 
42
40
  30:
43
41
  name: dc_user_id
@@ -52,5 +50,4 @@ form:
52
50
  50:
53
51
  name: filter
54
52
  type: text_area
55
- html:
56
- size: 80x20
53
+ size: 80x20