Remove unusued site_settings, show checkbox in UI for boolean values, remove restrict_access

boolean to avoid locking yourself out by setting access_password to empty string. Minor
UI tweaks.
This commit is contained in:
Robin Ward 2013-03-01 12:45:25 -05:00
parent 0c8c41b131
commit d2596c3c4c
26 changed files with 245 additions and 158 deletions

View File

@ -1,11 +1,11 @@
/**
This controller supports the interface for SiteSettings.
@class AdminSiteSettingsController
@class AdminSiteSettingsController
@extends Ember.ArrayController
@namespace Discourse
@module Discourse
**/
**/
Discourse.AdminSiteSettingsController = Ember.ArrayController.extend(Discourse.Presence, {
filter: null,
onlyOverridden: false,
@ -16,15 +16,18 @@ Discourse.AdminSiteSettingsController = Ember.ArrayController.extend(Discourse.P
@property filteredContent
**/
filteredContent: (function() {
var filter,
_this = this;
// If we have no content, don't bother filtering anything
if (!this.present('content')) return null;
var filter;
if (this.get('filter')) {
filter = this.get('filter').toLowerCase();
}
var adminSettingsController = this;
return this.get('content').filter(function(item, index, enumerable) {
if (_this.get('onlyOverridden') && !item.get('overridden')) return false;
if (adminSettingsController.get('onlyOverridden') && !item.get('overridden')) return false;
if (filter) {
if (item.get('setting').toLowerCase().indexOf(filter) > -1) return true;
if (item.get('description').toLowerCase().indexOf(filter) > -1) return true;
@ -66,5 +69,5 @@ Discourse.AdminSiteSettingsController = Ember.ArrayController.extend(Discourse.P
cancel: function(setting) {
setting.resetValue();
}
});

View File

@ -1,55 +1,96 @@
/**
Our data model for interacting with site settings.
@class SiteSetting
@class SiteSetting
@extends Discourse.Model
@namespace Discourse
@module Discourse
**/
**/
Discourse.SiteSetting = Discourse.Model.extend({
// Whether a property is short.
short: (function() {
if (this.blank('value')) return true;
return this.get('value').toString().length < 80;
}).property('value'),
// Whether the site setting has changed
dirty: (function() {
return this.get('originalValue') !== this.get('value');
}).property('originalValue', 'value'),
/**
Is the boolean setting true?
overridden: (function() {
var defaultVal, val;
val = this.get('value');
defaultVal = this.get('default');
if (val && defaultVal) {
return val.toString() !== defaultVal.toString();
@property enabled
**/
enabled: function(key, value) {
if (arguments.length === 1) {
// get the boolean value of the setting
if (this.blank('value')) return false;
return this.get('value') === 'true';
} else {
// set the boolean value of the setting
this.set('value', value ? 'true' : 'false');
// We save booleans right away, it's not like a text field where it makes sense to
// undo what you typed in.
this.save();
}
return val !== defaultVal;
}).property('value'),
}.property('value'),
/**
Has the user changed the setting? If so we should save it.
@property dirty
**/
dirty: function() {
return this.get('originalValue') !== this.get('value');
}.property('originalValue', 'value'),
/**
Has the setting been overridden from its default value?
@property overridden
**/
overridden: function() {
var val = this.get('value');
var defaultVal = this.get('default');
if (val === null) val = '';
if (defaultVal === null) defaultVal = '';
return val.toString() !== defaultVal.toString();
}.property('value'),
/**
Reset the setting to its original value.
@method resetValue
**/
resetValue: function() {
this.set('value', this.get('originalValue'));
},
/**
Save the setting's value.
@method save
**/
save: function() {
// Update the setting
var _this = this;
var setting = this;
return jQuery.ajax("/admin/site_settings/" + (this.get('setting')), {
data: { value: this.get('value') },
type: 'PUT',
success: function() {
_this.set('originalValue', _this.get('value'));
setting.set('originalValue', setting.get('value'));
}
});
}
});
Discourse.SiteSetting.reopenClass({
/**
Retrieve all settings from the server
@method findAll
**/
findAll: function() {
var result;
result = Em.A();
var result = Em.A();
jQuery.get("/admin/site_settings", function(settings) {
return settings.each(function(s) {
s.originalValue = s.value;

View File

@ -1,6 +1,6 @@
<div class='admin-controls'>
<div class='span15 search controls'>
<label>
<label>
{{view Ember.Checkbox checkedBinding="controller.onlyOverridden"}}
{{i18n admin.site_settings.show_overriden}}
</label>
@ -11,24 +11,4 @@
</div>
{{#collection contentBinding="filteredContent" classNames="form-horizontal settings" itemClass="row setting"}}
{{#with view.content}}
<div class='span4 offset1'>
{{unbound setting}}
</div>
<div {{bindAttr class=":span11 overridden:overridden"}}>
{{view Ember.TextField valueBinding="value" classNames="input-xxlarge"}}
<div class='desc'>{{unbound description}}</div>
</div>
{{#if dirty}}
<div class='span3'>
<button class='btn ok' {{action save this target="controller"}}><i class='icon-ok'></i></button>
<button class='btn cancel' {{action cancel this target="controller"}}><i class='icon-remove'></i></button>
</div>
{{else}}
{{#if overridden}}
<button class='btn' href='#' {{action resetDefault this target="controller"}}>{{i18n admin.site_settings.reset}}</button>
{{/if}}
{{/if}}
{{/with}}
{{/collection}}
{{collection contentBinding="filteredContent" classNames="form-horizontal settings" itemViewClass="Discourse.SiteSettingView"}}

View File

@ -0,0 +1,9 @@
{{#with view.content}}
<div class='span4 offset1'>
<h3>{{unbound setting}}</h3>
</div>
<div class="span11">
{{view Ember.Checkbox checkedBinding="enabled" value="true"}}
{{unbound description}}
</div>
{{/with}}

View File

@ -0,0 +1,19 @@
{{#with view.content}}
<div class='span4 offset1'>
<h3>{{unbound setting}}</h3>
</div>
<div class="span11">
{{view Ember.TextField valueBinding="value" classNames="input-xxlarge"}}
<div class='desc'>{{unbound description}}</div>
</div>
{{#if dirty}}
<div class='span3'>
<button class='btn ok' {{action save this}}><i class='icon-ok'></i></button>
<button class='btn cancel' {{action cancel this}}><i class='icon-remove'></i></button>
</div>
{{else}}
{{#if overridden}}
<button class='btn' href='#' {{action resetDefault this}}>{{i18n admin.site_settings.reset}}</button>
{{/if}}
{{/if}}
{{/with}}

View File

@ -3,11 +3,11 @@
/**
A view that wraps the ACE editor (http://ace.ajax.org/)
@class AceEditorView
@extends Em.View
@class AceEditorView
@extends Discourse.View
@namespace Discourse
@module Discourse
**/
**/
Discourse.AceEditorView = Discourse.View.extend({
mode: 'css',
classNames: ['ace-wrapper'],

View File

@ -3,11 +3,11 @@
/**
A view to handle site customizations
@class AdminCustomizeView
@extends Em.View
@class AdminCustomizeView
@extends Discourse.View
@namespace Discourse
@module Discourse
**/
**/
Discourse.AdminCustomizeView = Discourse.View.extend({
templateName: 'admin/templates/customize',
classNames: ['customize'],
@ -44,5 +44,5 @@ Discourse.AdminCustomizeView = Discourse.View.extend({
willDestroyElement: function() {
return Mousetrap.unbindGlobal('meta+s', 'ctrl+s');
}
});

View File

@ -2,7 +2,7 @@
The default view in the admin section
@class AdminDashboardView
@extends Em.View
@extends Discourse.View
@namespace Discourse
@module Discourse
**/

View File

@ -0,0 +1,22 @@
/**
A view to display a site setting with edit controls
@class SiteSettingView
@extends Discourse.View
@namespace Discourse
@module Discourse
**/
Discourse.SiteSettingView = Discourse.View.extend({
classNameBindings: [':row', ':setting', 'content.overridden'],
templateName: function() {
// If we're editing a boolean, return a different template
if (this.get('content.type') === 'bool') return 'admin/templates/site_settings/setting_bool'
// Default to string editor
return 'admin/templates/site_settings/setting_string';
}.property('content.type')
});

View File

@ -128,15 +128,25 @@
.settings {
.setting {
padding-bottom: 20px;
.overridden {
input[type=text] {
background-color: lighten($yellow, 40%);
}
}
.desc {
padding-top: 3px;
color: darken($white, 40%);
}
h3 {
font-size: 13px;
font-weight: normal;
}
}
.setting.overridden {
input[type=text] {
background-color: lighten($yellow, 40%);
}
h3 {
color: darken($yellow, 20%);
}
}
}

View File

@ -146,7 +146,7 @@ class ApplicationController < ActionController::Base
return false if current_user.present?
# Don't cache if there's restricted access
return false if SiteSetting.restrict_access?
return false if SiteSetting.access_password.present?
true
end
@ -216,7 +216,7 @@ class ApplicationController < ActionController::Base
def check_restricted_access
# note current_user is defined in the CurrentUser mixin
if SiteSetting.restrict_access? && cookies[:_access] != SiteSetting.access_password
if SiteSetting.access_password.present? && cookies[:_access] != SiteSetting.access_password
redirect_to request_access_path(:return_path => request.fullpath)
return false
end

View File

@ -15,7 +15,7 @@ class InvitesController < ApplicationController
user.enqueue_welcome_message('welcome_invite') if user.send_welcome_message
# We skip the access password if we come in via an invite link
cookies.permanent['_access'] = SiteSetting.access_password if SiteSetting.restrict_access?
cookies.permanent['_access'] = SiteSetting.access_password if SiteSetting.access_password.present?
topic = invite.topics.first
if topic.present?

View File

@ -4,7 +4,7 @@ class RobotsTxtController < ApplicationController
skip_before_filter :check_restricted_access
def index
path = if SiteSetting.allow_index_in_robots_txt && !SiteSetting.restrict_access
path = if SiteSetting.allow_index_in_robots_txt && SiteSetting.access_password.blank?
:index
else
:no_index

View File

@ -16,7 +16,6 @@ class SiteSetting < ActiveRecord::Base
setting(:company_short_name, 'Unconfigured Forum')
setting(:company_domain, 'www.example.com')
client_setting(:traditional_markdown_linebreaks, false)
client_setting(:popup_delay, 1500)
client_setting(:top_menu, 'popular|new|unread|favorited|categories')
client_setting(:post_menu, 'like|edit|flag|delete|share|bookmark|reply')
client_setting(:track_external_right_clicks, false)
@ -48,7 +47,6 @@ class SiteSetting < ActiveRecord::Base
setting(:port, Rails.env.development? ? 3000 : '')
setting(:enable_private_messages, true)
setting(:use_ssl, false)
setting(:restrict_access, false)
setting(:access_password)
setting(:queue_jobs, !Rails.env.test?)
setting(:crawl_images, !Rails.env.test?)

View File

@ -1,6 +1,7 @@
development:
adapter: postgresql
database: discourse_development
min_messages: warning
host: localhost
pool: 5
timeout: 5000
@ -13,6 +14,7 @@ development:
test:
adapter: postgresql
database: discourse_test
min_messages: warning
host: localhost
pool: 5
timeout: 5000

View File

@ -1,7 +1,7 @@
#
#
# Dutch translation for Discourse
# contributed by Vincent Veldkamp (vincent@retroga.me) 2/14/13
#
#
nl:
title: "Discourse"
@ -39,7 +39,7 @@ nl:
trust_levels:
new:
title: "nieuwe gebruiker"
basic:
basic:
title: "basisgebruiker"
regular:
title: "gemiddelde gebruiker"
@ -64,7 +64,7 @@ nl:
datetime:
distance_in_words:
half_a_minute: "< 1m"
half_a_minute: "< 1m"
less_than_x_seconds:
one: "< 1s"
other: "< %{count}s"
@ -100,7 +100,7 @@ nl:
other: "%{count}j"
distance_in_words_verbose:
half_a_minute: "een halve minuut geleden"
half_a_minute: "een halve minuut geleden"
less_than_x_seconds:
one: "nu"
other: "nu"
@ -155,7 +155,7 @@ nl:
approval_required: "Een moderator moet je nieuwe account handmatig goedkeuren voordat je toegang krijgt tot dit forum. Je krijgt een e-mail van ons wanneer je account is goedgekeurd!"
post_action_types:
off_topic:
title: 'Off-Topic'
description: 'Deze post wijkt erg af van het onderwerp van deze discussie, en moet wellicht naar een ander topic worden verplaatst.'
@ -186,7 +186,7 @@ nl:
user_must_edit: '<p>Gemelde inhoud verborgen.</p>'
archetypes:
regular:
regular:
title: "Standaard-topic"
unsubscribed:
@ -212,7 +212,6 @@ nl:
discourse_org_access_key: "De toegangscode voor het discourse.org nickname-register"
title: "titel van deze website"
restrict_access: "beperk forumtoegang aan gebruikers tenzij dit wachtwoord door hen is ingevuld"
access_password: "restrict_access (Beperk Toegang) staat aan. Zorg ervoor dat dit wachtwoord staat ingevuld"
queue_jobs: "zet verschillende taken in een queue binnen sidekiq, als ongeldige queues zich op dezelfde lijn bevinden"
crawl_images: "zet het ophalen van afbeeldingen van externe bronnen aan"
@ -222,7 +221,6 @@ nl:
imgur_endpoint: "endpoint voor het uploaden van imgur.com-afbeeldingen"
max_image_width: "maximale breedte voor een afbeelding in een post"
category_featured_topics: "aantal topics die worden weergegeven in de categorie-lijst"
popup_delay: "Lengte van tijd in ms voordat popups zich tonen op het scherm"
add_rel_nofollow_to_user_content: "Voeg 'rel nofollow' toe aan alle gebruikers-content behalve voor interne links (inclusief parent domeinen). NB: Als je dit verandert moet je ook alle 'baked markdown' updaten"
exclude_rel_nofollow_domains: "Een commagescheiden lijst van domeinen waar 'nofollow' niet is toegevoegd. (voorbeelddomein.com zal automatisch sub.voorbeelddomein.com toestaan)"
post_excerpt_maxlength: "Maximale lengte in karakters van een post-uittreksel."
@ -323,7 +321,7 @@ nl:
admin_js:
type_to_filter: "typ om te filteren..."
admin:
admin:
title: 'Discourse Beheer'
dashboard:
@ -338,7 +336,7 @@ nl:
delete: "Verwijder Post"
delete_title: "verwijder post (als het de eerste post is van een topic, verwijdert dit het topic)"
customize:
customize:
title: "Aanpassingen"
header: "Header"
css: "Stylesheet"
@ -429,9 +427,9 @@ nl:
# This section is exported to the javascript for i18n
js:
share:
topic: 'deel een link naar dit topic'
post: 'deel een link naar deze post'
share:
topic: 'deel een link naar dit topic'
post: 'deel een link naar deze post'
edit: 'bewerk de titel en categorie van dit topic'
not_implemented: "Deze functie is helaas nog niet beschikbaar, sorry!"
@ -485,7 +483,7 @@ nl:
invited_by: "Uitgenodigd door"
trust_level: "Vertrouwensniveau"
change_username:
change_username:
action: "wijzig"
title: "Wijzig Gebruikersnaam"
confirm: "Er kunnen consequenties zijn als je je gebruikersnaam wijzigt. Weet je zeker dat je dit wilt doen?"
@ -499,7 +497,7 @@ nl:
error: "Er was een fout bij het wijzigen van je e-mailadres. Wellicht is deze al in gebruik?"
success: "We hebben je een mail gestuurd naar dat adres. Volg de bijgeleverde bevestigingsinstructies."
email:
email:
title: "E-mail"
instructions: "Je e-mail adres zal nooit openbaar zichtbaar zijn."
ok: "Dat ziet er goed uit! We zullen je een e-mail sturen ter bevestiging."
@ -507,12 +505,12 @@ nl:
authenticated: "Je e-mail is goedgekeurd bij {{provider}}."
frequency: "We zullen je alleen maar mailen als we je een tijd niet gezien hebben, en als je toevallig hetgeen waarover we je mailen nog niet hebt gezien op onze site."
name:
name:
title: "Naam"
instructions: "De langere versie van je naam; dit hoeft niet uniek te zijn."
too_short: "Je naam is te kort."
ok: "Wat een mooie naam!"
username:
username:
title: "Gebruikersnaam"
#instructions: "Mensen kunnen naar je verwijzen als @{{username}}. Dit is een ongeregistreerde nickname. Je kan deze registreren op <a href='http://discourse.org'>discourse.org</a>."
instructions: "Mensen kunnen naar je verwijzen als @{{username}}."
@ -532,7 +530,7 @@ nl:
log_out: "Log Uit"
website: "Website"
email_settings: "E-mail"
email_digests:
email_digests:
title: "Wanneer ik de site niet bezoek, stuur me een mail met de laatste updates"
daily: "dagelijks"
weekly: "wekelijks"
@ -542,17 +540,17 @@ nl:
email_private_messages: "Ontvang een mail wanneer iemand je een privé-bericht heeft gestuurd."
other_settings: "Overige"
new_topic_duration:
label: "Beschouw topics als nieuw wanneer"
not_viewed: "ik ze nog heb niet bekeken"
last_here: "ze gepost waren sinds ik hier voor het laast was"
after_n_days:
one: "ze in de afgelopen dag gepost zijn"
other: "ze de afgelopen {{count}} dagen gepost zijn"
one: "ze in de afgelopen dag gepost zijn"
other: "ze de afgelopen {{count}} dagen gepost zijn"
after_n_weeks:
one: "ze in de afgelopen week gepost zijn"
other: "ze in de laaste {{count}} weken gepost zijn"
one: "ze in de afgelopen week gepost zijn"
other: "ze in de laaste {{count}} weken gepost zijn"
auto_track_topics: "Houd automatisch topics bij die ik bezoek"
auto_track_options:
@ -565,7 +563,7 @@ nl:
one: "na 1 minuut"
other: "na {{count}} minuten"
invited:
invited:
title: "Uitnodigingen"
user: "Uitgenodigde Gebruiker"
none: "{{username}} heeft nog geen mensen uitgenodigd voor deze site."
@ -580,19 +578,19 @@ nl:
days_visited: "Dagen Bezocht"
account_age_days: "accountleeftijd in dagen"
password:
password:
title: "Wachtwoord"
too_short: "Je wachtwoord is te kort."
ok: "Je wachtwoord ziet er goed uit."
ip_address:
ip_address:
title: "Laatste IP-adres"
avatar:
avatar:
title: "Avatar"
instructions: "Wij gebruiken <a href='https://gravatar.com' target='_blank'>Gravatar</a> voor Avatars die op je e-mailadres gebaseerd zijn"
filters:
all: "Alle"
all: "Alle"
loading: "Laden..."
close: "Sluit"
@ -631,7 +629,7 @@ nl:
invite: "Heb je nog geen account?"
failed: "Er ging iets mis, wellicht is het e-mailadres al geregistreerd. Probeer de "Wachtwoord Vergeten"-link"
forgot_password:
forgot_password:
title: "Wachtwoord Vergeten"
action: "Ik ben mijn wachtwoord vergeten"
invite: "Vul je gebruikersnaam of e-mailadres in, en we sturen je een wachtwoord-herstel mail."
@ -664,11 +662,11 @@ nl:
message: "Authenticatie met Yahoo (zorg ervoor dat je pop up blocker uitstaat)"
composer:
saving_draft_tip: "aan het opslaan"
saved_draft_tip: "opgeslagen"
saved_local_draft_tip: "lokaal opgeslagen"
saving_draft_tip: "aan het opslaan"
saved_draft_tip: "opgeslagen"
saved_local_draft_tip: "lokaal opgeslagen"
save_edit: "Bewaar Wijziging"
save_edit: "Bewaar Wijziging"
reply: "Reageer"
create_topic: "Maak Topic"
create_pm: "Maak Privé-bericht"
@ -707,7 +705,7 @@ nl:
local_tip: "klik om een afbeelding vanaf je apparaat te selecteren."
upload: "Upload"
search:
search:
title: "zoek naar topics, posts, gebruikers of categoriëen"
placeholder: "typ je zoekterm hier"
no_results: "Geen resultaten gevonden."
@ -721,7 +719,7 @@ nl:
title: 'Favoriet'
help: 'voeg dit topic toe aan je favorietenlisjt'
topics:
topics:
no_favorited: "Je hebt nog geen topics tussen je Favorieten staan. Om een topic toe te wijzen aan je Favorieten, klik of druk op de ster naast de topictitel.."
no_unread: "Je hebt geen ongelezen topics om te lezen."
no_new: "Je hebt geen nieuwe topics om te lezen."
@ -729,7 +727,7 @@ nl:
no_posted: "Je hebt nog niet in een topic gepost."
no_popular: "Er zijn geen populaire topics. Dat is best wel sneu."
topic:
topic:
create_in: 'Maak een {{categoryName}} Topic'
create: 'Maak Topic'
create_long: 'Maak een Nieuw Topic'
@ -774,7 +772,7 @@ nl:
"1_2": 'Je krijgt alleen een notificiatie als iemand je @naam noemt of reageert op je post.'
"0": 'Je negeert alle notificaties in dit topic.'
"0_2": 'Je negeert alle notificaties in dit topic.'
watching:
watching:
title: "Bekijken"
description: "je zal alle ongelezen en nieuwe post aantallen zien, plus de notificaties van @naam vermeldingen en alle nieuwe posts in dit topic."
tracking:
@ -801,11 +799,11 @@ nl:
multi_select: "Zet Multi-Select Aan/Uit"
convert_to_topic: "Zet om naar Normaal Topic"
reply:
reply:
title: 'Reageer'
help: 'begin met het opzetten van een reactie op dit topic'
share:
share:
title: 'Deel'
help: 'Deel een link naar dit topic'
@ -819,11 +817,11 @@ nl:
success: "Bedankt! We hebben deze gebruiker uitgenodigd om deel te nemen aan dit Privé-gesprek."
error: "Sorry, er is iets misgegaan bij het uitnodigen van deze gebruiker"
invite_reply:
invite_reply:
title: 'Nodig Vrienden Uit Om Te Reageren'
help: 'verstuur uitnodigingen naar vrienden zodat zij met één klik kunnen reageren op dit topic'
email: "We zullen je vrienden een korte e-mail sturen waardoor zij op dit topic kunnen reageren door op een link te klikken."
email_placeholder: 'e-mailadres'
email_placeholder: 'e-mailadres'
success: "Bedankt! We hebben een uitnodiging verstuurd naar <b>{{email}}</b>. We laten je direct weten wanneer ze je uitnodiging hebben geaccepteerd. Check de "Uitnodigingen"-tab op je gebruikerspagina om bij te houden wie je hebt uitgenodigd."
error: "Sorry, we kunnen deze persoon niet uitnodigen. Wellicht is deze al een gebruiker op onze site?"
@ -838,7 +836,7 @@ nl:
title: "Verplaats Geslecteerde Posts"
topic_name: "Nieuwe Topicnaam:"
error: "Sorry, er is iets misgegaan bij het verplaatsen van deze posts."
instructions:
instructions:
one: "Je staat op het punt een nieuw topic aan te maken en het te vullen met de post die je geselecteerd hebt."
other: "Je staat op het punt een nieuw topic aan te maken en het te vullen met de <b>{{count}}</b> posts die je geselecteerd hebt."
@ -853,7 +851,7 @@ nl:
other: "Je hebt <b>{{count}}</b> posts geselecteerd."
post:
reply: "Je reageerd nu op {{link}} door {{replyAvatar}} {{username}}"
reply: "Je reageerd nu op {{link}} door {{replyAvatar}} {{username}}"
reply_topic: "Reageer op {{link}}"
edit: "Bewerk {{link}}"
in_reply_to: "in reactie op"
@ -902,13 +900,13 @@ nl:
one: "1 persoon {{long_form}}"
other: "{{count}} mensen {{long_form}}"
edits:
edits:
one: 1 berwerking
other: "{{count}} bewerkingen"
zero: geen bewerkingen
delete:
confirm:
confirm:
one: "Weet je zeker dat je deze post wilt verwijderen?"
other: "Weet je zeker dat je al deze posts wilt verwijderen?"
@ -966,27 +964,27 @@ nl:
categories_list: "Categorie-lijst"
filters:
popular:
popular:
title: "Populair"
help: "de meest populaire recente topics"
favorited:
favorited:
title: "Favorieten"
help: "topics die je als Favoriet hebt ingesteld"
read:
read:
title: "Gelezen"
help: "topics die je hebt gelezen"
categories:
categories:
title: "Categorieën"
title_in: "Categorie - {{categoryName}}"
help: "alle topics gesorteerd op categorie"
unread:
title:
title:
zero: "Ongelezen"
one: "Ongelezen (1)"
other: "Ongelezen ({{count}})"
help: "gevolgde topics met ongelezen posts"
new:
title:
new:
title:
zero: "Nieuw"
one: "Nieuw (1)"
other: "Nieuw ({{count}})"
@ -1005,7 +1003,7 @@ nl:
types:
category: 'Categorieën'
topic: 'Topics'
user: 'Gebruikers'
user: 'Gebruikers'
youve_posted: "Jij Hebt Dit Gepost"
original_poster: "Originele Poster"
@ -1039,7 +1037,7 @@ nl:
edited: "bewerkte"
move_posts:
moderator_post:
moderator_post:
one: "Ik heb een post naar een nieuw topic verplaatst: %{topic_link}"
other: "Ik heb %{count} posts naar een nieuw topic verplaatst: %{topic_link}"
@ -1053,7 +1051,7 @@ nl:
visible_enabled: "Dit topic is nu zichtbaar; het zal weer worden weergegeven in topiclijsten."
visible_disabled: "Dit topic is nu onzichtbaar; het zal niet worden weergegeven in topiclijsten, en kan alleen via een directe link worden bezocht."
login:
login:
not_approved: "Je account is nog niet goedgekeurd. Je zal via de mail een bericht van ons ontvangen wanneer je klaar bent om in te kunnen loggen."
incorrect_username_email_or_password: "Incorrecte gebruikersnaam, e-mailadres of wachtwoord"
wait_approval: "Bedankt voor je inschrijving. We zullen het je laten weten als je account is goedgekeurd."
@ -1139,7 +1137,7 @@ nl:
subject_template: "Bericht van %{site_name}: Je Post is verborgen wegens meldingen uit de site-gemeenschap"
text_body_template: |
Hallo,
Dit is een geautomatiseerd bericht van %{site_name} om je te laten weten dat de volgende post is verborgen naar aanleiding van meldingen binnen de site-gemeenschap.
%{base_url}%{url}
@ -1151,7 +1149,7 @@ nl:
Je kan je post bewerken na %{edit_delay} minuten, en het zal automatisch weer zichtbaar worden. Dit verhoogt je forum vertrouwensniveau.
Echter, als de post een tweede keer wordt verborgen door de site-gemeenschap, wordt er een moderator ingelicht.
Echter, als de post een tweede keer wordt verborgen door de site-gemeenschap, wordt er een moderator ingelicht.
Zij kunnen verdere actie ondernemen, waaronder een mogelijke schorsing van je account.
@ -1196,9 +1194,9 @@ nl:
- Om terug te gaan naar de homepage, kan je op elk moment **op het icoontje in de linker bovenhoek klikken.**
- Mocht je iets willen opzoeken, naar je gebruikerspagina gaan, of ergens anders toe willen navigeren, klik dan op de icoontjes in de rechter bovenhoek.
- Wanneer je een topic leest, kan je naar boven scrollen door op de topic-titel bovenaan de pagina te klikken.
Om de *onderkant* te bereiken, klik op op de pijl naar beneden op de topic voortgangsindicator aan de onderkant van de pagina,
- Mocht je iets willen opzoeken, naar je gebruikerspagina gaan, of ergens anders toe willen navigeren, klik dan op de icoontjes in de rechter bovenhoek.
- Wanneer je een topic leest, kan je naar boven scrollen door op de topic-titel bovenaan de pagina te klikken.
Om de *onderkant* te bereiken, klik op op de pijl naar beneden op de topic voortgangsindicator aan de onderkant van de pagina,
of klik je op het Laatste Post-veld in de topic-samenvatting onder de eerste post.
welcome_approved:
@ -1236,7 +1234,7 @@ nl:
Om nogmaals in te loggen kan je het volgende gebruiken:
1. Facebook, Google, Twitter, of vele andere ondersteunde logingegevens
1. Facebook, Google, Twitter, of vele andere ondersteunde logingegevens
-- let er wel op dat dit **het zelfde e-mailadres** is waarop je je originele uitnodiging hebt gekregen. Anders weten we niet zeker dat jij het bent!
2. Maak een uniek wachtwoord voor %{site_name} aan binnen [je gebruikersprofiel][prefs], en log daarmee in.
@ -1262,7 +1260,7 @@ nl:
unsubscribe_link: "Mocht je deze e-mails niet langer willen ontvangen, bezoek dan [je gebruikersinstellingen](%{user_preferences_url})."
user_notifications:
unsubscribe:
unsubscribe:
title: "Uitschrijven"
description: "Niet geïnteresseerd in deze e-mails? Geen problem! Klik hieronder om direct uitgeschreven te worden:"
@ -1281,7 +1279,7 @@ nl:
---
%{message}
---
---
Bezoek deze link om te reageren: %{base_url}%{url}
user_quoted:
@ -1292,7 +1290,7 @@ nl:
---
%{message}
---
---
Bezoek deze link om te reageren: %{base_url}%{url}
user_mentioned:
@ -1303,7 +1301,7 @@ nl:
---
%{message}
---
---
Bezoek deze link om te reageren: %{base_url}%{url}
@ -1329,9 +1327,9 @@ nl:
subject_template: "[%{site_name}] Wachtwoord herstellen"
text_body_template: |
Iemand heeft aangegeven je wachtwoord te willen herstellen op [%{site_name}](%{base_url}).
Ben jij dit niet, kan je zonder problemen deze e-mail negeren.
Ben jij dit niet, kan je zonder problemen deze e-mail negeren.
Klik op de volgende link om een nieuw wachtwoord te kiezen:
%{base_url}/users/password-reset/%{email_token}
@ -1339,14 +1337,14 @@ nl:
subject_template: "[%{site_name}] Bevestig je nieuwe e-mailadres"
text_body_template: |
Bevestig je nieuwe e-mailadres voor %{site_name} door op de volgende link te klikken:
%{base_url}/users/authorize-email/%{email_token}
signup:
subject_template: "[%{site_name}] Activeer je nieuwe account"
text_body_template: |
Welkom op %{site_name}!
Klik op de volgende link om je nieuwe account te bevestigen en te activeren:
%{base_url}/users/activate-account/%{email_token}

View File

@ -260,7 +260,6 @@ en:
company_full_name: "The full name of the company that runs this site, used in legal documents like the /tos"
company_short_name: "The short name of the company that runs this site, used in legal documents like the /tos"
company_domain: "The domain name owned by the company that runs this site, used in legal documents like the /tos"
restrict_access: "Restrict forum access unless a password is entered"
access_password: "When restricted access is enabled, this password must be entered"
queue_jobs: "Queue various jobs in sidekiq, if false queues are inline"
crawl_images: "Enable retrieving images from third party sources to insert width and height dimensions"
@ -270,7 +269,6 @@ en:
imgur_endpoint: "End point for uploading imgur.com images"
max_image_width: "Maximum allowed width of images in a post"
category_featured_topics: "Number of topics displayed per category in the /categories page"
popup_delay: "Milliseconds of hover time before popups appear on the screen"
add_rel_nofollow_to_user_content: "Add rel nofollow to all submitted user content, except for internal links (including parent domains) changing this requires you update all your baked markdown"
exclude_rel_nofollow_domains: "A comma delimited list of domains where nofollow is not added (tld.com will automatically allow sub.tld.com as well)"

View File

@ -245,7 +245,6 @@ fr:
discourse_org_access_key: "La clé d'accès utilisée pour le registre de pseudos de discourse.org"
educate_until_posts: "Afficher les aides à la saisie tant que l'utilisateur n'a pas posté ce nombre de messages"
title: "titre de ce site internet"
restrict_access: "restreindre l'acces au forum à ceux qui possèdent ce mot de passe"
access_password: "Si l'accès restreint est activé, assurez-vous que le mot de passe soit saisi ici."
queue_jobs: "mettre les différents jobs en attente sur différentes queues, si false les queues sont en file"
crawl_images: "permettre la récupération des images provenant de sources tierces"
@ -255,7 +254,6 @@ fr:
imgur_endpoint: "point d'arrêt pour le chargement d'images sur imgur.com"
max_image_width: "largeur maximale des images d'un message"
category_featured_topics: "nombre de discussions affichées dans la liste par catégories"
popup_delay: "Laps de temps en ms avant l'affichage des popups à l'écran"
add_rel_nofollow_to_user_content: "Ajouter rel nofollow à tous les contenus des utilisateurs, sauf les liens internes (incluant les domaines parents) Modifier ceci requiert une mise à jour de tout votre markdown"
exclude_rel_nofollow_domains: "Une liste séparée par des virgules contenant les noms de domaines de premier niveau pour lesquels il faut ajouter un attribut nofollow (exemple.com va automatiquement fonctionner aussi avec sous.domaine.exemple.com)"
post_excerpt_maxlength: "Longueur maximale d'un extrait de message."

View File

@ -239,7 +239,6 @@ nl:
discourse_org_access_key: "De toegangscode voor het discourse.org nickname-register"
title: "titel van deze website"
restrict_access: "beperk forumtoegang aan gebruikers tenzij dit wachtwoord door hen is ingevuld"
access_password: "restrict_access (Beperk Toegang) staat aan. Zorg ervoor dat dit wachtwoord staat ingevuld"
queue_jobs: "zet verschillende taken in een queue binnen sidekiq, als ongeldige queues zich op dezelfde lijn bevinden"
crawl_images: "zet het ophalen van afbeeldingen van externe bronnen aan"
@ -249,7 +248,6 @@ nl:
imgur_endpoint: "endpoint voor het uploaden van imgur.com-afbeeldingen"
max_image_width: "maximale breedte voor een afbeelding in een post"
category_featured_topics: "aantal topics die worden weergegeven in de categorie-lijst"
popup_delay: "Lengte van tijd in ms voordat popups zich tonen op het scherm"
add_rel_nofollow_to_user_content: "Voeg 'rel nofollow' toe aan alle gebruikers-content behalve voor interne links (inclusief parent domeinen). NB: Als je dit verandert moet je ook alle 'baked markdown' updaten"
exclude_rel_nofollow_domains: "Een commagescheiden lijst van domeinen waar 'nofollow' niet is toegevoegd. (voorbeelddomein.com zal automatisch sub.voorbeelddomein.com toestaan)"
post_excerpt_maxlength: "Maximale lengte in karakters van een post-uittreksel."

View File

@ -254,7 +254,6 @@ pseudo:
íɳ łéǧáł ďóčůɱéɳťš łíǩé ťĥé /ťóš ]]'
company_domain: ! '[[ Ťĥé ďóɱáíɳ ɳáɱé óŵɳéď ƀý ťĥé čóɱƿáɳý ťĥáť řůɳš ťĥíš šíťé,
ůšéď íɳ łéǧáł ďóčůɱéɳťš łíǩé ťĥé /ťóš ]]'
restrict_access: ! '[[ Řéšťříčť ƒóřůɱ áččéšš ůɳłéšš á ƿáššŵóřď íš éɳťéřéď ]]'
access_password: ! '[[ Ŵĥéɳ řéšťříčťéď áččéšš íš éɳáƀłéď, ťĥíš ƿáššŵóřď ɱůšť ƀé
éɳťéřéď ]]'
queue_jobs: ! '[[ Ƣůéůé νáříóůš ʲóƀš íɳ šíďéǩíƣ, íƒ ƒáłšé ƣůéůéš ářé íɳłíɳé ]]'
@ -270,8 +269,6 @@ pseudo:
max_image_width: ! '[[ Ϻáхíɱůɱ áłłóŵéď ŵíďťĥ óƒ íɱáǧéš íɳ á ƿóšť ]]'
category_featured_topics: ! '[[ Ѝůɱƀéř óƒ ťóƿíčš ďíšƿłáýéď ƿéř čáťéǧóřý íɳ ťĥé
/čáťéǧóříéš ƿáǧé ]]'
popup_delay: ! '[[ Ϻíłłíšéčóɳďš óƒ ĥóνéř ťíɱé ƀéƒóřé ƿóƿůƿš áƿƿéář óɳ ťĥé ščřééɳ
]]'
add_rel_nofollow_to_user_content: ! '[[ Áďď řéł ɳóƒółłóŵ ťó áłł šůƀɱíťťéď ůšéř
čóɳťéɳť, éхčéƿť ƒóř íɳťéřɳáł łíɳǩš (íɳčłůďíɳǧ ƿářéɳť ďóɱáíɳš) čĥáɳǧíɳǧ ťĥíš
řéƣůířéš ýóů ůƿďáťé áłł ýóůř ƀáǩéď ɱářǩďóŵɳ ]]'

View File

@ -101,6 +101,7 @@ module Search
return nil if term.blank?
sanitized_term = PG::Connection.escape_string(term.gsub(/[:()&!]/,'')) # Instead of original term.gsub(/[^0-9a-zA-Z_ ]/, '')
# We are stripping only symbols taking place in FTS and simply sanitizing the rest.
# really short terms are totally pointless
@ -117,7 +118,7 @@ module Search
db_result = []
[user_query_sql, category_query_sql, topic_query_sql].each do |sql|
db_result += ActiveRecord::Base.exec_sql(sql , query: terms.join(" & "),locale: current_locale_long, limit: (Search.per_facet + 1)).to_a
db_result += ActiveRecord::Base.exec_sql(sql , query: terms.join(" & "), locale: current_locale_long, limit: (Search.per_facet + 1)).to_a
end
end

View File

@ -51,10 +51,12 @@ module SiteSettingExtension
# Retrieve all settings
def all_settings
@defaults.map do |s, v|
value = send(s)
{setting: s,
description: description(s),
default: v,
value: send(s).to_s}
type: get_data_type_string(value),
value: value.to_s}
end
end
@ -169,6 +171,16 @@ module SiteSettingExtension
protected
# We're currently in the process of refactoring our Enums. When that's
# done we should pop back and fix this to something better.
def get_data_type_string(val)
case get_data_type(val)
when Types::String then 'string'
when Types::Fixnum then 'number'
when Types::Bool then 'bool'
end
end
def get_data_type(val)
return Types::Null if val.nil?

View File

@ -23,7 +23,7 @@ class SystemMessage
params = defaults.merge(params)
if SiteSetting.restrict_access?
if SiteSetting.access_password.present?
params[:site_password] = MultisiteI18n.t('system_messages.site_password', access_password: SiteSetting.access_password)
end

View File

@ -125,15 +125,14 @@ describe InvitesController do
context 'access_required' do
it "doesn't set a cookie for access if there is no access required" do
SiteSetting.expects(:restrict_access?).returns(false)
SiteSetting.stubs(:access_password).returns(nil)
Invite.any_instance.expects(:redeem).returns(user)
get :show, id: invite.invite_key
cookies[:_access].should be_blank
end
it "sets the cookie when access is required" do
SiteSetting.expects(:restrict_access?).returns(true)
SiteSetting.expects(:access_password).returns('adventure time!')
SiteSetting.stubs(:access_password).returns('adventure time!')
Invite.any_instance.expects(:redeem).returns(user)
get :show, id: invite.invite_key
cookies[:_access].should == 'adventure time!'

View File

@ -18,7 +18,7 @@ describe RobotsTxtController do
it "serves noindex when in private mode regardless of the configuration" do
SiteSetting.stubs(:allow_index_in_robots_txt).returns(true)
SiteSetting.stubs(:restrict_access).returns(true)
SiteSetting.stubs(:access_password).returns('adventure time!')
get :index
response.should render_template :no_index
end

View File

@ -1,3 +1,5 @@
/*global waitsFor:true expect:true describe:true beforeEach:true it:true */
describe("Discourse.Composer", function() {
describe("replyLength", function() {