drg_cms 0.6.1.11 → 0.7.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -30,12 +30,12 @@ module DrgcmsFormFields
30
30
  # * +name:+ Field name (required)
31
31
  # * +options:+ options which apply to date_picker field. All options can be found here http://xdsoft.net/jqplugins/datetimepicker/ .
32
32
  # Options can be defined in single line like:
33
- # * options: 'step: 15,inline: true,lang: "sl"' or
33
+ # * options: 'step: 15,inline: true,lang: sl' or
34
34
  #
35
35
  # * options:
36
36
  # * step: 15
37
37
  # * inline: true
38
- # * lang: '"sl"'
38
+ # * lang: sl
39
39
  #
40
40
  # * +html:+ html options which apply to date_time_picker field (optional)
41
41
  #
@@ -52,27 +52,26 @@ class DatetimePicker < DrgcmsField
52
52
  ###########################################################################
53
53
  def render
54
54
  value = @record.try(@yaml['name']) ? I18n.localize(@record[@yaml['name']].localtime) : nil
55
- #return ro_standard( @parent.dc_format_value(value)) if @readonly
56
-
57
- @yaml['options'] ||= {}
58
55
  set_initial_value
56
+
59
57
  @yaml['html']['size'] ||= @yaml['size'] || 14
60
58
  @yaml['html']['value'] ||= value if @record[@yaml['name']]
61
59
  @yaml['html']['autocomplete'] ||= 'off'
62
60
  @yaml['html']['class'] = @yaml['html']['class'].to_s + ' date-picker'
63
61
 
64
- @yaml['options']['lang'] ||= "'#{I18n.locale}'"
65
- @yaml['options']['format'] ||= "'#{t('datetimepicker.formats.datetime')}'"
62
+ options = options_to_hash(@yaml['options'])
63
+ options['lang'] ||= I18n.locale.to_s
64
+ options['format'] ||= t('datetimepicker.formats.datetime')
66
65
 
67
66
  record = record_text_for(@yaml['name'])
68
67
  @html << @parent.text_field(record, @yaml['name'], @yaml['html'])
