Skip to content

Commit 1e37abc

Browse files
committed
Add site setting category support
1 parent 791f5ac commit 1e37abc

14 files changed

Lines changed: 350 additions & 238 deletions

app/assets/javascripts/admin/models/site_setting.js

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -103,21 +103,25 @@ Discourse.SiteSetting = Discourse.Model.extend({
103103

104104
Discourse.SiteSetting.reopenClass({
105105

106-
/**
107-
Retrieve all settings from the server
108-
109-
@method findAll
110-
**/
111106
findAll: function() {
112-
var result = Em.A();
113-
Discourse.ajax("/admin/site_settings").then(function (settings) {
107+
return Discourse.ajax("/admin/site_settings").then(function (settings) {
108+
// Group the results by category
109+
var categoryNames = [],
110+
categories = {},
111+
result = Em.A();
114112
_.each(settings.site_settings,function(s) {
115113
s.originalValue = s.value;
116-
result.pushObject(Discourse.SiteSetting.create(s));
114+
if (!categoryNames.contains(s.category)) {
115+
categoryNames.pushObject(s.category);
116+
categories[s.category] = Em.A();
117+
}
118+
categories[s.category].pushObject(Discourse.SiteSetting.create(s));
119+
});
120+
_.each(categoryNames, function(n) {
121+
result.pushObject({nameKey: n, name: I18n.t('admin.site_settings.categories.' + n),siteSettings: categories[n]});
117122
});
118-
result.set('diags', settings.diags);
123+
return result;
119124
});
120-
return result;
121125
},
122126

123127
update: function(key, value) {
@@ -126,6 +130,7 @@ Discourse.SiteSetting.reopenClass({
126130
data: { value: value }
127131
});
128132
}
133+
129134
});
130135

131136

app/assets/javascripts/admin/routes/admin_routes.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
Discourse.Route.buildRoutes(function() {
88
this.resource('admin', { path: '/admin' }, function() {
99
this.route('dashboard', { path: '/' });
10-
this.route('site_settings', { path: '/site_settings' });
10+
this.resource('adminSiteSettings', { path: '/site_settings' }, function() {
11+
this.resource('adminSiteSettingsCategory', { path: 'category/:category_id'} );
12+
});
1113

1214

1315
this.resource('adminSiteContents', { path: '/site_contents' }, function() {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/**
2+
Handles routes related to viewing and editing site settings within one category.
3+
4+
@class AdminSiteSettingCategoryRoute
5+
@extends Discourse.Route
6+
@namespace Discourse
7+
@module Discourse
8+
**/
9+
Discourse.AdminSiteSettingsCategoryRoute = Discourse.Route.extend({
10+
model: function(params) {
11+
var category = this.modelFor('adminSiteSettings').find(function(siteSettingCategory) {
12+
return siteSettingCategory.nameKey === params.category_id;
13+
});
14+
if (category) {
15+
return category.siteSettings;
16+
}
17+
}
18+
});

app/assets/javascripts/admin/routes/admin_site_settings_route.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,13 @@ Discourse.AdminSiteSettingsRoute = Discourse.Route.extend({
1111
return Discourse.SiteSetting.findAll();
1212
}
1313
});
14+
15+
/**
16+
Handles when you click the Site Settings tab in admin, but haven't
17+
chosen a category. It will redirect to the first category.
18+
**/
19+
Discourse.AdminSiteSettingsIndexRoute = Discourse.Route.extend({
20+
model: function() {
21+
this.transitionTo('adminSiteSettingsCategory', this.modelFor('adminSiteSettings')[0].nameKey);
22+
}
23+
});

app/assets/javascripts/admin/templates/admin.js.handlebars

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<ul class="nav nav-pills">
66
<li>{{#link-to 'admin.dashboard'}}{{i18n admin.dashboard.title}}{{/link-to}}</li>
77
{{#if currentUser.admin}}
8-
<li>{{#link-to 'admin.site_settings'}}{{i18n admin.site_settings.title}}{{/link-to}}</li>
8+
<li>{{#link-to 'adminSiteSettings'}}{{i18n admin.site_settings.title}}{{/link-to}}</li>
99
<li>{{#link-to 'adminSiteContents'}}{{i18n admin.site_content.title}}{{/link-to}}</li>
1010
{{/if}}
1111
<li>{{#link-to 'adminUsersList'}}{{i18n admin.users.title}}{{/link-to}}</li>

app/assets/javascripts/admin/templates/site_settings.js.handlebars

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,14 @@
88
<div class='controls'>
99
{{textField value=filter placeholderKey="type_to_filter"}}
1010
</div>
11-
1211
</div>
1312

14-
{{collection contentBinding="filteredContent" classNames="form-horizontal settings" itemViewClass="Discourse.SiteSettingView"}}
13+
<ul class="nav nav-pills">
14+
{{#each category in controller}}
15+
<li>{{#link-to 'adminSiteSettingsCategory' category.nameKey}}{{category.name}}{{/link-to}}</a></li>
16+
{{/each}}
17+
</ul>
18+
19+
<hr/>
1520

21+
{{ outlet }}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{{collection contentBinding="content" classNames="form-horizontal settings" itemViewClass="Discourse.SiteSettingView"}}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Discourse.AdminSiteSettingsCategoryView = Discourse.View.extend({
2+
templateName: 'admin/templates/site_settings_category'
3+
});

app/models/site_setting.rb

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,10 @@ class SiteSetting < ActiveRecord::Base
88
validates_presence_of :data_type
99

1010
SiteSettings::YamlLoader.new("#{Rails.root}/config/site_settings.yml").load do |category, name, default, opts|
11-
# TODO: category support
1211
if opts.delete(:client)
13-
client_setting(name.to_sym, default)
12+
client_setting(name, default, category)
1413
else
15-
setting(name.to_sym, default, opts)
14+
setting(name, default, category, opts)
1615
end
1716
end
1817

config/locales/client.en.yml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1417,5 +1417,13 @@ en:
14171417
title: 'Settings'
14181418
reset: 'reset to default'
14191419
none: 'none'
1420-
1421-
1420+
categories:
1421+
mandatory: 'Mandatory'
1422+
users: 'Users'
1423+
posting: 'Posting'
1424+
email: 'Email'
1425+
files: 'Files'
1426+
trust: 'Trust Levels'
1427+
spam: 'Spam'
1428+
rate_limits: 'Rate Limits'
1429+
uncategorized: 'Uncategorized'

0 commit comments

Comments
 (0)