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 64 end
65 65  
66 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 72 end
69 73  
70 74 def target_notification_message
... ...
app/models/article.rb
... ... @@ -274,7 +274,7 @@ class Article < ActiveRecord::Base
274 274 end
275 275  
276 276  
277   - def copy(options)
  277 + def copy(options = {})
278 278 attrs = attributes.reject! { |key, value| ATTRIBUTES_NOT_COPIED.include?(key.to_sym) }
279 279 attrs.merge!(options)
280 280 self.class.create(attrs)
... ... @@ -317,6 +317,10 @@ class Article < ActiveRecord::Base
317 317 false
318 318 end
319 319  
  320 + def event?
  321 + false
  322 + end
  323 +
320 324 def display_as_gallery?
321 325 false
322 326 end
... ...
app/models/event.rb
... ... @@ -127,6 +127,10 @@ class Event < Article
127 127 maybe_add_http(self.body[:link])
128 128 end
129 129  
  130 + def event?
  131 + true
  132 + end
  133 +
130 134 include MaybeAddHttp
131 135  
132 136 end
... ...
app/views/cms/publish.rhtml
... ... @@ -14,24 +14,15 @@
14 14 </div>
15 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 27 <% end %>
32   -<% else %>
33   - <div class='atention'>
34   - <%= _("This option is temporarily disabled.") %>
35   - </div>
36 28 <% end %>
37   -
... ...
features/events.feature
... ... @@ -170,3 +170,18 @@ Feature: events
170 170 Scenario: display environment name in global agenda
171 171 When I am on /assets/events
172 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 684 end
685 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 697 should "not crash if there is a post and no portal community defined" do
688 698 Environment.any_instance.stubs(:portal_community).returns(nil)
689 699 article = profile.articles.create!(:name => 'something intresting', :body => 'ruby on rails')
... ...