Commit 96f820534a55db9ebf6f263011751ebd8c9bc738
Committed by
Antonio Terceiro
1 parent
24a8cc1e
Exists in
master
and in
23 other branches
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)
Showing
6 changed files
with
48 additions
and
20 deletions
Show diff stats
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
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 < 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') | ... | ... |