From 03861bc6550c346d986dc6b195fc4f257ded84ea Mon Sep 17 00:00:00 2001 From: Daniela Soares Feitosa Date: Wed, 8 Dec 2010 03:36:29 -0300 Subject: [PATCH] Allowing admin to edit articles before approve it --- app/models/approve_article.rb | 24 ++++++++++++++++++------ app/models/article.rb | 19 +++++++++++++++++-- app/models/folder.rb | 4 +--- app/models/published_article.rb | 44 -------------------------------------------- app/views/content_viewer/slideshow.rhtml | 1 - app/views/tasks/_approve_article.rhtml | 3 ++- app/views/tasks/_article.rhtml | 0 app/views/tasks/_textile_article.rhtml | 14 ++++++++++++++ app/views/tasks/_tiny_mce_article.rhtml | 15 +++++++++++++++ app/views/tasks/_uploaded_file.rhtml | 9 +++++++++ db/migrate/20101202205446_remove_published_articles.rb | 16 ++++++++++++++++ db/schema.rb | 2 +- features/approve_article.feature | 34 ++++++++++++++++++++++++++++++++++ features/step_definitions/noosfero_steps.rb | 6 ++++++ public/javascripts/article.js | 5 +++++ public/stylesheets/application.css | 3 ++- test/functional/cms_controller_test.rb | 12 ++++++------ test/functional/tasks_controller_test.rb | 32 ++++++++++++++------------------ test/unit/approve_article_test.rb | 276 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------- test/unit/article_test.rb | 17 ++++++++++------- test/unit/folder_test.rb | 13 +++++++------ test/unit/gallery_test.rb | 6 ++++-- test/unit/published_article_test.rb | 272 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- test/unit/rss_feed_test.rb | 14 ++++++++------ 24 files changed, 439 insertions(+), 402 deletions(-) delete mode 100644 app/models/published_article.rb create mode 100644 app/views/tasks/_article.rhtml create mode 100644 app/views/tasks/_textile_article.rhtml create mode 100644 app/views/tasks/_tiny_mce_article.rhtml create mode 100644 app/views/tasks/_uploaded_file.rhtml create mode 100644 db/migrate/20101202205446_remove_published_articles.rb create mode 100644 features/approve_article.feature delete mode 100644 test/unit/published_article_test.rb diff --git a/app/models/approve_article.rb b/app/models/approve_article.rb index 748b70e..1b70b75 100644 --- a/app/models/approve_article.rb +++ b/app/models/approve_article.rb @@ -24,7 +24,7 @@ class ApproveArticle < Task end def name - data[:name] + data[:name].blank? ? article.name : data[:name] end def name= value @@ -63,12 +63,24 @@ class ApproveArticle < Task data[:highlighted] end + def abstract= value + data[:abstract] = value + end + + def abstract + data[:abstract].blank? ? article.abstract : data[:abstract] + end + + def body= value + data[:body] = value + end + + def body + data[:body].blank? ? article.body : data[:body] + end + def perform - if article.event? - article.copy(:name => name, :profile => target, :reference_article => article) - else - PublishedArticle.create!(:name => name, :profile => target, :reference_article => article, :parent => article_parent, :highlighted => highlighted, :source => article.source) - end + article.copy!(:name => name, :abstract => abstract, :body => body, :profile => target, :reference_article => article, :parent => article_parent, :highlighted => highlighted, :source => article.source) end def target_notification_message diff --git a/app/models/article.rb b/app/models/article.rb index 18dc027..c43a721 100644 --- a/app/models/article.rb +++ b/app/models/article.rb @@ -30,6 +30,12 @@ class Article < ActiveRecord::Base before_create do |article| article.published_at = article.created_at if article.published_at.nil? + if article.reference_article && !article.parent + parent = article.reference_article.parent + if parent && parent.blog? && article.profile.has_blog? + article.parent = article.profile.blog + end + end end xss_terminate :only => [ :name ], :on => 'validation', :with => 'white_list' @@ -318,6 +324,12 @@ class Article < ActiveRecord::Base self.class.create(attrs) end + def copy!(options = {}) + attrs = attributes.reject! { |key, value| ATTRIBUTES_NOT_COPIED.include?(key.to_sym) } + attrs.merge!(options) + self.class.create!(attrs) + end + ATTRIBUTES_NOT_COPIED = [ :id, :profile_id, @@ -364,8 +376,11 @@ class Article < ActiveRecord::Base end def author - last_changed_by || - profile + if reference_article + reference_article.author + else + last_changed_by || profile + end end alias :active_record_cache_key :cache_key diff --git a/app/models/folder.rb b/app/models/folder.rb index b31300e..c5387d4 100644 --- a/app/models/folder.rb +++ b/app/models/folder.rb @@ -46,7 +46,5 @@ class Folder < Article has_many :images, :class_name => 'Article', :foreign_key => 'parent_id', :order => 'articles.type, articles.name', - :include => :reference_article, - :conditions => ["articles.type = 'UploadedFile' and articles.content_type in (?) or articles.type in ('Folder','Gallery') or (articles.type = 'PublishedArticle' and reference_articles_articles.type = 'UploadedFile' and reference_articles_articles.content_type in (?))", UploadedFile.content_types, UploadedFile.content_types] - + :conditions => ["articles.type = 'UploadedFile' and articles.content_type in (?) or articles.type in ('Folder','Gallery')", UploadedFile.content_types] end diff --git a/app/models/published_article.rb b/app/models/published_article.rb deleted file mode 100644 index 98f09e8..0000000 --- a/app/models/published_article.rb +++ /dev/null @@ -1,44 +0,0 @@ -class PublishedArticle < Article - before_create do |article| - unless article.parent - parent = article.reference_article.parent - if parent && parent.blog? && article.profile.has_blog? - article.parent = article.profile.blog - end - end - end - - def self.short_description - _('Reference to other article') - end - - def self.description - _('A reference to another article published in another profile') - end - - before_validation_on_create :update_name - def update_name - self.name = self.reference_article.name if self.name.blank? - end - - def author - if reference_article - reference_article.author - else - profile - end - end - - def to_html(options={}) - reference_article ? reference_article.to_html : ('' + _('The original text was removed.') + '') - end - - def abstract - reference_article && reference_article.abstract - end - - def notifiable? - true - end - -end diff --git a/app/views/content_viewer/slideshow.rhtml b/app/views/content_viewer/slideshow.rhtml index e843bfb..079fbf9 100644 --- a/app/views/content_viewer/slideshow.rhtml +++ b/app/views/content_viewer/slideshow.rhtml @@ -1,7 +1,6 @@

<%= button('', _('Back to gallery'), @page.url)%>