diff --git a/plugins/spaminator/Gemfile b/plugins/spaminator/Gemfile new file mode 100644 index 0000000..169b87f --- /dev/null +++ b/plugins/spaminator/Gemfile @@ -0,0 +1 @@ +gem "progressbar" diff --git a/plugins/spaminator/lib/spaminator_plugin.rb b/plugins/spaminator/lib/spaminator_plugin.rb index ca331e4..51ae967 100644 --- a/plugins/spaminator/lib/spaminator_plugin.rb +++ b/plugins/spaminator/lib/spaminator_plugin.rb @@ -15,7 +15,7 @@ class SpaminatorPlugin < Noosfero::Plugin def self.schedule_scan(environment) settings = Noosfero::Plugin::Settings.new(environment, self) if !settings.scanning - job = Delayed::Job.enqueue(SpaminatorPlugin::ScanJob.new(environment.id), 0, settings.period.to_i.days.from_now) + job = Delayed::Job.enqueue(SpaminatorPlugin::ScanJob.new(environment.id), :run_at => settings.period.to_i.days.from_now) settings.scheduled_scan = job.id settings.save! end diff --git a/plugins/spaminator/lib/spaminator_plugin/mailer.rb b/plugins/spaminator/lib/spaminator_plugin/mailer.rb index 1bd90db..186988f 100644 --- a/plugins/spaminator/lib/spaminator_plugin/mailer.rb +++ b/plugins/spaminator/lib/spaminator_plugin/mailer.rb @@ -1,13 +1,22 @@ class SpaminatorPlugin::Mailer < Noosfero::Plugin::MailerBase + include Rails.application.routes.url_helpers def inactive_person_notification(person) - recipients person.email - from "#{person.environment.name} <#{person.environment.contact_email}>" - subject _("[%s] You must reactivate your account.") % person.environment.name - content_type 'text/html' - body :person => person, - :environment => person.environment, - :url => url_for(:host => person.default_hostname, :controller => 'account', :action => 'forgot_password') + mail( + :to => person.email, + :from => "#{person.environment.name} <#{person.environment.contact_email}>", + :subject => _("[%s] You must reactivate your account.") % person.environment.name, + :content_type => 'text/html', + :body => {:person => person, + :environment => person.environment, + :url => url_for(:host => person.default_hostname, :controller => 'account', :action => 'forgot_password')} + ) + end + + class Job < Struct.new(:person, :method) + def perform + SpaminatorPlugin::Mailer.send(method, person).deliver + end end end diff --git a/plugins/spaminator/lib/spaminator_plugin/report.rb b/plugins/spaminator/lib/spaminator_plugin/report.rb index 839bb6c..bb7cb77 100644 --- a/plugins/spaminator/lib/spaminator_plugin/report.rb +++ b/plugins/spaminator/lib/spaminator_plugin/report.rb @@ -5,10 +5,12 @@ class SpaminatorPlugin::Report < Noosfero::Plugin::ActiveRecord validates_presence_of :environment - named_scope :from, lambda { |environment| {:conditions => {:environment_id => environment}}} + attr_accessible :environment - def after_initialize - self.failed ||= {:people => [], :comments => []} + scope :from, lambda { |environment| {:conditions => {:environment_id => environment}}} + + after_initialize do |report| + report.failed = {:people => [], :comments => []} if report.failed.blank? end def spams diff --git a/plugins/spaminator/lib/spaminator_plugin/spaminator.rb b/plugins/spaminator/lib/spaminator_plugin/spaminator.rb index e2decf0..d3f3d4f 100644 --- a/plugins/spaminator/lib/spaminator_plugin/spaminator.rb +++ b/plugins/spaminator/lib/spaminator_plugin/spaminator.rb @@ -1,3 +1,4 @@ +# encoding: utf-8 require 'spaminator_plugin/mailer' class SpaminatorPlugin::Spaminator @@ -13,8 +14,8 @@ class SpaminatorPlugin::Spaminator end def initialize_logger(environment) - logdir = File.join(RAILS_ROOT, 'log', SpaminatorPlugin.name.underscore) - File.makedirs(logdir) if !File.exist?(logdir) + logdir = Rails.root.join('log', SpaminatorPlugin.name.underscore) + FileUtils.mkdir_p(logdir) if !File.exist?(logdir) logpath = File.join(logdir, "#{environment.name.to_slug}_#{ENV['RAILS_ENV']}_#{Time.now.strftime('%F_%T')}.log") @logger = Logger.new(logpath) end @@ -28,9 +29,10 @@ class SpaminatorPlugin::Spaminator def initialize(environment) @environment = environment @settings = Noosfero::Plugin::Settings.new(@environment, SpaminatorPlugin) - @report = SpaminatorPlugin::Report.new(:environment => environment, + @report = SpaminatorPlugin::Report.new({:environment => environment, :total_people => Person.count, - :total_comments => Comment.count) + :total_comments => Comment.count}, + :without_protection => true) self.class.initialize_logger(environment) end @@ -158,7 +160,7 @@ class SpaminatorPlugin::Spaminator def disable_person(person) if person.disable - SpaminatorPlugin::Mailer.delay.deliver_inactive_person_notification(person) + Delayed::Job.enqueue(SpaminatorPlugin::Mailer::Job.new(person, :inactive_person_notification)) end end diff --git a/plugins/spaminator/test/unit/spaminator_plugin/mailer_test.rb b/plugins/spaminator/test/unit/spaminator_plugin/mailer_test.rb index 1778524..56c4b28 100644 --- a/plugins/spaminator/test/unit/spaminator_plugin/mailer_test.rb +++ b/plugins/spaminator/test/unit/spaminator_plugin/mailer_test.rb @@ -18,7 +18,7 @@ class SpaminatorPlugin::MailerTest < ActiveSupport::TestCase environment.save person = create_user('spammer').person - mail = SpaminatorPlugin::Mailer.deliver_inactive_person_notification(person) + mail = SpaminatorPlugin::Mailer.inactive_person_notification(person).deliver assert_equal ['spammer@noosfero.org'], mail.to assert_equal ['no-reply@noosfero.org'], mail.from diff --git a/plugins/spaminator/test/unit/spaminator_plugin/report_test.rb b/plugins/spaminator/test/unit/spaminator_plugin/report_test.rb index 37526bc..353e127 100644 --- a/plugins/spaminator/test/unit/spaminator_plugin/report_test.rb +++ b/plugins/spaminator/test/unit/spaminator_plugin/report_test.rb @@ -5,11 +5,11 @@ class SpaminatorPlugin::ReportTest < ActiveSupport::TestCase should 'must belong to an environment' do report = SpaminatorPlugin::Report.new report.valid? - assert report.errors.invalid?(:environment) + assert report.errors.include?(:environment) report.environment = Environment.default report.valid? - assert !report.errors.invalid?(:environment) + assert !report.errors.include?(:environment) end should 'have scope of all reports from an environment' do @@ -21,7 +21,7 @@ class SpaminatorPlugin::ReportTest < ActiveSupport::TestCase reports = SpaminatorPlugin::Report.from(environment) - assert_equal ActiveRecord::NamedScope::Scope, reports.class + assert_equal ActiveRecord::Relation, reports.class assert_includes reports, r1 assert_includes reports, r2 assert_includes reports, r3 diff --git a/plugins/spaminator/test/unit/spaminator_plugin/spaminator_test.rb b/plugins/spaminator/test/unit/spaminator_plugin/spaminator_test.rb index a4117c6..3b79294 100644 --- a/plugins/spaminator/test/unit/spaminator_plugin/spaminator_test.rb +++ b/plugins/spaminator/test/unit/spaminator_plugin/spaminator_test.rb @@ -121,7 +121,7 @@ class SpaminatorPlugin::SpaminatorTest < ActiveSupport::TestCase should 'mark person as spammer' do person = create_user('spammer').person - assert_difference AbuseComplaint.finished, :count, 1 do + assert_difference 'AbuseComplaint.finished.count', 1 do spaminator.send(:mark_as_spammer, person) end person.reload @@ -130,16 +130,18 @@ class SpaminatorPlugin::SpaminatorTest < ActiveSupport::TestCase should 'send email notification after disabling person' do person = create_user('spammer').person - assert_difference(ActionMailer::Base.deliveries, :size, 1) do + assert_difference 'ActionMailer::Base.deliveries.size', 1 do spaminator.send(:disable_person, person) + process_delayed_job_queue end end should 'not send email notification if person was not disabled' do person = create_user('spammer').person person.expects(:disable).returns(false) - assert_no_difference(ActionMailer::Base.deliveries, :size) do + assert_no_difference 'ActionMailer::Base.deliveries.size' do spaminator.send(:disable_person, person) + process_delayed_job_queue end end diff --git a/plugins/spaminator/test/unit/spaminator_plugin_test.rb b/plugins/spaminator/test/unit/spaminator_plugin_test.rb index 09209ac..4731cd1 100644 --- a/plugins/spaminator/test/unit/spaminator_plugin_test.rb +++ b/plugins/spaminator/test/unit/spaminator_plugin_test.rb @@ -12,13 +12,13 @@ class SpaminatorPluginTest < ActiveSupport::TestCase should 'schedule a scan if not already scanning' do settings.scanning = true settings.save! - assert_no_difference Delayed::Job, :count do + assert_no_difference 'Delayed::Job.count' do SpaminatorPlugin.schedule_scan(environment) end settings.scanning = false settings.save! - assert_difference Delayed::Job, :count, 1 do + assert_difference 'Delayed::Job.count', 1 do SpaminatorPlugin.schedule_scan(environment) end end diff --git a/plugins/spaminator/views/spaminator_plugin_admin/index.html.erb b/plugins/spaminator/views/spaminator_plugin_admin/index.html.erb new file mode 100644 index 0000000..19013fc --- /dev/null +++ b/plugins/spaminator/views/spaminator_plugin_admin/index.html.erb @@ -0,0 +1,60 @@ +

