Commit 1dfcb26deb5c1592aa2de1a253ff11d7b526e087
1 parent
5d182131
Exists in
master
and in
29 other branches
Added a option to create a link when approve an article
Showing
6 changed files
with
66 additions
and
1 deletions
Show diff stats
app/models/approve_article.rb
@@ -22,6 +22,7 @@ class ApproveArticle < Task | @@ -22,6 +22,7 @@ class ApproveArticle < Task | ||
22 | end | 22 | end |
23 | 23 | ||
24 | settings_items :closing_statment, :article_parent_id, :highlighted | 24 | settings_items :closing_statment, :article_parent_id, :highlighted |
25 | + settings_items :create_link, :type => :boolean, :default => false | ||
25 | 26 | ||
26 | def article_parent | 27 | def article_parent |
27 | Article.find_by_id article_parent_id.to_i | 28 | Article.find_by_id article_parent_id.to_i |
@@ -48,7 +49,11 @@ class ApproveArticle < Task | @@ -48,7 +49,11 @@ class ApproveArticle < Task | ||
48 | end | 49 | end |
49 | 50 | ||
50 | def perform | 51 | def perform |
51 | - article.copy!(:name => name, :abstract => abstract, :body => body, :profile => target, :reference_article => article, :parent => article_parent, :highlighted => highlighted, :source => article.source, :last_changed_by_id => article.last_changed_by_id, :created_by_id => article.created_by_id) | 52 | + if create_link |
53 | + LinkArticle.create!(:reference_article => article, :profile => target) | ||
54 | + else | ||
55 | + article.copy!(:name => name, :abstract => abstract, :body => body, :profile => target, :reference_article => article, :parent => article_parent, :highlighted => highlighted, :source => article.source, :last_changed_by_id => article.last_changed_by_id, :created_by_id => article.created_by_id) | ||
56 | + end | ||
52 | end | 57 | end |
53 | 58 | ||
54 | def title | 59 | def title |
app/models/article.rb
@@ -96,6 +96,11 @@ class Article < ActiveRecord::Base | @@ -96,6 +96,11 @@ class Article < ActiveRecord::Base | ||
96 | self.activity.destroy if self.activity | 96 | self.activity.destroy if self.activity |
97 | end | 97 | end |
98 | 98 | ||
99 | + after_destroy :destroy_link_article | ||
100 | + def destroy_link_article | ||
101 | + Article.where(:reference_article_id => self.id, :type => LinkArticle).destroy_all | ||
102 | + end | ||
103 | + | ||
99 | xss_terminate :only => [ :name ], :on => 'validation', :with => 'white_list' | 104 | xss_terminate :only => [ :name ], :on => 'validation', :with => 'white_list' |
100 | 105 | ||
101 | scope :in_category, lambda { |category| | 106 | scope :in_category, lambda { |category| |
app/views/tasks/_approve_article_accept_details.html.erb
1 | <%= render :file => 'shared/tiny_mce' %> | 1 | <%= render :file => 'shared/tiny_mce' %> |
2 | 2 | ||
3 | +<%= labelled_form_field(_('Create a link'), f.check_box(:create_link)) %> | ||
4 | + | ||
3 | <%= labelled_form_field(_('Name for publishing'), f.text_field(:name)) %> | 5 | <%= labelled_form_field(_('Name for publishing'), f.text_field(:name)) %> |
4 | <%= select_profile_folder(_('Select the folder where the article must be published'), "tasks[#{task.id}][task][article_parent_id]", task.target) %> | 6 | <%= select_profile_folder(_('Select the folder where the article must be published'), "tasks[#{task.id}][task][article_parent_id]", task.target) %> |
5 | <%= labelled_form_field(_('Highlight this article'), f.check_box(:highlighted)) %> | 7 | <%= labelled_form_field(_('Highlight this article'), f.check_box(:highlighted)) %> |
test/unit/approve_article_test.rb
@@ -431,4 +431,13 @@ class ApproveArticleTest < ActiveSupport::TestCase | @@ -431,4 +431,13 @@ class ApproveArticleTest < ActiveSupport::TestCase | ||
431 | end | 431 | end |
432 | end | 432 | end |
433 | 433 | ||
434 | + should 'create link to referenced article' do | ||
435 | + article = fast_create(Article) | ||
436 | + a = create(ApproveArticle, :name => 'test name', :article => article, :target => community, :requestor => profile) | ||
437 | + a.create_link = true | ||
438 | + a.finish | ||
439 | + | ||
440 | + assert_equal article, LinkArticle.last.reference_article | ||
441 | + end | ||
442 | + | ||
434 | end | 443 | end |
@@ -0,0 +1,32 @@ | @@ -0,0 +1,32 @@ | ||
1 | +require File.dirname(__FILE__) + '/../test_helper' | ||
2 | + | ||
3 | +class LinkArticleTest < ActiveSupport::TestCase | ||
4 | + | ||
5 | + def setup | ||
6 | + @profile = create_user('testing').person | ||
7 | + end | ||
8 | + attr_reader :profile | ||
9 | + | ||
10 | + should 'url of article link redirects to referenced article' do | ||
11 | + article = fast_create(Article, :profile_id => profile.id) | ||
12 | + link = LinkArticle.new(:reference_article => article) | ||
13 | + assert_equal article.url, link.url | ||
14 | + end | ||
15 | + | ||
16 | + should 'name of article link is the same as the name of referenced article' do | ||
17 | + article = fast_create(Article, :profile_id => profile.id) | ||
18 | + link = LinkArticle.new(:reference_article => article) | ||
19 | + assert_equal article.name, link.name | ||
20 | + end | ||
21 | + | ||
22 | + should 'destroy link article when reference article is removed' do | ||
23 | + target_profile = fast_create(Community) | ||
24 | + article = fast_create(Article, :profile_id => profile.id) | ||
25 | + link = LinkArticle.create!(:reference_article => article, :profile => target_profile) | ||
26 | + article.destroy | ||
27 | + assert_raise ActiveRecord::RecordNotFound do | ||
28 | + link.reload | ||
29 | + end | ||
30 | + end | ||
31 | + | ||
32 | +end |