Merge pull request #3929 from techAPJ/tl4

FEATURE: make "trust level 3" requirements time period admin setting
This commit is contained in:
Neil Lalonde 2015-12-22 17:04:19 -05:00
commit 95749fdeb7
8 changed files with 50 additions and 21 deletions

View File

@ -1,10 +1,10 @@
const TL3Requirements = Discourse.Model.extend({ const TL3Requirements = Discourse.Model.extend({
days_visited_percent: function() { days_visited_percent: function() {
return ((this.get('days_visited') * 100) / this.get('time_period')); return Math.round((this.get('days_visited') * 100) / this.get('time_period'));
}.property('days_visited', 'time_period'), }.property('days_visited', 'time_period'),
min_days_visited_percent: function() { min_days_visited_percent: function() {
return ((this.get('min_days_visited') * 100) / this.get('time_period')); return Math.round((this.get('min_days_visited') * 100) / this.get('time_period'));
}.property('min_days_visited', 'time_period'), }.property('min_days_visited', 'time_period'),
met: function() { met: function() {

View File

@ -10,7 +10,7 @@
<div class="admin-container tl3-requirements"> <div class="admin-container tl3-requirements">
<h2>{{model.username}} - {{i18n 'admin.user.tl3_requirements.title'}}</h2> <h2>{{model.username}} - {{i18n 'admin.user.tl3_requirements.title'}}</h2>
<br/> <br/>
<p>{{i18n 'admin.user.tl3_requirements.table_title'}}</p> <p>{{i18n 'admin.user.tl3_requirements.table_title' time_period=model.tl3Requirements.time_period}}</p>
<table class="table" style="width: auto;"> <table class="table" style="width: auto;">
<thead> <thead>

View File

@ -4,8 +4,6 @@ class TrustLevel3Requirements
include ActiveModel::Serialization include ActiveModel::Serialization
TIME_PERIOD = 100 # days
LOW_WATER_MARK = 0.9 LOW_WATER_MARK = 0.9
attr_accessor :days_visited, :min_days_visited, attr_accessor :days_visited, :min_days_visited,
@ -60,6 +58,10 @@ class TrustLevel3Requirements
num_likes_received_days < min_likes_received_days * LOW_WATER_MARK num_likes_received_days < min_likes_received_days * LOW_WATER_MARK
end end
def time_period
SiteSetting.tl3_time_period
end
def trust_level_locked def trust_level_locked
@user.trust_level_locked @user.trust_level_locked
end end
@ -69,7 +71,7 @@ class TrustLevel3Requirements
end end
def days_visited def days_visited
@user.user_visits.where("visited_at > ? and posts_read > 0", TIME_PERIOD.days.ago).count @user.user_visits.where("visited_at > ? and posts_read > 0", time_period.days.ago).count
end end
def min_days_visited def min_days_visited
@ -77,7 +79,7 @@ class TrustLevel3Requirements
end end
def num_topics_replied_to def num_topics_replied_to
@user.posts.select('distinct topic_id').where('created_at > ? AND post_number > 1', TIME_PERIOD.days.ago).count @user.posts.select('distinct topic_id').where('created_at > ? AND post_number > 1', time_period.days.ago).count
end end
def min_topics_replied_to def min_topics_replied_to
@ -89,7 +91,7 @@ class TrustLevel3Requirements
end end
def topics_viewed def topics_viewed
topics_viewed_query.where('viewed_at > ?', TIME_PERIOD.days.ago).count topics_viewed_query.where('viewed_at > ?', time_period.days.ago).count
end end
def min_topics_viewed def min_topics_viewed
@ -97,7 +99,7 @@ class TrustLevel3Requirements
end end
def posts_read def posts_read
@user.user_visits.where('visited_at > ?', TIME_PERIOD.days.ago).pluck(:posts_read).sum @user.user_visits.where('visited_at > ?', time_period.days.ago).pluck(:posts_read).sum
end end
def min_posts_read def min_posts_read
@ -147,7 +149,7 @@ class TrustLevel3Requirements
end end
def num_likes_given def num_likes_given
UserAction.where(user_id: @user.id, action_type: UserAction::LIKE).where('created_at > ?', TIME_PERIOD.days.ago).count UserAction.where(user_id: @user.id, action_type: UserAction::LIKE).where('created_at > ?', time_period.days.ago).count
end end
def min_likes_given def min_likes_given
@ -155,7 +157,7 @@ class TrustLevel3Requirements
end end
def num_likes_received_query def num_likes_received_query
UserAction.where(user_id: @user.id, action_type: UserAction::WAS_LIKED).where('created_at > ?', TIME_PERIOD.days.ago) UserAction.where(user_id: @user.id, action_type: UserAction::WAS_LIKED).where('created_at > ?', time_period.days.ago)
end end
def num_likes_received def num_likes_received
@ -197,7 +199,7 @@ class TrustLevel3Requirements
def self.num_topics_in_time_period def self.num_topics_in_time_period
$redis.get(NUM_TOPICS_KEY) || begin $redis.get(NUM_TOPICS_KEY) || begin
count = Topic.listable_topics.visible.created_since(TIME_PERIOD.days.ago).count count = Topic.listable_topics.visible.created_since(SiteSetting.tl3_time_period.days.ago).count
$redis.setex NUM_TOPICS_KEY, CACHE_DURATION, count $redis.setex NUM_TOPICS_KEY, CACHE_DURATION, count
count count
end end
@ -205,7 +207,7 @@ class TrustLevel3Requirements
def self.num_posts_in_time_period def self.num_posts_in_time_period
$redis.get(NUM_POSTS_KEY) || begin $redis.get(NUM_POSTS_KEY) || begin
count = Post.public_posts.visible.created_since(TIME_PERIOD.days.ago).count count = Post.public_posts.visible.created_since(SiteSetting.tl3_time_period.days.ago).count
$redis.setex NUM_POSTS_KEY, CACHE_DURATION, count $redis.setex NUM_POSTS_KEY, CACHE_DURATION, count
count count
end end
@ -214,7 +216,7 @@ class TrustLevel3Requirements
def flagged_post_ids def flagged_post_ids
@_flagged_post_ids ||= @user.posts @_flagged_post_ids ||= @user.posts
.with_deleted .with_deleted
.where('created_at > ? AND (spam_count > 0 OR inappropriate_count > 0)', TIME_PERIOD.days.ago) .where('created_at > ? AND (spam_count > 0 OR inappropriate_count > 0)', time_period.days.ago)
.pluck(:id) .pluck(:id)
end end
end end

View File

@ -16,10 +16,6 @@ class TrustLevel3RequirementsSerializer < ApplicationSerializer
:num_likes_received_days, :min_likes_received_days, :num_likes_received_days, :min_likes_received_days,
:num_likes_received_users, :min_likes_received_users :num_likes_received_users, :min_likes_received_users
def time_period
TrustLevel3Requirements::TIME_PERIOD
end
def requirements_met def requirements_met
object.requirements_met? object.requirements_met?
end end

View File

@ -2449,7 +2449,7 @@ en:
unlock_trust_level: "Unlock Trust Level" unlock_trust_level: "Unlock Trust Level"
tl3_requirements: tl3_requirements:
title: "Requirements for Trust Level 3" title: "Requirements for Trust Level 3"
table_title: "In the last 100 days:" table_title: "In the last %{time_period} days:"
value_heading: "Value" value_heading: "Value"
requirement_heading: "Requirement" requirement_heading: "Requirement"
visits: "Visits" visits: "Visits"

View File

@ -997,6 +997,7 @@ en:
tl2_requires_likes_given: "How many likes a user must cast before promotion to trust level 2." tl2_requires_likes_given: "How many likes a user must cast before promotion to trust level 2."
tl2_requires_topic_reply_count: "How many topics user must reply to before promotion to trust level 2." tl2_requires_topic_reply_count: "How many topics user must reply to before promotion to trust level 2."
tl3_time_period: "Trust Level 3 requirements time period"
tl3_requires_days_visited: "Minimum number of days that a user needs to have visited the site in the last 100 days to qualify for promotion to trust level 3. (0 to 100)" tl3_requires_days_visited: "Minimum number of days that a user needs to have visited the site in the last 100 days to qualify for promotion to trust level 3. (0 to 100)"
tl3_requires_topics_replied_to: "Minimum number of topics a user needs to have replied to in the last 100 days to qualify for promotion to trust level 3. (0 or higher)" tl3_requires_topics_replied_to: "Minimum number of topics a user needs to have replied to in the last 100 days to qualify for promotion to trust level 3. (0 or higher)"
tl3_requires_topics_viewed: "The percentage of topics created in the last 100 days that a user needs to have viewed to qualify for promotion to trust level 3. (0 to 100)" tl3_requires_topics_viewed: "The percentage of topics created in the last 100 days that a user needs to have viewed to qualify for promotion to trust level 3. (0 to 100)"

View File

@ -638,6 +638,9 @@ trust:
tl2_requires_likes_received: 1 tl2_requires_likes_received: 1
tl2_requires_likes_given: 1 tl2_requires_likes_given: 1
tl2_requires_topic_reply_count: 3 tl2_requires_topic_reply_count: 3
tl3_time_period:
default: 100
min: 1
tl3_requires_days_visited: tl3_requires_days_visited:
default: 50 default: 50
min: 0 min: 0

View File

@ -14,6 +14,11 @@ describe TrustLevel3Requirements do
end end
describe "requirements" do describe "requirements" do
it "time_period uses site setting" do
SiteSetting.stubs(:tl3_time_period).returns(80)
expect(tl3_requirements.time_period).to eq(80)
end
it "min_days_visited uses site setting" do it "min_days_visited uses site setting" do
SiteSetting.stubs(:tl3_requires_days_visited).returns(66) SiteSetting.stubs(:tl3_requires_days_visited).returns(66)
expect(tl3_requirements.min_days_visited).to eq(66) expect(tl3_requirements.min_days_visited).to eq(66)
@ -65,7 +70,7 @@ describe TrustLevel3Requirements do
end end
describe "days_visited" do describe "days_visited" do
it "counts visits when posts were read no further back than 100 days ago" do it "counts visits when posts were read no further back than 100 days (default time period) ago" do
user.save user.save
user.update_posts_read!(1, at: 2.days.ago) user.update_posts_read!(1, at: 2.days.ago)
user.update_posts_read!(1, at: 3.days.ago) user.update_posts_read!(1, at: 3.days.ago)
@ -73,6 +78,17 @@ describe TrustLevel3Requirements do
user.update_posts_read!(3, at: 101.days.ago) user.update_posts_read!(3, at: 101.days.ago)
expect(tl3_requirements.days_visited).to eq(2) expect(tl3_requirements.days_visited).to eq(2)
end end
it "respects tl3_time_period setting" do
SiteSetting.tl3_time_period = 200
user.save
user.update_posts_read!(1, at: 2.days.ago)
user.update_posts_read!(1, at: 3.days.ago)
user.update_posts_read!(0, at: 4.days.ago)
user.update_posts_read!(3, at: 101.days.ago)
user.update_posts_read!(4, at: 201.days.ago)
expect(tl3_requirements.days_visited).to eq(3)
end
end end
describe "num_topics_replied_to" do describe "num_topics_replied_to" do
@ -93,7 +109,7 @@ describe TrustLevel3Requirements do
end end
describe "topics_viewed" do describe "topics_viewed" do
it "counts topics views within last 100 days, not counting a topic more than once" do it "counts topics views within last 100 days (default time period), not counting a topic more than once" do
user.save user.save
make_view(9, 1.day.ago, user.id) make_view(9, 1.day.ago, user.id)
make_view(9, 3.days.ago, user.id) # same topic, different day make_view(9, 3.days.ago, user.id) # same topic, different day
@ -101,6 +117,17 @@ describe TrustLevel3Requirements do
make_view(2, 101.days.ago, user.id) # too long ago make_view(2, 101.days.ago, user.id) # too long ago
expect(tl3_requirements.topics_viewed).to eq(2) expect(tl3_requirements.topics_viewed).to eq(2)
end end
it "counts topics views within last 200 days, respecting tl3_time_period setting" do
SiteSetting.tl3_time_period = 200
user.save
make_view(9, 1.day.ago, user.id)
make_view(9, 3.days.ago, user.id) # same topic, different day
make_view(3, 4.days.ago, user.id)
make_view(2, 101.days.ago, user.id)
make_view(4, 201.days.ago, user.id) # too long ago
expect(tl3_requirements.topics_viewed).to eq(3)
end
end end
describe "posts_read" do describe "posts_read" do