From 2cc585816369afd2f1b0266615d78282a0a99ad8 Mon Sep 17 00:00:00 2001 From: Robin Ward Date: Thu, 26 Mar 2015 11:26:19 -0400 Subject: [PATCH] Add site setting to disable User Directory, include restricted info --- app/assets/javascripts/discourse/templates/site-map.hbs | 4 +++- app/controllers/directory_items_controller.rb | 2 ++ app/models/directory_item.rb | 5 ++++- config/locales/server.en.yml | 1 + config/site_settings.yml | 3 +++ spec/controllers/directory_items_controller_spec.rb | 8 ++++++++ 6 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/discourse/templates/site-map.hbs b/app/assets/javascripts/discourse/templates/site-map.hbs index c7995ef22..c781c3a91 100644 --- a/app/assets/javascripts/discourse/templates/site-map.hbs +++ b/app/assets/javascripts/discourse/templates/site-map.hbs @@ -22,7 +22,9 @@ {{/if}} -
  • {{#link-to 'users'}}{{i18n "directory.title"}}{{/link-to}}
  • + {{#if siteSettings.enable_user_directory}} +
  • {{#link-to 'users'}}{{i18n "directory.title"}}{{/link-to}}
  • + {{/if}} {{plugin-outlet "site-map-links"}} diff --git a/app/controllers/directory_items_controller.rb b/app/controllers/directory_items_controller.rb index 7a53f3a4c..35ed1ffc1 100644 --- a/app/controllers/directory_items_controller.rb +++ b/app/controllers/directory_items_controller.rb @@ -2,6 +2,8 @@ class DirectoryItemsController < ApplicationController PAGE_SIZE = 50 def index + raise Discourse::InvalidAccess.new(:enable_user_directory) unless SiteSetting.enable_user_directory? + period = params.require(:period) period_type = DirectoryItem.period_types[period.to_sym] raise Discourse::InvalidAccess.new(:period_type) unless period_type diff --git a/app/models/directory_item.rb b/app/models/directory_item.rb index 0597e7174..65d8dede2 100644 --- a/app/models/directory_item.rb +++ b/app/models/directory_item.rb @@ -24,6 +24,10 @@ class DirectoryItem < ActiveRecord::Base end def self.refresh_period!(period_type) + + # Don't calculate it if the user directory is disabled + return unless SiteSetting.enable_user_directory? + since = case period_type when :daily then 1.day.ago when :weekly then 1.week.ago @@ -57,7 +61,6 @@ class DirectoryItem < ActiveRecord::Base AND COALESCE(t.archetype, 'regular') = 'regular' AND p.deleted_at IS NULL AND (NOT (COALESCE(p.hidden, false))) - AND (NOT COALESCE(c.read_restricted, false)) AND COALESCE(p.post_type, :regular_post_type) != :moderator_action AND u.id > 0 GROUP BY u.id", diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index fc1c1c5e5..5a1899184 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -1086,6 +1086,7 @@ en: max_daily_gravatar_crawls: "Maximum number of times Discourse will check Gravatar for custom avatars in a day" public_user_custom_fields: "A whitelist of custom fields for a user that can be shown publicly." staff_user_custom_fields: "A whitelist of custom fields for a user that can be shown to staff." + enable_user_directory: "Provide a directory of users for browsing" allow_profile_backgrounds: "Allow users to upload profile backgrounds." diff --git a/config/site_settings.yml b/config/site_settings.yml index d6f3a041c..7dcbe71a1 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -303,6 +303,9 @@ users: staff_user_custom_fields: type: list default: '' + enable_user_directory: + client: true + default: true posting: min_post_length: diff --git a/spec/controllers/directory_items_controller_spec.rb b/spec/controllers/directory_items_controller_spec.rb index c100b3c19..d8bf47910 100644 --- a/spec/controllers/directory_items_controller_spec.rb +++ b/spec/controllers/directory_items_controller_spec.rb @@ -11,6 +11,7 @@ describe DirectoryItemsController do response.should_not be_success end + context "without data" do context "and a logged in user" do @@ -42,5 +43,12 @@ describe DirectoryItemsController do json['total_rows_directory_items'].should be_present json['load_more_directory_items'].should be_present end + + it "fails when the directory is disabled" do + SiteSetting.enable_user_directory = false + + xhr :get, :index, period: 'all' + response.should_not be_success + end end end