From f534a697240f75a172d0326405bbe3d12b5e1ad4 Mon Sep 17 00:00:00 2001 From: keshav sethi Date: Mon, 22 Jun 2020 19:09:00 +0530 Subject: [PATCH 1/4] digest for unmoderated posts --- app/controllers/admin_controller.rb | 5 +++ app/controllers/users_controller.rb | 4 +- app/jobs/digest_spam_job.rb | 15 +++++++ app/mailers/admin_mailer.rb | 11 +++++ app/models/user.rb | 30 ++++++++++++++ .../admin_mailer/send_digest_spam.html.erb | 39 ++++++++++++++++++ app/views/users/profile.html.erb | 3 ++ app/views/users/settings.html.erb | 40 +++++++++++++++++++ config/routes.rb | 1 + config/schedule.rb | 2 + test/functional/admin_controller_test.rb | 6 +++ 11 files changed, 155 insertions(+), 1 deletion(-) create mode 100644 app/jobs/digest_spam_job.rb create mode 100644 app/views/admin_mailer/send_digest_spam.html.erb diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index 3ab5f69194..8bab7d4a48 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -395,4 +395,9 @@ def smtp_test s.close end + + def test_digest_email_spam + DigestSpamJob.perform_async(0) + redirect_to "/spam" + end end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 9c844b2e14..2065eed80f 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -401,7 +401,9 @@ def save_settings digest_settings = [ 'digest:weekly', - 'digest:daily' + 'digest:daily', + 'digest:weekly:spam', + 'digest:daily:spam' ] digest_settings.each do |setting| if params[setting] == "on" diff --git a/app/jobs/digest_spam_job.rb b/app/jobs/digest_spam_job.rb new file mode 100644 index 0000000000..f3f8cc2a8d --- /dev/null +++ b/app/jobs/digest_spam_job.rb @@ -0,0 +1,15 @@ +class DigestSpamJob + include Sidekiq::Worker + def perform(frequency_digest) + if frequency_digest.zero? + tag_digest = 'digest:daily:spam' + elsif frequency_digest == 1 + tag_digest = 'digest:weekly:spam' + end + users = User.where(role: %w(moderator admin)) + .includes(:user_tags) + .where('user_tags.value=?', tag_digest) + .references(:user_tags) + users.each(&:send_digest_email_spam) + end +end \ No newline at end of file diff --git a/app/mailers/admin_mailer.rb b/app/mailers/admin_mailer.rb index 952e2b0198..05be8b7e45 100644 --- a/app/mailers/admin_mailer.rb +++ b/app/mailers/admin_mailer.rb @@ -120,4 +120,15 @@ def notify_moderators_of_spam(node, moderator) subject: subject ) end + + def send_digest_spam(nodes, frequency_digest) + if frequency_digest == User::Frequency::DAILY + @subject = 'Your daily digest for moderation' + elsif frequency_digest == User::Frequency::WEEKLY + @subject = 'Your weekly digest for moderation' + end + moderators = User.where(role: %w(moderator admin)).collect(&:email) + @nodes = nodes + mail(to: moderators, subject: @subject) + end end diff --git a/app/models/user.rb b/app/models/user.rb index ef44ea5461..0e67b21b04 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -268,6 +268,23 @@ def content_followed_in_period(start_time, end_time, node_type = 'note', include .distinct end + def unmoderated_in_period(start_time, end_time) + tag_following = TagSelection.where(following: true, user_id: uid) + ids = [] + tag_following.each do |tagname| + ids += NodeTag.where(tid: tagname.tid).collect(&:nid) + end + range = "(created >= #{start_time.to_i} AND created <= #{end_time.to_i})" + Node.where(nid: ids) + .includes(:revision, :tag) + .references(:node_revision) + .where('node.status = 4') + .where(type: 'note') + .where(range) + .order('node_revisions.timestamp DESC') + .distinct + end + def social_link(site) return nil unless has_power_tag(site) @@ -356,6 +373,19 @@ def send_digest_email end end + def send_digest_email_spam + if has_tag('digest:weekly:spam') + @frequency_digest = Frequency::WEEKLY + @nodes_unmoderated = unmoderated_in_period(1.week.ago, Time.current) + elsif has_tag('digest:daily:spam') + @frequency_digest = Frequency::DAILY + @nodes_unmoderated = unmoderated_in_period(1.day.ago, Time.current) + end + if @nodes_unmoderated.size.positive? + AdminMailer.send_digest_spam(@nodes_unmoderated, @frequency_digest).deliver_now + end + end + def tag_counts tags = {} Node.order('nid DESC').where(type: 'note', status: 1, uid: id).limit(20).each do |node| diff --git a/app/views/admin_mailer/send_digest_spam.html.erb b/app/views/admin_mailer/send_digest_spam.html.erb new file mode 100644 index 0000000000..bf689af0a5 --- /dev/null +++ b/app/views/admin_mailer/send_digest_spam.html.erb @@ -0,0 +1,39 @@ +
+ +

[Public Lab] <%= @subject %>

+

<%= Time.now.strftime("%B %-d %Y") %>

+

Unmoderated Notes at PublicLab.org

+
+
+ + +
+

Click here to choose your followed topics

+

Click here to change your subscription settings

+
diff --git a/app/views/users/profile.html.erb b/app/views/users/profile.html.erb index 7213f25947..f61a2410bf 100644 --- a/app/views/users/profile.html.erb +++ b/app/views/users/profile.html.erb @@ -209,6 +209,9 @@ <%= form_tag "/users/test_digest_email", method: :post do %> <%= submit_tag "Test Digest Email", class: "btn btn-info", style: "width: 100%;" %> <% end %> + <%= form_tag "/admin/test_digest_email_spam", method: :post do %> + <%= submit_tag "Test Spam Digest Email", class: "btn btn-sm btn-primary mt-2", style: "width: 100%;" %> + <% end %> <% end %> <% end %> diff --git a/app/views/users/settings.html.erb b/app/views/users/settings.html.erb index 7cc2c467e1..752603d73b 100644 --- a/app/views/users/settings.html.erb +++ b/app/views/users/settings.html.erb @@ -90,6 +90,35 @@

+ <% if current_user.can_moderate? %> +
+ Do you want to receive weekly digest for unmoderated posts? + + + +
+ +
+
+ +
+ Do you want to receive daily digest for unmoderated posts? + + + +
+ +
+
+ <% end %>
Do you want to receive browser notification when you are mentioned? @@ -268,5 +297,16 @@ $(':input[name="digest:daily"]').prop('checked', false); } }); + $(':input[name="digest:daily:spam"]').change(function () { + if($(':input[name="digest:daily:spam"]').prop('checked') === true){ + $(':input[name="digest:weekly:spam"]').prop('checked', false); + } + }); + + $(':input[name="digest:weekly:spam"]').change(function () { + if($(':input[name="digest:weekly:spam"]').prop('checked') === true){ + $(':input[name="digest:daily:spam"]').prop('checked', false); + } + }); }); diff --git a/config/routes.rb b/config/routes.rb index 391886d9ab..f0a9311e5f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -344,6 +344,7 @@ get 'questions/liked(/:tagnames)' => 'questions#liked' post 'users/test_digest_email' => 'users#test_digest_email' + post 'admin/test_digest_email_spam' => 'admin#test_digest_email_spam' get 'comment/delete/:id' => 'comment#delete' get 'comment/update/:id' => 'comment#update' diff --git a/config/schedule.rb b/config/schedule.rb index 2711a5a8cd..76c2b8b0b6 100644 --- a/config/schedule.rb +++ b/config/schedule.rb @@ -46,8 +46,10 @@ every 1.day do runner "DigestMailJob.perform_async(0)" + runner "DigestSpamJob.perform_async(0)" end every 1.week do runner "DigestMailJob.perform_async(1)" + runner "DigestSpamJob.perform_async(1)" end diff --git a/test/functional/admin_controller_test.rb b/test/functional/admin_controller_test.rb index dbb6d2b36b..9408004aef 100644 --- a/test/functional/admin_controller_test.rb +++ b/test/functional/admin_controller_test.rb @@ -638,4 +638,10 @@ def teardown assert_response :success assert_not_nil assigns(:users) end + + test "test digest emails to moderators" do + UserSession.create(users(:moderator)) + post :test_digest_email_spam + assert_redirected_to '/spam' + end end From 4d39d5e206f375833af64a79a416e72531b4d638 Mon Sep 17 00:00:00 2001 From: keshav sethi Date: Mon, 22 Jun 2020 19:28:10 +0530 Subject: [PATCH 2/4] diegst --- app/controllers/users_controller.rb | 2 +- app/jobs/digest_spam_job.rb | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 2065eed80f..5b5606de10 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -401,7 +401,7 @@ def save_settings digest_settings = [ 'digest:weekly', - 'digest:daily', + 'digest:daily', 'digest:weekly:spam', 'digest:daily:spam' ] diff --git a/app/jobs/digest_spam_job.rb b/app/jobs/digest_spam_job.rb index f3f8cc2a8d..f1ad383353 100644 --- a/app/jobs/digest_spam_job.rb +++ b/app/jobs/digest_spam_job.rb @@ -1,15 +1,15 @@ class DigestSpamJob - include Sidekiq::Worker - def perform(frequency_digest) - if frequency_digest.zero? + include Sidekiq::Worker + def perform(frequency_digest) + if frequency_digest.zero? tag_digest = 'digest:daily:spam' - elsif frequency_digest == 1 + elsif frequency_digest == 1 tag_digest = 'digest:weekly:spam' - end - users = User.where(role: %w(moderator admin)) + end + users = User.where(role: %w(moderator admin)) .includes(:user_tags) .where('user_tags.value=?', tag_digest) .references(:user_tags) - users.each(&:send_digest_email_spam) - end -end \ No newline at end of file + users.each(&:send_digest_email_spam) + end +end From 9261c4fe291f9fb75271350838450b61c0bfe8bb Mon Sep 17 00:00:00 2001 From: keshav sethi Date: Mon, 22 Jun 2020 19:32:14 +0530 Subject: [PATCH 3/4] tag indentation --- app/jobs/digest_spam_job.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/jobs/digest_spam_job.rb b/app/jobs/digest_spam_job.rb index f1ad383353..d32f20f13b 100644 --- a/app/jobs/digest_spam_job.rb +++ b/app/jobs/digest_spam_job.rb @@ -2,9 +2,9 @@ class DigestSpamJob include Sidekiq::Worker def perform(frequency_digest) if frequency_digest.zero? - tag_digest = 'digest:daily:spam' + tag_digest = 'digest:daily:spam' elsif frequency_digest == 1 - tag_digest = 'digest:weekly:spam' + tag_digest = 'digest:weekly:spam' end users = User.where(role: %w(moderator admin)) .includes(:user_tags) From 784f602806e6c4ca8a455aaf27f6e6c75ff11cac Mon Sep 17 00:00:00 2001 From: keshav sethi Date: Wed, 24 Jun 2020 04:42:12 +0530 Subject: [PATCH 4/4] spam2 digest admins --- app/views/users/settings.html.erb | 81 ++++++++++++++++--------------- 1 file changed, 42 insertions(+), 39 deletions(-) diff --git a/app/views/users/settings.html.erb b/app/views/users/settings.html.erb index 752603d73b..a6b1d3b496 100644 --- a/app/views/users/settings.html.erb +++ b/app/views/users/settings.html.erb @@ -4,7 +4,7 @@
- Do you want to be notified by email for comments on your posts? + Do you want to be notified by a email for comments on your posts?