FIX: 🈂️ Allow closing polls in multi-locale sites

This commit is contained in:
riking 2015-02-05 19:38:51 -08:00
parent 1ec46e3efd
commit 06f02ce9fc
7 changed files with 25 additions and 24 deletions

View file

@ -147,8 +147,8 @@ class ApplicationController < ActionController::Base
end end
def set_locale def set_locale
I18n.locale = if SiteSetting.allow_user_locale && current_user && current_user.locale.present? I18n.locale = if current_user
current_user.locale current_user.effective_locale
else else
SiteSetting.default_locale SiteSetting.default_locale
end end

View file

@ -138,6 +138,14 @@ class User < ActiveRecord::Base
User.where(username_lower: lower).blank? User.where(username_lower: lower).blank?
end end
def effective_locale
if SiteSetting.allow_user_locale && self.locale.present?
self.locale
else
SiteSetting.default_locale
end
end
EMAIL = %r{([^@]+)@([^\.]+)} EMAIL = %r{([^@]+)@([^\.]+)}
def self.new_from_params(params) def self.new_from_params(params)

View file

@ -118,11 +118,7 @@ class PostAlerter
if collapsed if collapsed
post = first_unread_post(user,post.topic) || post post = first_unread_post(user,post.topic) || post
count = unread_count(user, post.topic) count = unread_count(user, post.topic)
I18n.with_locale(if SiteSetting.allow_user_locale && user.locale.present? I18n.with_locale(user.effective_locale) do
user.locale
else
SiteSetting.default_locale
end) do
opts[:display_username] = I18n.t('embed.replies', count: count) if count > 1 opts[:display_username] = I18n.t('embed.replies', count: count) if count > 1
end end
end end

View file

@ -9,7 +9,7 @@ Allows you to add a poll to the first post of a topic.
## Closing the poll ## Closing the poll
Change the start of the topic title from "Poll: " to "Closed Poll: ". This feature is disabled if the `allow_user_locale` site setting is enabled. Change the start of the topic title from "Poll: " to "Closed Poll: ". This feature uses the locale of the user who started the topic.
_Note: closing a topic will also close the poll._ _Note: closing a topic will also close the poll._

View file

@ -5,7 +5,7 @@ export default DiscourseController.extend({
showResults: Em.computed.oneWay('poll.closed'), showResults: Em.computed.oneWay('poll.closed'),
disableRadio: Em.computed.any('poll.closed', 'loading'), disableRadio: Em.computed.any('poll.closed', 'loading'),
showToggleClosePoll: function() { showToggleClosePoll: function() {
return this.get('poll.post.topic.details.can_edit') && !Discourse.SiteSettings.allow_user_locale; return this.get('poll.post.topic.details.can_edit');
}.property('poll.post.topic.details.can_edit'), }.property('poll.post.topic.details.can_edit'),
actions: { actions: {

View file

@ -80,10 +80,12 @@ after_initialize do
end end
# Modify topic title. # Modify topic title.
if topic.title =~ /^(#{I18n.t('poll.prefix').strip})\s?:/i I18n.with_locale(topic.user.effective_locale) do
topic.title = topic.title.gsub(/^(#{I18n.t('poll.prefix').strip})\s?:/i, I18n.t('poll.closed_prefix') + ':') if topic.title =~ /^(#{I18n.t('poll.prefix').strip})\s?:/i
elsif topic.title =~ /^(#{I18n.t('poll.closed_prefix').strip})\s?:/i topic.title = topic.title.gsub(/^(#{I18n.t('poll.prefix').strip})\s?:/i, I18n.t('poll.closed_prefix') + ':')
topic.title = topic.title.gsub(/^(#{I18n.t('poll.closed_prefix').strip})\s?:/i, I18n.t('poll.prefix') + ':') elsif topic.title =~ /^(#{I18n.t('poll.closed_prefix').strip})\s?:/i
topic.title = topic.title.gsub(/^(#{I18n.t('poll.closed_prefix').strip})\s?:/i, I18n.t('poll.prefix') + ':')
end
end end
topic.acting_user = current_user topic.acting_user = current_user

View file

@ -21,19 +21,13 @@ module ::PollPlugin
return false return false
end end
topic.title =~ /^(#{I18n.t('poll.prefix').strip}|#{I18n.t('poll.closed_prefix').strip})\s?:/i I18n.with_locale(topic.user.effective_locale) do
topic.title =~ /^(#{I18n.t('poll.prefix').strip}|#{I18n.t('poll.closed_prefix').strip})\s?:/i
end
end end
def has_poll_details? def has_poll_details?
if SiteSetting.allow_user_locale? self.is_poll?
# If we allow users to select their locale of choice we cannot detect polls
# by the prefix, so we fall back to checking if the poll details is set in
# places to make sure polls are still accessible by users using a different
# locale than the one used by the topic creator.
not self.details.nil?
else
self.is_poll?
end
end end
# Called during validation of poll posts. Discourse already restricts edits to # Called during validation of poll posts. Discourse already restricts edits to
@ -60,7 +54,8 @@ module ::PollPlugin
end end
def is_closed? def is_closed?
@post.topic.closed? || @post.topic.archived? || (!SiteSetting.allow_user_locale? && (@post.topic.title =~ /^#{I18n.t('poll.closed_prefix')}/i) === 0) topic = @post.topic
topic.closed? || topic.archived? || (topic.title =~ /^#{I18n.t('poll.closed_prefix', locale: topic.user.effective_locale)}/i) === 0
end end
def options def options