diff --git a/app/assets/javascripts/admin/controllers/admin_site_settings_controller.js b/app/assets/javascripts/admin/controllers/admin_site_settings_controller.js index 3891f72aa8e..e08ec81db60 100644 --- a/app/assets/javascripts/admin/controllers/admin_site_settings_controller.js +++ b/app/assets/javascripts/admin/controllers/admin_site_settings_controller.js @@ -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(); } - + }); diff --git a/app/assets/javascripts/admin/models/site_setting.js b/app/assets/javascripts/admin/models/site_setting.js index 86eeaac39f1..6a4f542a9d2 100644 --- a/app/assets/javascripts/admin/models/site_setting.js +++ b/app/assets/javascripts/admin/models/site_setting.js @@ -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; diff --git a/app/assets/javascripts/admin/templates/site_settings.js.handlebars b/app/assets/javascripts/admin/templates/site_settings.js.handlebars index 1389833846e..8016088b041 100644 --- a/app/assets/javascripts/admin/templates/site_settings.js.handlebars +++ b/app/assets/javascripts/admin/templates/site_settings.js.handlebars @@ -1,6 +1,6 @@
-{{#collection contentBinding="filteredContent" classNames="form-horizontal settings" itemClass="row setting"}} - {{#with view.content}} -
- {{unbound setting}} -
-
- {{view Ember.TextField valueBinding="value" classNames="input-xxlarge"}} -
{{unbound description}}
-
- {{#if dirty}} -
- - -
- {{else}} - {{#if overridden}} - - {{/if}} - {{/if}} - {{/with}} -{{/collection}} +{{collection contentBinding="filteredContent" classNames="form-horizontal settings" itemViewClass="Discourse.SiteSettingView"}} diff --git a/app/assets/javascripts/admin/templates/site_settings/setting_bool.js.handlebars b/app/assets/javascripts/admin/templates/site_settings/setting_bool.js.handlebars new file mode 100644 index 00000000000..01b3adcf8b1 --- /dev/null +++ b/app/assets/javascripts/admin/templates/site_settings/setting_bool.js.handlebars @@ -0,0 +1,9 @@ +{{#with view.content}} +
+

{{unbound setting}}

+
+
+ {{view Ember.Checkbox checkedBinding="enabled" value="true"}} + {{unbound description}} +
+{{/with}} \ No newline at end of file diff --git a/app/assets/javascripts/admin/templates/site_settings/setting_string.js.handlebars b/app/assets/javascripts/admin/templates/site_settings/setting_string.js.handlebars new file mode 100644 index 00000000000..34a7fcaa3cf --- /dev/null +++ b/app/assets/javascripts/admin/templates/site_settings/setting_string.js.handlebars @@ -0,0 +1,19 @@ +{{#with view.content}} +
+

{{unbound setting}}

+
+
+ {{view Ember.TextField valueBinding="value" classNames="input-xxlarge"}} +
{{unbound description}}
+
+ {{#if dirty}} +
+ + +
+ {{else}} + {{#if overridden}} + + {{/if}} + {{/if}} +{{/with}} \ No newline at end of file diff --git a/app/assets/javascripts/admin/views/ace_editor_view.js b/app/assets/javascripts/admin/views/ace_editor_view.js index fc9849ab16b..1f9be90ef58 100644 --- a/app/assets/javascripts/admin/views/ace_editor_view.js +++ b/app/assets/javascripts/admin/views/ace_editor_view.js @@ -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'], diff --git a/app/assets/javascripts/admin/views/admin_customize_view.js b/app/assets/javascripts/admin/views/admin_customize_view.js index 213c385eb02..cb8dbce98a2 100644 --- a/app/assets/javascripts/admin/views/admin_customize_view.js +++ b/app/assets/javascripts/admin/views/admin_customize_view.js @@ -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'); } - + }); diff --git a/app/assets/javascripts/admin/views/admin_dashboard_view.js b/app/assets/javascripts/admin/views/admin_dashboard_view.js index 6e2581d3d50..6bffc189dad 100644 --- a/app/assets/javascripts/admin/views/admin_dashboard_view.js +++ b/app/assets/javascripts/admin/views/admin_dashboard_view.js @@ -2,7 +2,7 @@ The default view in the admin section @class AdminDashboardView - @extends Em.View + @extends Discourse.View @namespace Discourse @module Discourse **/ diff --git a/app/assets/javascripts/admin/views/site_setting_view.js b/app/assets/javascripts/admin/views/site_setting_view.js new file mode 100644 index 00000000000..8a6dc7e2863 --- /dev/null +++ b/app/assets/javascripts/admin/views/site_setting_view.js @@ -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') + +}); diff --git a/app/assets/stylesheets/admin/admin_base.scss b/app/assets/stylesheets/admin/admin_base.scss index 1d2fd49c7a5..c15f906f27e 100644 --- a/app/assets/stylesheets/admin/admin_base.scss +++ b/app/assets/stylesheets/admin/admin_base.scss @@ -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%); + } } } diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 89687395190..a2ff8b3238c 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -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 diff --git a/app/controllers/invites_controller.rb b/app/controllers/invites_controller.rb index 4837286487e..49700d6fb0a 100644 --- a/app/controllers/invites_controller.rb +++ b/app/controllers/invites_controller.rb @@ -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? diff --git a/app/controllers/robots_txt_controller.rb b/app/controllers/robots_txt_controller.rb index ef554a99525..a485528fd1e 100644 --- a/app/controllers/robots_txt_controller.rb +++ b/app/controllers/robots_txt_controller.rb @@ -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 diff --git a/app/models/site_setting.rb b/app/models/site_setting.rb index 8eee42695ce..854a4b8b500 100644 --- a/app/models/site_setting.rb +++ b/app/models/site_setting.rb @@ -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?) diff --git a/config/database.yml.sample b/config/database.yml.sample index e8811d2897e..9a73a9b02ea 100644 --- a/config/database.yml.sample +++ b/config/database.yml.sample @@ -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 diff --git a/config/locales/nl.yml.working b/config/locales/nl.yml.working index 308777c21d0..29d80711db8 100644 --- a/config/locales/nl.yml.working +++ b/config/locales/nl.yml.working @@ -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: '

Gemelde inhoud verborgen.

' 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 discourse.org." 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 Gravatar 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 {{email}}. 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 {{count}} posts die je geselecteerd hebt." @@ -853,7 +851,7 @@ nl: other: "Je hebt {{count}} 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} diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index 9c24333242f..9ec175f254f 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -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)" diff --git a/config/locales/server.fr.yml b/config/locales/server.fr.yml index c7258e5b51f..70b3b1f4f01 100644 --- a/config/locales/server.fr.yml +++ b/config/locales/server.fr.yml @@ -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." diff --git a/config/locales/server.nl.yml b/config/locales/server.nl.yml index 7955a864c98..d883b7af9dd 100644 --- a/config/locales/server.nl.yml +++ b/config/locales/server.nl.yml @@ -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." diff --git a/config/locales/server.pseudo.yml b/config/locales/server.pseudo.yml index 1ef82cbac15..5e4795d2d7e 100644 --- a/config/locales/server.pseudo.yml +++ b/config/locales/server.pseudo.yml @@ -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: ! '[[ Áďď řéł ɳóƒółłóŵ ťó áłł šůƀɱíťťéď ůšéř čóɳťéɳť, éхčéƿť ƒóř íɳťéřɳáł łíɳǩš (íɳčłůďíɳǧ ƿářéɳť ďóɱáíɳš) čĥáɳǧíɳǧ ťĥíš řéƣůířéš ýóů ůƿďáťé áłł ýóůř ƀáǩéď ɱářǩďóŵɳ ]]' diff --git a/lib/search.rb b/lib/search.rb index cf0d45b15c4..b034bfa1f0b 100644 --- a/lib/search.rb +++ b/lib/search.rb @@ -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 diff --git a/lib/site_setting_extension.rb b/lib/site_setting_extension.rb index 95e87d3b40c..9b160daff22 100644 --- a/lib/site_setting_extension.rb +++ b/lib/site_setting_extension.rb @@ -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? diff --git a/lib/system_message.rb b/lib/system_message.rb index 2abc5ecdfe4..4829f96afe1 100644 --- a/lib/system_message.rb +++ b/lib/system_message.rb @@ -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 diff --git a/spec/controllers/invites_controller_spec.rb b/spec/controllers/invites_controller_spec.rb index cfdf944766d..56feee6437f 100644 --- a/spec/controllers/invites_controller_spec.rb +++ b/spec/controllers/invites_controller_spec.rb @@ -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!' diff --git a/spec/controllers/robots_txt_controller_spec.rb b/spec/controllers/robots_txt_controller_spec.rb index 9712abfef0e..d256814342b 100644 --- a/spec/controllers/robots_txt_controller_spec.rb +++ b/spec/controllers/robots_txt_controller_spec.rb @@ -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 diff --git a/spec/javascripts/models/composer_spec.js b/spec/javascripts/models/composer_spec.js index 73224cb49e1..ec5e3a17982 100644 --- a/spec/javascripts/models/composer_spec.js +++ b/spec/javascripts/models/composer_spec.js @@ -1,3 +1,5 @@ +/*global waitsFor:true expect:true describe:true beforeEach:true it:true */ + describe("Discourse.Composer", function() { describe("replyLength", function() {