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