69
- @js << %Q[
68
+ @js << %(
70
69
  $(document).ready(function() {
71
- $("##{record}_#{@yaml['name']}").datetimepicker( {
72
- #{hash_to_options(@yaml['options'])}
70
+ $("##{record}_#{@yaml['name']}").datetimepicker({
71
+ #{hash_to_options(options)}
73
72
  });
74
73
  });
75
- ] unless @readonly
74
+ ) unless @readonly
76
75
 
77
76
  self
78
77
  end
@@ -250,16 +250,58 @@ end
250
250
  # options:
251
251
  # height: 400
252
252
  # width: 800
253
- # toolbar: "'basic'"
253
+ # toolbar: "basic"
254
254
  #
255
- # => "height:400, width:800, toolbar:'basic'"
255
+ # => "height:400, width:800, toolbar: 'basic'"
256
256
  #
257
257
  # Return:
258
258
  # String: Options formated as javascript options.
259
259
  #
260
260
  ####################################################################
261
- def hash_to_options(hash)
262
- hash.to_a.inject([]) {|r,v| r << "#{v[0]}: #{v[1]}" }.join(',')
261
+ def hash_to_options(options)
262
+ c = ''
263
+ options.each do |key, option|
264
+ c << "#{key} : "
265
+ c << case
266
+ when option.to_s.match(/function/i) then option
267
+ when option.class == String then "\"#{option}\""
268
+ else option.to_s
269
+ end
270
+ c << ",\n"
271
+ end
272
+ c
273
+ end
274
+
275
+ ####################################################################
276
+ # Options may be defined on form as hash or as string. This method will
277
+ # ensure conversion of options into hash.
278
+ #
279
+ # Parameters:
280
+ # [String or Hash] : Form options
281
+ #
282
+ # Form example: As used in forms
283
+ # options:
284
+ # height: 400
285
+ # width: 800
286
+ # toolbar: "'basic'"
287
+ # or
288
+ #
289
+ # options: "height:400, width:800, toolbar:'basic'"
290
+ #
291
+ # Return:
292
+ # Hash: Options as Hash
293
+ ####################################################################
294
+ def options_to_hash(options)
295
+ return {} if options.nil?
296
+ return options unless options.class == String
297
+
298
+ options.chomp.split(',').inject({}) do |r, e|
299
+ key, value = e.chomp.split(':')
300
+ value.strip!
301
+ value = value[1..value.size - 2] if value[0] =~ /\'|\"/
302
+ r[key.strip] = value
303
+ r
304
+ end
263
305
  end
264
306
 
265
307
  ####################################################################
@@ -59,6 +59,7 @@ class TreeSelect < Select
59
59
  ###########################################################################
60
60
  def make_tree(parent)
61
61
  return '' unless @choices[parent.to_s]
62
+
62
63
  @html << '<ul>'
63
64
  choices = if @choices[parent.to_s].first[3] != 0
64
65
  @choices[parent.to_s].sort_by {|e| e[3].to_i } # sort by order if first is not 0
@@ -66,16 +67,16 @@ def make_tree(parent)
66
67
  @choices[parent.to_s].sort_alphabetical_by(&:first) # use UTF-8 sort
67
68
  end
68
69
  choices.each do |choice|
69
- data = [ %Q["selected" : #{choice.last ? 'true' : 'false'} ] ]
70
+ data = [ %("selected" : #{choice.last ? 'true' : 'false'} ) ]
70
71
  # only for parent objects
71
72
  if @choices[ choice[1].to_s ]
72
- # parent is not selectable
73
+ # parent is not selectable
73
74
  data << '"disabled" : true' unless @parent.dc_dont?(@yaml['parent_disabled'], true)
74
- # parents are opened on start
75
+ # parents are opened on start
75
76
  data << '"opened" : true' unless @parent.dc_dont?(@yaml['parent_opened'], true)
76
77
  end
77
78
  # data-jstree must be singe quoted
78
- @html << %Q[<li data-id="#{choice[1]}" data-jstree='{#{data.join(' , ')}}'>#{choice.first}\n]
79
+ @html << %(<li data-id="#{choice[1]}" data-jstree='{#{data.join(' , ')}}'>#{choice.first}\n)
79
80
  # call recursively for children
80
81
  make_tree(choice[1]) if @choices[ choice[1].to_s ]
81
82
  @html << "</li>"
@@ -87,25 +88,24 @@ end
87
88
  # Render tree_select field html code
88
89
  ###########################################################################
89
90
  def render
90
- #return ro_standard if @readonly
91
91
  set_initial_value('html','value')
92
92
  require 'sort_alphabetical'
93
93
 
94
94
  record = record_text_for(@yaml['name'])
95
95
  clas = 'tree-select' + (@readonly ? ' dc-readonly' : '')
96
96
  @html << "<div id=\"#{@yaml['name']}\" class=\"#{clas}\" #{set_style()} >"
97
- # Fill @choices hash. The key is parent object id
97
+ # Fill @choices hash. The key is parent object id
98
98
  @choices = {}
99
99
  choices_in_eval(@yaml['eval']).each do |data|
100
100
  @choices[ data[2].to_s ] ||= []
101
101
  @choices[ data[2].to_s ] << (data << false)
102
102
  end
103
- # put current values hash with. To speed up selection when there is a lot of categories
103
+ # put current values hash with. To speed up selection when there is a lot of categories
104
104
  current_values = {}
105
105
  current = @record[@yaml['name']] || []
106
106
  current = [current] unless current.class == Array # non array fields
107
- current.each {|e| current_values[e.to_s] = true}
108
- # set third element of @choices when selected
107
+ current.each { |e| current_values[e.to_s] = true }
108
+ # set third element of @choices when selected
109
109
  @choices.keys.each do |key|
110
110
  0.upto( @choices[key].size - 1 ) do |i|
111
111
  choice = @choices[key][i]
@@ -114,16 +114,16 @@ def render
114
114
  end
115
115
  make_tree(nil)
116
116
  @html << '</div>'
117
- # add hidden communication field
117
+ # add hidden communication field
118
118
  @html << @parent.hidden_field(record, @yaml['name'], value: current.join(','))
119
- # save multiple indicator for data processing on return
119
+ # save multiple indicator for data processing on return
120
120
  @html << @parent.hidden_field(record, "#{@yaml['name']}_multiple", value: 1) if @yaml['multiple']
121
- # javascript to update hidden record field when tree looses focus
122
- readonly_code = %Q[
121
+ # javascript to update hidden record field when tree looses focus
122
+ readonly_code = %(
123
123
  ,
124
124
  "conditionalselect" : function (node) {
125
125
  return false; }
126
- ]
126
+ )
127
127
 
128
128
  @js =<<EOJS
129
129
  $(function(){
@@ -131,7 +131,7 @@ $(function(){
131
131
  "checkbox" : {"three_state" : false},
132
132
  "core" : { "themes" : { "icons": false },
133
133
  "multiple" : #{@yaml['multiple'] ? 'true' : 'false'} },
134
- "plugins" : ["checkbox","conditionalselect"]
134
+ "plugins" : ["checkbox", "conditionalselect"]
135
135
  #{@readonly ? readonly_code : ''}
136
136
  });
137
137
  });
@@ -155,13 +155,14 @@ end
155
155
  ###########################################################################
156
156
  def self.get_data(params, name)
157
157
  return nil if params['record'][name].blank?
158
- #
158
+
159
159
  result = params['record'][name].split(',')
160
- result.delete_if {|e| e.blank? }
160
+ result.delete_if(&:blank?)
161
161
  return nil if result.size == 0
162
- # convert to BSON objects if is BSON object ID
162
+
163
+ # convert to BSON objects if is BSON object ID
163
164
  result = result.map{ |e| BSON::ObjectId.from_string(e) } if BSON::ObjectId.legal?(result.first)
164
- # return only first element if multiple values select was not alowed
165
+ # return only first element if multiple values select was not allowed
165
166
  params['record']["#{name}_multiple"] == '1' ? result : result.first
166
167
  end
167
168
 
@@ -4,7 +4,7 @@
4
4
  <title><%= @page_title %></title>
5
5
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6
6
  <%= stylesheet_link_tag "application", media: 'all' %>
7
- <style type="text/css" media="all"><%= "#{@site.css if @site}#{@design.css if @design}\n#{@page.css if @page}".html_safe %></style>
7
+ <style media="all"><%= "#{@site.css if @site}#{@design.css if @design}\n#{@page.css if @page}".html_safe %></style>
8
8
  <%= @site.header.html_safe %>
9
9
  <%= javascript_include_tag "application" %>
10
10
  <%= csrf_meta_tags %>
@@ -113,6 +113,8 @@ en:
113
113
  choices4_filter_operators: 'Equal to:eq,Contains:like,Greater then:gt,Less then:lt,Is empty:empty'
114
114
 
115
115
  browse_collections: Browse all collections
116
+ category_has_subs: Category can't be deleted, because it contains sub-elements.
117
+ category_as_tree: Edit in treeview
116
118
 
117
119
  dc_journal:
118
120
  zero_selected: No data selected!
@@ -113,6 +113,8 @@ sl:
113
113
  choices4_filter_operators: 'Je enak:eq,Vsebuje:like,Je večji od:gt,Je manjši od:lt,Je prazen:empty'
114
114
 
115
115
  browse_collections: Brskanje po definicijah zbirk
116
+ category_has_subs: Kategorije ni mogoče izbrisati, ker vsebuje podrejene elemente.
117
+ category_as_tree: Uredi v drevesnem pogledu
116
118
 
117
119
  dc_journal:
118
120
  zero_selected: Ni izbranih podatkov!
data/drg_cms.gemspec CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
15
15
  s.summary = 'DRG: Rapid web application development tool and CMS for Ruby, Rails and MongoDB'
16
16
  s.description = 'DRG, development tool for rapid building of in-house (Intranet, private cloud) applications as well as CMS for creating complex, data-entry intensive web sites.'
17
17
  s.license = 'MIT'
18
- s.files = Dir['{app,config,db,lib}/**/*'] + %w[MIT-LICENSE Rakefile README.md History.log drg_cms.gemspec]
18
+ s.files = Dir['{app,config,db,lib}/**/*'] + %w[MIT-LICENSE Rakefile README.md CHANGELOG.md drg_cms.gemspec]
19
19
  s.test_files = Dir['test/**/*']
20
20
 
21
21
  s.required_ruby_version = '>= 2.7'
@@ -26,7 +26,7 @@ Gem::Specification.new do |s|
26
26
  s.add_dependency 'non-stupid-digest-assets'
27
27
 
28
28
  s.add_dependency 'bcrypt' #, '~> 3.0.0'
29
- s.add_dependency 'mongoid', '~> 7'
29
+ s.add_dependency 'mongoid'#, '~> 7'
30
30
 
31
31
  s.add_dependency 'kaminari-mongoid'
32
32
  s.add_dependency 'kaminari-actionview'
@@ -23,5 +23,5 @@
23
23
 
24
24
  # drg_cms gem version
25
25
  module DrgCms #:nodoc:
26
- VERSION = '0.6.1.11'.freeze
26
+ VERSION = '0.7.0.2'.freeze
27
27
  end
@@ -36,30 +36,29 @@ namespace :drg_cms do
36
36
  task :clear_sessions, [:name] => :environment do |t, args|
37
37
  p 'This is just an example how to clear sessions collection. It wont do anything because of next line.'
38
38
  return if true
39
- # This should remove all sessions documents created by robots
40
- # It is quite a task to compare two dates in mongoid. This should not be problem if it is run daily
39
+ # This should remove all sessions documents created by robots
40
+ # It is quite a task to compare two dates in mongoid. This should not be problem if it is run daily
41
41
  ActionDispatch::Session::MongoidStore::Session.all.each do |doc|
42
- doc.delete if (doc.created_at == doc.updated_at or doc.updated_at < 100.days.ago)
42
+ doc.delete if (doc.created_at == doc.updated_at || doc.updated_at < 100.days.ago)
43
43
  end
44
- # or if you want to clear everything older than 1 week
44
+ # or if you want to clear everything older than 1 week
45
45
  ActionDispatch::Session::MongoidStore::Session.where(:updated_at.lt => 1.week.ago).delete
46
- DcSite.collection.database.command(eval: "db.runCommand ( { compact: 'sessions' } )" )
46
+ DcSite.collection.database.command(compact: 'sessions')
47
47
  end
48
48
 
49
49
  ###########################################################################
50
50
  desc 'Clears mongodb session documents created by web robots'
51
51
  task :clear_sessions_from_robots, [:name] => :environment do |t, args|
52
- # This should remove all sessions documents created by web robots
53
- # ActionDispatch::Session::MongoidStore::Session.where('$where' => 'this.created_at == this.updated_at').limit(1000).each do |doc|
52
+ # This should remove all sessions documents created by web robots
54
53
  n = 0
55
54
  ActionDispatch::Session::MongoidStore::Session.batch_size(1000).all.each do |doc|
56
- if (doc.created_at + 2 > doc.updated_at or doc.updated_at < 1.year.ago)
55
+ if (doc.created_at + 2 > doc.updated_at || doc.updated_at < 1.year.ago)
57
56
  doc.delete
58
- p "Deleted #{n}" if (n+=1)%1000 == 0
57
+ p "Deleted #{n}" if (n += 1) % 1000 == 0
59
58
  end
60
59
  end
61
60
  p "Deleted #{n}"
62
- DcSite.collection.database.command(eval: "db.runCommand ( { compact: 'sessions' } )" )
61
+ DcSite.collection.database.command(compact: 'sessions')
63
62
  end
64
63
 
65
64
  ###########################################################################
@@ -72,16 +71,14 @@ namespace :drg_cms do
72
71
  return (p "#{archive_file} exists") if File.exist?(archive_file)
73
72
 
74
73
  date_to = Time.local(date[0,4].to_i, date[4,2].to_i, date[6,2].to_i).beginning_of_day
75
- n = 0
76
- save = ''
74
+ n, save = 0, ''
77
75
  DcVisit.where(:time.lt => date_to).each do |visit|
78
76
  save << visit.to_json + "\n"
79
- # visit.delete
80
- p "Deleted #{n}" if (n+=1)%10000 == 0
77
+ p "Deleted #{n}" if (n += 1) % 10000 == 0
81
78
  end
82
79
  DcVisit.where(:time.lt => date_to).delete
83
- File.open(archive_file,'w') {|f| f.write(save)}
84
- DcSite.collection.database.command(eval: "db.runCommand ( { compact: 'dc_visits' } )" )
80
+ File.write(archive_file, save)
81
+ DcSite.collection.database.command(compact: 'dc_visits')
85
82
  end
86
83
 
87
84
  ###########################################################################
@@ -90,39 +87,20 @@ namespace :drg_cms do
90
87
  input = read_input("Just press Enter to start. If you type in anything process won't start.")
91
88
  return unless input.to_s.size == 0
92
89
  today = Time.now.beginning_of_day
93
- n = 0
94
- save_stat, save_ads = '', ''
90
+ n, save_stat, save_ads = 0, '', ''
95
91
  DcAd.all.each do |ad|
96
- if !ad.active or (ad.valid_to and ad.valid_to < today)
92
+ if !ad.active || (ad.valid_to && ad.valid_to < today)
97
93
  save_ads << ad.to_json + "\n"
98
94
  DcAdStat.where(:dc_ad_id => ad._id).each do |stat|
99
95
  save_stat << stat.to_json + "\n"
100
- p "Deleted #{n}" if (n+=1)%10000 == 0
96
+ p "Deleted #{n}" if (n += 1) % 10000 == 0
101
97
  end
102
98
  DcAdStat.where(:dc_ad_id => ad._id).delete
103
99
  end
104
100
  end
105
- File.open("ads_stat_#{Time.now.strftime('%Y%d%m')}.json",'w') {|f| f.write(save_stat)}
106
- File.open("ads_#{Time.now.strftime('%Y%d%m')}.json",'w') {|f| f.write(save_ads)}
107
- DcSite.collection.database.command(eval: "db.runCommand ( { compact: 'dc_ad_stats' } )" )
101
+ File.write("ads_stat_#{Time.now.strftime('%Y%d%m')}.json", save_stat)
102
+ File.write("ads_#{Time.now.strftime('%Y%d%m')}.json", save_ads)
103
+ DcSite.collection.database.command(compact: 'dc_ad_stats')
108
104
  end
109
-
110
- =begin
111
- ###########################################################################
112
- desc "Correct error when ad_id ield is used instead of dc_ad_id."
113
- task :repair_ad_stats, [:name] => :environment do |t, args|
114
- input = read_input("Just press Enter to start. If you type in anything process won't start.")
115
- return unless input.to_s.size == 0
116
- n = 0
117
- p DcAdStat.only(:id).where(:dc_ad_id => nil).to_a.size
118
- DcAdStat.where(:dc_ad_id => nil).each do |stat|
119
- stat.dc_ad_id = stat.ad_id
120
- stat.ad_id = nil
121
- stat.save
122
-
123
- p n if (n+=1)%1000 == 0
124
- end
125
- end
126
- =end
127
-
105
+
128
106
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: drg_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1.11
4
+ version: 0.7.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Damjan Rems
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-12 00:00:00.000000000 Z
11
+ date: 2022-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -84,16 +84,16 @@ dependencies:
84
84
  name: mongoid
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: '7'
89
+ version: '0'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - "~>"
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: '7'
96
+ version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: kaminari-mongoid
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -159,7 +159,7 @@ executables: []
159
159
  extensions: []
160
160
  extra_rdoc_files: []
161
161
  files:
162
- - History.log
162
+ - CHANGELOG.md
163
163
  - MIT-LICENSE
164
164
  - README.md
165
165
  - Rakefile
@@ -217,6 +217,7 @@ files:
217
217
  - app/controllers/dc_main_controller.rb
218
218
  - app/controls/browse_models_control.rb
219
219
  - app/controls/cmsedit_control.rb
220
+ - app/controls/dc_category_control.rb
220
221
  - app/controls/dc_help_control.rb
221
222
  - app/controls/dc_page_control.rb
222
223
  - app/controls/dc_poll_result_control.rb
@@ -232,6 +233,7 @@ files:
232
233
  - app/forms/dc_browse_fields.yml
233
234
  - app/forms/dc_browse_models.yml
234
235
  - app/forms/dc_category.yml
236
+ - app/forms/dc_category_as_tree.yml
235
237
  - app/forms/dc_design.yml
236
238
  - app/forms/dc_filter.yml
237
239
  - app/forms/dc_folder_permission.yml
@@ -266,12 +268,15 @@ files:
266
268
  - app/forms/dc_user.yml
267
269
  - app/forms/dc_user_role.yml
268
270
  - app/forms/drgcms_cms.yml
271
+ - app/forms/help/dc_category_as_tree.en
272
+ - app/forms/help/dc_category_as_tree.sl
269
273
  - app/forms/json_ld_schema.yml
270
274
  - app/helpers/cms_common_helper.rb
271
275
  - app/helpers/cms_edit_helper.rb
272
276
  - app/helpers/cms_helper.rb
273
277
  - app/helpers/cms_index_helper.rb
274
278
  - app/helpers/dc_application_helper.rb
279
+ - app/helpers/dc_category_helper.rb
275
280
  - app/models/concerns/dc_page_concern.rb
276
281
  - app/models/concerns/dc_piece_concern.rb
277
282
  - app/models/concerns/dc_policy_rule_concern.rb
data/History.log DELETED
@@ -1,109 +0,0 @@
1
-
2
- New features for DRG CMS version up to 0.5.51.1
3
- Rails version 5.1 compatibility
4
- Ruby version 2.3 is now required
5
- select field with multiple can now properly process non BSON array values
6
- DRG CMS Form readonly field with readonly : yes option will not be saved to database on save
7
- dc_dummy collection will be deprecated and replaced with dc_memory collection. Name was chosen unfortunately
8
- DrgForms can now be used for editing YAML settings saved in dc_page document. This enables editing dynamic settings of elements embedded in design
9
- cms_edit url can now be used only as cms
10
-
11
- Bugs resolved for DRG CMS version up to 0.5.51.1
12
- journal is now able to undelete deleted document
13
-
14
- New features for DRG CMS version up to 0.5.50.4
15
- Rails 5.0 compatibility
16
- category types can now be defined in dc_big_table under dc_category_type key
17
- DrgCms gem routes can now be defined as DrgCms.routes
18
- new field tree_select added to DRG CMS Forms. Tree select will be used as data entry field for categories instead of select field with multiple option
19
- switch to Rails concern for main model definitions which may be reused.
20
- site policy can be inherited from other site
21
- menus can now belong to site
22
- clear_link method is now a class method of DcPage model and can thus be called directly from other parts of application
23
-
24
- Bugs resolved for DRG CMS version up to 0.5.50.4
25
- journal is now able to undelete deleted document
26
-
27
-
28
- New features for DRG CMS version 0.5.10.14
29
- table_style added to result_set DRGCMS Forms option. This allows CSS style like width: 150% which will result in horizontal scroler on table and view more columns on result set.
30
- result_set filter now has is empty option allowing to filter fields with null value.
31
- filter OFF icon now displays currently active filter when hovered.
32
- request_process field added to dc_site collection. It allowis for site to have different requests processing as defined in rails routes file. Single rails instance can now mix single document sites with complex sites.
33
- multiple option is added to DRGCMS Forms select_field.
34
- is_email? class method added to dc_user model.
35
- form generator has now list of all model fields added at the end of generated form. Field names can be used as template in YAML translation file.
36
- dc_choices4_field method implemented. It returns choices that are defined in localization files.
37
- categories field changed from multitext_autocomplete to select field with multiple options.
38
- a poll form can now be surrounded by div tag thus allowing for additional styling of polls
39
- drgcms_controlls files can now also be defined only as control files.
40
- journal documents can now be filtered by document id
41
- CMS menu redesigned. Instead of pulldown menus are now displayed fixed on the left side of edit area
42
-
43
- Bugs resolved for DRG CMS version 0.5.10.14
44
- prevent double form submit when browser is restarted.
45
- when user has no role defined guest role is automatically applied
46
- dc_cleanup rake task deletes 1000 session documents created by robots at once instead of all which ended in error if number of documents was higher then 100.000
47
-
48
-
49
- New features for DRG CMS version 0.5.10
50
-
51
- jQuery javascript library forced to jQuery2
52
- Choices for select fields are now UTF-8 sorted since MongoDB does not provide utf sorting.
53
- Placeholder text added for text_autocomplete field. It can also be defined in form field html options.
54
- Filters option can now have "like" keyword for fields that are not defined on form. For example created_by like user_id.
55
-
56
- Bugs resolved for DRG CMS version 0.5.10
57
-
58
- jQuery migrate udated to version 1.3. This was required by jquery-rails gem which included latest version of jQuery which resulted in an runtime error.
59
- Call before_new callback only when new empty record has been created.
60
-
61
- --
62
-
63
- New features for DRG CMS version 0.5.9
64
-
65
- Main CMS menu was becoming to large and was divided into two menus.
66
- Result set browse filter data entry redesigned. Values can now be entered directly on actions area. Value of entered fied is also retained beetwen calls.
67
- New DcInternals model introduced. It will be used for accessing internal variables.
68
- DRG Forms has new option columns. Option defines number of columns per tab or fields. Field option also got colspan option indicating over how many columns field spans.
69
- DRG Forms field size can now also be defined on same level as field type. Before it was defined in html sublevel.
70
-
71
- Bugs resolved for DRG CMS version 0.5.9
72
-
73
- Improved readonly display of select and text_autocomplete DRG Forms fields.
74
- Text_autocomplete field is set to nil when content of field is deleted.
75
-
76
- --
77
-
78
- New features for DRG CMS version 0.5.8
79
-
80
- Browsing array of hashes is now possible with DRG Forms
81
- Simple browsing of all defined models and field definitions added to CMS System menu
82
- new result_set options table_style, table_class, tr_style, tr_class, td_style, td_class. Welcome colors to result_set browser
83
- result_set has been renewed for more modern design. Header elements have now sorting icons
84
- dblclick and click actions can now be defined on result set and can fire any action when clicked or double clicked on result set row.
85
-
86
- Bugs resolved for DRG CMS version 0.5.8
87
-
88
- associated menu can now be selected on dc_page form also for non dc_simple_menu menus
89
-
90
- --
91
-
92
- New features for DRG CMS version 0.5.7
93
-
94
- single site document. All data for the site can be saved to single dc_site document and processed by dc_single_sitedoc_request
95
- site parts can now also be saved and collected from dc_site document
96
- CMS menu done right
97
- Page title is now set from dc_page_renderer default method
98
-
99
- Bugs resolved for DRG CMS version 0.5.7
100
-
101
- Corrected bug when multitext_autocomplete field was not displaying right values when displayed readonly
102
-
103
- dc_choices4 now checks if model has active field defined and returns only choices of documents that have active field value set to true
104
-
105
- Design and page edit icons are now displayed only when design or page documents are available
106
-
107
- return_to from drgcms_control was not properly handled
108
-
109
- Mouse cursor now changes to pointer when moved over ajax link