drg_cms 0.6.0.3 → 0.6.0.6

Sign up to get free protection for your applications and to get access to all the features.
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