Commit 96f820534a55db9ebf6f263011751ebd8c9bc738

Authored by Rodrigo Souto
Committed by Antonio Terceiro
1 parent 24a8cc1e

Publish event creates a copy of the event

* Instead of creating a PublishedArticle, a copy of the
    event is created.

  PS: depends of cba6c4326.

(ActionItem1648)
app/models/approve_article.rb
@@ -64,7 +64,11 @@ class ApproveArticle < Task @@ -64,7 +64,11 @@ class ApproveArticle < Task
64 end 64 end
65 65
66 def perform 66 def perform
67 - PublishedArticle.create!(:name => name, :profile => target, :reference_article => article, :parent => article_parent, :highlighted => highlighted, :source => article.source) 67 + if article.event?
  68 + article.copy(:name => name, :profile => target, :reference_article => article)
  69 + else
  70 + PublishedArticle.create!(:name => name, :profile => target, :reference_article => article, :parent => article_parent, :highlighted => highlighted, :source => article.source)
  71 + end
68 end 72 end
69 73
70 def target_notification_message 74 def target_notification_message
app/models/article.rb
@@ -274,7 +274,7 @@ class Article < ActiveRecord::Base @@ -274,7 +274,7 @@ class Article < ActiveRecord::Base
274 end 274 end
275 275
276 276
277 - def copy(options) 277 + def copy(options = {})
278 attrs = attributes.reject! { |key, value| ATTRIBUTES_NOT_COPIED.include?(key.to_sym) } 278 attrs = attributes.reject! { |key, value| ATTRIBUTES_NOT_COPIED.include?(key.to_sym) }
279 attrs.merge!(options) 279 attrs.merge!(options)
280 self.class.create(attrs) 280 self.class.create(attrs)
@@ -317,6 +317,10 @@ class Article < ActiveRecord::Base @@ -317,6 +317,10 @@ class Article < ActiveRecord::Base
317 false 317 false
318 end 318 end
319 319
  320 + def event?
  321 + false
  322 + end
  323 +
320 def display_as_gallery? 324 def display_as_gallery?
321 false 325 false
322 end 326 end
app/models/event.rb
@@ -127,6 +127,10 @@ class Event < Article @@ -127,6 +127,10 @@ class Event < Article
127 maybe_add_http(self.body[:link]) 127 maybe_add_http(self.body[:link])
128 end 128 end
129 129
  130 + def event?
  131 + true
  132 + end
  133 +
130 include MaybeAddHttp 134 include MaybeAddHttp
131 135
132 end 136 end
app/views/cms/publish.rhtml
@@ -14,24 +14,15 @@ @@ -14,24 +14,15 @@
14 </div> 14 </div>
15 <% end %> 15 <% end %>
16 16
  17 +<% form_tag do%>
  18 + <%= hidden_field_tag :back_to, @back_to %>
  19 + <% @groups.each do |group| %>
  20 + <%= labelled_check_box group.name, "marked_groups[#{group.id}][group_id]", group.id, @marked_groups.include?(group) %><br />
  21 + <%= labelled_text_field _('Title') + ': ', "marked_groups[#{group.id}][name]", @article.name, :style => 'width: 100%' %>
  22 + <hr />
  23 + <% end %>
17 24
18 -<!-- Workaroud while the publish feature isn't ready for Events -->  
19 -<% unless @article.is_a?(Event) %>  
20 - <% form_tag do%>  
21 - <%= hidden_field_tag :back_to, @back_to %>  
22 - <% @groups.each do |group| %>  
23 - <%= labelled_check_box group.name, "marked_groups[#{group.id}][group_id]", group.id, @marked_groups.include?(group) %><br />  
24 - <%= labelled_text_field _('Title') + ': ', "marked_groups[#{group.id}][name]", @article.name, :style => 'width: 100%' %>  
25 - <hr />  
26 - <% end %>  
27 -  
28 - <% button_bar do %>  
29 - <%= submit_button 'spread', _('Spread this'), :cancel => @back_to %>  
30 - <% end %> 25 + <% button_bar do %>
  26 + <%= submit_button 'spread', _('Spread this'), :cancel => @back_to %>
31 <% end %> 27 <% end %>
32 -<% else %>  
33 - <div class='atention'>  
34 - <%= _("This option is temporarily disabled.") %>  
35 - </div>  
36 <% end %> 28 <% end %>
37 -  
features/events.feature
@@ -170,3 +170,18 @@ Feature: events @@ -170,3 +170,18 @@ Feature: events
170 Scenario: display environment name in global agenda 170 Scenario: display environment name in global agenda
171 When I am on /assets/events 171 When I am on /assets/events
172 Then I should see "Colivre.net's events" 172 Then I should see "Colivre.net's events"
  173 +
  174 + Scenario: published events should be listed in the agenda too
  175 + Given the following community
  176 + | identifier | name |
  177 + | sample-community | Sample Community |
  178 + And I am logged in as "josesilva"
  179 + And "josesilva" is a member of "Sample Community"
  180 + And I am on josesilva's control panel
  181 + And I follow "Manage content"
  182 + And I follow "Another Conference"
  183 + And I follow "Spread"
  184 + And I check "Sample Community"
  185 + And I press "Spread this"
  186 + And I am on /profile/sample-community/events/2009/10/24
  187 + Then I should see "Another Conference"
test/functional/cms_controller_test.rb
@@ -684,6 +684,16 @@ class CmsControllerTest &lt; Test::Unit::TestCase @@ -684,6 +684,16 @@ class CmsControllerTest &lt; Test::Unit::TestCase
684 end 684 end
685 end 685 end
686 686
  687 + should 'create a new event after publishing an event' do
  688 + c = fast_create(Community)
  689 + c.affiliate(profile, Profile::Roles.all_roles(c.environment.id))
  690 + a = Event.create!(:name => "Some event", :profile => profile, :start_date => Date.today)
  691 +
  692 + assert_difference Event, :count do
  693 + post :publish, :profile => profile.identifier, :id => a.id, :marked_groups => {c.id.to_s => {:name => 'bli', :group_id => c.id.to_s}}
  694 + end
  695 + end
  696 +
687 should "not crash if there is a post and no portal community defined" do 697 should "not crash if there is a post and no portal community defined" do
688 Environment.any_instance.stubs(:portal_community).returns(nil) 698 Environment.any_instance.stubs(:portal_community).returns(nil)
689 article = profile.articles.create!(:name => 'something intresting', :body => 'ruby on rails') 699 article = profile.articles.create!(:name => 'something intresting', :body => 'ruby on rails')