Commit 92ed8d0cc8819ae43561d35445d118a68912d517
Committed by
Daniela Feitosa
1 parent
49e084f8
Exists in
master
and in
29 other branches
Fixing validation error when try to approve published events
- Event.body should be string as all other article types - Removed Event.description - Moving existing data in description field to body (ActionItem1865)
Showing
6 changed files
with
72 additions
and
42 deletions
Show diff stats
app/models/event.rb
1 | class Event < Article | 1 | class Event < Article |
2 | 2 | ||
3 | - acts_as_having_settings :field => :body | ||
4 | - | ||
5 | - settings_items :description, :type => :string | ||
6 | - settings_items :link, :type => :string | ||
7 | settings_items :address, :type => :string | 3 | settings_items :address, :type => :string |
8 | 4 | ||
5 | + def link=(value) | ||
6 | + self.setting[:link] = maybe_add_http(value) | ||
7 | + end | ||
8 | + | ||
9 | + def link | ||
10 | + maybe_add_http(self.setting[:link]) | ||
11 | + end | ||
12 | + | ||
9 | xss_terminate :only => [ :link ], :on => 'validation' | 13 | xss_terminate :only => [ :link ], :on => 'validation' |
10 | - xss_terminate :only => [ :description, :link, :address ], :with => 'white_list', :on => 'validation' | 14 | + xss_terminate :only => [ :body, :link, :address ], :with => 'white_list', :on => 'validation' |
11 | 15 | ||
12 | def initialize(*args) | 16 | def initialize(*args) |
13 | super(*args) | 17 | super(*args) |
@@ -27,7 +31,7 @@ class Event < Article | @@ -27,7 +31,7 @@ class Event < Article | ||
27 | } | 31 | } |
28 | 32 | ||
29 | include WhiteListFilter | 33 | include WhiteListFilter |
30 | - filter_iframes :description, :link, :address, :whitelist => lambda { profile && profile.environment && profile.environment.trusted_sites_for_iframe } | 34 | + filter_iframes :body, :link, :address, :whitelist => lambda { profile && profile.environment && profile.environment.trusted_sites_for_iframe } |
31 | 35 | ||
32 | def self.description | 36 | def self.description |
33 | _('A calendar event') | 37 | _('A calendar event') |
@@ -96,26 +100,18 @@ class Event < Article | @@ -96,26 +100,18 @@ class Event < Article | ||
96 | } | 100 | } |
97 | } | 101 | } |
98 | 102 | ||
99 | - if self.description | 103 | + if self.body |
100 | html.div('_____XXXX_DESCRIPTION_GOES_HERE_XXXX_____', :class => 'event-description') | 104 | html.div('_____XXXX_DESCRIPTION_GOES_HERE_XXXX_____', :class => 'event-description') |
101 | end | 105 | end |
102 | } | 106 | } |
103 | 107 | ||
104 | - if self.description | ||
105 | - result.sub!('_____XXXX_DESCRIPTION_GOES_HERE_XXXX_____', self.description) | 108 | + if self.body |
109 | + result.sub!('_____XXXX_DESCRIPTION_GOES_HERE_XXXX_____', self.body) | ||
106 | end | 110 | end |
107 | 111 | ||
108 | result | 112 | result |
109 | end | 113 | end |
110 | 114 | ||
111 | - def link=(value) | ||
112 | - self.body[:link] = maybe_add_http(value) | ||
113 | - end | ||
114 | - | ||
115 | - def link | ||
116 | - maybe_add_http(self.body[:link]) | ||
117 | - end | ||
118 | - | ||
119 | def event? | 115 | def event? |
120 | true | 116 | true |
121 | end | 117 | end |
app/views/cms/_event.rhtml
@@ -15,5 +15,5 @@ | @@ -15,5 +15,5 @@ | ||
15 | 15 | ||
16 | <%= labelled_form_field(_('Address:'), text_field(:article, :address)) %> | 16 | <%= labelled_form_field(_('Address:'), text_field(:article, :address)) %> |
17 | 17 | ||
18 | -<%= labelled_form_field(_('Information about the event:'), text_area(:article, :description, :cols => 64)) %> | 18 | +<%= labelled_form_field(_('Information about the event:'), text_area(:article, :body, :cols => 64)) %> |
19 | 19 |
db/migrate/20110215153624_move_data_serialized_hash_to_setting_field_for_articles.rb
0 → 100644
@@ -0,0 +1,26 @@ | @@ -0,0 +1,26 @@ | ||
1 | +class MoveDataSerializedHashToSettingFieldForArticles < ActiveRecord::Migration | ||
2 | + def self.up | ||
3 | + select_all("SELECT id FROM tasks WHERE type = 'ApproveArticle' AND status = 1").each do |data| | ||
4 | + article = Task.find(data['id']).article | ||
5 | + next unless article.kind_of?(Event) | ||
6 | + body = '' | ||
7 | + begin | ||
8 | + body = YAML.load(article.body) | ||
9 | + rescue | ||
10 | + # do nothing | ||
11 | + next | ||
12 | + end | ||
13 | + if body.kind_of?(Hash) | ||
14 | + settings = article.setting.merge(body) | ||
15 | + body = ActiveRecord::Base.sanitize_sql_for_assignment(:body => settings[:description]) | ||
16 | + update("UPDATE articles set %s WHERE id = %d" % [body, article.id]) | ||
17 | + setting = ActiveRecord::Base.sanitize_sql_for_assignment(:setting => settings.to_yaml) | ||
18 | + update("UPDATE articles set %s WHERE id = %d" % [setting, article.id]) | ||
19 | + end | ||
20 | + end | ||
21 | + end | ||
22 | + | ||
23 | + def self.down | ||
24 | + say "Nothing to undo" | ||
25 | + end | ||
26 | +end |
db/schema.rb
@@ -9,7 +9,7 @@ | @@ -9,7 +9,7 @@ | ||
9 | # | 9 | # |
10 | # It's strongly recommended to check this file into your version control system. | 10 | # It's strongly recommended to check this file into your version control system. |
11 | 11 | ||
12 | -ActiveRecord::Schema.define(:version => 20110203160153) do | 12 | +ActiveRecord::Schema.define(:version => 20110215153624) do |
13 | 13 | ||
14 | create_table "action_tracker", :force => true do |t| | 14 | create_table "action_tracker", :force => true do |t| |
15 | t.integer "user_id" | 15 | t.integer "user_id" |
test/unit/approve_article_test.rb
@@ -362,4 +362,12 @@ class ApproveArticleTest < ActiveSupport::TestCase | @@ -362,4 +362,12 @@ class ApproveArticleTest < ActiveSupport::TestCase | ||
362 | assert_match(/#{task.requestor.name} wants to publish the article: #{article.name}/, email.subject) | 362 | assert_match(/#{task.requestor.name} wants to publish the article: #{article.name}/, email.subject) |
363 | end | 363 | end |
364 | 364 | ||
365 | + should 'approve an event' do | ||
366 | + event = fast_create(Event, :profile_id => profile.id, :name => 'Event test', :slug => 'event-test', :abstract => 'Lead of article', :body => 'This is my event') | ||
367 | + task = ApproveArticle.create!(:name => 'Event test', :article => event, :target => community, :requestor => profile) | ||
368 | + assert_difference event.class, :count do | ||
369 | + task.finish | ||
370 | + end | ||
371 | + end | ||
372 | + | ||
365 | end | 373 | end |
test/unit/event_test.rb
@@ -14,9 +14,9 @@ class EventTest < ActiveSupport::TestCase | @@ -14,9 +14,9 @@ class EventTest < ActiveSupport::TestCase | ||
14 | assert_kind_of String, Event.short_description | 14 | assert_kind_of String, Event.short_description |
15 | end | 15 | end |
16 | 16 | ||
17 | - should 'have a description' do | ||
18 | - e = Event.new(:description => 'some useful description') | ||
19 | - assert_equal 'some useful description', e.description | 17 | + should 'have a body' do |
18 | + e = Event.new(:body => 'some useful description') | ||
19 | + assert_equal 'some useful description', e.body | ||
20 | end | 20 | end |
21 | 21 | ||
22 | should 'have a link' do | 22 | should 'have a link' do |
@@ -62,9 +62,9 @@ class EventTest < ActiveSupport::TestCase | @@ -62,9 +62,9 @@ class EventTest < ActiveSupport::TestCase | ||
62 | assert_includes Event.find_by_contents('surprisingly'), e | 62 | assert_includes Event.find_by_contents('surprisingly'), e |
63 | end | 63 | end |
64 | 64 | ||
65 | - should 'be indexed by description' do | 65 | + should 'be indexed by body' do |
66 | profile = create_user('testuser').person | 66 | profile = create_user('testuser').person |
67 | - e = Event.create!(:name => 'bli', :start_date => Date.new(2008, 06, 06), :profile => profile, :description => 'my surprisingly long description about my freaking nice event') | 67 | + e = Event.create!(:name => 'bli', :start_date => Date.new(2008, 06, 06), :profile => profile, :body => 'my surprisingly long description about my freaking nice event') |
68 | assert_includes Event.find_by_contents('surprisingly'), e | 68 | assert_includes Event.find_by_contents('surprisingly'), e |
69 | end | 69 | end |
70 | 70 | ||
@@ -123,7 +123,7 @@ class EventTest < ActiveSupport::TestCase | @@ -123,7 +123,7 @@ class EventTest < ActiveSupport::TestCase | ||
123 | end | 123 | end |
124 | 124 | ||
125 | should 'provide nice display format' do | 125 | should 'provide nice display format' do |
126 | - e = Event.new(:start_date => Date.new(2008,1,1), :end_date => Date.new(2008,1,1), :link => 'http://www.myevent.org', :description => 'my somewhat short description') | 126 | + e = Event.new(:start_date => Date.new(2008,1,1), :end_date => Date.new(2008,1,1), :link => 'http://www.myevent.org', :body => 'my somewhat short description') |
127 | 127 | ||
128 | assert_tag_in_string e.to_html, :content => Regexp.new("January 1, 2008") | 128 | assert_tag_in_string e.to_html, :content => Regexp.new("January 1, 2008") |
129 | assert_tag_in_string e.to_html, :content => 'my somewhat short description' | 129 | assert_tag_in_string e.to_html, :content => 'my somewhat short description' |
@@ -131,9 +131,9 @@ class EventTest < ActiveSupport::TestCase | @@ -131,9 +131,9 @@ class EventTest < ActiveSupport::TestCase | ||
131 | 131 | ||
132 | end | 132 | end |
133 | 133 | ||
134 | - should 'not crash when description is blank' do | 134 | + should 'not crash when body is blank' do |
135 | e = Event.new | 135 | e = Event.new |
136 | - assert_nil e.description | 136 | + assert_nil e.body |
137 | assert_no_match(/_____XXXX_DESCRIPTION_GOES_HERE_XXXX_____/, e.to_html) | 137 | assert_no_match(/_____XXXX_DESCRIPTION_GOES_HERE_XXXX_____/, e.to_html) |
138 | end | 138 | end |
139 | 139 | ||
@@ -144,30 +144,30 @@ class EventTest < ActiveSupport::TestCase | @@ -144,30 +144,30 @@ class EventTest < ActiveSupport::TestCase | ||
144 | 144 | ||
145 | should 'add http:// when reading link' do | 145 | should 'add http:// when reading link' do |
146 | a = Event.new | 146 | a = Event.new |
147 | - a.body[:link] = 'www.gnu.org' | 147 | + a.setting[:link] = 'www.gnu.org' |
148 | assert_equal 'http://www.gnu.org', a.link | 148 | assert_equal 'http://www.gnu.org', a.link |
149 | end | 149 | end |
150 | 150 | ||
151 | should 'not add http:// to empty link' do | 151 | should 'not add http:// to empty link' do |
152 | a = Event.new | 152 | a = Event.new |
153 | - a.body[:link] = '' | 153 | + a.setting[:link] = '' |
154 | assert_equal '', a.link | 154 | assert_equal '', a.link |
155 | - a.body[:link] = nil | 155 | + a.setting[:link] = nil |
156 | assert_equal '', a.link | 156 | assert_equal '', a.link |
157 | end | 157 | end |
158 | 158 | ||
159 | - should 'not escape HTML in description' do | ||
160 | - a = Event.new(:description => '<p>a paragraph of text</p>', :link => 'www.gnu.org') | 159 | + should 'not escape HTML in body' do |
160 | + a = Event.new(:body => '<p>a paragraph of text</p>', :link => 'www.gnu.org') | ||
161 | 161 | ||
162 | assert_match '<p>a paragraph of text</p>', a.to_html | 162 | assert_match '<p>a paragraph of text</p>', a.to_html |
163 | end | 163 | end |
164 | 164 | ||
165 | - should 'filter HTML in description' do | 165 | + should 'filter HTML in body' do |
166 | profile = create_user('testuser').person | 166 | profile = create_user('testuser').person |
167 | - e = Event.create!(:profile => profile, :name => 'test', :description => '<p>a paragraph (valid)</p><script type="text/javascript">/* this is invalid */</script>"', :link => 'www.colivre.coop.br', :start_date => Date.today) | 167 | + e = Event.create!(:profile => profile, :name => 'test', :body => '<p>a paragraph (valid)</p><script type="text/javascript">/* this is invalid */</script>"', :link => 'www.colivre.coop.br', :start_date => Date.today) |
168 | 168 | ||
169 | - assert_tag_in_string e.description, :tag => 'p', :content => 'a paragraph (valid)' | ||
170 | - assert_no_tag_in_string e.description, :tag => 'script' | 169 | + assert_tag_in_string e.body, :tag => 'p', :content => 'a paragraph (valid)' |
170 | + assert_no_tag_in_string e.body, :tag => 'script' | ||
171 | end | 171 | end |
172 | 172 | ||
173 | should 'nil to link' do | 173 | should 'nil to link' do |
@@ -238,31 +238,31 @@ class EventTest < ActiveSupport::TestCase | @@ -238,31 +238,31 @@ class EventTest < ActiveSupport::TestCase | ||
238 | 238 | ||
239 | should 'filter fields with white_list filter' do | 239 | should 'filter fields with white_list filter' do |
240 | event = Event.new | 240 | event = Event.new |
241 | - event.description = "<h1> Description </h1>" | 241 | + event.body = "<h1> Description </h1>" |
242 | event.address = "<strong> Address <strong>" | 242 | event.address = "<strong> Address <strong>" |
243 | event.valid? | 243 | event.valid? |
244 | 244 | ||
245 | - assert_equal "<h1> Description </h1>", event.description | 245 | + assert_equal "<h1> Description </h1>", event.body |
246 | assert_equal "<strong> Address <strong>", event.address | 246 | assert_equal "<strong> Address <strong>", event.address |
247 | end | 247 | end |
248 | 248 | ||
249 | should 'escape malformed html tags' do | 249 | should 'escape malformed html tags' do |
250 | event = Event.new | 250 | event = Event.new |
251 | - event.description = "<h1<< Description >>/h1>" | 251 | + event.body = "<h1<< Description >>/h1>" |
252 | event.address = "<strong>><< Address <strong>" | 252 | event.address = "<strong>><< Address <strong>" |
253 | event.valid? | 253 | event.valid? |
254 | 254 | ||
255 | - assert_no_match /[<>]/, event.description | 255 | + assert_no_match /[<>]/, event.body |
256 | assert_no_match /[<>]/, event.address | 256 | assert_no_match /[<>]/, event.address |
257 | end | 257 | end |
258 | 258 | ||
259 | should 'not sanitize html comments' do | 259 | should 'not sanitize html comments' do |
260 | event = Event.new | 260 | event = Event.new |
261 | - event.description = '<p><!-- <asdf> << aasdfa >>> --> <h1> Wellformed html code </h1>' | 261 | + event.body = '<p><!-- <asdf> << aasdfa >>> --> <h1> Wellformed html code </h1>' |
262 | event.address = '<p><!-- <asdf> << aasdfa >>> --> <h1> Wellformed html code </h1>' | 262 | event.address = '<p><!-- <asdf> << aasdfa >>> --> <h1> Wellformed html code </h1>' |
263 | event.valid? | 263 | event.valid? |
264 | 264 | ||
265 | - assert_match /<!-- .* --> <h1> Wellformed html code <\/h1>/, event.description | 265 | + assert_match /<!-- .* --> <h1> Wellformed html code <\/h1>/, event.body |
266 | assert_match /<!-- .* --> <h1> Wellformed html code <\/h1>/, event.address | 266 | assert_match /<!-- .* --> <h1> Wellformed html code <\/h1>/, event.address |
267 | end | 267 | end |
268 | 268 |