From e4e9ce9f3e6aeb3ee6215cc3971c118f1f5675dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Checa?= Date: Tue, 19 Dec 2017 13:12:28 +0100 Subject: [PATCH 01/34] Added positive and negative score columns to related contents --- ...46_add_related_contents_positive_and_negative_score.rb | 8 ++++++++ db/schema.rb | 5 +++-- 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 db/migrate/20171219111046_add_related_contents_positive_and_negative_score.rb diff --git a/db/migrate/20171219111046_add_related_contents_positive_and_negative_score.rb b/db/migrate/20171219111046_add_related_contents_positive_and_negative_score.rb new file mode 100644 index 000000000..a40d399b8 --- /dev/null +++ b/db/migrate/20171219111046_add_related_contents_positive_and_negative_score.rb @@ -0,0 +1,8 @@ +class AddRelatedContentsPositiveAndNegativeScore < ActiveRecord::Migration + def change + remove_column :related_contents, :flags_count + + add_column :related_contents, :positive_score, :integer, default: 0 + add_column :related_contents, :negative_score, :integer, default: 0 + end +end diff --git a/db/schema.rb b/db/schema.rb index 609f59c0f..014d81682 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20171215152244) do +ActiveRecord::Schema.define(version: 20171219111046) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -862,7 +862,8 @@ ActiveRecord::Schema.define(version: 20171215152244) do t.integer "related_content_id" t.datetime "created_at" t.datetime "updated_at" - t.integer "flags_count", default: 0 + t.integer "positive_score", default: 0 + t.integer "negative_score", default: 0 end add_index "related_contents", ["child_relationable_type", "child_relationable_id"], name: "index_related_contents_on_child_relationable", using: :btree From 853e655e0cc728c94f471c9f9e95289000424be6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Checa?= Date: Tue, 19 Dec 2017 13:13:20 +0100 Subject: [PATCH 02/34] Changed `related_contents_report_threshold` setting value --- db/dev_seeds.rb | 2 +- db/seeds.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/db/dev_seeds.rb b/db/dev_seeds.rb index 57df045a1..1e9d87b99 100644 --- a/db/dev_seeds.rb +++ b/db/dev_seeds.rb @@ -67,7 +67,7 @@ section "Creating Settings" do Setting.create(key: 'map_latitude', value: 51.48) Setting.create(key: 'map_longitude', value: 0.0) Setting.create(key: 'map_zoom', value: 10) - Setting.create(key: 'related_contents_report_threshold', value: 2) + Setting.create(key: 'related_contents_report_threshold', value: -0.3) end section "Creating Geozones" do diff --git a/db/seeds.rb b/db/seeds.rb index e06b5d07d..6c4ad5c20 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -120,4 +120,4 @@ Setting['map_longitude'] = 0.0 Setting['map_zoom'] = 10 # Related content -Setting['related_contents_report_threshold'] = 5 +Setting['related_contents_report_threshold'] = -0.3 From 7d8b5838b9cfa0a46849d1a45bb9f4e3e71db016 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Checa?= Date: Tue, 19 Dec 2017 13:14:12 +0100 Subject: [PATCH 03/34] Added new related contents score method --- app/controllers/related_contents_controller.rb | 18 ++++++++---------- app/models/concerns/relationable.rb | 8 -------- app/models/related_content.rb | 14 ++------------ config/routes.rb | 4 ++-- 4 files changed, 12 insertions(+), 32 deletions(-) diff --git a/app/controllers/related_contents_controller.rb b/app/controllers/related_contents_controller.rb index 8e2cd854d..457936620 100644 --- a/app/controllers/related_contents_controller.rb +++ b/app/controllers/related_contents_controller.rb @@ -17,22 +17,20 @@ class RelatedContentsController < ApplicationController redirect_to @relationable end - def flag + def score_positive @related = RelatedContent.find_by(id: params[:id]) + @related.increment!(:positive_score) + @related.opposite_related_content.increment!(:positive_score) - Flag.flag(current_user, @related) - Flag.flag(current_user, @related.opposite_related_content) - - render template: 'relationable/_refresh_flag_actions' + render template: 'relationable/_refresh_score_actions' end - def unflag + def score_negative @related = RelatedContent.find_by(id: params[:id]) + @related.increment!(:negative_score) + @related.opposite_related_content.increment!(:negative_score) - Flag.unflag(current_user, @related) - Flag.unflag(current_user, @related.opposite_related_content) - - render template: 'relationable/_refresh_flag_actions' + render template: 'relationable/_refresh_score_actions' end private diff --git a/app/models/concerns/relationable.rb b/app/models/concerns/relationable.rb index 4ef03990e..4acc399e4 100644 --- a/app/models/concerns/relationable.rb +++ b/app/models/concerns/relationable.rb @@ -12,12 +12,4 @@ module Relationable def relationed_contents related_contents.not_hidden.map { |related_content| related_content.child_relationable } end - - def report_related_content(relationable) - related_content = related_contents.find_by(child_relationable: relationable) - if related_content.present? - related_content.increment!(:flags_count) - related_content.opposite_related_content.increment!(:flags_count) - end - end end diff --git a/app/models/related_content.rb b/app/models/related_content.rb index 7c9515035..2af0a5c1c 100644 --- a/app/models/related_content.rb +++ b/app/models/related_content.rb @@ -1,7 +1,5 @@ class RelatedContent < ActiveRecord::Base - include Flaggable - - RELATED_CONTENTS_REPORT_THRESHOLD = Setting['related_contents_report_threshold'].to_i + RELATED_CONTENTS_REPORT_THRESHOLD = Setting['related_contents_report_threshold'].to_f RELATIONABLE_MODELS = %w{proposals debates}.freeze belongs_to :parent_relationable, polymorphic: true, touch: true @@ -17,11 +15,7 @@ class RelatedContent < ActiveRecord::Base after_create :create_opposite_related_content, unless: proc { opposite_related_content.present? } after_destroy :destroy_opposite_related_content, if: proc { opposite_related_content.present? } - scope :not_hidden, -> { where('flags_count <= ?', RELATED_CONTENTS_REPORT_THRESHOLD) } - - def hidden_by_reports? - flags_count > RELATED_CONTENTS_REPORT_THRESHOLD - end + scope :not_hidden, -> { where('positive_score - negative_score / LEAST(nullif(positive_score + negative_score, 0), 1) >= ?', RELATED_CONTENTS_REPORT_THRESHOLD) } private @@ -29,8 +23,4 @@ class RelatedContent < ActiveRecord::Base related_content = RelatedContent.create!(opposite_related_content: self, parent_relationable: child_relationable, child_relationable: parent_relationable) self.opposite_related_content = related_content end - - def destroy_opposite_related_content - opposite_related_content.destroy - end end diff --git a/config/routes.rb b/config/routes.rb index 40eb2e139..fb1535b6c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -464,8 +464,8 @@ Rails.application.routes.draw do resources :related_contents, only: [:create] do member do - put :flag - put :unflag + put :score_positive + put :score_negative end end From fcb6c7a19d77f8c437e9825c6746a1b9fb0aed9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=ADa=20Checa?= Date: Tue, 19 Dec 2017 13:20:30 +0100 Subject: [PATCH 04/34] Added related contents score views --- app/views/relationable/_flag_actions.html.erb | 19 ------------------- .../relationable/_refresh_flag_actions.js.erb | 1 - .../_refresh_score_actions.js.erb | 1 + app/views/relationable/_related_list.html.erb | 8 +++++--- app/views/relationable/_score.html.erb | 5 +++++ 5 files changed, 11 insertions(+), 23 deletions(-) delete mode 100644 app/views/relationable/_flag_actions.html.erb delete mode 100644 app/views/relationable/_refresh_flag_actions.js.erb create mode 100644 app/views/relationable/_refresh_score_actions.js.erb create mode 100644 app/views/relationable/_score.html.erb diff --git a/app/views/relationable/_flag_actions.html.erb b/app/views/relationable/_flag_actions.html.erb deleted file mode 100644 index d501b098d..000000000 --- a/app/views/relationable/_flag_actions.html.erb +++ /dev/null @@ -1,19 +0,0 @@ - - <% if show_flag_action? related %> - - - - - <%= link_to t('shared.flag'), flag_related_content_path(related), method: :put, remote: true, id: "flag-related-#{ related.id }" %> - - <% end %> - - <% if show_unflag_action? related %> - - - - - <%= link_to t('shared.unflag'), unflag_related_content_path(related), method: :put, remote: true, id: "unflag-related-#{ related.id }" %> - - <% end %> - diff --git a/app/views/relationable/_refresh_flag_actions.js.erb b/app/views/relationable/_refresh_flag_actions.js.erb deleted file mode 100644 index d3755c4b1..000000000 --- a/app/views/relationable/_refresh_flag_actions.js.erb +++ /dev/null @@ -1 +0,0 @@ -$("#<%= dom_id(@related) %>.js-flag-actions").html('<%= j render("relationable/flag_actions", related: @related) %>'); diff --git a/app/views/relationable/_refresh_score_actions.js.erb b/app/views/relationable/_refresh_score_actions.js.erb new file mode 100644 index 000000000..a0f2101c6 --- /dev/null +++ b/app/views/relationable/_refresh_score_actions.js.erb @@ -0,0 +1 @@ +$("#<%= dom_id(@related) %>.js-score-actions").html(''); diff --git a/app/views/relationable/_related_list.html.erb b/app/views/relationable/_related_list.html.erb index f1d86b748..351865734 100644 --- a/app/views/relationable/_related_list.html.erb +++ b/app/views/relationable/_related_list.html.erb @@ -1,9 +1,11 @@