<%= _('Spaminator settings')%>

+ +<%= form_for(:settings) do |f| %> + +
+ <%= labelled_form_field _('Period (days) for scanning spammers'), f.text_field(:period, :size => 4) %> + +

+ <% if @settings.deployed.nil? %> + <%= _("Spaminator was never deployed. While deployed, Spaminator will periodically scan your social network for spams. Do it now!") %> + <% elsif @settings.deployed %> + <%= _("Spaminator is deployed.") %> + <% else %> + <%= _("Spaminator is withhold.") %> + <% end %> +

+

+ <% if @settings.scanning %> + <%= _("Spaminator is scanning...") %> + <% elsif @settings.deployed %> + <%= _("Next scan on %s days.") % @next_run %> + <% end %> +

+ + <% content = @settings.scanning ? _('Scanning...') : _('Scan now!') %> + <% klass = @settings.scanning ? 'disabled' : '' %> + <%= button(:search, content, {:action => 'scan'}, :class => klass, :disabled => @settings.scanning) %> + <% if !@settings.scanning %> + <%= button(:right, _('Deploy'), {:action => 'deploy'}, :title => _('Schedule next scan for the period defined')) if !@settings.deployed %> + <%= button(:cancel, _('Withhold'), {:action => 'withhold'}, :title => _('Cancel next scheduled scans')) if @settings.deployed %> + <% end %> + + <% button_bar do %> + <%= submit_button(:save, _('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %> + <% end %> +
+ + + + + + + + <% @reports.each do |report| %> + + + + + + <% end %> + + <% content = @reports_count > 0 ? link_to(_('SEE FULL REPORTS (%s)') % @reports_count, :action => 'reports') : _('No Report') %> + + +
<%= _('Date') %><%= _('Spams') %><%= _('Spammers')%>
<%= report.formated_date %>'><%= "#{report.spams} / #{report.total_comments}" %>'><%= "#{report.spammers} / #{report.total_people}" %>
<%= content %>
+ +
+ +<% end %> + diff --git a/plugins/spaminator/views/spaminator_plugin_admin/index.rhtml b/plugins/spaminator/views/spaminator_plugin_admin/index.rhtml deleted file mode 100644 index 19013fc..0000000 --- a/plugins/spaminator/views/spaminator_plugin_admin/index.rhtml +++ /dev/null @@ -1,60 +0,0 @@ -

<%= _('Spaminator settings')%>

- -<%= form_for(:settings) do |f| %> - -
- <%= labelled_form_field _('Period (days) for scanning spammers'), f.text_field(:period, :size => 4) %> - -

- <% if @settings.deployed.nil? %> - <%= _("Spaminator was never deployed. While deployed, Spaminator will periodically scan your social network for spams. Do it now!") %> - <% elsif @settings.deployed %> - <%= _("Spaminator is deployed.") %> - <% else %> - <%= _("Spaminator is withhold.") %> - <% end %> -

-

- <% if @settings.scanning %> - <%= _("Spaminator is scanning...") %> - <% elsif @settings.deployed %> - <%= _("Next scan on %s days.") % @next_run %> - <% end %> -

- - <% content = @settings.scanning ? _('Scanning...') : _('Scan now!') %> - <% klass = @settings.scanning ? 'disabled' : '' %> - <%= button(:search, content, {:action => 'scan'}, :class => klass, :disabled => @settings.scanning) %> - <% if !@settings.scanning %> - <%= button(:right, _('Deploy'), {:action => 'deploy'}, :title => _('Schedule next scan for the period defined')) if !@settings.deployed %> - <%= button(:cancel, _('Withhold'), {:action => 'withhold'}, :title => _('Cancel next scheduled scans')) if @settings.deployed %> - <% end %> - - <% button_bar do %> - <%= submit_button(:save, _('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %> - <% end %> -
- - - - - - - - <% @reports.each do |report| %> - - - - - - <% end %> - - <% content = @reports_count > 0 ? link_to(_('SEE FULL REPORTS (%s)') % @reports_count, :action => 'reports') : _('No Report') %> - - -
<%= _('Date') %><%= _('Spams') %><%= _('Spammers')%>
<%= report.formated_date %>'><%= "#{report.spams} / #{report.total_comments}" %>'><%= "#{report.spammers} / #{report.total_people}" %>
<%= content %>
- -
- -<% end %> - -- libgit2 0.21.2